mirror of
https://github.com/crmeb/CRMEB.git
synced 2026-05-03 23:38:19 +00:00
上传h5打包文件
This commit is contained in:
parent
92b5ae6502
commit
2c5802ff8e
@ -26,7 +26,7 @@ class AgentManage extends AuthController
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$this->assign( 'year',getMonth('y'));
|
||||
$this->assign( 'year',getMonth());
|
||||
$this->assign('store_brokerage_statu',\crmeb\services\SystemConfigService::get('store_brokerage_statu'));
|
||||
return $this->fetch();
|
||||
}
|
||||
@ -64,7 +64,7 @@ class AgentManage extends AuthController
|
||||
public function stair($uid = ''){
|
||||
if($uid == '') return $this->failed('参数错误');
|
||||
$this->assign('uid',$uid ? : 0);
|
||||
$this->assign( 'year',getMonth('y'));
|
||||
$this->assign( 'year',getMonth());
|
||||
return $this->fetch();
|
||||
}
|
||||
/*
|
||||
@ -75,7 +75,7 @@ class AgentManage extends AuthController
|
||||
{
|
||||
if($uid == '') return $this->failed('参数错误');
|
||||
$this->assign('uid',$uid ? : 0);
|
||||
$this->assign( 'year',getMonth('y'));
|
||||
$this->assign( 'year',getMonth());
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
|
||||
@ -26,7 +26,7 @@ class UserRecharge extends AuthController
|
||||
* 显示操作记录
|
||||
*/
|
||||
public function index(){
|
||||
$this->assign( 'year',getMonth('y'));
|
||||
$this->assign( 'year',getMonth());
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
|
||||
@ -11,6 +11,7 @@ use app\admin\model\system\Express;
|
||||
use crmeb\repositories\OrderRepository;
|
||||
use crmeb\services\ExpressService;
|
||||
use crmeb\services\MiniProgramService;
|
||||
use crmeb\services\UtilService;
|
||||
use crmeb\services\WechatService;
|
||||
use crmeb\services\FormBuilder as Form;
|
||||
use crmeb\services\HookService;
|
||||
@ -40,7 +41,7 @@ class StoreOrder extends AuthController
|
||||
public function index()
|
||||
{
|
||||
$this->assign([
|
||||
'year'=>getMonth('y'),
|
||||
'year'=>getMonth(),
|
||||
'real_name'=>$this->request->get('real_name',''),
|
||||
'status'=>$this->request->param('status',''),
|
||||
'orderCount'=>StoreOrderModel::orderCount(),
|
||||
@ -205,8 +206,9 @@ class StoreOrder extends AuthController
|
||||
/*
|
||||
* 删除订单
|
||||
* */
|
||||
public function del_order($ids=[])
|
||||
public function del_order()
|
||||
{
|
||||
$ids = UtilService::postMore(['ids'])['ids'];
|
||||
if(!count($ids)) return JsonService::fail('请选择需要删除的订单');
|
||||
if(StoreOrderModel::where('is_del',0)->where('id','in',$ids)->count()) return JsonService::fail('您选择的的订单存在用户未删除的订单,无法删除用户未删除的订单');
|
||||
$res=StoreOrderModel::where('id','in',$ids)->update(['is_system_del'=>1]);
|
||||
@ -261,7 +263,6 @@ class StoreOrder extends AuthController
|
||||
StoreOrderModel::edit($data,$id);
|
||||
event('StoreProductOrderDeliveryAfter',[$data,$id]);
|
||||
StoreOrderStatus::setStatus($id,'delivery_fictitious','已虚拟发货');
|
||||
StoreOrderStatus::setStatus($id,'take_delivery','虚拟物品已收货');
|
||||
break;
|
||||
default:
|
||||
return Json::fail('暂时不支持其他发货类型');
|
||||
@ -370,16 +371,20 @@ class StoreOrder extends AuthController
|
||||
if($order['paid'] == 1 && $order['status'] == 1) $data['status'] = 2;
|
||||
else if($order['pay_type'] == 'offline') $data['status'] = 2;
|
||||
else return Json::fail('请先发货或者送货!');
|
||||
if(!StoreOrderModel::edit($data,$id))
|
||||
return Json::fail(StoreOrderModel::getErrorInfo('收货失败,请稍候再试!'));
|
||||
else{
|
||||
try{
|
||||
StoreOrderModel::beginTrans();
|
||||
try{
|
||||
if(!StoreOrderModel::edit($data,$id)) {
|
||||
StoreOrderModel::rollbackTrans();
|
||||
return Json::fail(StoreOrderModel::getErrorInfo('收货失败,请稍候再试!'));
|
||||
}else{
|
||||
OrderRepository::storeProductOrderTakeDeliveryAdmin($order, $id);
|
||||
}catch (\Exception $e){
|
||||
return Json::fail($e->getMessage());
|
||||
StoreOrderStatus::setStatus($id,'take_delivery','已收货');
|
||||
StoreOrderModel::commitTrans();
|
||||
return Json::successful('收货成功!');
|
||||
}
|
||||
StoreOrderStatus::setStatus($id,'take_delivery','已收货');
|
||||
return Json::successful('收货成功!');
|
||||
}catch (\Exception $e){
|
||||
StoreOrderModel::rollbackTrans();
|
||||
return Json::fail($e->getMessage());
|
||||
}
|
||||
}
|
||||
/**
|
||||
@ -497,7 +502,7 @@ class StoreOrder extends AuthController
|
||||
if($order['delivery_type'] != 'express' || !$order['delivery_id']) return $this->failed('该订单不存在快递单号!');
|
||||
$cacheName = $order['order_id'].$order['delivery_id'];
|
||||
$result = CacheService::get($cacheName,null);
|
||||
if($result === null || 1==1){
|
||||
if($result === null){
|
||||
$result = ExpressService::query($order['delivery_id']);
|
||||
if(is_array($result) &&
|
||||
isset($result['result']) &&
|
||||
|
||||
@ -41,7 +41,7 @@ class Record extends AuthController
|
||||
public function chart_order(){
|
||||
$this->assign([
|
||||
'is_layui'=>true,
|
||||
'year'=>getMonth('y')
|
||||
'year'=>getMonth()
|
||||
]);
|
||||
return $this->fetch();
|
||||
}
|
||||
@ -59,7 +59,7 @@ class Record extends AuthController
|
||||
public function chart_product(){
|
||||
$this->assign([
|
||||
'is_layui'=>true,
|
||||
'year'=>getMonth('y')
|
||||
'year'=>getMonth()
|
||||
]);
|
||||
return $this->fetch();
|
||||
}
|
||||
@ -129,7 +129,7 @@ class Record extends AuthController
|
||||
public function chart_score(){
|
||||
$this->assign([
|
||||
'is_layui'=>true,
|
||||
'year'=>getMonth('y')
|
||||
'year'=>getMonth()
|
||||
]);
|
||||
return $this->fetch();
|
||||
}
|
||||
@ -151,7 +151,7 @@ class Record extends AuthController
|
||||
public function chart_coupon(){
|
||||
$this->assign([
|
||||
'is_layui'=>true,
|
||||
'year'=>getMonth('y')
|
||||
'year'=>getMonth()
|
||||
]);
|
||||
return $this->fetch();
|
||||
}
|
||||
@ -173,7 +173,7 @@ class Record extends AuthController
|
||||
public function chart_combination(){
|
||||
$this->assign([
|
||||
'is_layui'=>true,
|
||||
'year'=>getMonth('y')
|
||||
'year'=>getMonth()
|
||||
]);
|
||||
return $this->fetch();
|
||||
}
|
||||
@ -183,7 +183,7 @@ class Record extends AuthController
|
||||
public function chart_bargain(){
|
||||
$this->assign([
|
||||
'is_layui'=>true,
|
||||
'year'=>getMonth('y')
|
||||
'year'=>getMonth()
|
||||
]);
|
||||
return $this->fetch();
|
||||
}
|
||||
@ -193,7 +193,7 @@ class Record extends AuthController
|
||||
public function chart_seckill(){
|
||||
$this->assign([
|
||||
'is_layui'=>true,
|
||||
'year'=>getMonth('y')
|
||||
'year'=>getMonth()
|
||||
]);
|
||||
return $this->fetch();
|
||||
}
|
||||
@ -204,7 +204,7 @@ class Record extends AuthController
|
||||
public function chart_rebate(){
|
||||
$this->assign([
|
||||
'is_layui'=>true,
|
||||
'year'=>getMonth('y')
|
||||
'year'=>getMonth()
|
||||
]);
|
||||
return $this->fetch();
|
||||
}
|
||||
@ -230,7 +230,7 @@ class Record extends AuthController
|
||||
public function chart_recharge(){
|
||||
$this->assign([
|
||||
'is_layui'=>true,
|
||||
'year'=>getMonth('y')
|
||||
'year'=>getMonth()
|
||||
]);
|
||||
return $this->fetch();
|
||||
}
|
||||
@ -246,7 +246,7 @@ class Record extends AuthController
|
||||
public function chart_cash(){
|
||||
$this->assign([
|
||||
'is_layui'=>true,
|
||||
'year'=>getMonth('y')
|
||||
'year'=>getMonth()
|
||||
]);
|
||||
return $this->fetch();
|
||||
}
|
||||
@ -261,7 +261,7 @@ class Record extends AuthController
|
||||
public function user_chart(){
|
||||
$this->assign([
|
||||
'is_layui'=>true,
|
||||
'year'=>getMonth('y')
|
||||
'year'=>getMonth()
|
||||
]);
|
||||
return $this->fetch();
|
||||
}
|
||||
@ -297,7 +297,7 @@ class Record extends AuthController
|
||||
$this->assign([
|
||||
'is_layui'=>true,
|
||||
'limit'=>$limit,
|
||||
'year'=>getMonth('y'),
|
||||
'year'=>getMonth(),
|
||||
'commissionList'=>$top10list['commission'],
|
||||
'extractList'=>$top10list['extract'],
|
||||
]);
|
||||
@ -328,7 +328,7 @@ class Record extends AuthController
|
||||
$this->assign([
|
||||
'is_layui'=>true,
|
||||
'limit'=>$limit,
|
||||
'year'=>getMonth('y'),
|
||||
'year'=>getMonth(),
|
||||
'integralList'=>$top10list['integral'],
|
||||
'moneyList'=>$top10list['now_money'],
|
||||
'shopcountList'=>$top10list['shopcount'],
|
||||
@ -365,7 +365,7 @@ class Record extends AuthController
|
||||
public function user_attr(){
|
||||
$this->assign([
|
||||
'is_layui'=>true,
|
||||
'year'=>getMonth('y')
|
||||
'year'=>getMonth()
|
||||
]);
|
||||
return $this->fetch();
|
||||
}
|
||||
@ -405,7 +405,7 @@ class Record extends AuthController
|
||||
if(!StoreProduct::be(['id'=>$id])) return $this->failed('商品不存在!');
|
||||
$this->assign([
|
||||
'is_layui'=>true,
|
||||
'year'=>getMonth('y'),
|
||||
'year'=>getMonth(),
|
||||
'id'=>$id,
|
||||
]);
|
||||
return $this->fetch();
|
||||
@ -444,7 +444,7 @@ class Record extends AuthController
|
||||
public function ranking_commission(){
|
||||
$this->assign([
|
||||
'is_layui'=>true,
|
||||
'year'=>getMonth('y')
|
||||
'year'=>getMonth()
|
||||
]);
|
||||
return $this->fetch();
|
||||
}
|
||||
@ -477,7 +477,7 @@ class Record extends AuthController
|
||||
public function ranking_point(){
|
||||
$this->assign([
|
||||
'is_layui'=>true,
|
||||
'year'=>getMonth('y')
|
||||
'year'=>getMonth()
|
||||
]);
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
@ -87,8 +87,10 @@ class SystemAdmin extends AuthController
|
||||
if($data['pwd'] != $data['conf_pwd']) return Json::fail('两次输入密码不想同');
|
||||
if(AdminModel::be($data['account'],'account')) return Json::fail('管理员账号已存在');
|
||||
$data['pwd'] = md5($data['pwd']);
|
||||
$data['add_time'] = time();
|
||||
unset($data['conf_pwd']);
|
||||
$data['level'] = $this->adminInfo['level'] + 1;
|
||||
$data['add_time'] =time();
|
||||
if(!AdminModel::create($data)) return Json::fail('添加管理员失败');
|
||||
return Json::successful('添加管理员成功!');
|
||||
}
|
||||
|
||||
@ -83,11 +83,11 @@ class SystemConfig extends AuthController
|
||||
switch ($data['upload_type']){
|
||||
case 1:
|
||||
$data['value'] = json_decode($data['value'],true)?:'';
|
||||
$formbuider[] = Form::frameImageOne($data['menu_name'],$data['info'],Url::buildUrl('admin/widget.images/index',array('fodder'=>$data['menu_name'])),$data['value'])->icon('image')->width('100%')->height('500px')->info($data['desc'])->col(13);
|
||||
$formbuider[] = Form::frameImageOne($data['menu_name'],$data['info'],Url::buildUrl('admin/widget.images/index',array('fodder'=>$data['menu_name'])),$data['value'])->icon('image')->width('70%')->height('500px')->info($data['desc'])->col(13);
|
||||
break;
|
||||
case 2:
|
||||
$data['value'] = json_decode($data['value'],true)?:[];
|
||||
$formbuider[] = Form::frameImages($data['menu_name'],$data['info'],Url::buildUrl('admin/widget.images/index',array('fodder'=>$data['menu_name'])),$data['value'])->maxLength(5)->icon('image')->width('100%')->height('500px')->info($data['desc'])->col(13);
|
||||
$formbuider[] = Form::frameImages($data['menu_name'],$data['info'],Url::buildUrl('admin/widget.images/index',array('fodder'=>$data['menu_name'])),$data['value'])->maxLength(5)->icon('image')->width('70%')->height('500px')->info($data['desc'])->col(13);
|
||||
break;
|
||||
case 3:
|
||||
$data['value'] = json_decode($data['value'],true);
|
||||
|
||||
@ -1,8 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\controller\sms;
|
||||
|
||||
use app\admin\controller\AuthController;
|
||||
use app\admin\model\system\SystemConfig;
|
||||
use crmeb\services\HttpService;
|
||||
use crmeb\services\JsonService;
|
||||
use crmeb\services\SMSService;
|
||||
use crmeb\services\UtilService;
|
||||
@ -19,14 +21,26 @@ class SmsAdmin extends AuthController
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$this->assign('url', SMSService::code());
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
public function captcha()
|
||||
{
|
||||
if (!request()->isPost()) return JsonService::fail('发生失败');
|
||||
$phone = request()->param('phone');
|
||||
if (!trim($phone)) return JsonService::fail('请填写手机号');
|
||||
|
||||
$res = json_decode(HttpService::getRequest(SMSService::code(), compact('phone')), true);
|
||||
if (!isset($res['status']) && $res['status'] !== 200)
|
||||
return JsonService::fail(isset($res['data']['message']) ? $res['data']['message'] : $res['msg']);
|
||||
return JsonService::success(isset($res['data']['message']) ? $res['data']['message'] : $res['msg']);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改/注册短信平台账号
|
||||
*/
|
||||
public function save(){
|
||||
public function save()
|
||||
{
|
||||
list($account, $password, $phone, $code, $url, $sign) = UtilService::postMore([
|
||||
['account', ''],
|
||||
['password', ''],
|
||||
@ -34,17 +48,17 @@ class SmsAdmin extends AuthController
|
||||
['code', ''],
|
||||
['url', ''],
|
||||
['sign', ''],
|
||||
], null ,true);
|
||||
$signLen = strlen(trim($sign));
|
||||
if(!strlen(trim($account))) return JsonService::fail('请填写账号');
|
||||
if(!strlen(trim($password))) return JsonService::fail('请填写密码');
|
||||
if(!$signLen) return JsonService::fail('请填写短信签名');
|
||||
if($signLen > 8) return JsonService::fail('短信签名最长为8');
|
||||
if(!strlen(trim($code))) return JsonService::fail('请填写验证码');
|
||||
if(!strlen(trim($url))) return JsonService::fail('请填写域名');
|
||||
], null, true);
|
||||
$signLen = mb_strlen(trim($sign));
|
||||
if (!strlen(trim($account))) return JsonService::fail('请填写账号');
|
||||
if (!strlen(trim($password))) return JsonService::fail('请填写密码');
|
||||
if (!$signLen) return JsonService::fail('请填写短信签名');
|
||||
if ($signLen > 8) return JsonService::fail('短信签名最长为8位');
|
||||
if (!strlen(trim($code))) return JsonService::fail('请填写验证码');
|
||||
if (!strlen(trim($url))) return JsonService::fail('请填写域名');
|
||||
$status = SMSService::register($account, md5(trim($password)), $url, $phone, $code, $sign);
|
||||
if($status['status'] == 400) return JsonService::fail('短信平台:'.$status['msg']);
|
||||
if ($status['status'] == 400) return JsonService::fail('短信平台:' . $status['msg']);
|
||||
SystemConfig::setConfigSmsInfo($account, $password);
|
||||
return JsonService::success('短信平台:'.$status['msg']);
|
||||
return JsonService::success('短信平台:' . $status['msg']);
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\controller\system;
|
||||
|
||||
use app\admin\model\system\SystemFile as SystemFileModel;
|
||||
@ -16,159 +17,175 @@ use crmeb\services\JsonService as Json;
|
||||
class SystemFile extends AuthController
|
||||
{
|
||||
//打开目录
|
||||
public function opendir($filedir=''){
|
||||
$fileAll = array('dir'=>[],'file'=>[]);
|
||||
$request_dir = str_replace('../', '', app('request')->param('dir'));
|
||||
|
||||
if(app('request')->param('superior') && !empty($request_dir)){
|
||||
$path = '..'.DS.app('request')->param('dir');
|
||||
$path = dirname($path);
|
||||
}else{
|
||||
$path = !empty($request_dir) ? $request_dir : '..';
|
||||
$path = $path.DS.app('request')->param('filedir');
|
||||
public function opendir($filedir = '')
|
||||
{
|
||||
$fileAll = array('dir' => [], 'file' => []);
|
||||
//根目录
|
||||
$rootdir = app()->getRootPath();
|
||||
//当前目录
|
||||
$request_dir = app('request')->param('dir');
|
||||
//防止查看站点以外的目录
|
||||
if(strpos($request_dir,$rootdir) === false){
|
||||
$request_dir = $rootdir;
|
||||
}
|
||||
$list = scandir($path);
|
||||
foreach($list as $key=>$v) {
|
||||
if($v !='.' && $v !='..'){
|
||||
if (is_dir($path.'/'.$v)) {
|
||||
$fileAll['dir'][] = FileClass::list_info($path.'/'.$v);
|
||||
//判断是否是返回上级
|
||||
if (app('request')->param('superior') && !empty($request_dir)) {
|
||||
if(strpos(dirname($request_dir),$rootdir) !== false){
|
||||
$dir = dirname($request_dir);
|
||||
}else{
|
||||
$dir = $rootdir;
|
||||
}
|
||||
|
||||
} else {
|
||||
$dir = !empty($request_dir) ? $request_dir : $rootdir;
|
||||
$dir = rtrim($dir,DS) .DS. app('request')->param('filedir');
|
||||
}
|
||||
$list = scandir($dir);
|
||||
foreach ($list as $key => $v) {
|
||||
if ($v != '.' && $v != '..') {
|
||||
if (is_dir($dir . DS . $v)) {
|
||||
$fileAll['dir'][] = FileClass::list_info($dir .DS. $v);
|
||||
}
|
||||
if(is_file($path.'/'.$v)){
|
||||
$fileAll['file'][] = FileClass::list_info($path.'/'.$v);
|
||||
if (is_file($dir . DS . $v)) {
|
||||
$fileAll['file'][] = FileClass::list_info($dir .DS. $v);
|
||||
}
|
||||
}
|
||||
}
|
||||
// var_dump($fileAll['file']);
|
||||
//var_dump($fileAll['dir']);
|
||||
//兼容windows
|
||||
$uname = php_uname('s');
|
||||
if(strstr($uname,'Windows')!==false) $path = ltrim($path,'\\');
|
||||
$dir = ltrim($path,'./');
|
||||
$this->assign(compact('fileAll','dir'));
|
||||
if (strstr($uname, 'Windows') !== false) $dir = ltrim($dir, '\\');
|
||||
$this->assign(compact('fileAll', 'dir'));
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
//读取文件
|
||||
public function openfile($file='')
|
||||
public function openfile($file = '')
|
||||
{
|
||||
$file = $this->request->param('file');
|
||||
if(empty($file))return Json::fail('出现错误');
|
||||
$filepath = '.'.$file;
|
||||
if (empty($file)) return Json::fail('出现错误');
|
||||
$filepath = $file;
|
||||
$content = FileClass::read_file($filepath);//防止页面内嵌textarea标签
|
||||
$ext = FileClass::get_ext($filepath);
|
||||
$extarray = [
|
||||
'js'=>'text/javascript'
|
||||
,'php'=>'text/x-php'
|
||||
,'html'=>'text/html'
|
||||
,'sql'=>'text/x-mysql'
|
||||
,'css'=>'text/x-scss'];
|
||||
$mode = empty($extarray[$ext])?'':$extarray[$ext];
|
||||
$this->assign(compact('content','mode','filepath'));
|
||||
'js' => 'text/javascript'
|
||||
, 'php' => 'text/x-php'
|
||||
, 'html' => 'text/html'
|
||||
, 'sql' => 'text/x-mysql'
|
||||
, 'css' => 'text/x-scss'];
|
||||
$mode = empty($extarray[$ext]) ? '' : $extarray[$ext];
|
||||
$this->assign(compact('content', 'mode', 'filepath'));
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
//保存文件
|
||||
public function savefile(){
|
||||
public function savefile()
|
||||
{
|
||||
$comment = $this->request->post('comment');
|
||||
$filepath = $this->request->post('filepath');
|
||||
if(!empty($comment) && !empty($filepath)){
|
||||
if (!empty($comment) && !empty($filepath)) {
|
||||
//兼容windows
|
||||
$uname = php_uname('s');
|
||||
if(strstr($uname,'Windows')!==false)
|
||||
$filepath = ltrim(str_replace('/', DS, $filepath),'.');
|
||||
if(FileClass::isWritable($filepath)){
|
||||
$res = FileClass::write_file($filepath,$comment);
|
||||
if($res){
|
||||
if (strstr($uname, 'Windows') !== false)
|
||||
$filepath = ltrim(str_replace('/', DS, $filepath), '.');
|
||||
if (FileClass::isWritable($filepath)) {
|
||||
$res = FileClass::write_file($filepath, $comment);
|
||||
if ($res) {
|
||||
return Json::successful('保存成功!');
|
||||
}else{
|
||||
} else {
|
||||
return Json::fail('保存失败');
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
return Json::fail('没有权限!');
|
||||
}
|
||||
|
||||
}else{
|
||||
} else {
|
||||
return Json::fail('出现错误');
|
||||
}
|
||||
|
||||
}
|
||||
public function index(){
|
||||
$app = $this->getDir('./application');
|
||||
$extend = $this->getDir('./extend');
|
||||
$public = $this->getDir('./public');
|
||||
$arr = array();
|
||||
$arr = array_merge($app,$extend);
|
||||
$arr = array_merge($arr,$public);
|
||||
$fileAll = array();//本地文件
|
||||
$cha = array();//不同的文件
|
||||
foreach ($arr as $k=>$v) {
|
||||
$fp = fopen($v, 'r');
|
||||
if (filesize($v)) $ct = fread($fp, filesize($v));
|
||||
else $ct = null;
|
||||
fclose($fp);
|
||||
$cthash = md5($ct);
|
||||
$update_time = stat($v);
|
||||
$fileAll[$k]['cthash'] = $cthash;
|
||||
$fileAll[$k]['filename'] = $v;
|
||||
$fileAll[$k]['atime'] = $update_time['atime'];
|
||||
$fileAll[$k]['mtime'] = $update_time['mtime'];
|
||||
$fileAll[$k]['ctime'] = $update_time['ctime'];
|
||||
}
|
||||
$file = SystemFileModel::all(function($query){
|
||||
$query->order('atime', 'desc');
|
||||
})->toArray();//数据库中的文件
|
||||
if(empty($file)){
|
||||
$data_num = array_chunk($fileAll,10);
|
||||
SystemFileModel::beginTrans();
|
||||
$res = true;
|
||||
foreach ($data_num as $k=>$v){
|
||||
$res = $res && SystemFileModel::insertAll($v);
|
||||
}
|
||||
SystemFileModel::checkTrans($res);
|
||||
if($res){
|
||||
$cha = array();//不同的文件
|
||||
}else{
|
||||
$cha = $fileAll;
|
||||
}
|
||||
}else{
|
||||
$cha = array();//差异文件
|
||||
foreach ($file as $k=>$v){
|
||||
foreach ($fileAll as $ko=>$vo){
|
||||
if($v['filename'] == $vo['filename']){
|
||||
if($v['cthash'] != $vo['cthash']){
|
||||
$cha[$k]['filename'] = $v['filename'];
|
||||
$cha[$k]['cthash'] = $v['cthash'];
|
||||
$cha[$k]['atime'] = $v['atime'];
|
||||
$cha[$k]['mtime'] = $v['mtime'];
|
||||
$cha[$k]['ctime'] = $v['ctime'];
|
||||
$cha[$k]['type'] = '已修改';
|
||||
}
|
||||
unset($fileAll[$ko]);
|
||||
unset($file[$k]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
foreach ($file as $k=>$v){
|
||||
$cha[$k]['filename'] = $v['filename'];
|
||||
$cha[$k]['cthash'] = $v['cthash'];
|
||||
$cha[$k]['atime'] = $v['atime'];
|
||||
$cha[$k]['mtime'] = $v['mtime'];
|
||||
$cha[$k]['ctime'] = $v['ctime'];
|
||||
$cha[$k]['type'] = '已删除';
|
||||
}
|
||||
foreach ($fileAll as $k=>$v){
|
||||
$cha[$k]['filename'] = $v['filename'];
|
||||
$cha[$k]['cthash'] = $v['cthash'];
|
||||
$cha[$k]['atime'] = $v['atime'];
|
||||
$cha[$k]['mtime'] = $v['mtime'];
|
||||
$cha[$k]['ctime'] = $v['ctime'];
|
||||
$cha[$k]['type'] = '新增的';
|
||||
}
|
||||
public function index()
|
||||
{
|
||||
$app = $this->getDir('./application');
|
||||
$extend = $this->getDir('./extend');
|
||||
$public = $this->getDir('./public');
|
||||
$arr = array();
|
||||
$arr = array_merge($app, $extend);
|
||||
$arr = array_merge($arr, $public);
|
||||
$fileAll = array();//本地文件
|
||||
$cha = array();//不同的文件
|
||||
foreach ($arr as $k => $v) {
|
||||
$fp = fopen($v, 'r');
|
||||
if (filesize($v)) $ct = fread($fp, filesize($v));
|
||||
else $ct = null;
|
||||
fclose($fp);
|
||||
$cthash = md5($ct);
|
||||
$update_time = stat($v);
|
||||
$fileAll[$k]['cthash'] = $cthash;
|
||||
$fileAll[$k]['filename'] = $v;
|
||||
$fileAll[$k]['atime'] = $update_time['atime'];
|
||||
$fileAll[$k]['mtime'] = $update_time['mtime'];
|
||||
$fileAll[$k]['ctime'] = $update_time['ctime'];
|
||||
}
|
||||
$file = SystemFileModel::all(function ($query) {
|
||||
$query->order('atime', 'desc');
|
||||
})->toArray();//数据库中的文件
|
||||
if (empty($file)) {
|
||||
$data_num = array_chunk($fileAll, 10);
|
||||
SystemFileModel::beginTrans();
|
||||
$res = true;
|
||||
foreach ($data_num as $k => $v) {
|
||||
$res = $res && SystemFileModel::insertAll($v);
|
||||
}
|
||||
SystemFileModel::checkTrans($res);
|
||||
if ($res) {
|
||||
$cha = array();//不同的文件
|
||||
} else {
|
||||
$cha = $fileAll;
|
||||
}
|
||||
} else {
|
||||
$cha = array();//差异文件
|
||||
foreach ($file as $k => $v) {
|
||||
foreach ($fileAll as $ko => $vo) {
|
||||
if ($v['filename'] == $vo['filename']) {
|
||||
if ($v['cthash'] != $vo['cthash']) {
|
||||
$cha[$k]['filename'] = $v['filename'];
|
||||
$cha[$k]['cthash'] = $v['cthash'];
|
||||
$cha[$k]['atime'] = $v['atime'];
|
||||
$cha[$k]['mtime'] = $v['mtime'];
|
||||
$cha[$k]['ctime'] = $v['ctime'];
|
||||
$cha[$k]['type'] = '已修改';
|
||||
}
|
||||
unset($fileAll[$ko]);
|
||||
unset($file[$k]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
foreach ($file as $k => $v) {
|
||||
$cha[$k]['filename'] = $v['filename'];
|
||||
$cha[$k]['cthash'] = $v['cthash'];
|
||||
$cha[$k]['atime'] = $v['atime'];
|
||||
$cha[$k]['mtime'] = $v['mtime'];
|
||||
$cha[$k]['ctime'] = $v['ctime'];
|
||||
$cha[$k]['type'] = '已删除';
|
||||
}
|
||||
foreach ($fileAll as $k => $v) {
|
||||
$cha[$k]['filename'] = $v['filename'];
|
||||
$cha[$k]['cthash'] = $v['cthash'];
|
||||
$cha[$k]['atime'] = $v['atime'];
|
||||
$cha[$k]['mtime'] = $v['mtime'];
|
||||
$cha[$k]['ctime'] = $v['ctime'];
|
||||
$cha[$k]['type'] = '新增的';
|
||||
}
|
||||
|
||||
}
|
||||
// dump($file);
|
||||
// dump($fileAll);
|
||||
$this->assign('cha',$cha);
|
||||
return $this->fetch();
|
||||
}
|
||||
$this->assign('cha', $cha);
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
@ -176,41 +193,44 @@ class SystemFile extends AuthController
|
||||
* @param $dir
|
||||
* @return array
|
||||
*/
|
||||
public function getNextDir(){
|
||||
public function getNextDir()
|
||||
{
|
||||
$dir = './';
|
||||
$list = scandir($dir);
|
||||
$dirlist = array();
|
||||
$filelist = array();
|
||||
foreach($list as $key=>$v) {
|
||||
if($v !='.' && $v !='..'){
|
||||
if (is_dir($dir.'/'.$v)) {
|
||||
foreach ($list as $key => $v) {
|
||||
if ($v != '.' && $v != '..') {
|
||||
if (is_dir($dir . '/' . $v)) {
|
||||
$dirlist['dir'][$key] = $v;
|
||||
}
|
||||
if(is_file($dir.'/'.$v)){
|
||||
if (is_file($dir . '/' . $v)) {
|
||||
$filelist['file'][$key] = $v;
|
||||
}
|
||||
}
|
||||
}
|
||||
$filesarr = array_merge($dirlist,$filelist);
|
||||
$filesarr = array_merge($dirlist, $filelist);
|
||||
print_r($filesarr);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文件夹中的文件 包括子文件 不能直接用 直接使用 $this->getDir()方法 P156
|
||||
* @param $path
|
||||
* @param $data
|
||||
*/
|
||||
public function searchDir($path,&$data){
|
||||
if(is_dir($path) && !strpos($path,'uploads')){
|
||||
$dp=dir($path);
|
||||
while($file=$dp->read()){
|
||||
if($file!='.'&& $file!='..'){
|
||||
$this->searchDir($path.'/'.$file,$data);
|
||||
public function searchDir($path, &$data)
|
||||
{
|
||||
if (is_dir($path) && !strpos($path, 'uploads')) {
|
||||
$dp = dir($path);
|
||||
while ($file = $dp->read()) {
|
||||
if ($file != '.' && $file != '..') {
|
||||
$this->searchDir($path . '/' . $file, $data);
|
||||
}
|
||||
}
|
||||
$dp->close();
|
||||
}
|
||||
if(is_file($path)){
|
||||
$data[]=$path;
|
||||
if (is_file($path)) {
|
||||
$data[] = $path;
|
||||
}
|
||||
}
|
||||
|
||||
@ -219,57 +239,59 @@ class SystemFile extends AuthController
|
||||
* @param $dir
|
||||
* @return array
|
||||
*/
|
||||
public function getDir($dir){
|
||||
$data=array();
|
||||
$this->searchDir($dir,$data);
|
||||
public function getDir($dir)
|
||||
{
|
||||
$data = array();
|
||||
$this->searchDir($dir, $data);
|
||||
return $data;
|
||||
}
|
||||
|
||||
//测试
|
||||
public function ceshi(){
|
||||
public function ceshi()
|
||||
{
|
||||
//创建form
|
||||
$form = Form::create('/save.php',[
|
||||
Form::input('goods_name','商品名称')
|
||||
,Form::input('goods_name1','password')->type('password')
|
||||
,Form::input('goods_name2','textarea')->type('textarea')
|
||||
,Form::input('goods_name3','email')->type('email')
|
||||
,Form::input('goods_name4','date')->type('date')
|
||||
,Form::city('address','cityArea',
|
||||
'陕西省','西安市'
|
||||
$form = Form::create('/save.php', [
|
||||
Form::input('goods_name', '商品名称')
|
||||
, Form::input('goods_name1', 'password')->type('password')
|
||||
, Form::input('goods_name2', 'textarea')->type('textarea')
|
||||
, Form::input('goods_name3', 'email')->type('email')
|
||||
, Form::input('goods_name4', 'date')->type('date')
|
||||
, Form::city('address', 'cityArea',
|
||||
'陕西省', '西安市'
|
||||
)
|
||||
,Form::dateRange('limit_time','dateRange',
|
||||
, Form::dateRange('limit_time', 'dateRange',
|
||||
strtotime('- 10 day'),
|
||||
time()
|
||||
)
|
||||
,Form::dateTime('add_time','dateTime')
|
||||
,Form::color('color','color','#ff0000')
|
||||
,Form::checkbox('checkbox','checkbox',[1])->options([['value'=>1,'label'=>'白色'],['value'=>2,'label'=>'红色'],['value'=>31,'label'=>'黑色']])
|
||||
,Form::date('riqi','date','2018-03-1')
|
||||
,Form::dateTimeRange('dateTimeRange','区间时间段')
|
||||
,Form::year('year','year')
|
||||
,Form::month('month','month')
|
||||
,Form::frame('frame','frame','/admin/system.system_attachment/index.html?fodder=frame')
|
||||
,Form::frameInputs('frameInputs','frameInputs','/admin/system.system_attachment/index.html?fodder=frameInputs')
|
||||
,Form::frameFiles('month1','frameFiles','/admin/system.system_attachment/index.html?fodder=month1')
|
||||
,Form::frameImages('fodder1','frameImages','/admin/system.system_attachment/index.html?fodder=fodder1')->maxLength(3)->width('800px')->height('400px')
|
||||
,Form::frameImages('fodder11','frameImages','/admin/system.system_attachment/index.html?fodder=fodder11')->icon('images')
|
||||
,Form::frameInputOne('month3','frameInputOne','/admin/system.system_attachment/index.html?fodder=month3')->icon('ionic')
|
||||
,Form::frameFileOne('month4','frameFileOne','/admin/system.system_attachment/index.html?fodder=month4')
|
||||
,Form::frameImageOne('month5','frameImageOne','/admin/system.system_attachment/index.html?fodder=month5')->icon('image')
|
||||
,Form::hidden('month6','hidden')
|
||||
,Form::number('month7','number')
|
||||
, Form::dateTime('add_time', 'dateTime')
|
||||
, Form::color('color', 'color', '#ff0000')
|
||||
, Form::checkbox('checkbox', 'checkbox', [1])->options([['value' => 1, 'label' => '白色'], ['value' => 2, 'label' => '红色'], ['value' => 31, 'label' => '黑色']])
|
||||
, Form::date('riqi', 'date', '2018-03-1')
|
||||
, Form::dateTimeRange('dateTimeRange', '区间时间段')
|
||||
, Form::year('year', 'year')
|
||||
, Form::month('month', 'month')
|
||||
, Form::frame('frame', 'frame', '/admin/system.system_attachment/index.html?fodder=frame')
|
||||
, Form::frameInputs('frameInputs', 'frameInputs', '/admin/system.system_attachment/index.html?fodder=frameInputs')
|
||||
, Form::frameFiles('month1', 'frameFiles', '/admin/system.system_attachment/index.html?fodder=month1')
|
||||
, Form::frameImages('fodder1', 'frameImages', '/admin/system.system_attachment/index.html?fodder=fodder1')->maxLength(3)->width('800px')->height('400px')
|
||||
, Form::frameImages('fodder11', 'frameImages', '/admin/system.system_attachment/index.html?fodder=fodder11')->icon('images')
|
||||
, Form::frameInputOne('month3', 'frameInputOne', '/admin/system.system_attachment/index.html?fodder=month3')->icon('ionic')
|
||||
, Form::frameFileOne('month4', 'frameFileOne', '/admin/system.system_attachment/index.html?fodder=month4')
|
||||
, Form::frameImageOne('month5', 'frameImageOne', '/admin/system.system_attachment/index.html?fodder=month5')->icon('image')
|
||||
, Form::hidden('month6', 'hidden')
|
||||
, Form::number('month7', 'number')
|
||||
// ,Form::input input输入框,其他type: text类型Form::text,password类型Form::password,textarea类型Form::textarea,url类型Form::url,email类型Form::email,date类型Form::idate
|
||||
,Form::radio('month8','radio')->options([['value'=>1,'label'=>'白色'],['value'=>2,'label'=>'红色'],['value'=>31,'label'=>'黑色']])
|
||||
,Form::rate('month9','rate')
|
||||
,Form::select('month10','select')->options([['value'=>1,'label'=>'白色'],['value'=>2,'label'=>'红色'],['value'=>31,'label'=>'黑色']])
|
||||
,Form::selectMultiple('month11','selectMultiple')
|
||||
,Form::selectOne('month12','selectOne')
|
||||
,Form::slider('month13','slider',2)
|
||||
,Form::sliderRange('month23','sliderRange',2,13)
|
||||
,Form::switches('month14','区间时间段')
|
||||
,Form::timePicker('month15','区间时间段')
|
||||
,Form::time('month16','区间时间段')
|
||||
,Form::timeRange('month17','区间时间段')
|
||||
, Form::radio('month8', 'radio')->options([['value' => 1, 'label' => '白色'], ['value' => 2, 'label' => '红色'], ['value' => 31, 'label' => '黑色']])
|
||||
, Form::rate('month9', 'rate')
|
||||
, Form::select('month10', 'select')->options([['value' => 1, 'label' => '白色'], ['value' => 2, 'label' => '红色'], ['value' => 31, 'label' => '黑色']])
|
||||
, Form::selectMultiple('month11', 'selectMultiple')
|
||||
, Form::selectOne('month12', 'selectOne')
|
||||
, Form::slider('month13', 'slider', 2)
|
||||
, Form::sliderRange('month23', 'sliderRange', 2, 13)
|
||||
, Form::switches('month14', '区间时间段')
|
||||
, Form::timePicker('month15', '区间时间段')
|
||||
, Form::time('month16', '区间时间段')
|
||||
, Form::timeRange('month17', '区间时间段')
|
||||
// ,Form::upload('month','区间时间段')
|
||||
// ,Form::uploadImages('month','区间时间段')
|
||||
// ,Form::uploadFiles('month','区间时间段')
|
||||
|
||||
90
app/admin/controller/system/SystemStore.php
Normal file
90
app/admin/controller/system/SystemStore.php
Normal file
@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\controller\system;
|
||||
|
||||
use app\admin\controller\AuthController;
|
||||
use crmeb\services\JsonService;
|
||||
use crmeb\services\SystemConfigService;
|
||||
use app\admin\model\system\SystemStore as SystemStoreModel;
|
||||
use crmeb\services\UtilService;
|
||||
|
||||
/**
|
||||
* 门店管理控制器
|
||||
* Class SystemAttachment
|
||||
* @package app\admin\controller\system
|
||||
*
|
||||
*/
|
||||
class SystemStore extends AuthController
|
||||
{
|
||||
|
||||
/*
|
||||
* 门店设置
|
||||
* */
|
||||
public function index()
|
||||
{
|
||||
$store = SystemStoreModel::where('is_show',1)->where('is_del',0)->find();
|
||||
$storeData = '{}';
|
||||
$id = 0;
|
||||
if($store){
|
||||
$storeData = json_encode($store->toArray());
|
||||
$id = $store->id;
|
||||
}
|
||||
$this->assign(compact('storeData','id'));
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
/*
|
||||
* 位置选择
|
||||
* */
|
||||
public function select_address()
|
||||
{
|
||||
$key = SystemConfigService::get('tengxun_map_key');
|
||||
$this->assign(compact('key'));
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
/*
|
||||
* 保存修改门店信息
|
||||
* param int $id
|
||||
* */
|
||||
public function save($id = 0)
|
||||
{
|
||||
$data = UtilService::postMore([
|
||||
['name',''],
|
||||
['image',''],
|
||||
['phone',''],
|
||||
['address',''],
|
||||
['detailed_address',''],
|
||||
['latlng',''],
|
||||
]);
|
||||
SystemStoreModel::beginTrans();
|
||||
try{
|
||||
$data['latlng'] = explode(',',$data);
|
||||
if(!isset($data['latlng'][0]) || !isset($data['latlng'][1])) return JsonService::fail('请选择门店位置');
|
||||
$data['latitude'] = $data['latlng'][0];
|
||||
$data['longitude'] = $data['latlng'][1];
|
||||
unset($data['latlng']);
|
||||
if($id){
|
||||
if(SystemStoreModel::where('id',$id)->update($data)){
|
||||
SystemStoreModel::commitTrans();
|
||||
return JsonService::success('修改成功');
|
||||
}else{
|
||||
SystemStoreModel::rollbackTrans();
|
||||
return JsonService::fail('修改失败或者您没有修改什么!');
|
||||
}
|
||||
}else{
|
||||
$data['add_time'] = time();
|
||||
if(SystemStoreModel::create($data)){
|
||||
SystemStoreModel::commitTrans();
|
||||
return JsonService::success('保存成功');
|
||||
}else{
|
||||
SystemStoreModel::rollbackTrans();
|
||||
return JsonService::fail('保存失败!');
|
||||
}
|
||||
}
|
||||
}catch (\Exception $e){
|
||||
SystemStoreModel::rollbackTrans();
|
||||
return JsonService::fail($e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
340
app/admin/controller/ump/StoreBargain.php
Normal file
340
app/admin/controller/ump/StoreBargain.php
Normal file
@ -0,0 +1,340 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Administrator
|
||||
* Date: 2018/4/16 0016
|
||||
* Time: 10:39
|
||||
*/
|
||||
|
||||
namespace app\admin\controller\ump;
|
||||
|
||||
use app\admin\controller\AuthController;
|
||||
use crmeb\services\JsonService;
|
||||
use crmeb\services\UtilService as Util;
|
||||
use crmeb\services\FormBuilder as Form;
|
||||
use crmeb\services\UtilService;
|
||||
use crmeb\traits\CurdControllerTrait;
|
||||
use crmeb\services\JsonService as Json;
|
||||
use crmeb\services\UploadService as Upload;
|
||||
use think\facade\Route as Url;
|
||||
use app\admin\model\store\StoreProduct as ProductModel;
|
||||
use app\admin\model\ump\StoreBargain as StoreBargainModel;
|
||||
use app\admin\model\system\SystemAttachment;
|
||||
|
||||
//砍价
|
||||
class StoreBargain extends AuthController
|
||||
{
|
||||
use CurdControllerTrait;
|
||||
|
||||
protected $bindModel = StoreBargainModel::class;
|
||||
|
||||
/**
|
||||
* 显示资源列表
|
||||
*
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$where = Util::getMore([
|
||||
['status',''],
|
||||
['store_name',''],
|
||||
['export',0],
|
||||
['data',''],
|
||||
],$this->request);
|
||||
$limitTimeList = [
|
||||
'today'=>implode(' - ',[date('Y/m/d'),date('Y/m/d',strtotime('+1 day'))]),
|
||||
'week'=>implode(' - ',[
|
||||
date('Y/m/d', (time() - ((date('w') == 0 ? 7 : date('w')) - 1) * 24 * 3600)),
|
||||
date('Y/m/d', (time() + (7 - (date('w') == 0 ? 7 : date('w'))) * 24 * 3600))
|
||||
]),
|
||||
'month'=>implode(' - ',[date('Y/m').'/01',date('Y/m').'/'.date('t')]),
|
||||
'quarter'=>implode(' - ',[
|
||||
date('Y').'/'.(ceil((date('n'))/3)*3-3+1).'/01',
|
||||
date('Y').'/'.(ceil((date('n'))/3)*3).'/'.date('t',mktime(0,0,0,(ceil((date('n'))/3)*3),1,date('Y')))
|
||||
]),
|
||||
'year'=>implode(' - ',[
|
||||
date('Y').'/01/01',date('Y/m/d',strtotime(date('Y').'/01/01 + 1year -1 day'))
|
||||
])
|
||||
];
|
||||
$this->assign('where',$where);
|
||||
$this->assign('countBargain',StoreBargainModel::getCountBargain());
|
||||
$this->assign('limitTimeList',$limitTimeList);
|
||||
$this->assign(StoreBargainModel::systemPage($where));
|
||||
$this->assign('bargainId',StoreBargainModel::getBargainIdAll($where));
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 异步获取砍价数据
|
||||
*/
|
||||
public function get_bargain_list(){
|
||||
$where=Util::getMore([
|
||||
['page',1],
|
||||
['limit',20],
|
||||
['export',0],
|
||||
['store_name',''],
|
||||
['status',''],
|
||||
['data','']
|
||||
]);
|
||||
$bargainList = StoreBargainModel::systemPage($where);
|
||||
if(is_object($bargainList['list'])) $bargainList['list'] = $bargainList['list']->toArray();
|
||||
$data = $bargainList['list']['data'];
|
||||
foreach ($data as $k=>$v){
|
||||
$data[$k]['_stop_time'] = date('Y/m/d H:i:s',$v['stop_time']);
|
||||
}
|
||||
return Json::successlayui(['count'=>$bargainList['list']['total'],'data'=>$data]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传图片
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function upload()
|
||||
{
|
||||
$res = Upload::image('file','store/bargain/'.date('Ymd'));
|
||||
if(is_array($res)){
|
||||
SystemAttachment::attachmentAdd($res['name'],$res['size'],$res['type'],$res['dir'],$res['thumb_path'],3,$res['image_type'],$res['time']);
|
||||
return Json::successful('图片上传成功!',['name'=>$res['name'],'url'=>Upload::pathToUrl($res['thumb_path'])]);
|
||||
}else
|
||||
return Json::fail($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加砍价
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$f = array();
|
||||
$f[] = Form::input('title','砍价活动名称');
|
||||
$f[] = Form::input('info','砍价活动简介')->type('textarea');
|
||||
$f[] = Form::input('store_name','砍价产品名称');
|
||||
$f[] = Form::input('unit_name','单位')->placeholder('个、位');
|
||||
$f[] = Form::dateTimeRange('section_time','活动时间');
|
||||
$f[] = Form::frameImageOne('image','产品主图片(305*305px)',Url::buildUrl('admin/widget.images/index',array('fodder'=>'image')))->icon('image')->width('100%')->height('500px');
|
||||
$f[] = Form::frameImages('images','产品轮播图(640*640px)',Url::buildUrl('admin/widget.images/index',array('fodder'=>'images')))->maxLength(5)->icon('images')->width('100%')->height('500px');
|
||||
$f[] = Form::number('price','显示原价')->min(0)->col(12);
|
||||
$f[] = Form::number('min_price','最低购买价')->min(0);
|
||||
$f[] = Form::number('bargain_max_price','单次砍价的最大金额')->min(0)->col(12);
|
||||
$f[] = Form::number('bargain_min_price','单次砍价的最小金额')->min(0)->col(12);
|
||||
$f[] = Form::number('cost','成本价')->min(0)->col(12);
|
||||
$f[] = Form::number('bargain_num','单次砍价的次数')->min(0)->col(12);
|
||||
$f[] = Form::number('stock','库存')->min(0)->col(12);
|
||||
$f[] = Form::number('sales','销量')->min(0)->col(12);
|
||||
$f[] = Form::number('sort','排序')->col(12);
|
||||
$f[] = Form::number('num','单次允许购买数量')->col(12);
|
||||
$f[] = Form::number('give_integral','赠送积分')->min(0)->col(12);
|
||||
$f[] = Form::number('postage','邮费')->min(0)->col(12);
|
||||
$f[] = Form::radio('is_postage','是否包邮',1)->options([['label'=>'是','value'=>1],['label'=>'否','value'=>0]])->col(12);
|
||||
$f[] = Form::radio('is_hot','热门推荐',1)->options([['label'=>'开启','value'=>1],['label'=>'关闭','value'=>0]])->col(12);
|
||||
$f[] = Form::radio('status','活动状态',1)->options([['label'=>'开启','value'=>1],['label'=>'关闭','value'=>0]])->col(12);
|
||||
$form = Form::make_post_form('添加用户通知',$f,Url::buildUrl('update'));
|
||||
$this->assign(compact('form'));
|
||||
return $this->fetch('public/form-builder');
|
||||
}
|
||||
/**
|
||||
* 显示编辑资源表单页.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function edit($id)
|
||||
{
|
||||
if(!$id) return $this->failed('数据不存在');
|
||||
$product = StoreBargainModel::get($id);
|
||||
if(!$product) return $this->failed('数据不存在!');
|
||||
$f = array();
|
||||
$f[] = Form::input('title','砍价活动名称',$product->getData('title'));
|
||||
$f[] = Form::hidden('product_id',$product->getData('product_id'));
|
||||
$f[] = Form::input('info','砍价活动简介',$product->getData('info'))->type('textarea');
|
||||
$f[] = Form::input('store_name','砍价产品名称',$product->getData('store_name'));
|
||||
$f[] = Form::input('unit_name','单位',$product->getData('unit_name'))->placeholder('个、位');
|
||||
$f[] = Form::dateTimeRange('section_time','活动时间',date("Y-m-d H:i:s",$product->getData('start_time')),date("Y-m-d H:i:s",$product->getData('stop_time')));//->format("yyyy-MM-dd HH:mm:ss");
|
||||
$f[] = Form::frameImageOne('image','产品主图片(305*305px)',Url::buildUrl('admin/widget.images/index',array('fodder'=>'image')),$product->getData('image'))->icon('image')->width('100%')->height('500px');
|
||||
$f[] = Form::frameImages('images','产品轮播图(640*640px)',Url::buildUrl('admin/widget.images/index',array('fodder'=>'images')),json_decode($product->getData('images'),1))->maxLength(5)->icon('images')->width('100%')->height('500px');
|
||||
$f[] = Form::number('price','显示原价',$product->getData('price'))->min(0)->col(12);
|
||||
$f[] = Form::number('min_price','最低购买价',$product->getData('min_price'))->min(0)->col(12);
|
||||
$f[] = Form::number('bargain_max_price','单次砍价的最大金额',$product->getData('bargain_max_price'))->min(0)->col(12);
|
||||
$f[] = Form::number('bargain_min_price','单次砍价的最小金额',$product->getData('bargain_min_price'))->min(0)->col(12);
|
||||
$f[] = Form::number('cost','成本价',$product->getData('cost'))->min(0)->col(12);
|
||||
$f[] = Form::number('bargain_num','单次砍价的次数',$product->getData('bargain_num'))->min(0)->col(12);
|
||||
$f[] = Form::number('stock','库存',$product->getData('stock'))->min(0)->col(12);
|
||||
$f[] = Form::number('sales','销量',$product->getData('sales'))->min(0)->col(12);
|
||||
$f[] = Form::number('sort','排序',$product->getData('sort'))->col(12);
|
||||
$f[] = Form::number('num','单次允许购买数量',$product->getData('num'))->col(12);
|
||||
$f[] = Form::number('give_integral','赠送积分',$product->getData('give_integral'))->min(0)->col(12);
|
||||
$f[] = Form::number('postage','邮费',$product->getData('postage'))->min(0)->col(12);
|
||||
$f[] = Form::radio('is_postage','是否包邮',$product->getData('is_postage'))->options([['label'=>'是','value'=>1],['label'=>'否','value'=>0]])->col(12);
|
||||
$f[] = Form::radio('is_hot','热门推荐',$product->getData('is_hot'))->options([['label'=>'开启','value'=>1],['label'=>'关闭','value'=>0]])->col(12);
|
||||
$f[] = Form::radio('status','活动状态',$product->getData('status'))->options([['label'=>'开启','value'=>1],['label'=>'关闭','value'=>0]])->col(12);
|
||||
$form = Form::make_post_form('添加用户通知',$f,Url::buildUrl('update',array('id'=>$id)));
|
||||
$this->assign(compact('form'));
|
||||
return $this->fetch('public/form-builder');
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存更新的资源
|
||||
* @param string $id
|
||||
*/
|
||||
public function update($id='')
|
||||
{
|
||||
$data = UtilService::postMore([
|
||||
['title',''],
|
||||
['info',''],
|
||||
['store_name',''],
|
||||
['unit_name',''],
|
||||
['section_time',[]],
|
||||
['image',''],
|
||||
['images',[]],
|
||||
['price',0],
|
||||
['min_price',0],
|
||||
['bargain_max_price',0],
|
||||
['bargain_min_price',0],
|
||||
['cost',0],
|
||||
['bargain_num',0],
|
||||
['stock',0],
|
||||
['sales',0],
|
||||
['sort',0],
|
||||
['num',0],
|
||||
['give_integral',0],
|
||||
['postage',0],
|
||||
['is_postage',0],
|
||||
['is_hot',0],
|
||||
['status',0],
|
||||
['product_id',0]
|
||||
]);
|
||||
if($data['title'] == '') return JsonService::fail('请输入砍价活动名称');
|
||||
if($data['info'] == '') return JsonService::fail('请输入砍价活动简介');
|
||||
if($data['store_name'] == '') return JsonService::fail('请输入砍价产品名称');
|
||||
if($data['unit_name'] == '') return JsonService::fail('请输入产品单位');
|
||||
if(count($data['section_time'])<1) return JsonService::fail('请选择活动时间');
|
||||
if(!$data['section_time'][0]) return JsonService::fail('请选择活动时间');
|
||||
if(!$data['section_time'][1]) return JsonService::fail('请选择活动时间');
|
||||
$data['start_time'] = strtotime($data['section_time'][0]);
|
||||
$data['stop_time'] = strtotime($data['section_time'][1]);
|
||||
unset($data['section_time']);
|
||||
if(!($data['image'])) return JsonService::fail('请选择推荐图');
|
||||
if(count($data['images'])<1) return JsonService::fail('请选择轮播图');
|
||||
$data['images'] = json_encode($data['images']);
|
||||
if($data['price'] == '' || $data['price'] < 0) return JsonService::fail('请输入砍价金额');
|
||||
if($data['min_price'] == '' || $data['min_price'] < 0) return JsonService::fail('请输入砍价最低金额');
|
||||
if($data['bargain_max_price'] == '' || $data['bargain_max_price'] < 0) return JsonService::fail('请输入用户单次砍价的最大金额');
|
||||
if($data['bargain_min_price'] == '' || $data['bargain_min_price'] < 0) return JsonService::fail('请输入用户单次砍价的最小金额');
|
||||
if($data['cost'] == '' || $data['cost'] < 0) return JsonService::fail('请输入成本价');
|
||||
if($data['bargain_num'] == '' || $data['bargain_num'] < 0) return JsonService::fail('请输入用户单次砍价的次数');
|
||||
if($data['stock'] == '' || $data['stock'] < 0) return JsonService::fail('请输入库存');
|
||||
if($data['num'] == '' || $data['num'] < 0) return JsonService::fail('请输入单次购买的砍价产品数量');
|
||||
unset($data['img']);
|
||||
if($id){
|
||||
$product = StoreBargainModel::get($id);
|
||||
if(!$product) return Json::fail('数据不存在!');
|
||||
$res = StoreBargainModel::edit($data,$id);
|
||||
if($res) return JsonService::successful('修改成功');
|
||||
else return JsonService::fail('修改失败');
|
||||
}
|
||||
else{
|
||||
$data['add_time'] = time();
|
||||
$res = StoreBargainModel::create($data);
|
||||
if($res) return JsonService::successful('添加成功');
|
||||
else return JsonService::fail('添加成功');
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除指定资源
|
||||
*
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function delete($id)
|
||||
{
|
||||
if(!$id) return Json::fail('数据不存在');
|
||||
$product = StoreBargainModel::get($id);
|
||||
if(!$product) return Json::fail('数据不存在!');
|
||||
if($product['is_del']) return Json::fail('已删除!');
|
||||
$data['is_del'] = 1;
|
||||
if(StoreBargainModel::edit($data,$id))
|
||||
return Json::successful('删除成功!');
|
||||
else
|
||||
return Json::fail(StoreBargainModel::getErrorInfo('删除失败,请稍候再试!'));
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示内容窗口
|
||||
* @param $id
|
||||
* @return mixed|\think\response\Json|void
|
||||
*/
|
||||
public function edit_content($id){
|
||||
if(!$id) return $this->failed('数据不存在');
|
||||
$seckill = StoreBargainModel::get($id);
|
||||
if(!$seckill) return $this->failed('数据不存在');
|
||||
$this->assign([
|
||||
'content'=>StoreBargainModel::where('id',$id)->value('description'),
|
||||
'field'=>'description',
|
||||
'action'=>Url::buildUrl('change_field',['id'=>$id,'field'=>'description'])
|
||||
]);
|
||||
return $this->fetch('public/edit_content');
|
||||
}
|
||||
public function edit_rule($id){
|
||||
if(!$id) return $this->failed('数据不存在');
|
||||
$seckill = StoreBargainModel::get($id);
|
||||
if(!$seckill) return $this->failed('数据不存在');
|
||||
$this->assign([
|
||||
'content'=>StoreBargainModel::where('id',$id)->value('rule'),
|
||||
'field'=>'rule',
|
||||
'action'=>Url::buildUrl('change_field',['id'=>$id,'field'=>'rule'])
|
||||
]);
|
||||
return $this->fetch('public/edit_content');
|
||||
}
|
||||
/**
|
||||
* 开启砍价产品
|
||||
* @param int $id
|
||||
* @return mixed|\think\response\Json|void
|
||||
*/
|
||||
public function bargain($id = 0){
|
||||
if(!$id) return $this->failed('数据不存在');
|
||||
$product = ProductModel::get($id);
|
||||
if(!$product) return Json::fail('数据不存在!');
|
||||
$f = array();
|
||||
$f[] = Form::input('title','砍价活动名称');
|
||||
$f[] = Form::input('info','砍价活动简介')->type('textarea');
|
||||
$f[] = Form::hidden('product_id',$product->getData('id'));
|
||||
$f[] = Form::input('store_name','砍价产品名称',$product->getData('store_name'));
|
||||
$f[] = Form::input('unit_name','单位',$product->getData('unit_name'))->placeholder('个、位');
|
||||
$f[] = Form::dateTimeRange('section_time','活动时间');//->format("yyyy-MM-dd HH:mm:ss");
|
||||
$f[] = Form::frameImageOne('image','产品主图片(305*305px)',Url::buildUrl('admin/widget.images/index',array('fodder'=>'image')),$product->getData('image'))->icon('image')->width('100%')->height('500px');
|
||||
$f[] = Form::frameImages('images','产品轮播图(640*640px)',Url::buildUrl('admin/widget.images/index',array('fodder'=>'images')),json_decode($product->getData('slider_image'),1))->maxLength(5)->icon('images')->width('100%')->height('500px');
|
||||
$f[] = Form::number('price','砍价金额')->min(0)->col(12);
|
||||
$f[] = Form::number('min_price','砍价最低金额',0)->min(0)->col(12);
|
||||
$f[] = Form::number('bargain_max_price','单次砍价的最大金额',10)->min(0)->col(12);
|
||||
$f[] = Form::number('bargain_min_price','单次砍价的最小金额',0.01)->min(0)->precision(2)->col(12);
|
||||
$f[] = Form::number('cost','成本价',$product->getData('cost'))->min(0)->col(12);
|
||||
$f[] = Form::number('bargain_num','单次砍价的次数',1)->min(0)->col(12);
|
||||
$f[] = Form::number('stock','库存',$product->getData('stock'))->min(1)->col(12);
|
||||
$f[] = Form::number('sales','销量',$product->getData('sales'))->min(0)->col(12);
|
||||
$f[] = Form::number('sort','排序',$product->getData('sort'))->col(12);
|
||||
$f[] = Form::number('num','单次购买的砍价产品数量',1)->col(12);
|
||||
$f[] = Form::number('give_integral','赠送积分',$product->getData('give_integral'))->min(0)->col(12);
|
||||
$f[] = Form::number('postage','邮费',$product->getData('postage'))->min(0)->col(12);
|
||||
$f[] = Form::radio('is_postage','是否包邮',$product->getData('is_postage'))->options([['label'=>'是','value'=>1],['label'=>'否','value'=>0]])->col(12);
|
||||
$f[] = Form::radio('is_hot','热门推荐',$product->getData('is_hot'))->options([['label'=>'开启','value'=>1],['label'=>'关闭','value'=>0]])->col(12);
|
||||
$f[] = Form::radio('status','活动状态',1)->options([['label'=>'开启','value'=>1],['label'=>'关闭','value'=>0]])->col(12);
|
||||
$form = Form::make_post_form('开启砍价活动',$f,Url::buildUrl('update'));
|
||||
$this->assign(compact('form'));
|
||||
return $this->fetch('public/form-builder');
|
||||
}
|
||||
/**
|
||||
* 修改砍价状态
|
||||
* @param $status
|
||||
* @param int $id
|
||||
*/
|
||||
public function set_bargain_status($status,$id = 0){
|
||||
if(!$id) return JsonService::fail('参数错误');
|
||||
$res = StoreBargainModel::edit(['status'=>$status],$id);
|
||||
if($res) return JsonService::successful('修改成功');
|
||||
else return JsonService::fail('修改失败');
|
||||
}
|
||||
}
|
||||
395
app/admin/controller/ump/StoreCombination.php
Normal file
395
app/admin/controller/ump/StoreCombination.php
Normal file
@ -0,0 +1,395 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\controller\ump;
|
||||
|
||||
use app\admin\controller\AuthController;
|
||||
use crmeb\services\FormBuilder as Form;
|
||||
use crmeb\traits\CurdControllerTrait;
|
||||
use crmeb\services\UtilService as Util;
|
||||
use crmeb\services\JsonService as Json;
|
||||
use crmeb\services\UploadService as Upload;
|
||||
use app\admin\model\store\StoreProduct as ProductModel;
|
||||
use app\admin\model\ump\StoreCombinationAttr;
|
||||
use app\admin\model\ump\StoreCombinationAttrResult;
|
||||
use app\admin\model\ump\StoreCombination as StoreCombinationModel;
|
||||
use think\facade\Route as Url;
|
||||
use app\admin\model\system\SystemAttachment;
|
||||
use app\admin\model\ump\StorePink;
|
||||
|
||||
/**
|
||||
* 拼团管理
|
||||
* Class StoreCombination
|
||||
* @package app\admin\controller\store
|
||||
*/
|
||||
class StoreCombination extends AuthController
|
||||
{
|
||||
|
||||
use CurdControllerTrait;
|
||||
|
||||
protected $bindModel = StoreCombinationModel::class;
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$this->assign('countCombination',StoreCombinationModel::getCombinationCount());
|
||||
$this->assign(StoreCombinationModel::getStatistics());
|
||||
$this->assign('combinationId',StoreCombinationModel::getCombinationIdAll());
|
||||
return $this->fetch();
|
||||
}
|
||||
public function save_excel(){
|
||||
$where = Util::getMore([
|
||||
['is_show',''],
|
||||
['store_name',''],
|
||||
]);
|
||||
StoreCombinationModel::SaveExcel($where);
|
||||
}
|
||||
/**
|
||||
* 异步获取拼团数据
|
||||
*/
|
||||
public function get_combination_list(){
|
||||
$where=Util::getMore([
|
||||
['page',1],
|
||||
['limit',20],
|
||||
['export',0],
|
||||
['is_show',''],
|
||||
['is_host',''],
|
||||
['store_name','']
|
||||
]);
|
||||
$combinationList = StoreCombinationModel::systemPage($where);
|
||||
if(is_object($combinationList['list'])) $combinationList['list'] = $combinationList['list']->toArray();
|
||||
$data = $combinationList['list']['data'];
|
||||
foreach ($data as $k=>$v){
|
||||
$data[$k]['_stop_time'] = date('Y/m/d H:i:s',$v['stop_time']);
|
||||
}
|
||||
return Json::successlayui(['count'=>$combinationList['list']['total'],'data'=>$data]);
|
||||
}
|
||||
|
||||
public function combination($id = 0){
|
||||
if(!$id) return $this->failed('数据不存在');
|
||||
$product = ProductModel::get($id);
|
||||
if(!$product) return Json::fail('数据不存在!');
|
||||
$f = array();
|
||||
$f[] = Form::hidden('product_id',$id);
|
||||
// $f[] = Form::select('product_id','产品名称')->setOptions(function(){
|
||||
// $list = ProductModel::getTierList();
|
||||
// foreach ($list as $menu){
|
||||
// $menus[] = ['value'=>$menu['id'],'label'=>$menu['store_name'].'/'.$menu['id']];
|
||||
// }
|
||||
// return $menus;
|
||||
// })->filterable(1);
|
||||
$f[] = Form::input('title','拼团名称',$product->getData('store_name'));
|
||||
$f[] = Form::input('info','拼团简介',$product->getData('store_info'))->type('textarea');
|
||||
$f[] = Form::input('unit_name','单位',$product->getData('unit_name'))->placeholder('个、位');
|
||||
$f[] = Form::dateTimeRange('section_time','拼团时间');
|
||||
$f[] = Form::frameImageOne('image','产品主图片(305*305px)',Url::buildUrl('admin/widget.images/index',array('fodder'=>'image')),$product->getData('image'))->icon('image')->width('100%')->height('500px');
|
||||
$f[] = Form::frameImages('images','产品轮播图(640*640px)',Url::buildUrl('admin/widget.images/index',array('fodder'=>'images')),json_decode($product->getData('slider_image')))->maxLength(5)->icon('images')->width('100%')->height('500px');
|
||||
$f[] = Form::number('price','拼团价')->min(0)->col(12);
|
||||
$f[] = Form::number('people','拼团人数')->min(2)->col(12);
|
||||
$f[] = Form::number('stock','库存',$product->getData('stock'))->min(0)->precision(0)->col(12);
|
||||
$f[] = Form::number('sales','销量',$product->getData('sales'))->min(0)->precision(0)->col(12);
|
||||
$f[] = Form::number('sort','排序')->col(12);
|
||||
$f[] = Form::number('postage','邮费',$product->getData('postage'))->min(0)->col(12);
|
||||
$f[] = Form::radio('is_postage','是否包邮',$product->getData('is_postage'))->options([['label'=>'是','value'=>1],['label'=>'否','value'=>0]])->col(12);
|
||||
$f[] = Form::radio('is_host','热门推荐',1)->options([['label'=>'开启','value'=>1],['label'=>'关闭','value'=>0]])->col(12);
|
||||
$f[] = Form::radio('is_show','活动状态',1)->options([['label'=>'开启','value'=>1],['label'=>'关闭','value'=>0]])->col(12);
|
||||
$form = Form::make_post_form('添加用户通知',$f,Url::buildUrl('save'));
|
||||
$this->assign(compact('form'));
|
||||
return $this->fetch('public/form-builder');
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示创建资源表单页.
|
||||
*
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$f = array();
|
||||
$f[] = Form::select('product_id','产品名称')->setOptions(function(){
|
||||
$list = ProductModel::getTierList();
|
||||
foreach ($list as $menu){
|
||||
$menus[] = ['value'=>$menu['id'],'label'=>$menu['store_name'].'/'.$menu['id']];
|
||||
}
|
||||
return $menus;
|
||||
})->filterable(1);
|
||||
$f[] = Form::input('title','拼团名称');
|
||||
$f[] = Form::input('info','拼团简介')->type('textarea');
|
||||
$f[] = Form::input('unit_name','单位')->placeholder('个、位');
|
||||
$f[] = Form::dateTimeRange('section_time','拼团时间');
|
||||
$f[] = Form::frameImageOne('image','产品主图片(305*305px)',Url::buildUrl('admin/widget.images/index',array('fodder'=>'image')))->icon('image')->width('100%')->height('500px');
|
||||
$f[] = Form::frameImages('images','产品轮播图(640*640px)',Url::buildUrl('admin/widget.images/index',array('fodder'=>'images')))->maxLength(5)->icon('images')->width('100%')->height('500px');
|
||||
$f[] = Form::number('price','拼团价')->min(0)->col(12);
|
||||
$f[] = Form::number('people','拼团人数')->min(2)->col(12);
|
||||
$f[] = Form::number('stock','库存')->min(0)->precision(0)->col(12);
|
||||
$f[] = Form::number('sales','销量')->min(0)->precision(0)->col(12);
|
||||
$f[] = Form::number('sort','排序')->col(12);
|
||||
$f[] = Form::number('postage','邮费')->min(0)->col(12);
|
||||
$f[] = Form::radio('is_postage','是否包邮',1)->options([['label'=>'是','value'=>1],['label'=>'否','value'=>0]])->col(12);
|
||||
$f[] = Form::radio('is_host','热门推荐',1)->options([['label'=>'开启','value'=>1],['label'=>'关闭','value'=>0]])->col(12);
|
||||
$f[] = Form::radio('is_show','活动状态',1)->options([['label'=>'开启','value'=>1],['label'=>'关闭','value'=>0]])->col(12);
|
||||
$form = Form::make_post_form('添加用户通知',$f,Url::buildUrl('save'));
|
||||
$this->assign(compact('form'));
|
||||
return $this->fetch('public/form-builder');
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存新建的资源
|
||||
* @param int $id
|
||||
*/
|
||||
public function save($id = 0)
|
||||
{
|
||||
$data = Util::postMore([
|
||||
'product_id',
|
||||
'title',
|
||||
'info',
|
||||
['unit_name','个'],
|
||||
['image',''],
|
||||
['images',[]],
|
||||
['section_time',[]],
|
||||
'postage',
|
||||
'price',
|
||||
'people',
|
||||
'sort',
|
||||
'stock',
|
||||
'sales',
|
||||
['is_show',0],
|
||||
['is_host',0],
|
||||
['is_postage',0],
|
||||
]);
|
||||
if(!$data['title']) return Json::fail('请输入拼团名称');
|
||||
if(!$data['info']) return Json::fail('请输入拼团简介');
|
||||
if(!$data['image']) return Json::fail('请上传产品图片');
|
||||
if(count($data['images'])<1) return Json::fail('请上传产品轮播图');
|
||||
if($data['price'] == '' || $data['price'] < 0) return Json::fail('请输入产品售价');
|
||||
if($data['people'] == '' || $data['people'] < 1) return Json::fail('请输入拼团人数');
|
||||
if(count($data['section_time'])<1) return Json::fail('请选择活动时间');
|
||||
if($data['stock'] == '' || $data['stock'] < 0) return Json::fail('请输入库存');
|
||||
$data['images'] = json_encode($data['images']);
|
||||
$data['start_time'] = strtotime($data['section_time'][0]);
|
||||
$data['stop_time'] = strtotime($data['section_time'][1]);
|
||||
unset($data['section_time']);
|
||||
if($id){
|
||||
$product = StoreCombinationModel::get($id);
|
||||
if(!$product) return Json::fail('数据不存在!');
|
||||
$data['product_id']=$product['product_id'];
|
||||
StoreCombinationModel::edit($data,$id);
|
||||
return Json::successful('编辑成功!');
|
||||
}else{
|
||||
$data['add_time'] = time();
|
||||
$data['description'] = '';
|
||||
StoreCombinationModel::create($data);
|
||||
return Json::successful('添加拼团成功!');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示编辑资源表单页.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function edit($id)
|
||||
{
|
||||
if(!$id) return $this->failed('数据不存在');
|
||||
$product = StoreCombinationModel::get($id);
|
||||
if(!$product) return Json::fail('数据不存在!');
|
||||
$f = array();
|
||||
$f[] = Form::hidden('product_id',$product->getData('product_id'));
|
||||
$f[] = Form::input('title','拼团名称',$product->getData('title'));
|
||||
$f[] = Form::input('info','拼团简介',$product->getData('info'))->type('textarea');
|
||||
$f[] = Form::input('unit_name','单位',$product->getData('unit_name'))->placeholder('个、位');
|
||||
$f[] = Form::dateTimeRange('section_time','拼团时间',date("Y-m-d H:i:s",$product->getData('start_time')),date("Y-m-d H:i:s",$product->getData('stop_time')));
|
||||
$f[] = Form::frameImageOne('image','产品主图片(305*305px)',Url::buildUrl('admin/widget.images/index',array('fodder'=>'image')),$product->getData('image'))->icon('image')->width('100%')->height('500px');
|
||||
$f[] = Form::frameImages('images','产品轮播图(640*640px)',Url::buildUrl('admin/widget.images/index',array('fodder'=>'images')),json_decode($product->getData('images')))->maxLength(5)->icon('images')->width('100%')->height('500px');
|
||||
$f[] = Form::number('price','拼团价',$product->getData('price'))->min(0)->col(12);
|
||||
$f[] = Form::number('people','拼团人数',$product->getData('people'))->min(2)->col(12);
|
||||
$f[] = Form::number('stock','库存',$product->getData('stock'))->min(0)->precision(0)->col(12);
|
||||
$f[] = Form::number('sales','销量',$product->getData('sales'))->min(0)->precision(0)->col(12);
|
||||
$f[] = Form::number('sort','排序',$product->getData('sort'))->col(12);
|
||||
$f[] = Form::number('postage','邮费',$product->getData('postage'))->min(0)->col(12);
|
||||
$f[] = Form::radio('is_postage','是否包邮',$product->getData('is_postage'))->options([['label'=>'是','value'=>1],['label'=>'否','value'=>0]])->col(12);
|
||||
$f[] = Form::radio('is_host','热门推荐',$product->getData('is_host'))->options([['label'=>'开启','value'=>1],['label'=>'关闭','value'=>0]])->col(12);
|
||||
$f[] = Form::radio('is_show','活动状态',$product->getData('is_show'))->options([['label'=>'开启','value'=>1],['label'=>'关闭','value'=>0]])->col(12);
|
||||
$form = Form::make_post_form('添加用户通知',$f,Url::buildUrl('save',compact('id')));
|
||||
$this->assign(compact('form'));
|
||||
return $this->fetch('public/form-builder');
|
||||
// $this->assign([
|
||||
// 'title'=>'编辑产品','rules'=>$this->read($id)->getContent(),
|
||||
// 'action'=>Url::buildUrl('update',array('id'=>$id))
|
||||
// ]);
|
||||
// return $this->fetch('public/common_form');
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除指定资源
|
||||
*
|
||||
* @param int $id
|
||||
* @return \think\Response
|
||||
*/
|
||||
public function delete($id)
|
||||
{
|
||||
if(!$id) return $this->failed('数据不存在');
|
||||
$product = StoreCombinationModel::get($id);
|
||||
if(!$product) return Json::fail('数据不存在!');
|
||||
if($product['is_del']) return Json::fail('已删除!');
|
||||
$data['is_del'] = 1;
|
||||
if(!StoreCombinationModel::edit($data,$id))
|
||||
return Json::fail(StoreCombinationModel::getErrorInfo('删除失败,请稍候再试!'));
|
||||
else
|
||||
return Json::successful('删除成功!');
|
||||
}
|
||||
|
||||
/**
|
||||
* 属性页面
|
||||
* @param $id
|
||||
* @return mixed|void
|
||||
*/
|
||||
public function attr($id)
|
||||
{
|
||||
if(!$id) return $this->failed('数据不存在!');
|
||||
$result = StoreCombinationAttrResult::getResult($id);
|
||||
$image = StoreCombinationModel::where('id',$id)->value('image');
|
||||
$this->assign(compact('id','result','product','image'));
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成属性
|
||||
* @param int $id
|
||||
*/
|
||||
public function is_format_attr($id = 0){
|
||||
if(!$id) return Json::fail('产品不存在');
|
||||
list($attr,$detail) = Util::postMore([
|
||||
['items',[]],
|
||||
['attrs',[]]
|
||||
],$this->request,true);
|
||||
$product = StoreCombinationModel::get($id);
|
||||
if(!$product) return Json::fail('产品不存在');
|
||||
$attrFormat = attrFormat($attr)[1];
|
||||
if(count($detail)){
|
||||
foreach ($attrFormat as $k=>$v){
|
||||
foreach ($detail as $kk=>$vv){
|
||||
if($v['detail'] == $vv['detail']){
|
||||
$attrFormat[$k]['price'] = $vv['price'];
|
||||
$attrFormat[$k]['sales'] = $vv['sales'];
|
||||
$attrFormat[$k]['pic'] = $vv['pic'];
|
||||
$attrFormat[$k]['check'] = false;
|
||||
break;
|
||||
}else{
|
||||
$attrFormat[$k]['price'] = '';
|
||||
$attrFormat[$k]['sales'] = '';
|
||||
$attrFormat[$k]['pic'] = $product['image'];
|
||||
$attrFormat[$k]['check'] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
foreach ($attrFormat as $k=>$v){
|
||||
$attrFormat[$k]['price'] = $product['price'];
|
||||
$attrFormat[$k]['sales'] = $product['stock'];
|
||||
$attrFormat[$k]['pic'] = $product['image'];
|
||||
$attrFormat[$k]['check'] = false;
|
||||
}
|
||||
}
|
||||
return Json::successful($attrFormat);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加 修改属性
|
||||
* @param $id
|
||||
*/
|
||||
public function set_attr($id)
|
||||
{
|
||||
if(!$id) return $this->failed('产品不存在!');
|
||||
list($attr,$detail) = Util::postMore([
|
||||
['items',[]],
|
||||
['attrs',[]]
|
||||
],$this->request,true);
|
||||
$res = StoreCombinationAttr::createProductAttr($attr,$detail,$id);
|
||||
if($res)
|
||||
return $this->successful('编辑属性成功!');
|
||||
else
|
||||
return $this->failed(StoreCombinationAttr::getErrorInfo());
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除属性
|
||||
* @param $id
|
||||
*/
|
||||
public function clear_attr($id)
|
||||
{
|
||||
if(!$id) return $this->failed('产品不存在!');
|
||||
if(false !== StoreCombinationAttr::clearProductAttr($id) && false !== StoreCombinationAttrResult::clearResult($id))
|
||||
return $this->successful('清空产品属性成功!');
|
||||
else
|
||||
return $this->failed(StoreCombinationAttr::getErrorInfo('清空产品属性失败!'));
|
||||
}
|
||||
|
||||
public function edit_content($id){
|
||||
if(!$id) return $this->failed('数据不存在');
|
||||
$product = StoreCombinationModel::get($id);
|
||||
if(!$product) return Json::fail('数据不存在!');
|
||||
$this->assign([
|
||||
'content'=>StoreCombinationModel::where('id',$id)->value('description'),
|
||||
'field'=>'description',
|
||||
'action'=>Url::buildUrl('change_field',['id'=>$id,'field'=>'description'])
|
||||
]);
|
||||
return $this->fetch('public/edit_content');
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传图片
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function upload()
|
||||
{
|
||||
$res = Upload::image('file','store/product/'.date('Ymd'));
|
||||
if(is_array($res)){
|
||||
SystemAttachment::attachmentAdd($res['name'],$res['size'],$res['type'],$res['dir'],$res['thumb_path'],2,$res['image_type'],$res['time']);
|
||||
return Json::successful('图片上传成功!',['name'=>$res['name'],'url'=>Upload::pathToUrl($res['thumb_path'])]);
|
||||
}else
|
||||
return Json::fail($res);
|
||||
}
|
||||
|
||||
/**拼团列表
|
||||
* @return mixed
|
||||
*/
|
||||
public function combina_list()
|
||||
{
|
||||
$where = Util::getMore([
|
||||
['status',''],
|
||||
['data',''],
|
||||
],$this->request);
|
||||
$this->assign('where',$where);
|
||||
$this->assign(StorePink::systemPage($where));
|
||||
|
||||
return $this->fetch();
|
||||
}
|
||||
/**拼团人列表
|
||||
* @return mixed
|
||||
*/
|
||||
public function order_pink($id){
|
||||
if(!$id) return $this->failed('数据不存在');
|
||||
$StorePink = StorePink::getPinkUserOne($id);
|
||||
if(!$StorePink) return $this->failed('数据不存在!');
|
||||
$list = StorePink::getPinkMember($id);
|
||||
$list[] = $StorePink;
|
||||
$this->assign('list',$list);
|
||||
return $this->fetch();
|
||||
}/**
|
||||
* 修改拼团状态
|
||||
* @param $status
|
||||
* @param int $idd
|
||||
*/
|
||||
public function set_combination_status($status,$id = 0){
|
||||
if(!$id) return Json::fail('参数错误');
|
||||
$res = StoreCombinationModel::edit(['is_show'=>$status],$id);
|
||||
if($res) return Json::successful('修改成功');
|
||||
else return Json::fail('修改失败');
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -216,7 +216,7 @@ class StoreSeckill extends AuthController
|
||||
$f[] = Form::input('title','产品标题',$product->getData('title'));
|
||||
$f[] = Form::input('info','秒杀活动简介',$product->getData('info'))->type('textarea');
|
||||
$f[] = Form::input('unit_name','单位',$product->getData('unit_name'))->placeholder('个、位');
|
||||
$f[] = Form::dateTimeRange('section_time','活动时间',date('Y-m-d H:i:s', $product->getData('start_time')),date('Y-m-d H:i:s', $product->getData('stop_time')));
|
||||
$f[] = Form::dateTimeRange('section_time','活动时间',date('Y-m-d H:i:s', (int)$product->getData('start_time')),date('Y-m-d H:i:s', (int)$product->getData('stop_time')));
|
||||
$f[] = Form::frameImageOne('image','产品主图片(305*305px)',Url::buildUrl('admin/widget.images/index',array('fodder'=>'image')),$product->getData('image'))->icon('image')->width('100%')->height('500px');
|
||||
$f[] = Form::frameImages('images','产品轮播图(640*640px)',Url::buildUrl('admin/widget.images/index',array('fodder'=>'images')),json_decode($product->getData('images')))->maxLength(5)->icon('images')->width('100%')->height('500px');
|
||||
$f[] = Form::number('price','秒杀价',$product->getData('price'))->min(0)->col(12);
|
||||
|
||||
@ -25,7 +25,7 @@ class UserPoint extends AuthController
|
||||
// 'count'=>UserBill::where(['category'=>'integral','type'=>'sign'])->group('uid')->count(),
|
||||
// 'song_point'=>UserBill::where(['category'=>'integral','type'=>'sign'])->group('uid')->sum('number'),
|
||||
'is_layui'=>true,
|
||||
'year'=>getMonth('y'),
|
||||
'year'=>getMonth(),
|
||||
]);
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
@ -198,7 +198,7 @@ class User extends AuthController
|
||||
foreach ($taskIds as $id){
|
||||
$inserValue[]=['uid'=>$uid,'task_id'=>$id,'status'=>1,'add_time'=>time()];
|
||||
}
|
||||
$res=$res && Db::name('user_task_finish')->insertAll($inserValue);
|
||||
$res=$res && Db::name('user_task_finish')->insertAll($inserValue) && UserModel::where('uid',$uid)->update(['level'=>$level_id]);
|
||||
if($res){
|
||||
UserModel::commitTrans();
|
||||
return JsonService::successful('赠送成功');
|
||||
|
||||
@ -77,7 +77,10 @@ class StoreOrder extends BaseModel
|
||||
$_info = Db::name('store_order_cart_info')->where('oid',$item['id'])->field('cart_info')->select();
|
||||
$_info = count($_info) ? $_info->toArray() : [];
|
||||
foreach ($_info as $k=>$v){
|
||||
$_info[$k]['cart_info'] = json_decode($v['cart_info'],true);
|
||||
$cart_info = json_decode($v['cart_info'],true);
|
||||
if(!isset($cart_info['productInfo'])) $cart_info['productInfo']=[];
|
||||
$_info[$k]['cart_info'] = $cart_info;
|
||||
unset($cart_info);
|
||||
}
|
||||
$item['_info'] = $_info;
|
||||
$item['add_time'] = date('Y-m-d H:i:s',$item['add_time']);
|
||||
@ -150,11 +153,13 @@ class StoreOrder extends BaseModel
|
||||
}else if($item['paid']==1 && $item['refund_status']==1){
|
||||
$refundReasonTime = date('Y-m-d H:i', $item['refund_reason_time']);
|
||||
$refundReasonWapImg = json_decode($item['refund_reason_wap_img'], true);
|
||||
$refundReasonWapImg = $refundReasonWapImg && is_array($refundReasonWapImg) ? $refundReasonWapImg : [];
|
||||
$refundReasonWapImg = $refundReasonWapImg ? $refundReasonWapImg : [];
|
||||
$img = '';
|
||||
foreach ($refundReasonWapImg as $itemImg){
|
||||
if(strlen(trim($itemImg)))
|
||||
$img .='<img style="height:50px;" src="'.$itemImg.'" />';
|
||||
if(count($refundReasonWapImg)){
|
||||
foreach ($refundReasonWapImg as $itemImg){
|
||||
if(strlen(trim($itemImg)))
|
||||
$img .='<img style="height:50px;" src="'.$itemImg.'" />';
|
||||
}
|
||||
}
|
||||
if(!strlen(trim($img))) $img = '无';
|
||||
$item['status_name']=<<<HTML
|
||||
@ -438,8 +443,6 @@ HTML;
|
||||
$model = $model->where('is_system_del',0);
|
||||
if(isset($where['status']) && $where['status'] != '') {
|
||||
$model = self::statusByWhere($where['status'],$model,$aler);
|
||||
}else{
|
||||
$model = $model->where('paid',1);
|
||||
}
|
||||
if(isset($where['is_del']) && $where['is_del'] != '' && $where['is_del'] != -1) $model = $model->where($aler.'is_del',$where['is_del']);
|
||||
if(isset($where['combination_id'])){
|
||||
|
||||
@ -245,6 +245,32 @@ class StoreProduct extends BaseModel
|
||||
}
|
||||
unset($stk,$sum_stock,$stock1);
|
||||
|
||||
//获取砍价缺货产品
|
||||
$stock1 = self::getModelTime($where,new StoreBargain())->where('stock','<',$replenishment_num)->column('stock','id');
|
||||
$sum_stock = StoreBargain::where('stock','<',$replenishment_num)->column('stock','id');
|
||||
$stk = [];
|
||||
foreach ($stock1 as $item){
|
||||
$stk[] = $replenishment_num-$item;
|
||||
}
|
||||
$lack = bcadd($lack,array_sum($stk),0);
|
||||
foreach ($sum_stock as $val){
|
||||
$sum[] = $replenishment_num-$val;
|
||||
}
|
||||
unset($stk,$sum_stock,$stock1);
|
||||
|
||||
//获取拼团缺货产品
|
||||
$stock1 = self::getModelTime($where,new StoreCombination())->where('stock','<',$replenishment_num)->column('stock','id');
|
||||
$sum_stock = StoreCombination::where('stock','<',$replenishment_num)->column('stock','id');
|
||||
$stk = [];
|
||||
foreach ($stock1 as $item){
|
||||
$stk[] = $replenishment_num - $item;
|
||||
}
|
||||
$lack = bcadd($lack,array_sum($stk),0);
|
||||
foreach ($sum_stock as $val){
|
||||
$sum[] = $replenishment_num - $val;
|
||||
}
|
||||
unset($stk,$sum_stock,$stock1);
|
||||
|
||||
return [
|
||||
[
|
||||
'name'=>'商品种类',
|
||||
@ -292,12 +318,15 @@ class StoreProduct extends BaseModel
|
||||
public static function getActivityProductSum($where=false)
|
||||
{
|
||||
if($where){
|
||||
$bargain=self::getModelTime($where,new StoreBargain())->sum('stock');
|
||||
$pink=self::getModelTime($where,new StoreCombination())->sum('stock');
|
||||
$seckill=self::getModelTime($where,new StoreSeckill())->sum('stock');
|
||||
}else{
|
||||
|
||||
$bargain=StoreBargain::sum('stock');
|
||||
$pink=StoreCombination::sum('stock');
|
||||
$seckill=StoreSeckill::sum('stock');
|
||||
}
|
||||
return $seckill;
|
||||
return bcadd(bcadd($bargain,$pink,0),$seckill,0);
|
||||
}
|
||||
|
||||
public static function setWhereType($model,$type){
|
||||
@ -355,7 +384,11 @@ class StoreProduct extends BaseModel
|
||||
//获取利润
|
||||
public static function ProfityTop10($where){
|
||||
$classs=['layui-bg-red','layui-bg-orange','layui-bg-green','layui-bg-blue','layui-bg-cyan'];
|
||||
$model=StoreOrder::alias('a')->join('StoreOrderCartInfo c','a.id=c.oid')->join('__store_product__ b','b.id=c.product_id');
|
||||
$model=StoreOrder::alias('a')
|
||||
->join('StoreOrderCartInfo c','a.id=c.oid')
|
||||
->join('__store_product__ b','b.id=c.product_id')
|
||||
->where('b.is_show',1)
|
||||
->where('b.is_del',0);
|
||||
$list=self::getModelTime($where,$model,'a.add_time')->group('c.product_id')->order('profity desc')->limit(10)
|
||||
->field(['count(c.product_id) as p_count','b.store_name','sum(b.price) as sum_price','(b.price-b.cost) as profity'])
|
||||
->select();
|
||||
|
||||
@ -67,6 +67,7 @@ class SystemAdmin extends BaseModel
|
||||
{
|
||||
Session::set('adminId',$adminInfo['id']);
|
||||
Session::set('adminInfo',$adminInfo->toArray());
|
||||
Session::save();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -76,7 +77,7 @@ class SystemAdmin extends BaseModel
|
||||
{
|
||||
Session::delete('adminInfo');
|
||||
Session::delete('adminId');
|
||||
Session::clear();
|
||||
Session::save();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -37,7 +37,7 @@ class SystemGroup extends BaseModel
|
||||
* @return array
|
||||
*/
|
||||
public static function getField($id){
|
||||
$fields = json_decode(self::where('id',$id)->value("fields"),true);
|
||||
$fields = json_decode(self::where('id',$id)->value("fields"),true)?:[];
|
||||
return compact('fields');
|
||||
}
|
||||
}
|
||||
@ -54,17 +54,31 @@ class SystemLog extends BaseModel
|
||||
$controller = $request->controller();
|
||||
$action = $request->action();
|
||||
$route = $request->route();
|
||||
$data = [
|
||||
'method'=>$request->app(),
|
||||
'admin_id'=>$adminId,
|
||||
'add_time'=>time(),
|
||||
'admin_name'=>$adminName,
|
||||
'path'=>SystemMenus::getAuthName($action,$controller,$module,$route),
|
||||
'page'=>SystemMenus::getVisitName($action,$controller,$module,$route)?:'未知',
|
||||
'ip'=>$request->ip(),
|
||||
'type'=>$type
|
||||
];
|
||||
return self::create($data);
|
||||
self::startTrans();
|
||||
try{
|
||||
$data = [
|
||||
'method'=>$request->app(),
|
||||
'admin_id'=>$adminId,
|
||||
'add_time'=>time(),
|
||||
'admin_name'=>$adminName,
|
||||
'path'=>SystemMenus::getAuthName($action,$controller,$module,$route),
|
||||
'page'=>SystemMenus::getVisitName($action,$controller,$module,$route)?:'未知',
|
||||
'ip'=>$request->ip(),
|
||||
'type'=>$type
|
||||
];
|
||||
$res = self::create($data);
|
||||
if($res){
|
||||
self::commit();
|
||||
return true;
|
||||
}else{
|
||||
self::rollback();
|
||||
return false;
|
||||
}
|
||||
}catch (\Exception $e){
|
||||
self::rollback();
|
||||
return self::setErrorInfo($e->getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
45
app/admin/model/system/SystemStore.php
Normal file
45
app/admin/model/system/SystemStore.php
Normal file
@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace app\admin\model\system;
|
||||
|
||||
use crmeb\traits\ModelTrait;
|
||||
use crmeb\basic\BaseModel;
|
||||
|
||||
/**
|
||||
* 门店自提 model
|
||||
* Class SystemVip
|
||||
* @package app\admin\model\system
|
||||
*/
|
||||
class SystemStore extends BaseModel
|
||||
{
|
||||
use ModelTrait;
|
||||
|
||||
/**
|
||||
* 数据表主键
|
||||
* @var string
|
||||
*/
|
||||
protected $pk = 'id';
|
||||
|
||||
/**
|
||||
* 模型名称
|
||||
* @var string
|
||||
*/
|
||||
protected $name = 'system_store';
|
||||
|
||||
|
||||
public function getLatlngAttr($value,$data)
|
||||
{
|
||||
return $data['latitude'].','.$data['longitude'];
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*
|
||||
* */
|
||||
public static function getStoreDispose()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -258,7 +258,7 @@ class User extends BaseModel
|
||||
//自定义时间
|
||||
if(strstr($where['date'],'-')!==FALSE){
|
||||
list($startTime,$endTime)=explode('-',$where['date']);
|
||||
$model = $model->where('add_time','>',strtotime($startTime))->where('add_time','<',strtotime($endTime));
|
||||
$model = $model->where('add_time','>',strtotime($startTime))->where('add_time','<',bcadd(strtotime($endTime),86400,0));
|
||||
}else{
|
||||
$model=$model->whereTime('add_time','month');
|
||||
}
|
||||
@ -337,12 +337,12 @@ class User extends BaseModel
|
||||
case 'quarter':
|
||||
list($startTime,$endTime)=User::getMonth('n');
|
||||
$model = $model->where('A.add_time','>',strtotime($startTime));
|
||||
$model = $model->where('A.add_time','<',strtotime($endTime));
|
||||
$model = $model->where('A.add_time','<',bcadd(strtotime($endTime),86400,0));
|
||||
break;
|
||||
default:
|
||||
list($startTime,$endTime)=explode('-',$date);
|
||||
$model = $model->where('A.add_time','>',strtotime($startTime));
|
||||
$model = $model->where('A.add_time','<',strtotime($endTime));
|
||||
$model = $model->where('A.add_time','<',bcadd(strtotime($endTime),86400,0));
|
||||
break;
|
||||
}
|
||||
if($status===true){
|
||||
@ -687,7 +687,7 @@ class User extends BaseModel
|
||||
],
|
||||
[
|
||||
'title'=>'本月消费金额',
|
||||
'value'=>StoreOrder::where('uid',$uid)->whereTime('add_time','month')->sum('total_price'),
|
||||
'value'=>StoreOrder::where('uid',$uid)->where('paid',1)->whereTime('add_time','month')->sum('total_price'),
|
||||
'key'=>'元',
|
||||
'class'=>'',
|
||||
]
|
||||
|
||||
@ -64,7 +64,9 @@ class WechatMessage extends BaseModel
|
||||
}
|
||||
public static function setMessage($result,$openid,$type)
|
||||
{
|
||||
$data = compact('result','openid','type');
|
||||
if(is_object($result) || is_array($result)) $result = json_encode($result);
|
||||
$add_time = time();
|
||||
$data = compact('result','openid','type','add_time');
|
||||
return self::create($data);
|
||||
}
|
||||
|
||||
|
||||
@ -178,7 +178,7 @@ class WechatReply extends BaseModel
|
||||
return self::setErrorInfo('请选择图文消息');
|
||||
$siteUrl = SystemConfig::getConfigValue('site_url');
|
||||
foreach ($data as $k=>$v){
|
||||
if(empty($v['url'])) $data[$k]['url'] = $siteUrl.Url::buildUrl('wap/article/visit',['id'=>$v['id']]);
|
||||
if(empty($v['url'])) $data[$k]['url'] = $siteUrl.'/news_detail/'.$v['id'];
|
||||
if($v['image']) $data[$k]['image'] = $v['image'];
|
||||
}
|
||||
return $data;
|
||||
|
||||
@ -17,6 +17,7 @@ use crmeb\basic\BaseModel;
|
||||
use crmeb\services\WechatService;
|
||||
use crmeb\services\PHPExcelService;
|
||||
use crmeb\services\SystemConfigService;
|
||||
use app\admin\model\order\StoreOrderStatus;
|
||||
|
||||
/**
|
||||
* 微信用户 model
|
||||
@ -157,7 +158,9 @@ use crmeb\services\SystemConfigService;
|
||||
->setExcelContent($export)
|
||||
->ExcelSave();
|
||||
}
|
||||
return self::page($model,$where);
|
||||
return self::page($model,function($item){
|
||||
$item['time'] = $item['add_time'] ? date('Y-m-d H:i',$item['add_time']) : '暂无';
|
||||
},$where);
|
||||
}
|
||||
|
||||
public static function setSpreadWhere($where=[],$alias='a',$model=null)
|
||||
|
||||
@ -135,6 +135,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="{__ADMIN_PATH}js/layuiList.js"></script>
|
||||
{/block}
|
||||
{block name="script"}
|
||||
<script>
|
||||
@ -265,23 +266,32 @@
|
||||
}
|
||||
}
|
||||
var data = {};
|
||||
var index = layList.layer.load(1, {
|
||||
shade: [0.5,'#fff'] //0.1透明度的白色背景
|
||||
});;
|
||||
$.ajax({
|
||||
url:"{:Url('add_new')}",
|
||||
data:list,
|
||||
type:'post',
|
||||
dataType:'json',
|
||||
success:function(re){
|
||||
layer.close(index);
|
||||
if(re.code == 200){
|
||||
data[re.data] = list;
|
||||
$('.type-all>.active>.new-id').val(re.data);
|
||||
$eb.message('success',re.msg);
|
||||
location.reload();
|
||||
setTimeout(function (e) {
|
||||
parent.$(".J_iframe:visible")[0].contentWindow.location.reload();
|
||||
|
||||
// parent.layer.close(parent.layer.getFrameIndex(window.name));
|
||||
},600)
|
||||
}else{
|
||||
$eb.message('error',re.msg);
|
||||
}
|
||||
},
|
||||
error:function () {
|
||||
layer.close(index);
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
@ -67,7 +67,7 @@
|
||||
{$first_line.d_num.percent}%
|
||||
{if condition='$first_line.d_num.is_plus egt 0'}<i class="fa {if condition='$first_line.d_num.is_plus eq 1'}fa-level-up{else /}fa-level-down{/if}"></i>{/if}
|
||||
</div>
|
||||
<small><a href="javascript:;" class="opFrames" data-name="订单管理" data-href="{:Url('order.store_order/index')}?data=yesterday">昨日订单数</a></small>
|
||||
<small><a href="javascript:;" class="opFrames" data-name="订单管理" data-href="{:Url('order.store_order/index')}?data=yesterday">昨日支付订单数</a></small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -274,7 +274,7 @@
|
||||
break;
|
||||
}
|
||||
var data=res.data.data;
|
||||
if(data.length) {
|
||||
if(data) {
|
||||
that.cyclecount = data.cycle.count.data;
|
||||
that.cyclecount_percent = data.cycle.count.percent;
|
||||
that.cyclecount_is_plus = data.cycle.count.is_plus;
|
||||
@ -287,7 +287,7 @@
|
||||
});
|
||||
},
|
||||
orderchartsetoption:function(data){
|
||||
|
||||
data = data == undefined ? {} : data;
|
||||
this.option = {
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
@ -307,7 +307,7 @@
|
||||
}
|
||||
},
|
||||
legend: {
|
||||
data:data.legend
|
||||
data: data.legend || []
|
||||
},
|
||||
grid: {
|
||||
x: 70,
|
||||
|
||||
@ -431,6 +431,32 @@
|
||||
break;
|
||||
}
|
||||
})
|
||||
var action={
|
||||
del_order:function () {
|
||||
var ids=layList.getCheckData().getIds('id');
|
||||
if(ids.length){
|
||||
var url =layList.U({c:'order.store_order',a:'del_order'});
|
||||
$eb.$swal('delete',function(){
|
||||
$eb.axios.post(url,{ids:ids}).then(function(res){
|
||||
if(res.status == 200 && res.data.code == 200) {
|
||||
$eb.$swal('success',res.data.msg);
|
||||
}else
|
||||
return Promise.reject(res.data.msg || '删除失败')
|
||||
}).catch(function(err){
|
||||
$eb.$swal('error',err);
|
||||
});
|
||||
},{'title':'您确定要修删除订单吗?','text':'删除后将无法恢复,请谨慎操作!','confirm':'是的,我要删除'})
|
||||
}else{
|
||||
layList.msg('请选择要删除的订单');
|
||||
}
|
||||
}
|
||||
};
|
||||
$('#container-action').find('button').each(function () {
|
||||
$(this).on('click',function(){
|
||||
var act = $(this).data('type');
|
||||
action[act] && action[act]();
|
||||
});
|
||||
})
|
||||
//下拉框
|
||||
$(document).click(function (e) {
|
||||
$('.layui-nav-child').hide();
|
||||
|
||||
@ -1,53 +1,5 @@
|
||||
{extend name="public/container"}
|
||||
{block name="head_top"}
|
||||
<style>
|
||||
.layui-input-block button{
|
||||
border: 1px solid rgba(0,0,0,0.1);
|
||||
}
|
||||
.layui-card-body{
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
.layui-card-body p.layuiadmin-big-font {
|
||||
font-size: 36px;
|
||||
color: #666;
|
||||
line-height: 36px;
|
||||
padding: 5px 0 10px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
word-break: break-all;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.layuiadmin-badge, .layuiadmin-btn-group, .layuiadmin-span-color {
|
||||
position: absolute;
|
||||
right: 15px;
|
||||
}
|
||||
.layuiadmin-badge {
|
||||
top: 50%;
|
||||
margin-top: -9px;
|
||||
color: #01AAED;
|
||||
}
|
||||
.layuiadmin-span-color i {
|
||||
padding-left: 5px;
|
||||
}
|
||||
.block-rigit{
|
||||
text-align: right;
|
||||
}
|
||||
.block-rigit button{
|
||||
width: 100px;
|
||||
letter-spacing: .5em;
|
||||
line-height: 28px;
|
||||
}
|
||||
.layuiadmin-card-list{
|
||||
padding: 1.6px;
|
||||
}
|
||||
.layuiadmin-card-list p.layuiadmin-normal-font {
|
||||
padding-bottom: 10px;
|
||||
font-size: 20px;
|
||||
color: #666;
|
||||
line-height: 24px;
|
||||
}
|
||||
</style>
|
||||
<script src="{__PLUG_PATH}echarts.common.min.js"></script>
|
||||
{/block}
|
||||
{block name="content"}
|
||||
|
||||
@ -57,7 +57,7 @@
|
||||
<div class="col-sm-12">
|
||||
<div class="ibox float-e-margins">
|
||||
<div class="ibox-title">
|
||||
<h5>短信账号注册/修改</h5>
|
||||
<h5>短信账号注册</h5>
|
||||
</div><div id="store-attr" class="mp-form" v-cloak="">
|
||||
<i-Form :label-width="80" style="width: 100%">
|
||||
<template >
|
||||
@ -128,7 +128,7 @@
|
||||
new Vue({
|
||||
data () {
|
||||
return {
|
||||
codeUrl : "{$url}",
|
||||
codeUrl : "{:Url('captcha')}",
|
||||
codeMsg : "发送验证码",
|
||||
form:{
|
||||
account:'',
|
||||
@ -157,17 +157,13 @@
|
||||
$eb.message('error','请填写短信签名');
|
||||
return false;
|
||||
}
|
||||
if(that.form.sign.length > 20){
|
||||
$eb.message('error','短信签名最大长度为20个字符');
|
||||
return false;
|
||||
}
|
||||
if(!that.isPhone(that.form.phone)){
|
||||
$eb.message('error','手机号格式错误');
|
||||
return false;
|
||||
}
|
||||
that.isSend = false;
|
||||
$eb.axios.get(that.codeUrl + '?phone=' + that.form.phone).then(function(res){
|
||||
if(res.status == 200){
|
||||
$eb.axios.post(that.codeUrl,{phone:that.form.phone}).then(function(res){
|
||||
if(res.data.code == 200){
|
||||
var cd = 60;
|
||||
var timeClone = setInterval(function () {
|
||||
cd--;
|
||||
@ -180,9 +176,9 @@
|
||||
that.codeMsg = '剩余'+cd+'s';
|
||||
}
|
||||
},1000);
|
||||
$eb.message('success','验证码发送成功');
|
||||
$eb.message('success',res.data.msg || '发送成功');
|
||||
}else{
|
||||
$eb.message('error',res.msg);
|
||||
$eb.message('error',res.data.msg || '发送失败');
|
||||
}
|
||||
return false;
|
||||
}).catch(function(err){
|
||||
|
||||
@ -124,6 +124,14 @@
|
||||
<a href="javascript:void(0);" onclick="$eb.createModalFrame(this.innerText,'{:Url('ump.store_seckill/seckill')}?id={{d.id}}')"">
|
||||
<i class="fa fa-gavel"></i> 开启秒杀</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript:void(0);" onclick="$eb.createModalFrame(this.innerText,'{:Url('ump.store_bargain/bargain')}?id={{d.id}}')">
|
||||
<i class="fa fa-sort-amount-asc"></i> 开启砍价</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript:void(0);" onclick="$eb.createModalFrame(this.innerText,'{:Url('ump.store_combination/combination')}?id={{d.id}}')">
|
||||
<i class="fa fa-hand-lizard-o"></i> 开启拼团</a>
|
||||
</li>
|
||||
{{# if(d.is_del){ }}
|
||||
<li>
|
||||
<a href="javascript:void(0);" lay-event='delstor'>
|
||||
@ -264,13 +272,13 @@
|
||||
if(odj.elem.checked==true){
|
||||
layList.baseGet(layList.Url({c:'store.store_product',a:'set_show',p:{is_show:1,id:value}}),function (res) {
|
||||
layList.msg(res.msg, function () {
|
||||
location.reload();
|
||||
layList.reload();
|
||||
});
|
||||
});
|
||||
}else{
|
||||
layList.baseGet(layList.Url({c:'store.store_product',a:'set_show',p:{is_show:0,id:value}}),function (res) {
|
||||
layList.msg(res.msg, function () {
|
||||
location.reload();
|
||||
layList.reload();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@ -50,7 +50,7 @@
|
||||
{volist name="fileAll['file']" id="vo"}
|
||||
<tr>
|
||||
<td class="text-left">
|
||||
<span onclick="$eb.createModalFrame('{$vo.filename}','{:Url('openfile')}?file={$dir}/{$vo.filename}',{w:1260,h:600})"> <i class="fa fa-file-text-o"></i> {$vo.filename}</span>
|
||||
<span onclick="$eb.createModalFrame('{$vo.filename}','{:Url('openfile')}?file={$vo.pathname}',{w:1260,h:600})"> <i class="fa fa-file-text-o"></i> {$vo.filename}</span>
|
||||
</td>
|
||||
<td class="text-left">
|
||||
<span> {$vo.size}</span>
|
||||
@ -63,7 +63,7 @@
|
||||
</td>
|
||||
|
||||
<td class="text-center">
|
||||
<button class="btn btn-info btn-xs" type="button" onclick="$eb.createModalFrame('{$vo.filename}','{:Url('openfile')}?file={$dir}/{$vo.filename}',{w:1260,h:660})"><i class="fa fa-paste"></i> 编辑</button>
|
||||
<button class="btn btn-info btn-xs" type="button" onclick="$eb.createModalFrame('{$vo.filename}','{:Url('openfile')}?file={$vo.pathname}',{w:1260,h:660})"><i class="fa fa-paste"></i> 编辑</button>
|
||||
<!-- <button class="btn btn-info btn-xs" type="button" onclick="$eb.createModalFrame('{$vo.filename}','{:Url('openfile')}?file={$vo.filename}&dir={$dir}',{w:1260,h:600})"><i class="fa fa-paste"></i> 重命名</button>-->
|
||||
<!-- <button class="btn btn-info btn-xs" type="button" onclick="$eb.createModalFrame('{$vo.filename}','{:Url('openfile')}?file={$vo.filename}&dir={$dir}',{w:1260,h:600})"><i class="fa fa-paste"></i> 删除</button>-->
|
||||
<!-- <button class="btn btn-info btn-xs" type="button" onclick="$eb.createModalFrame('{$vo.filename}','{:Url('openfile')}?file={$vo.filename}&dir={$dir}',{w:1260,h:600})"><i class="fa fa-paste"></i> 下载</button>-->
|
||||
|
||||
213
app/admin/view/system/system_store/index.php
Normal file
213
app/admin/view/system/system_store/index.php
Normal file
@ -0,0 +1,213 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
{include file="public/head"}
|
||||
|
||||
<link href="/system/frame/css/bootstrap.min.css?v=3.4.0" rel="stylesheet">
|
||||
<link href="/system/frame/css/style.min.css?v=3.0.0" rel="stylesheet">
|
||||
<title>{$title|default=''}</title>
|
||||
<style></style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrapper wrapper-content">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="ibox float-e-margins">
|
||||
<div class="ibox-title">
|
||||
<h5>门店设置</h5>
|
||||
</div>
|
||||
<div id="store-attr" class="mp-form" v-cloak="">
|
||||
<i-Form :label-width="80" style="width: 100%">
|
||||
<template>
|
||||
<Alert type="warning">除门店简介外其他选项都是必填项</Alert>
|
||||
<Form-Item>
|
||||
<Row>
|
||||
<i-Col span="13">
|
||||
<span>门店名称:</span>
|
||||
<i-Input placeholder="门店名称" v-model="form.name" style="width: 80%" type="text"></i-Input>
|
||||
</i-Col>
|
||||
</Row>
|
||||
</Form-Item>
|
||||
<Form-Item>
|
||||
<Row>
|
||||
<i-Col span="13">
|
||||
<span>门店简介:</span>
|
||||
<i-Input placeholder="门店简介" v-model="form.introduction" style="width: 80%" type="text"></i-Input>
|
||||
</i-Col>
|
||||
</Row>
|
||||
</Form-Item>
|
||||
<Form-Item>
|
||||
<Row>
|
||||
<i-Col span="13">
|
||||
<span>门店电话:</span>
|
||||
<i-Input placeholder="门店电话" v-model="form.phone" style="width: 80%" type="text"></i-Input>
|
||||
</i-Col>
|
||||
</Row>
|
||||
</Form-Item>
|
||||
<Form-Item>
|
||||
<Row>
|
||||
<i-Col span="13">
|
||||
<span>门店地址:</span>
|
||||
<Cascader :data="addresData" :render-format="format" v-model="form.address" @on-change="handleChange" style="width: 80%;display: inline-block;"></Cascader>
|
||||
</i-Col>
|
||||
</Row>
|
||||
</Form-Item>
|
||||
<Form-Item>
|
||||
<Row>
|
||||
<i-Col span="13">
|
||||
<span>详细地址:</span>
|
||||
<i-Input placeholder="详细地址" v-model="form.detailed_address" style="width: 80%" type="text"></i-Input>
|
||||
</i-Col>
|
||||
</Row>
|
||||
</Form-Item>
|
||||
<Form-Item>
|
||||
<Row>
|
||||
<i-Col span="13">
|
||||
<span>自提时间:</span>
|
||||
<Date-picker type="daterange" placeholder="选择日期"></Date-picker>
|
||||
</i-Col>
|
||||
</Row>
|
||||
</Form-Item>
|
||||
<Form-Item>
|
||||
<Row>
|
||||
<i-Col span="13">
|
||||
<span>门店logo:</span>
|
||||
<div class="demo-upload-list" v-if="form.image">
|
||||
<template>
|
||||
<img :src="form.image">
|
||||
<div class="demo-upload-list-cover">
|
||||
<Icon type="ios-eye-outline" @click="visible = true "></Icon>
|
||||
<Icon type="ios-trash-outline" @click="form.image=''"></Icon>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
<div class="ivu-upload" style="display: inline-block; width: 58px;" @click="openWindows('选择图片','{:Url('widget.images/index',['fodder'=>'image'])}')" v-if="!form.image">
|
||||
<div class="ivu-upload ivu-upload-drag">
|
||||
<div style="width: 58px; height: 58px; line-height: 58px;">
|
||||
<i class="ivu-icon ivu-icon-camera" style="font-size: 20px;"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<Modal title="查看图片" :visible.sync="visible">
|
||||
<img :src="form.image" v-if="visible" style="width: 100%">
|
||||
</Modal>
|
||||
</i-Col>
|
||||
</Row>
|
||||
</Form-Item>
|
||||
<Form-Item>
|
||||
<Row>
|
||||
<i-Col span="13">
|
||||
<span style="float: left">经纬度:</span>
|
||||
<Tooltip content="请点击查找位置进行选择位置">
|
||||
<i-Input placeholder="经纬度" v-model="form.latlng" :readonly="true" style="width: 80%" >
|
||||
<span slot="append" @click="openWindows('查找位置','{:Url('select_address')}',{w:400})" style="cursor:pointer">查找位置</span>
|
||||
</i-Input>
|
||||
</Tooltip>
|
||||
</i-Col>
|
||||
</Row>
|
||||
</Form-Item>
|
||||
</template>
|
||||
<Form-Item>
|
||||
<Row>
|
||||
<i-Col span="8" offset="6">
|
||||
<i-Button type="primary" @click="submit">提交</i-Button>
|
||||
</i-Col>
|
||||
</Row>
|
||||
</Form-Item>
|
||||
</i-Form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="{__PLUG_PATH}city.js"></script>
|
||||
<script>
|
||||
var id={$id},storeData={$storeData};
|
||||
mpFrame.start(function(Vue) {
|
||||
new Vue({
|
||||
data() {
|
||||
return {
|
||||
id:0,
|
||||
addresData:city,
|
||||
form:{
|
||||
name:storeData.name || '',
|
||||
introduction:storeData.introduction || '',
|
||||
phone:storeData.phone || '',
|
||||
address:storeData.address || '',
|
||||
image:storeData.image || '',
|
||||
detailed_address:storeData.detailed_address || '',
|
||||
latlng:storeData.latlng || '',
|
||||
},
|
||||
visible:false,
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
createFrame:function(title,src,opt){
|
||||
opt === undefined && (opt = {});
|
||||
var h = parent.document.body.clientHeight - 100;
|
||||
return layer.open({
|
||||
type: 2,
|
||||
title:title,
|
||||
area: [(opt.w || 700)+'px', (opt.h || h)+'px'],
|
||||
fixed: false, //不固定
|
||||
maxmin: true,
|
||||
moveOut:false,//true 可以拖出窗外 false 只能在窗内拖
|
||||
anim:5,//出场动画 isOutAnim bool 关闭动画
|
||||
offset:'auto',//['100px','100px'],//'auto',//初始位置 ['100px','100px'] t[ 上 左]
|
||||
shade:0,//遮罩
|
||||
resize:true,//是否允许拉伸
|
||||
content: src,//内容
|
||||
move:'.layui-layer-title'
|
||||
});
|
||||
},
|
||||
handleChange:function(value,selectedData){
|
||||
var that = this;
|
||||
$.each(selectedData,function (key,item) {
|
||||
that.form.address += item.label+',';
|
||||
});
|
||||
that.form.address = that.form.address.substr(0,that.form.address.length-1);
|
||||
},
|
||||
format (labels, selectedData) {
|
||||
return labels;
|
||||
},
|
||||
openWindows:function(title,url,opt){
|
||||
return this.createFrame(title,url,opt);
|
||||
},
|
||||
changeIMG:function(name,url){
|
||||
this.form[name]=url;
|
||||
},
|
||||
isPhone:function(test){
|
||||
var reg = /^1[3456789]\d{9}$/;
|
||||
return reg.test(test);
|
||||
},
|
||||
submit:function () {
|
||||
var that = this;
|
||||
if(!that.form.name) return $eb.message('error','请填写门店行名称');
|
||||
if(!that.form.phone) return $eb.message('error','请输入手机号码');
|
||||
if(!that.isPhone(that.form.phone)) return $eb.message('error','请输入正确的手机号码');
|
||||
if(!that.form.address) return $eb.message('error','请选择门店地址');
|
||||
if(!that.form.detailed_address) return $eb.message('error','请填写门店详细地址');
|
||||
if(!that.form.image) return $eb.message('error','请选择门店logo');
|
||||
if(!that.form.latlng) return $eb.message('error','请选择门店经纬度!');
|
||||
var index = layer.load(1, {
|
||||
shade: [0.5,'#fff']
|
||||
});
|
||||
$eb.axios.post('{:Url("save")}'+(that.id ? '?id='+that.id : ''),that.form).then(function (res) {
|
||||
layer.close(index);
|
||||
layer.msg(res.msg);
|
||||
}).catch(function (err) {
|
||||
layer.close(index);
|
||||
})
|
||||
},
|
||||
selectAdderss:function (data) {
|
||||
//lat 纬度 lng 经度
|
||||
this.form.latlng=data.latlng.lat+','+data.latlng.lng;
|
||||
}
|
||||
},
|
||||
mounted:function () {
|
||||
window.changeIMG=this.changeIMG;
|
||||
window.selectAdderss=this.selectAdderss
|
||||
}
|
||||
}).$mount(document.getElementById('store-attr'))
|
||||
})
|
||||
</script>
|
||||
30
app/admin/view/system/system_store/select_address.php
Normal file
30
app/admin/view/system/system_store/select_address.php
Normal file
@ -0,0 +1,30 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
{include file="public/head"}
|
||||
<title>{$title|default=''}</title>
|
||||
<style>
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body id="body" style="position: absolute;height: 100%;width: 100%">
|
||||
<iframe id="mapPage" width="100%" height="100%" frameborder=0
|
||||
src="https://apis.map.qq.com/tools/locpicker?type=1&key={$key}&referer=myapp">
|
||||
</iframe>
|
||||
</body>
|
||||
<script>
|
||||
window.onload=function(){
|
||||
document.getElementById('body').style.height=document.body.clientHeight+'px';
|
||||
}
|
||||
mpFrame.start(function(layer) {
|
||||
window.addEventListener('message',function (evevt) {
|
||||
if(evevt.data){
|
||||
parent.selectAdderss(evevt.data);
|
||||
var index = parent.layer.getFrameIndex(window.name);
|
||||
parent.layer.close(index);
|
||||
}else{
|
||||
return layer.msg('请选择地图');
|
||||
}
|
||||
});
|
||||
})
|
||||
</script>
|
||||
@ -75,11 +75,11 @@
|
||||
{if condition="$vo['subscribe']"}
|
||||
关注
|
||||
{else/}
|
||||
取消
|
||||
未关注
|
||||
{/if}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
{$vo.add_time|date="Y-m-d H:i:s"}
|
||||
{$vo.time}
|
||||
</td>
|
||||
</tr>
|
||||
{/volist}
|
||||
|
||||
@ -124,7 +124,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-card-body clearfix image-box" style="padding: 10px;">
|
||||
<div class="layui-card-body clearfix image-box" style="padding: 10px;height: 360px;z-index:10;">
|
||||
<div class="layui-col-md2 layui-col-xs2 layui-col-sm2 image" v-for="(item,index) in imageList">
|
||||
<div class="layui-img-box" :class="item.isSelect ? 'on': '' ">
|
||||
<img :src="item.att_dir" v-if="small == 1" @click="changImage(item,index)">
|
||||
|
||||
@ -37,7 +37,11 @@ class ApiExceptionHandle extends Handle
|
||||
{
|
||||
// 添加自定义异常处理机制
|
||||
if ($e instanceof DbException) {
|
||||
return app('json')->fail('数据获取失败');
|
||||
return app('json')->fail('数据获取失败',[
|
||||
'file' => $e->getFile(),
|
||||
'message' => $e->getMessage(),
|
||||
'line' => $e->getLine(),
|
||||
]);
|
||||
}
|
||||
|
||||
// 其他错误交给系统处理
|
||||
|
||||
@ -17,15 +17,25 @@ use think\exception\ValidateException;
|
||||
use think\facade\Queue;
|
||||
use think\facade\Session;
|
||||
|
||||
/**微信小程序授权类
|
||||
* Class AuthController
|
||||
* @package app\api\controller
|
||||
*/
|
||||
|
||||
class AuthController
|
||||
{
|
||||
public function login(Request $request)
|
||||
{
|
||||
|
||||
$user = User::where('account', $request->param('account'))->find();
|
||||
if (!$user || $user->pwd !== md5($request->param('password')))
|
||||
if($user) {
|
||||
if ($user->pwd !== md5($request->param('password')))
|
||||
return app('json')->fail('账号或密码错误');
|
||||
if ($user->pwd === md5(123456))
|
||||
return app('json')->fail('请修改您的初始密码,再尝试登陆!');
|
||||
}else{
|
||||
return app('json')->fail('账号或密码错误');
|
||||
|
||||
}
|
||||
if (!$user['status'])
|
||||
return app('json')->fail('已被禁止,请联系管理员');
|
||||
|
||||
@ -80,7 +90,7 @@ class AuthController
|
||||
$res = SMSService::send($phone,SMSService::VERIFICATION_CODE,$data);
|
||||
if($res['status'] == 400) return app('json')->fail('短信平台验证码发送失败'.$res['msg']);
|
||||
CacheService::set('code_'.$phone, $code, $time);
|
||||
return app('json')->success($res['msg']);
|
||||
return app('json')->success($res['msg'] ?? '发送失败');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -266,6 +276,8 @@ class AuthController
|
||||
$userPhone = $userInfo->phone;
|
||||
if(!$userInfo) return app('json')->fail('用户不存在');
|
||||
if($userInfo->phone) return app('json')->fail('您的账号已经绑定过手机号码!');
|
||||
if(User::where('phone',$phone)->where('user_type','<>','h5')->count())
|
||||
return app('json')->success('此手机已经绑定,无法多次绑定!');
|
||||
if(User::where('account',$phone)->where('phone',$phone)->where('user_type','h5')->find()){
|
||||
if(!$step) return app('json')->success('H5已有账号是否绑定此账号上',['is_bind'=>1]);
|
||||
$userInfo->phone = $phone;
|
||||
|
||||
@ -36,6 +36,7 @@ class PublicController
|
||||
$menus = GroupDataService::getData('routine_home_menus') ?: [];//TODO 首页按钮
|
||||
$roll = GroupDataService::getData('routine_home_roll_news') ?: [];//TODO 首页滚动新闻
|
||||
$activity = GroupDataService::getData('routine_home_activity', 3) ?: [];//TODO 首页活动区域图片
|
||||
$site_name = SystemConfigService::get('site_name');
|
||||
$routine_index_page = GroupDataService::getData('routine_index_page');
|
||||
$info['fastInfo'] = $routine_index_page[0]['fast_info'] ?? '';//SystemConfigService::get('fast_info');//TODO 快速选择简介
|
||||
$info['bastInfo'] = $routine_index_page[0]['bast_info'] ?? '';//SystemConfigService::get('bast_info');//TODO 精品推荐简介
|
||||
@ -49,14 +50,13 @@ class PublicController
|
||||
$firstNumber = $routine_index_page[0]['first_number'] ?? 6;//SystemConfigService::get('first_number');//TODO 首发新品个数
|
||||
$info['fastList'] = StoreCategory::byIndexList((int)$fastNumber);//TODO 快速选择分类个数
|
||||
$info['bastList'] = StoreProduct::getBestProduct('id,image,store_name,cate_id,price,ot_price,IFNULL(sales,0) + IFNULL(ficti,0) as sales,unit_name', (int)$bastNumber, $request->uid());//TODO 精品推荐个数
|
||||
$info['firstList'] = StoreProduct::getNewProduct('id,image,store_name,cate_id,price,unit_name', (int)$firstNumber);//TODO 首发新品个数
|
||||
$info['firstList'] = StoreProduct::getNewProduct('id,image,store_name,cate_id,price,unit_name,IFNULL(sales,0) + IFNULL(ficti,0) as sales', (int)$firstNumber,$request->uid());//TODO 首发新品个数
|
||||
$info['bastBanner'] = GroupDataService::getData('routine_home_bast_banner') ?? [];//TODO 首页精品推荐图片
|
||||
$benefit = StoreProduct::getBenefitProduct('id,image,store_name,cate_id,price,ot_price,stock,unit_name', 3);//TODO 首页促销单品
|
||||
$lovely = GroupDataService::getData('routine_home_new_banner') ?: [];//TODO 首发新品顶部图
|
||||
$likeInfo = StoreProduct::getHotProduct('id,image,store_name,cate_id,price,unit_name', 3);//TODO 热门榜单 猜你喜欢
|
||||
$couponList = StoreCouponIssue::getIssueCouponList($request->uid(), 3);
|
||||
|
||||
return app('json')->successful(compact('banner', 'menus', 'roll', 'info', 'activity', 'lovely', 'benefit', 'likeInfo', 'logoUrl', 'couponList'));
|
||||
return app('json')->successful(compact('banner', 'menus', 'roll', 'info', 'activity', 'lovely', 'benefit', 'likeInfo', 'logoUrl', 'couponList','site_name'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -132,11 +132,15 @@ class PublicController
|
||||
$res = UploadService::image($data['filename'],'store/comment');
|
||||
if(!is_array($res)) return app('json')->fail($res);
|
||||
SystemAttachment::attachmentAdd($res['name'], $res['size'], $res['type'], $res['dir'], $res['thumb_path'],1, $res['image_type'], $res['time'], 2);
|
||||
if(Cache::has('start_uploads_'.$request->uid())) $start_uploads=(int)Cache::get('start_uploads_'.$request->uid());
|
||||
else $start_uploads = 0;
|
||||
if(Cache::has('start_uploads_'.$request->uid()))
|
||||
$start_uploads=(int)Cache::get('start_uploads_'.$request->uid());
|
||||
else
|
||||
$start_uploads = 0;
|
||||
$start_uploads++;
|
||||
Cache::set('start_uploads_'.$request->uid(),$start_uploads,86400);
|
||||
return app('json')->successful('图片上传成功!', ['name' => $res['name'], 'url' => $request->domain() . UploadService::pathToUrl($res['dir'])]);
|
||||
$res['dir'] = UploadService::pathToUrl($res['dir']);
|
||||
if(strpos($res['dir'],'http') === false) $res['dir'] = $request->domain().$res['dir'];
|
||||
return app('json')->successful('图片上传成功!', ['name' => $res['name'], 'url' => $res['dir']]);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -178,8 +182,28 @@ class PublicController
|
||||
* @return json
|
||||
* */
|
||||
public function user_share(Request $request){
|
||||
return app('json')->successful(UserBill::setUserShare($request->uid));
|
||||
return app('json')->successful(UserBill::setUserShare($request->uid()));
|
||||
}
|
||||
|
||||
/*
|
||||
* 获取图片base64
|
||||
*
|
||||
* */
|
||||
public function get_image_base64(Request $request){
|
||||
list($imageUrl,$codeUrl) = UtilService::postMore([
|
||||
['image',''],
|
||||
['code',''],
|
||||
],$request,true);
|
||||
try{
|
||||
$code = UtilService::setImageBase64($codeUrl);
|
||||
$image = UtilService::setImageBase64($imageUrl);
|
||||
return app('json')->successful(compact('code','image'));
|
||||
}catch (\Exception $e){
|
||||
return app('json')->fail($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -141,7 +141,7 @@ class StoreBargainController
|
||||
$openid = WechatUser::uidToOpenid($bargainUserUid, 'openid');
|
||||
$routineOpenid = WechatUser::uidToOpenid($bargainUserUid, 'routine_openid');
|
||||
if($openid){//公众号
|
||||
$urlWeChat = Route::buildUrl('activity/dargain_detail/'.$bargainId.'/'.$bargainUserUid,[],true,true);
|
||||
$urlWeChat = Route::buildUrl('activity/dargain_detail/'.$bargainId.'/'.$bargainUserUid)->suffix('')->domain(true)->build();
|
||||
WechatTemplateService::sendTemplate($openid,WechatTemplateService::BARGAIN_SUCCESS,[
|
||||
'first'=> '好腻害!你的朋友们已经帮你砍到底价了!',
|
||||
'keyword1'=> $bargainInfo['title'],
|
||||
|
||||
@ -62,8 +62,8 @@ class StoreCombinationController
|
||||
if($imageInfo['image_type'] == 1)
|
||||
$url = $siteUrl.$url;
|
||||
$combinationOne['image'] = UtilService::setSiteUrl($combinationOne['image'], $siteUrl);
|
||||
$combinationOne['image_base'] = UtilService::setImageBase64(UtilService::setSiteUrl($combinationOne['image'], $siteUrl));
|
||||
$combinationOne['code_base'] = UtilService::setImageBase64($url);
|
||||
$combinationOne['image_base'] = UtilService::setSiteUrl($combinationOne['image'], $siteUrl);
|
||||
$combinationOne['code_base'] = $url;
|
||||
$combinationOne['sale_stock'] = 0;
|
||||
if($combinationOne['stock'] > 0) $combinationOne['sale_stock'] = 1;
|
||||
if(!strlen(trim($combinationOne['unit_name']))) $combinationOne['unit_name'] = '个';
|
||||
|
||||
@ -103,7 +103,7 @@ class StoreSeckillController
|
||||
* @param $id
|
||||
* @return mixed
|
||||
*/
|
||||
public function detail(Request $request, $id){
|
||||
public function detail(Request $request, $id,$time = 0){
|
||||
if(!$id || !($storeInfo = StoreSeckill::getValidProduct($id))) return app('json')->fail('商品不存在或已下架!');
|
||||
$storeInfo = $storeInfo->hidden(['cost','add_time','is_del'])->toArray();
|
||||
|
||||
@ -112,17 +112,16 @@ class StoreSeckillController
|
||||
$imageInfo = SystemAttachment::getInfo($name,'name');
|
||||
$siteUrl = SystemConfigService::get('site_url');
|
||||
if(!$imageInfo){
|
||||
$codeUrl = UtilService::setHttpType($siteUrl.'/activity/seckill_detail/'.$id, 1);//二维码链接
|
||||
$codeUrl = UtilService::setHttpType($siteUrl.'/activity/seckill_detail/'.$id.'/'.$time, 1);//二维码链接
|
||||
$imageInfo = UtilService::getQRCodePath($codeUrl, $name);
|
||||
if(!$imageInfo) return app('json')->fail('二维码生成失败');
|
||||
SystemAttachment::attachmentAdd($imageInfo['name'],$imageInfo['size'],$imageInfo['type'],$imageInfo['dir'],$imageInfo['thumb_path'],1,$imageInfo['image_type'],$imageInfo['time'],2);
|
||||
$url = $imageInfo['dir'];
|
||||
}else $url = $imageInfo['att_dir'];
|
||||
if($imageInfo['image_type'] == 1)
|
||||
$url = $siteUrl.$url;
|
||||
if($imageInfo['image_type'] == 1) $url = $siteUrl.$url;
|
||||
$storeInfo['image'] = UtilService::setSiteUrl($storeInfo['image'], $siteUrl);
|
||||
$storeInfo['image_base'] = UtilService::setImageBase64(UtilService::setSiteUrl($storeInfo['image'], $siteUrl));
|
||||
$storeInfo['code_base'] = UtilService::setImageBase64($url);
|
||||
$storeInfo['image_base'] = UtilService::setSiteUrl($storeInfo['image'], $siteUrl);
|
||||
$storeInfo['code_base'] = $url;
|
||||
$uid = $request->uid();
|
||||
$storeInfo['userLike'] = StoreProductRelation::isProductRelation($id, $uid, 'like', 'product_seckill');
|
||||
$storeInfo['like_num'] = StoreProductRelation::productRelationNum($id,'like','product_seckill');
|
||||
|
||||
@ -164,6 +164,8 @@ class StoreOrderController
|
||||
$orderId = $order['order_id'];
|
||||
$info = compact('orderId', 'key');
|
||||
if ($orderId) {
|
||||
event('OrderCreated', [$order]);
|
||||
|
||||
switch ($payType) {
|
||||
case "weixin":
|
||||
$orderInfo = StoreOrder::where('order_id', $orderId)->find();
|
||||
@ -250,6 +252,7 @@ class StoreOrderController
|
||||
if(!$v) return app('json')->fail('再来一单失败,请重新下单!');
|
||||
$cateId[] = $v['id'];
|
||||
}
|
||||
event('OrderCreateAgain', implode(',',$cateId));
|
||||
return app('json')->successful('ok',['cateId'=>implode(',',$cateId)]);
|
||||
}
|
||||
|
||||
@ -488,6 +491,7 @@ class StoreOrderController
|
||||
return app('json')->fail($e->getMessage());
|
||||
}
|
||||
StoreProductReply::commitTrans();
|
||||
event('UserCommented', $res);
|
||||
return app('json')->successful();
|
||||
}
|
||||
|
||||
|
||||
@ -22,8 +22,8 @@ class ArticleController
|
||||
public function lst(Request $request, $cid)
|
||||
{
|
||||
list($page, $limit) = UtilService::getMore([
|
||||
['page',0],
|
||||
['limit',0],
|
||||
['page',1],
|
||||
['limit',10],
|
||||
],$request, true);
|
||||
$list = Article::cidByArticleList($cid,$page,$limit,"id,title,image_input,visit,from_unixtime(add_time,'%Y-%m-%d %H:%i') as add_time,synopsis,url") ?? [];
|
||||
if(is_object($list)) $list = $list->toArray();
|
||||
|
||||
@ -9,7 +9,7 @@ class CategoryController
|
||||
{
|
||||
public function category(Request $request)
|
||||
{
|
||||
$cateogry = StoreCategory::with('children')->where('pid',0)->select();
|
||||
$cateogry = StoreCategory::with('children')->where('is_show',1)->order('sort desc,id desc')->where('pid',0)->select();
|
||||
return app('json')->success($cateogry->hidden(['add_time','is_show','sort','children.sort','children.add_time','children.pid','children.is_show'])->toArray());
|
||||
}
|
||||
}
|
||||
@ -81,10 +81,10 @@ class StoreProductController
|
||||
$res = \app\models\routine\RoutineCode::getPageCode('pages/goods_details/index',$data,280);
|
||||
if(!$res) return app('json')->fail('二维码生成失败');
|
||||
$imageInfo = \crmeb\services\UploadService::imageStream($name,$res,'routine/product');
|
||||
if(!is_array($imageInfo)) return app('json')->fail($imageInfo);
|
||||
if(is_string($imageInfo)) return app('json')->fail($imageInfo);
|
||||
if($imageInfo['image_type'] == 1) $remoteImage = UtilService::remoteImage($siteUrl.$imageInfo['dir']);
|
||||
else $remoteImage = UtilService::remoteImage($imageInfo['dir']);
|
||||
if(!$remoteImage['status']) return app('json')->fail('小程序二维码未能生成',$remoteImage['msg']);
|
||||
if(!$remoteImage['status']) return app('json')->fail('小程序二维码未能生成');
|
||||
SystemAttachment::attachmentAdd($imageInfo['name'],$imageInfo['size'],$imageInfo['type'],$imageInfo['dir'],$imageInfo['thumb_path'],1,$imageInfo['image_type'],$imageInfo['time'],2);
|
||||
$url = $imageInfo['dir'];
|
||||
}else $url = $imageInfo['att_dir'];
|
||||
@ -108,11 +108,10 @@ class StoreProductController
|
||||
SystemAttachment::attachmentAdd($imageInfo['name'],$imageInfo['size'],$imageInfo['type'],$imageInfo['dir'],$imageInfo['thumb_path'],1,$imageInfo['image_type'],$imageInfo['time'],2);
|
||||
$url = $imageInfo['dir'];
|
||||
}else $url = $imageInfo['att_dir'];
|
||||
if($imageInfo['image_type'] == 1)
|
||||
$url = $siteUrl.$url;
|
||||
if($imageInfo['image_type'] == 1) $url = $siteUrl.$url;
|
||||
$storeInfo['image'] = UtilService::setSiteUrl($storeInfo['image'], $siteUrl);
|
||||
$storeInfo['image_base'] = UtilService::setImageBase64(UtilService::setSiteUrl($storeInfo['image'], $siteUrl));
|
||||
$storeInfo['code_base'] = UtilService::setImageBase64($url);
|
||||
$storeInfo['image_base'] = UtilService::setSiteUrl($storeInfo['image'], $siteUrl);
|
||||
$storeInfo['code_base'] = $url;
|
||||
$uid = $request->uid();
|
||||
$data['uid'] = $uid;
|
||||
//替换windows服务器下正反斜杠问题导致图片无法显示
|
||||
|
||||
@ -82,13 +82,24 @@ class AuthController
|
||||
}
|
||||
|
||||
/*
|
||||
* 获取小程序授权logo
|
||||
* 获取授权logo
|
||||
* */
|
||||
public function get_logo()
|
||||
public function get_logo(Request $request)
|
||||
{
|
||||
$routine_logo=SystemConfigService::get('routine_logo');
|
||||
if(strstr($routine_logo,'http')===false) $routine_logo = SystemConfigService::get('site_url').$routine_logo;
|
||||
return app('json')->successful(['logo_url'=>str_replace('\\','/',$routine_logo)]);
|
||||
$logoType = $request->get('type',1);
|
||||
switch ((int)$logoType){
|
||||
case 1:
|
||||
$logo=SystemConfigService::get('routine_logo');
|
||||
break;
|
||||
case 2:
|
||||
$logo=SystemConfigService::get('wechat_avatar');
|
||||
break;
|
||||
default:
|
||||
$logo = '';
|
||||
break;
|
||||
}
|
||||
if(strstr($logo,'http')===false && $logo) $logo = SystemConfigService::get('site_url').$logo;
|
||||
return app('json')->successful(['logo_url'=>str_replace('\\','/',$logo)]);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@ -110,10 +110,9 @@ if (!function_exists('make_path')) {
|
||||
break;
|
||||
}
|
||||
try{
|
||||
if (is_dir(app()->getAppPath().$path) == true || mkdir(app()->getAppPath().$path, 0777, true) == true) {
|
||||
if (is_dir(app()->getRootPath().'public'.DS.'uploads'.$path) == true || mkdir(app()->getRootPath().'public'.DS.'uploads'.$path, 0777, true) == true) {
|
||||
return trim(str_replace(DS, '/',$path),'.');
|
||||
}else return '';
|
||||
|
||||
}catch (\Exception $e){
|
||||
return '无法创建文件夹,请检查您的上传目录权限:' . app()->getRootPath() . 'public' . DS . 'uploads' . DS. 'attach' . DS;
|
||||
}
|
||||
|
||||
@ -47,6 +47,14 @@ return [
|
||||
'WechatOauthAfter' => [], // UserSubscribe 微信授权成功后 wap模块 WapBasic控制器
|
||||
'InitLogin' => [], // UserSubscribe 微信授权成功后 ebapi模块 Basic控制器
|
||||
'UserLevelAfter' => [], // UserSubscribe 检查是否能成为会员 models模块 user.UserSign Model store.StoreOrder Model user.UserBill Model
|
||||
'OrderCreated' => [], //用户订单创建成功
|
||||
'OrderPaySuccess' => [], //用户订单支付成功
|
||||
'OrderCreateAgain' => [], //用户再次下单
|
||||
'UserOrderRemoved' => [], //用户删除订单
|
||||
'UserOrderTake' => [], //用户确认收货
|
||||
'UserCommented' => [], //用户评价商品
|
||||
'RechargeSuccess' => [], //用户充值成功后
|
||||
'ImportNowMoney' => [], //用户佣金转成余额成功后
|
||||
],
|
||||
|
||||
'subscribe' => [
|
||||
|
||||
@ -601,7 +601,7 @@ class StoreOrder extends BaseModel
|
||||
'keyword1'=>$orderId,
|
||||
'keyword2'=>$order['pay_price'],
|
||||
'remark'=>'点击查看订单详情'
|
||||
],Route::buildUrl('order/detail/'.$orderId,[],true,true));
|
||||
],Route::buildUrl('order/detail/'.$orderId)->suffix('')->domain(true)->build());
|
||||
CustomerService::sendOrderPaySuccessCustomerService($order, 1);
|
||||
WechatTemplateService::sendAdminNoticeTemplate([
|
||||
'first'=>"亲,您有一个新订单 \n订单号:{$order['order_id']}",
|
||||
@ -618,6 +618,7 @@ class StoreOrder extends BaseModel
|
||||
}catch (\Exception $e){}
|
||||
$user = User::where('uid', $order['uid'])->find()->toArray();
|
||||
event('UserLevelAfter', [$user]);
|
||||
event('OrderPaySuccess', [$order]);
|
||||
$res = $res1 && $resPink;
|
||||
return false !== $res;
|
||||
}
|
||||
@ -742,6 +743,7 @@ class StoreOrder extends BaseModel
|
||||
if ($order['_status']['_type'] == 0 || $order['_status']['_type'] == -2) {
|
||||
event('StoreOrderRegressionAllAfter', [$order]);
|
||||
}
|
||||
event('UserOrderRemoved', $uni);
|
||||
return true;
|
||||
} else
|
||||
return self::setErrorInfo('订单删除失败!');
|
||||
@ -769,6 +771,7 @@ class StoreOrder extends BaseModel
|
||||
return self::setErrorInfo($e->getMessage());
|
||||
}
|
||||
self::commitTrans();
|
||||
event('UserOrderTake', $uni);
|
||||
return true;
|
||||
} else {
|
||||
self::rollbackTrans();
|
||||
|
||||
@ -213,7 +213,7 @@ class StoreProduct extends BaseModel
|
||||
public static function setLevelPrice($list, $uid, $isSingle = false)
|
||||
{
|
||||
if (is_object($list)) $list = count($list) ? $list->toArray() : [];
|
||||
if (!SystemConfigService::get('vip_open') || !$uid) {
|
||||
if (!SystemConfigService::get('vip_open')) {
|
||||
if (is_array($list)) return $list;
|
||||
return $isSingle ? $list : 0;
|
||||
}
|
||||
|
||||
@ -104,7 +104,7 @@ class SystemUserLevel extends BaseModel
|
||||
if($isArray) $item['task_list'] = SystemUserTask::getTashList($item['id']);
|
||||
}
|
||||
foreach ($list as &$item){
|
||||
if($grade < $item['grade']) $item['is_clear']=true;
|
||||
if($grade <= $item['grade']) $item['is_clear']=true;
|
||||
else $item['is_clear']=false;
|
||||
}
|
||||
return $list;
|
||||
|
||||
@ -108,7 +108,7 @@ class User extends BaseModel
|
||||
//TODO 获取后台分销类型
|
||||
$storeBrokerageStatus = SystemConfigService::get('store_brokerage_statu');
|
||||
$storeBrokerageStatus = $storeBrokerageStatus ? $storeBrokerageStatus : 1;
|
||||
if(isset($wechatUser['code']) && $wechatUser['code']){
|
||||
if(isset($wechatUser['code']) && $wechatUser['code'] && $wechatUser['code'] != $uid){
|
||||
if($storeBrokerageStatus == 1){
|
||||
$spreadCount = self::where('uid',$wechatUser['code'])->count();
|
||||
if($spreadCount){
|
||||
@ -144,6 +144,7 @@ class User extends BaseModel
|
||||
if($userInfo->spread_uid) return true;
|
||||
//没有推广编号直接返回
|
||||
if(!$spread) return true;
|
||||
if($spread == $uid) return true;
|
||||
//TODO 获取后台分销类型
|
||||
$storeBrokerageStatus = SystemConfigService::get('store_brokerage_statu');
|
||||
$storeBrokerageStatus = $storeBrokerageStatus ? $storeBrokerageStatus : 1;
|
||||
@ -292,10 +293,10 @@ class User extends BaseModel
|
||||
$res1 = UserBill::income('获得推广佣金',$userInfo['spread_uid'],'now_money','brokerage',$brokeragePrice,$orderInfo['id'],$balance,$mark);
|
||||
//TODO 添加用户余额
|
||||
$res2 = self::bcInc($userInfo['spread_uid'],'brokerage_price',$brokeragePrice,'uid');
|
||||
$res = $res1 && $res2;
|
||||
self::checkTrans($res);
|
||||
//TODO 一级返佣成功 跳转二级返佣
|
||||
if($res) return self::backOrderBrokerageTwo($orderInfo);
|
||||
$res = $res1 && $res2 && self::backOrderBrokerageTwo($orderInfo);
|
||||
self::checkTrans($res);
|
||||
// if($res) return self::backOrderBrokerageTwo($orderInfo);
|
||||
return $res;
|
||||
}
|
||||
|
||||
|
||||
@ -75,7 +75,7 @@ class UserExtract extends BaseModel
|
||||
'status' => self::AUDIT_STATUS
|
||||
];
|
||||
if(isset($data['name']) && strlen(trim($data['name']))) $insertData['real_name'] = $data['name'];
|
||||
else return self::setErrorInfo('请输入姓名');
|
||||
else $insertData['real_name'] = $userInfo['nickname'];
|
||||
if(isset($data['cardnum'])) $insertData['bank_code'] = $data['cardnum'];
|
||||
else $insertData['bank_code'] = '';
|
||||
if(isset($data['bankname'])) $insertData['bank_address']=$data['bankname'];
|
||||
|
||||
@ -43,6 +43,7 @@ class UserRecharge extends BaseModel
|
||||
public static function addRecharge($uid,$price,$recharge_type = 'weixin',$paid = 0)
|
||||
{
|
||||
$order_id = self::getNewOrderId($uid);
|
||||
if(!$order_id) return self::setErrorInfo('订单生成失败!');
|
||||
$add_time = time();
|
||||
return self::create(compact('order_id','uid','price','recharge_type','paid','add_time'));
|
||||
}
|
||||
@ -95,6 +96,7 @@ class UserRecharge extends BaseModel
|
||||
$res3 = User::edit(['now_money'=>bcadd($user['now_money'],$order['price'],2)],$order['uid'],'uid');
|
||||
$res = $res1 && $res2 && $res3;
|
||||
self::checkTrans($res);
|
||||
event('RechargeSuccess', [$order]);
|
||||
return $res;
|
||||
}
|
||||
|
||||
@ -113,6 +115,9 @@ class UserRecharge extends BaseModel
|
||||
$res2 = UserBill::expend('用户佣金转入余额',$uid,'now_money','recharge',$price,0,$user['now_money'],'成功转入余额'.floatval($price).'元');
|
||||
$res = $res2 && $res1 && $res3;
|
||||
self::checkTrans($res);
|
||||
if($res){
|
||||
event('ImportNowMoney', [$uid, $price]);
|
||||
}
|
||||
return $res;
|
||||
}catch (\Exception $e){
|
||||
self::rollbackTrans();
|
||||
|
||||
@ -113,7 +113,7 @@ class WechatUser extends BaseModel
|
||||
}else{
|
||||
$routineInfo['add_time'] = time();//用户添加时间
|
||||
$routineInfo = self::create($routineInfo);
|
||||
$res = User::setRoutineUser($routineInfo);
|
||||
$res = User::setRoutineUser($routineInfo,$spid);
|
||||
$uid = $res->uid;
|
||||
}
|
||||
$data['page'] = $page;
|
||||
|
||||
@ -77,7 +77,7 @@ class HttpService
|
||||
return (intval($status["http_code"]) === 200) ? $content : false;
|
||||
}
|
||||
|
||||
public static function postRequest($url, $data = array(), $header = false, $timeout = 10)
|
||||
public static function postRequest($url, array $data = array(), $header = false, $timeout = 10)
|
||||
{
|
||||
return self::request($url, 'post', $data, $header, $timeout);
|
||||
}
|
||||
|
||||
@ -18,12 +18,12 @@ class SMSService
|
||||
public static $status;
|
||||
|
||||
// 短信请求地址
|
||||
private static $SMSUrl = 'http://sms.crmeb.net/api/';
|
||||
private static $SMSUrl = 'https://sms.crmeb.net/api/';
|
||||
|
||||
//短信支付回调地址
|
||||
private static $payNotify;
|
||||
|
||||
const VERIFICATION_CODE = 518047;
|
||||
const VERIFICATION_CODE = 518076;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
|
||||
@ -235,7 +235,7 @@ class UploadService
|
||||
$info['type'] = $headerArray['Content-Type'];
|
||||
$info["image_type"] = 1;
|
||||
$info['thumb_path'] = '/' . $info['dir'];
|
||||
$info['dir'] = '/' . $info['dir'];
|
||||
$info['dir'] = str_replace('\\','/','/' . $info['dir']);
|
||||
break;
|
||||
case 2 :
|
||||
$keys = Qiniu::uploadImageStream($key, $content);
|
||||
@ -269,10 +269,10 @@ class UploadService
|
||||
$info['image_type'] = 3;
|
||||
break;
|
||||
case 4 :
|
||||
$serverImageInfo = COS::uploadImageStream($key, $content);
|
||||
list($imageUrl,$serverImageInfo) = COS::uploadImageStream($key, $content);
|
||||
if (!is_array($serverImageInfo) && !is_object($serverImageInfo)) return $serverImageInfo;
|
||||
if (is_object($serverImageInfo)) $serverImageInfo = $serverImageInfo->toArray();
|
||||
$serverImageInfo['ObjectURL'] = UtilService::setHttpType($serverImageInfo['ObjectURL']);
|
||||
$serverImageInfo['ObjectURL'] = $imageUrl;
|
||||
$info['code'] = 200;
|
||||
$info['name'] = substr(strrchr($serverImageInfo['ObjectURL'], '/'), 1);
|
||||
$info['dir'] = $serverImageInfo['ObjectURL'];
|
||||
|
||||
@ -572,14 +572,13 @@ class UtilService
|
||||
$uploadType = SystemConfigService::get('upload_type');
|
||||
//TODO 没有选择默认使用本地上传
|
||||
if (!$uploadType) $uploadType = 1;
|
||||
$siteUrl = SystemConfigService::get('site_url');
|
||||
$siteUrl = SystemConfigService::get('site_url') ?: '.';
|
||||
$info = [];
|
||||
$outfile = Config::get('qrcode.cache_dir');
|
||||
|
||||
$code = new QRcode();
|
||||
$wapCodePath = $code->png($url, $outfile.'/'.$name)->getPath(); //获取二维码生成的地址
|
||||
if($uploadType == 1) $content = file_get_contents('.'.$wapCodePath);
|
||||
else $content = file_get_contents($wapCodePath);
|
||||
$content = file_get_contents('.'.$wapCodePath);
|
||||
switch ($uploadType) {
|
||||
case 1 :
|
||||
$info["code"] = 200;
|
||||
@ -624,10 +623,10 @@ class UtilService
|
||||
$info['image_type'] = 3;
|
||||
break;
|
||||
case 4 :
|
||||
$serverImageInfo = COS::uploadImageStream($name, $content);
|
||||
list($imageUrl,$serverImageInfo) = COS::uploadImageStream($name, $content);
|
||||
if (!is_array($serverImageInfo) && !is_object($serverImageInfo)) return $serverImageInfo;
|
||||
if (is_object($serverImageInfo)) $serverImageInfo = $serverImageInfo->toArray();
|
||||
$serverImageInfo['ObjectURL'] = UtilService::setHttpType($serverImageInfo['ObjectURL']);
|
||||
$serverImageInfo['ObjectURL'] = $imageUrl;
|
||||
$info['code'] = 200;
|
||||
$info['name'] = substr(strrchr($serverImageInfo['ObjectURL'], '/'), 1);
|
||||
$info['dir'] = $serverImageInfo['ObjectURL'];
|
||||
@ -649,22 +648,32 @@ class UtilService
|
||||
* @param string $avatar
|
||||
* @return bool|string
|
||||
*/
|
||||
public static function setImageBase64($avatar = ''){
|
||||
$header = array(
|
||||
'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0',
|
||||
'Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
|
||||
'Accept-Encoding: gzip, deflate',);
|
||||
$curl = curl_init();
|
||||
curl_setopt($curl, CURLOPT_URL, $avatar);
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
|
||||
curl_setopt($curl, CURLOPT_ENCODING, 'gzip');
|
||||
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
|
||||
$data = curl_exec($curl);
|
||||
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
||||
curl_close($curl);
|
||||
if ($code == 200) return "data:image/jpeg;base64," . base64_encode($data);
|
||||
else return false;
|
||||
public static function setImageBase64($avatar = '',$timeout=15){
|
||||
try{
|
||||
$url=parse_url($avatar);
|
||||
$url=$url['host'];
|
||||
$header = [
|
||||
'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0',
|
||||
'Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
|
||||
'Accept-Encoding: gzip, deflate',
|
||||
'Host:'.$url
|
||||
];
|
||||
$curl = curl_init();
|
||||
curl_setopt($curl, CURLOPT_URL, $avatar);
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
|
||||
curl_setopt($curl, CURLOPT_ENCODING, 'gzip');
|
||||
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
|
||||
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
|
||||
$data = curl_exec($curl);
|
||||
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
||||
curl_close($curl);
|
||||
if ($code == 200) return "data:image/jpeg;base64," . base64_encode($data);
|
||||
else return false;
|
||||
}catch (\Exception $e){
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -167,7 +167,7 @@ class WechatService
|
||||
break;
|
||||
}
|
||||
|
||||
return $response;
|
||||
return $response ?? false;
|
||||
});
|
||||
}
|
||||
|
||||
@ -436,7 +436,6 @@ class WechatService
|
||||
{
|
||||
self::paymentService()->handleNotify(function($notify, $successful){
|
||||
if($successful && isset($notify->out_trade_no)){
|
||||
WechatMessage::setOnceMessage($notify,$notify->openid,'payment_success',$notify->out_trade_no);
|
||||
if(isset($notify->attach) && $notify->attach){
|
||||
if(strtolower($notify->attach) == 'product'){//TODO 商品订单支付成功后
|
||||
try{
|
||||
@ -454,6 +453,7 @@ class WechatService
|
||||
}
|
||||
}
|
||||
}
|
||||
WechatMessage::setOnceMessage($notify,$notify->openid,'payment_success',$notify->out_trade_no);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
@ -4,7 +4,7 @@ namespace crmeb\services\storage;
|
||||
use crmeb\services\SystemConfigService;
|
||||
use Guzzle\Http\EntityBody;
|
||||
use Qcloud\Cos\Client;
|
||||
use think\Cache;
|
||||
use think\facade\Cache;
|
||||
|
||||
/**
|
||||
* TODO 腾讯云COS文件上传
|
||||
@ -76,7 +76,7 @@ class COS
|
||||
$request = app('request');
|
||||
$file = $request->file($filename);
|
||||
$filePath = $file->getRealPath();
|
||||
$ext = pathinfo($file->getInfo('name'), PATHINFO_EXTENSION);
|
||||
$ext = $file->getOriginalExtension();
|
||||
$key = substr(md5($file->getRealPath()) , 0, 5). date('YmdHis') . rand(0, 9999) . '.' . $ext;
|
||||
try {
|
||||
self::autoInfo();
|
||||
@ -86,7 +86,7 @@ class COS
|
||||
'Body' => fopen($filePath, 'rb')
|
||||
])];
|
||||
} catch (\Exception $e) {
|
||||
return $e->getMessage();
|
||||
return [false,$e->getMessage()];
|
||||
}
|
||||
}
|
||||
|
||||
@ -99,13 +99,13 @@ class COS
|
||||
public static function uploadImageStream($key, $content){
|
||||
try {
|
||||
self::autoInfo();
|
||||
return self::$auth->putObject([
|
||||
return [self::$uploadUrl.$key,self::$auth->putObject([
|
||||
'Bucket' => self::$storageName,
|
||||
'Key' => $key,
|
||||
'Body' => $content
|
||||
]);
|
||||
])];
|
||||
} catch (\Exception $e) {
|
||||
return $e->getMessage();
|
||||
return [false,$e->getMessage()];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -65,7 +65,7 @@ class OSS
|
||||
$request = app('request');
|
||||
$file = $request->file($filename);
|
||||
$filePath = $file->getRealPath();
|
||||
$ext = pathinfo($file->getInfo('name'), PATHINFO_EXTENSION);
|
||||
$ext = $file->getOriginalExtension();
|
||||
$key = substr(md5($file->getRealPath()) , 0, 5). date('YmdHis') . rand(0, 9999) . '.' . $ext;
|
||||
try{
|
||||
self::autoInfo();
|
||||
|
||||
@ -6,7 +6,7 @@ use Qiniu\Auth;
|
||||
use Qiniu\Storage\BucketManager;
|
||||
use Qiniu\Storage\UploadManager;
|
||||
use Qiniu\Config;
|
||||
use think\Cache;
|
||||
use think\facade\Cache;
|
||||
|
||||
|
||||
/**
|
||||
@ -78,7 +78,7 @@ class Qiniu
|
||||
$request = app('request');
|
||||
$file = $request->file($filename);
|
||||
$filePath = $file->getRealPath();
|
||||
$ext = pathinfo($file->getInfo('name'), PATHINFO_EXTENSION);
|
||||
$ext = $file->getOriginalExtension();
|
||||
$key = substr(md5($file->getRealPath()) , 0, 5). date('YmdHis') . rand(0, 9999) . '.' . $ext;
|
||||
$token = self::autoInfo()->uploadToken(self::$storageName);
|
||||
try{
|
||||
|
||||
@ -234,7 +234,7 @@ trait ModelTrait
|
||||
if(strstr($where[$data],$field)!==false){
|
||||
list($startTime, $endTime) = explode($field, $where[$data]);
|
||||
$model = $model->where($prefix, '>', strtotime($startTime));
|
||||
$model = $model->where($prefix, '<', strtotime($endTime));
|
||||
$model = $model->where($prefix, '<', bcadd(strtotime($endTime),86400,0));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
1
public/.gitignore
vendored
1
public/.gitignore
vendored
@ -1 +0,0 @@
|
||||
h5
|
||||
1
public/h5/css/app.1524b7ac.css
Normal file
1
public/h5/css/app.1524b7ac.css
Normal file
File diff suppressed because one or more lines are too long
1
public/h5/css/app.2d8408e9.css
Normal file
1
public/h5/css/app.2d8408e9.css
Normal file
File diff suppressed because one or more lines are too long
1
public/h5/css/chunk-009e81b0.c07bf4c6.css
Normal file
1
public/h5/css/chunk-009e81b0.c07bf4c6.css
Normal file
@ -0,0 +1 @@
|
||||
#iframe[data-v-50b800de]{display:none}.recharge[data-v-50b800de]{width:7.03rem;padding:.5rem .63rem .45rem;background-color:#fff;margin:.2rem auto 0 auto;border-radius:.1rem}.recharge .nav[data-v-50b800de]{height:.75rem;line-height:.75rem;padding:0 1rem}.recharge .nav .item[data-v-50b800de]{font-size:.3rem;color:#333}.recharge .nav .item.on[data-v-50b800de]{font-weight:700;border-bottom:.04rem solid #e83323}.recharge .info-wrapper[data-v-50b800de]{text-align:center}.recharge .info-wrapper .money[data-v-50b800de]{margin-top:.6rem;padding-bottom:.2rem;border-bottom:1px dashed #ddd}.recharge .info-wrapper .money span[data-v-50b800de]{font-size:.56rem;color:#333;font-weight:700}.recharge .info-wrapper .money input[data-v-50b800de]{display:inline-block;width:3rem;font-size:.84rem;text-align:center;color:#282828;font-weight:700;padding-right:.7rem}.recharge .info-wrapper .money input[data-v-50b800de]::-ms-input-placeholder{color:#ddd}.recharge .info-wrapper .money input[data-v-50b800de]::placeholder{color:#ddd}.recharge .info-wrapper .money input[data-v-50b800de]::-webkit-input-placeholder{color:#ddd}.recharge .info-wrapper .money input[data-v-50b800de]:-moz-placeholder,.recharge .info-wrapper .money input[data-v-50b800de]::-moz-placeholder{color:#ddd}.recharge .info-wrapper .money input[data-v-50b800de]:-ms-input-placeholder{color:#ddd}.recharge .info-wrapper .tips[data-v-50b800de]{font-size:.26rem;color:#888;margin:.25rem auto 0 auto;line-height:1.5;padding:0 .3rem}.recharge .info-wrapper .tips span[data-v-50b800de]{color:#ef4a49}.recharge .info-wrapper .pay-btn[data-v-50b800de]{display:block;width:5.5rem;height:.86rem;margin:.5rem auto 0 auto;line-height:.86rem;text-align:center;color:#fff;border-radius:.5rem;font-size:.3rem;font-weight:700}
|
||||
1
public/h5/css/chunk-01dde7fb.b7a50075.css
Normal file
1
public/h5/css/chunk-01dde7fb.b7a50075.css
Normal file
@ -0,0 +1 @@
|
||||
.payment[data-v-681d9c28]{position:fixed;bottom:0;left:0;width:100%;border-radius:.16rem .16rem 0 0;background-color:#fff;padding-bottom:.6rem;z-index:99;transition:all .3s cubic-bezier(.25,.5,.5,.9);-webkit-transition:all .3s cubic-bezier(.25,.5,.5,.9);-moz-transition:all .3s cubic-bezier(.25,.5,.5,.9);-o-transition:all .3s cubic-bezier(.25,.5,.5,.9);transform:translate3d(0,100%,0);-webkit-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);-moz-transform:translate3d(0,100%,0);-o-transform:translate3d(0,100%,0)}.payment.on[data-v-681d9c28]{transform:translateZ(0);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);-moz-transform:translateZ(0);-o-transform:translateZ(0)}.payment .title[data-v-681d9c28]{text-align:center;height:1.23rem;font-size:.32rem;color:#282828;font-weight:700;padding-right:.3rem;margin-left:.3rem;position:relative;border-bottom:.01rem solid #eee}.payment .title .iconfont[data-v-681d9c28]{position:absolute;right:.3rem;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:.43rem;color:#8a8a8a;font-weight:400}.payment .item[data-v-681d9c28]{border-bottom:.01rem solid #eee;height:1.3rem;margin-left:.3rem;padding-right:.3rem}.payment .item .left[data-v-681d9c28]{width:6.1rem}.payment .item .left .text[data-v-681d9c28]{width:5.4rem}.payment .item .left .text .name[data-v-681d9c28]{font-size:.32rem;color:#282828}.payment .item .left .text .info[data-v-681d9c28]{font-size:.24rem;color:#999}.payment .item .left .text .info .money[data-v-681d9c28]{color:#f90}.payment .item .left .iconfont[data-v-681d9c28]{font-size:.45rem;color:#09bb07}.payment .item .left .iconfont.icon-zhifubao[data-v-681d9c28]{color:#00aaea}.payment .item .left .iconfont.icon-yuezhifu[data-v-681d9c28]{color:#f90}.payment .item .left .iconfont.icon-yuezhifu1[data-v-681d9c28]{color:#eb6623}.payment .item .iconfont[data-v-681d9c28]{font-size:.3rem;color:#999}.noCart[data-v-529b3da3]{margin-top:.17rem;padding-top:.1rem}.noCart .pictrue[data-v-529b3da3]{width:4rem;height:3rem;margin:.7rem auto .5rem auto}.noCart .pictrue img[data-v-529b3da3]{width:100%;height:100%}
|
||||
1
public/h5/css/chunk-06c0b832.c907c64e.css
Normal file
1
public/h5/css/chunk-06c0b832.c907c64e.css
Normal file
@ -0,0 +1 @@
|
||||
.poster-first[data-v-5e7f846f]{-ms-scroll-chaining:none;overscroll-behavior:contain}.poster-pop[data-v-5e7f846f]{width:4.5rem;height:8rem;position:fixed;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:99;top:50%;margin-top:-4.6rem}.poster-pop .canvas[data-v-5e7f846f]{background-color:#fff;height:8rem}.poster-pop .poster-image[data-v-5e7f846f]{width:100%}.poster-pop .canvas .image[data-v-5e7f846f]{width:4.5rem;height:4.5rem;display:block}.poster-pop .canvas .text[data-v-5e7f846f]{text-align:center;color:#000;margin-top:.32rem}.poster-pop .canvas .text.black[data-v-5e7f846f]{height:.68rem}.poster-pop .canvas .text.rad[data-v-5e7f846f]{color:red}.poster-pop .canvas .code[data-v-5e7f846f]{height:1.4rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.poster-pop .canvas .code .code-img[data-v-5e7f846f]{width:40%;padding:.06rem}.poster-pop .canvas .code .code-img img[data-v-5e7f846f]{width:100%}.poster-pop .canvas .code .code-text[data-v-5e7f846f]{width:70%;font-size:.12rem;line-height:1.8rem}.poster-pop .close[data-v-5e7f846f]{width:.46rem;height:.75rem;position:fixed;right:0;top:-.73rem;display:block}.poster-pop .save-poster[data-v-5e7f846f]{background-color:#df2d0a;font-size:.22rem;color:#fff;text-align:center;height:.76rem;line-height:.76rem;width:100%;margin-top:-.04rem}.poster-pop .keep[data-v-5e7f846f]{color:#fff;text-align:center;font-size:.25rem;margin-top:.1rem}.mask[data-v-5e7f846f]{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.6);z-index:9}
|
||||
1
public/h5/css/chunk-07cc736a.8e7a58ef.css
Normal file
1
public/h5/css/chunk-07cc736a.8e7a58ef.css
Normal file
@ -0,0 +1 @@
|
||||
.CustomerList[data-v-753b7648]{margin-top:.13rem}.CustomerList .item[data-v-753b7648]{height:1.38rem;border-bottom:1px solid #eee;padding:0 .24rem;background-color:#fff}.CustomerList .item .pictrue[data-v-753b7648]{width:.9rem;height:.9rem;border-radius:50%;border:.03rem solid #fff;box-shadow:0 0 .1rem .05rem #f3f3f3;-webkit-box-shadow:0 0 .1rem .05rem #f3f3f3;-moz-box-shadow:0 0 .1rem .05rem #f3f3f3}.CustomerList .item .pictrue img[data-v-753b7648]{width:100%;height:100%;border-radius:50%}.CustomerList .item .text[data-v-753b7648]{width:5.82rem;font-size:.32rem;color:#000}
|
||||
1
public/h5/css/chunk-11905bf6.5478881f.css
Normal file
1
public/h5/css/chunk-11905bf6.5478881f.css
Normal file
File diff suppressed because one or more lines are too long
1
public/h5/css/chunk-16eeeb11.12862fbb.css
Normal file
1
public/h5/css/chunk-16eeeb11.12862fbb.css
Normal file
@ -0,0 +1 @@
|
||||
.no-express[data-v-33384c09]{margin:1.5rem 0}.no-express img[data-v-33384c09]{width:6rem;margin:0 auto;display:block}
|
||||
1
public/h5/css/chunk-18e0edde.41caac67.css
Normal file
1
public/h5/css/chunk-18e0edde.41caac67.css
Normal file
@ -0,0 +1 @@
|
||||
.priceChange .listChange textarea[data-v-55fd55d7]{border:1px solid #eee;width:100%;height:2rem;margin-top:.5rem;border-radius:.1rem;color:#333;padding:.2rem}
|
||||
1
public/h5/css/chunk-249cbda8.c95ea267.css
Normal file
1
public/h5/css/chunk-249cbda8.c95ea267.css
Normal file
@ -0,0 +1 @@
|
||||
.address-management.on[data-v-c7960950]{background-color:#fff;height:100vh}
|
||||
1
public/h5/css/chunk-2539197c.bf372789.css
Normal file
1
public/h5/css/chunk-2539197c.bf372789.css
Normal file
@ -0,0 +1 @@
|
||||
.poster-poster[data-v-ff36e5c0]{height:unset!important}
|
||||
1
public/h5/css/chunk-2841cf2d.fe00c0ac.css
Normal file
1
public/h5/css/chunk-2841cf2d.fe00c0ac.css
Normal file
@ -0,0 +1 @@
|
||||
.noscroll[data-v-d600d144]{height:100%;overflow:hidden}.product-con .nav[data-v-d600d144]{padding:0 .2rem}
|
||||
1
public/h5/css/chunk-29fcb41b.a5164c39.css
Normal file
1
public/h5/css/chunk-29fcb41b.a5164c39.css
Normal file
@ -0,0 +1 @@
|
||||
.timeItem[data-v-0ccdd8a5]{font-size:.22rem;color:#282828;width:100%;text-align:center;padding:.11rem 0;height:.96rem;background-color:#efc58f}.timeItem .time[data-v-0ccdd8a5]{font-size:.32rem;font-weight:700;height:.37rem;line-height:.37rem}.timeItem .state[data-v-0ccdd8a5]{height:.37rem;line-height:.37rem}.activity[data-v-0ccdd8a5]{color:#333}.flash-sale .list .item .grab[data-v-0ccdd8a5]{background-color:#999}
|
||||
1
public/h5/css/chunk-2ab95a0f.8dbb01de.css
Normal file
1
public/h5/css/chunk-2ab95a0f.8dbb01de.css
Normal file
@ -0,0 +1 @@
|
||||
.noscroll[data-v-7e92b391]{height:100%;overflow:hidden}.product-con .footer-group .bnt[data-v-7e92b391]{width:43%}.product-con .footer-group .bnt.bg-color-violet[data-v-7e92b391]{background-color:#fa8013}.product-con .wrapper[data-v-7e92b391]{padding-bottom:.26rem}
|
||||
1
public/h5/css/chunk-2dcf3890.2e545c12.css
Normal file
1
public/h5/css/chunk-2dcf3890.2e545c12.css
Normal file
@ -0,0 +1 @@
|
||||
.poster-first[data-v-f3067a28]{-ms-scroll-chaining:none;overscroll-behavior:contain}.mask-share[data-v-f3067a28]{position:fixed;top:0;left:0;right:0;bottom:0;z-index:999}.mask-share img[data-v-f3067a28]{width:100%}.mask{-webkit-filter:blur(2px);-moz-filter:blur(2px);-ms-filter:blur(2px);filter:blur(2px)}.footer .icon-shoucang1{color:#e93323}.product-con .product-intro .conter div{width:100%!important}.generate-posters{width:100%;height:1.7rem;background-color:#fff;position:fixed;left:0;bottom:0;z-index:99;transform:translate3d(0,100%,0);-webkit-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);-moz-transform:translate3d(0,100%,0);-o-transform:translate3d(0,100%,0);transition:all .3s cubic-bezier(.25,.5,.5,.9);-webkit-transition:all .3s cubic-bezier(.25,.5,.5,.9);-moz-transition:all .3s cubic-bezier(.25,.5,.5,.9);-o-transition:all .3s cubic-bezier(.25,.5,.5,.9)}.generate-posters.on{transform:translateZ(0);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);-moz-transform:translateZ(0);-o-transform:translateZ(0)}.generate-posters .item{-webkit-box-flex:50%;flex:50%;-webkit-flex:50%;-ms-flex:50%;text-align:center}.generate-posters .item .iconfont{font-size:.8rem;color:#5eae72}.generate-posters .item .iconfont.icon-haibao{color:#5391f1}.noscroll{height:100%;overflow:hidden}
|
||||
1
public/h5/css/chunk-2f9053ce.84f44007.css
Normal file
1
public/h5/css/chunk-2f9053ce.84f44007.css
Normal file
@ -0,0 +1 @@
|
||||
.Loads .iconfont[data-v-92f84a0a]{font-size:.25rem;margin:.02rem 0 0 .1rem}
|
||||
1
public/h5/css/chunk-32f6fcb1.a07a7f7a.css
Normal file
1
public/h5/css/chunk-32f6fcb1.a07a7f7a.css
Normal file
@ -0,0 +1 @@
|
||||
.timeItem[data-v-b28f268a]{font-size:.22rem;color:#282828;width:100%;text-align:center;padding:.11rem 0;height:.96rem;background-color:#efc58f}.timeItem .time[data-v-b28f268a]{font-size:.32rem;font-weight:700;height:.37rem;line-height:.37rem}.timeItem .state[data-v-b28f268a]{height:.37rem;line-height:.37rem}.activity[data-v-b28f268a]{color:#333}.flash-sale .list .item .grab[data-v-b28f268a]{background-color:#999}
|
||||
1
public/h5/css/chunk-352a53ed.2939b295.css
Normal file
1
public/h5/css/chunk-352a53ed.2939b295.css
Normal file
@ -0,0 +1 @@
|
||||
.Loads .iconfont[data-v-67d3757c]{font-size:.25rem;margin:.02rem 0 0 .1rem}
|
||||
1
public/h5/css/chunk-4b64bbbc.85ec1c7c.css
Normal file
1
public/h5/css/chunk-4b64bbbc.85ec1c7c.css
Normal file
File diff suppressed because one or more lines are too long
1
public/h5/css/chunk-4dcfe16c.e46e52b7.css
Normal file
1
public/h5/css/chunk-4dcfe16c.e46e52b7.css
Normal file
File diff suppressed because one or more lines are too long
1
public/h5/css/chunk-4ef0f66e.be93d63a.css
Normal file
1
public/h5/css/chunk-4ef0f66e.be93d63a.css
Normal file
@ -0,0 +1 @@
|
||||
.noCommodity[data-v-613cecde]{height:8rem;background-color:#fff}
|
||||
1
public/h5/css/chunk-56bd1d10.0c324136.css
Normal file
1
public/h5/css/chunk-56bd1d10.0c324136.css
Normal file
@ -0,0 +1 @@
|
||||
.noscroll[data-v-014e4961]{height:100%;overflow:hidden}.product-con .nav[data-v-014e4961]{padding:0 .2rem}
|
||||
1
public/h5/css/chunk-5775d47a.ab64dec8.css
Normal file
1
public/h5/css/chunk-5775d47a.ab64dec8.css
Normal file
@ -0,0 +1 @@
|
||||
.evaluate-con .score .textarea .list .pictrue.uploadBnt[data-v-50757a45]{border:1px solid #ddd}
|
||||
1
public/h5/css/chunk-5ae7049e.df9fde36.css
Normal file
1
public/h5/css/chunk-5ae7049e.df9fde36.css
Normal file
@ -0,0 +1 @@
|
||||
.payment[data-v-54b2b916]{position:fixed;bottom:0;left:0;width:100%;border-radius:.16rem .16rem 0 0;background-color:#fff;padding-bottom:.6rem;z-index:99;transition:all .3s cubic-bezier(.25,.5,.5,.9);-webkit-transition:all .3s cubic-bezier(.25,.5,.5,.9);-moz-transition:all .3s cubic-bezier(.25,.5,.5,.9);-o-transition:all .3s cubic-bezier(.25,.5,.5,.9);transform:translate3d(0,100%,0);-webkit-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);-moz-transform:translate3d(0,100%,0);-o-transform:translate3d(0,100%,0)}.payment.on[data-v-54b2b916]{transform:translateZ(0);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);-moz-transform:translateZ(0);-o-transform:translateZ(0)}.payment .title[data-v-54b2b916]{text-align:center;height:1.23rem;font-size:.32rem;color:#282828;font-weight:700;padding-right:.3rem;margin-left:.3rem;position:relative;border-bottom:.01rem solid #eee}.payment .title .iconfont[data-v-54b2b916]{position:absolute;right:.3rem;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:.43rem;color:#8a8a8a;font-weight:400}.payment .item[data-v-54b2b916]{border-bottom:.01rem solid #eee;height:1.3rem;margin-left:.3rem;padding-right:.3rem}.payment .item .left[data-v-54b2b916]{width:6.1rem}.payment .item .left .text[data-v-54b2b916]{width:5.4rem}.payment .item .left .text .name[data-v-54b2b916]{font-size:.32rem;color:#282828}.payment .item .left .text .info[data-v-54b2b916]{font-size:.24rem;color:#999}.payment .item .left .text .info .money[data-v-54b2b916]{color:#f90}.payment .item .left .iconfont[data-v-54b2b916]{font-size:.45rem;color:#09bb07}.payment .item .left .iconfont.icon-zhifubao[data-v-54b2b916]{color:#00aaea}.payment .item .left .iconfont.icon-yuezhifu[data-v-54b2b916]{color:#f90}.payment .item .left .iconfont.icon-yuezhifu1[data-v-54b2b916]{color:#eb6623}.payment .item .iconfont[data-v-54b2b916]{font-size:.3rem;color:#999}
|
||||
1
public/h5/css/chunk-5b7071ab.d715504c.css
Normal file
1
public/h5/css/chunk-5b7071ab.d715504c.css
Normal file
@ -0,0 +1 @@
|
||||
.coupon-list-window .iconfont[data-v-37095950]{font-size:.4rem}.couponNo[data-v-37095950]{font-size:.3rem;font-weight:700;color:#fff;width:6.9rem;height:.86rem;border-radius:.43rem;text-align:center;line-height:.86rem;margin:.6rem auto}
|
||||
1
public/h5/css/chunk-5bd6adbe.ed634cd9.css
Normal file
1
public/h5/css/chunk-5bd6adbe.ed634cd9.css
Normal file
@ -0,0 +1 @@
|
||||
.CustomerList[data-v-71d57291]{margin-top:.13rem}.CustomerList .item[data-v-71d57291]{height:1.38rem;border-bottom:1px solid #eee;padding:0 .24rem;background-color:#fff}.CustomerList .item .pictrue[data-v-71d57291]{width:.9rem;height:.9rem;border-radius:50%;border:.03rem solid #fff;box-shadow:0 0 .1rem .05rem #f3f3f3;-webkit-box-shadow:0 0 .1rem .05rem #f3f3f3;-moz-box-shadow:0 0 .1rem .05rem #f3f3f3}.CustomerList .item .pictrue img[data-v-71d57291]{width:100%;height:100%;border-radius:50%}.CustomerList .item .text[data-v-71d57291]{width:5.82rem;font-size:.32rem;color:#000}
|
||||
1
public/h5/css/chunk-64574983.4245ef30.css
Normal file
1
public/h5/css/chunk-64574983.4245ef30.css
Normal file
@ -0,0 +1 @@
|
||||
.no-express[data-v-41f1c6d0]{margin:1.5rem 0}.no-express img[data-v-41f1c6d0]{width:6rem;margin:0 auto;display:block}
|
||||
1
public/h5/css/chunk-6bb93f4e.185e35b9.css
Normal file
1
public/h5/css/chunk-6bb93f4e.185e35b9.css
Normal file
@ -0,0 +1 @@
|
||||
.noCommodity[data-v-6695926f]{height:8rem;background-color:#fff}
|
||||
1
public/h5/css/chunk-6d6b3257.1b6785a7.css
Normal file
1
public/h5/css/chunk-6d6b3257.1b6785a7.css
Normal file
@ -0,0 +1 @@
|
||||
.address-management.on[data-v-22fbe754]{background-color:#fff;height:100vh}
|
||||
1
public/h5/css/chunk-71149688.50772ae1.css
Normal file
1
public/h5/css/chunk-71149688.50772ae1.css
Normal file
@ -0,0 +1 @@
|
||||
.evaluate-con .score .textarea .list .pictrue.uploadBnt[data-v-1ce3acc7]{border:1px solid #ddd}
|
||||
1
public/h5/css/chunk-7e898b5c.41104bdc.css
Normal file
1
public/h5/css/chunk-7e898b5c.41104bdc.css
Normal file
@ -0,0 +1 @@
|
||||
.poster-first[data-v-70d15eb8]{-ms-scroll-chaining:none;overscroll-behavior:contain}.mask-share[data-v-70d15eb8]{position:fixed;top:0;left:0;right:0;bottom:0;z-index:999}.mask-share img[data-v-70d15eb8]{width:100%}.mask{-webkit-filter:blur(2px);-moz-filter:blur(2px);-ms-filter:blur(2px);filter:blur(2px)}.footer .icon-shoucang1{color:#e93323}.product-con .product-intro .conter div{width:100%!important}.generate-posters{width:100%;height:1.7rem;background-color:#fff;position:fixed;left:0;bottom:0;z-index:99;transform:translate3d(0,100%,0);-webkit-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);-moz-transform:translate3d(0,100%,0);-o-transform:translate3d(0,100%,0);transition:all .3s cubic-bezier(.25,.5,.5,.9);-webkit-transition:all .3s cubic-bezier(.25,.5,.5,.9);-moz-transition:all .3s cubic-bezier(.25,.5,.5,.9);-o-transition:all .3s cubic-bezier(.25,.5,.5,.9)}.generate-posters.on{transform:translateZ(0);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);-moz-transform:translateZ(0);-o-transform:translateZ(0)}.generate-posters .item{-webkit-box-flex:50%;flex:50%;-webkit-flex:50%;-ms-flex:50%;text-align:center}.generate-posters .item .iconfont{font-size:.8rem;color:#5eae72}.generate-posters .item .iconfont.icon-haibao{color:#5391f1}.noscroll{height:100%;overflow:hidden}
|
||||
1
public/h5/css/chunk-7ef3022a.3b32ffc2.css
Normal file
1
public/h5/css/chunk-7ef3022a.3b32ffc2.css
Normal file
@ -0,0 +1 @@
|
||||
.poster-first[data-v-42949b47]{-ms-scroll-chaining:none;overscroll-behavior:contain}.poster-pop[data-v-42949b47]{width:4.5rem;height:8rem;position:fixed;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:99;top:50%;margin-top:-4.6rem}.poster-pop .canvas[data-v-42949b47]{background-color:#fff;height:8rem}.poster-pop .poster-image[data-v-42949b47]{width:100%}.poster-pop .canvas .image[data-v-42949b47]{width:4.5rem;height:4.5rem;display:block}.poster-pop .canvas .text[data-v-42949b47]{text-align:center;color:#000;margin-top:.32rem}.poster-pop .canvas .text.black[data-v-42949b47]{height:.68rem}.poster-pop .canvas .text.rad[data-v-42949b47]{color:red}.poster-pop .canvas .code[data-v-42949b47]{height:1.4rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.poster-pop .canvas .code .code-img[data-v-42949b47]{width:40%;padding:.06rem}.poster-pop .canvas .code .code-img img[data-v-42949b47]{width:100%}.poster-pop .canvas .code .code-text[data-v-42949b47]{width:70%;font-size:.12rem;line-height:1.8rem}.poster-pop .close[data-v-42949b47]{width:.46rem;height:.75rem;position:fixed;right:0;top:-.73rem;display:block}.poster-pop .save-poster[data-v-42949b47]{background-color:#df2d0a;font-size:.22rem;color:#fff;text-align:center;height:.76rem;line-height:.76rem;width:100%;margin-top:-.04rem}.poster-pop .keep[data-v-42949b47]{color:#fff;text-align:center;font-size:.25rem;margin-top:.1rem}.mask[data-v-42949b47]{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.6);z-index:9}
|
||||
1
public/h5/css/chunk-88b53ede.d8280dab.css
Normal file
1
public/h5/css/chunk-88b53ede.d8280dab.css
Normal file
@ -0,0 +1 @@
|
||||
.coupon-list-window .iconfont[data-v-5a37b0da]{font-size:.4rem}.couponNo[data-v-5a37b0da]{font-size:.3rem;font-weight:700;color:#fff;width:6.9rem;height:.86rem;border-radius:.43rem;text-align:center;line-height:.86rem;margin:.6rem auto}
|
||||
1
public/h5/css/chunk-a9831602.d5a0a8c3.css
Normal file
1
public/h5/css/chunk-a9831602.d5a0a8c3.css
Normal file
@ -0,0 +1 @@
|
||||
.payment[data-v-681d9c28]{position:fixed;bottom:0;left:0;width:100%;border-radius:.16rem .16rem 0 0;background-color:#fff;padding-bottom:.6rem;z-index:99;transition:all .3s cubic-bezier(.25,.5,.5,.9);-webkit-transition:all .3s cubic-bezier(.25,.5,.5,.9);-moz-transition:all .3s cubic-bezier(.25,.5,.5,.9);-o-transition:all .3s cubic-bezier(.25,.5,.5,.9);transform:translate3d(0,100%,0);-webkit-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);-moz-transform:translate3d(0,100%,0);-o-transform:translate3d(0,100%,0)}.payment.on[data-v-681d9c28]{transform:translateZ(0);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);-moz-transform:translateZ(0);-o-transform:translateZ(0)}.payment .title[data-v-681d9c28]{text-align:center;height:1.23rem;font-size:.32rem;color:#282828;font-weight:700;padding-right:.3rem;margin-left:.3rem;position:relative;border-bottom:.01rem solid #eee}.payment .title .iconfont[data-v-681d9c28]{position:absolute;right:.3rem;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:.43rem;color:#8a8a8a;font-weight:400}.payment .item[data-v-681d9c28]{border-bottom:.01rem solid #eee;height:1.3rem;margin-left:.3rem;padding-right:.3rem}.payment .item .left[data-v-681d9c28]{width:6.1rem}.payment .item .left .text[data-v-681d9c28]{width:5.4rem}.payment .item .left .text .name[data-v-681d9c28]{font-size:.32rem;color:#282828}.payment .item .left .text .info[data-v-681d9c28]{font-size:.24rem;color:#999}.payment .item .left .text .info .money[data-v-681d9c28]{color:#f90}.payment .item .left .iconfont[data-v-681d9c28]{font-size:.45rem;color:#09bb07}.payment .item .left .iconfont.icon-zhifubao[data-v-681d9c28]{color:#00aaea}.payment .item .left .iconfont.icon-yuezhifu[data-v-681d9c28]{color:#f90}.payment .item .left .iconfont.icon-yuezhifu1[data-v-681d9c28]{color:#eb6623}.payment .item .iconfont[data-v-681d9c28]{font-size:.3rem;color:#999}
|
||||
1
public/h5/css/chunk-b5039bb4.3866549c.css
Normal file
1
public/h5/css/chunk-b5039bb4.3866549c.css
Normal file
@ -0,0 +1 @@
|
||||
.payment[data-v-54b2b916]{position:fixed;bottom:0;left:0;width:100%;border-radius:.16rem .16rem 0 0;background-color:#fff;padding-bottom:.6rem;z-index:99;transition:all .3s cubic-bezier(.25,.5,.5,.9);-webkit-transition:all .3s cubic-bezier(.25,.5,.5,.9);-moz-transition:all .3s cubic-bezier(.25,.5,.5,.9);-o-transition:all .3s cubic-bezier(.25,.5,.5,.9);transform:translate3d(0,100%,0);-webkit-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);-moz-transform:translate3d(0,100%,0);-o-transform:translate3d(0,100%,0)}.payment.on[data-v-54b2b916]{transform:translateZ(0);-webkit-transform:translateZ(0);-ms-transform:translateZ(0);-moz-transform:translateZ(0);-o-transform:translateZ(0)}.payment .title[data-v-54b2b916]{text-align:center;height:1.23rem;font-size:.32rem;color:#282828;font-weight:700;padding-right:.3rem;margin-left:.3rem;position:relative;border-bottom:.01rem solid #eee}.payment .title .iconfont[data-v-54b2b916]{position:absolute;right:.3rem;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:.43rem;color:#8a8a8a;font-weight:400}.payment .item[data-v-54b2b916]{border-bottom:.01rem solid #eee;height:1.3rem;margin-left:.3rem;padding-right:.3rem}.payment .item .left[data-v-54b2b916]{width:6.1rem}.payment .item .left .text[data-v-54b2b916]{width:5.4rem}.payment .item .left .text .name[data-v-54b2b916]{font-size:.32rem;color:#282828}.payment .item .left .text .info[data-v-54b2b916]{font-size:.24rem;color:#999}.payment .item .left .text .info .money[data-v-54b2b916]{color:#f90}.payment .item .left .iconfont[data-v-54b2b916]{font-size:.45rem;color:#09bb07}.payment .item .left .iconfont.icon-zhifubao[data-v-54b2b916]{color:#00aaea}.payment .item .left .iconfont.icon-yuezhifu[data-v-54b2b916]{color:#f90}.payment .item .left .iconfont.icon-yuezhifu1[data-v-54b2b916]{color:#eb6623}.payment .item .iconfont[data-v-54b2b916]{font-size:.3rem;color:#999}.noCart[data-v-6e06b184]{margin-top:.17rem;padding-top:.1rem}.noCart .pictrue[data-v-6e06b184]{width:4rem;height:3rem;margin:.7rem auto .5rem auto}.noCart .pictrue img[data-v-6e06b184]{width:100%;height:100%}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user