388 行
15 KiB
PHP
388 行
15 KiB
PHP
<?php
|
|
|
|
namespace addons\shopro\controller;
|
|
|
|
use addons\shopro\model\Config;
|
|
use app\common\model\MessageModel;
|
|
use app\common\model\UpgradeModel;
|
|
use think\Db;
|
|
use think\Config as FaConfig;
|
|
use fast\Random;
|
|
use think\exception\HttpResponseException;
|
|
use addons\shopro\library\commission\Agent as AgentLibrary;
|
|
use addons\shopro\library\commission\Commission as CommissionLibrary;
|
|
use addons\shopro\library\commission\Reward as RewardLibrary;
|
|
use addons\shopro\model\Order;
|
|
|
|
class Index extends Base
|
|
{
|
|
|
|
protected $noNeedLogin = ['*'];
|
|
protected $noNeedRight = ['*'];
|
|
|
|
public function index()
|
|
{
|
|
}
|
|
|
|
public function serviceTel()
|
|
{
|
|
// 客服电话
|
|
$serviceTel = \db('config')->where(['name' => 'service_tel'])->value('value');
|
|
|
|
$this->success('获取成功', [
|
|
'serviceTel' => $serviceTel
|
|
]);
|
|
}
|
|
|
|
public function moneyCategoryList()
|
|
{
|
|
$list = \db('shopro_category')
|
|
->where(['pid' => 19])
|
|
->field(['id', 'name'])
|
|
->order('weigh DESC')
|
|
->select();
|
|
|
|
$this->success('获取成功', [
|
|
'list' => $list
|
|
]);
|
|
}
|
|
|
|
public function readMessage()
|
|
{
|
|
$id = $this->request->get('id');
|
|
$messageModel = new MessageModel();
|
|
$res = $messageModel->update([
|
|
'id' => $id,
|
|
'status' => 2
|
|
]);
|
|
|
|
if (!empty($res)) {
|
|
$this->success('已读成功');
|
|
} else {
|
|
$this->error('已读失败');
|
|
}
|
|
}
|
|
|
|
public function messageList()
|
|
{
|
|
$messageModel = new MessageModel();
|
|
$page = $this->request->get('page/d', 1);
|
|
$status = $this->request->get('status/d', 0);
|
|
$result = $messageModel->getLists([
|
|
'search' => [
|
|
'user_id' => $this->auth->id,
|
|
'status' => $status
|
|
],
|
|
], 10, $page, [
|
|
'id',
|
|
'content',
|
|
'status',
|
|
'create_time'
|
|
]);
|
|
|
|
foreach ($result['list'] as &$v) {
|
|
$v['create_time'] = date('Y-m-d H:i', $v['create_time']);
|
|
}
|
|
|
|
// 未读消息
|
|
$noMessageNum = $messageModel->where(['user_id' => $this->auth->id, 'status' => 2])->count();
|
|
|
|
$this->success('获取成功', [
|
|
'total' => $result['total'],
|
|
'pageSize' => $result['pageSize'],
|
|
'totalSize' => $result['totalSize'],
|
|
'noMessageNum' => $noMessageNum,
|
|
'list' => $result['list'],
|
|
]);
|
|
}
|
|
|
|
// 初始化商城数据 服务器压力大可以把最后的data数据存入cache缓存中来调用,防止多次查sql
|
|
public function init()
|
|
{
|
|
$platform = $this->request->header('platform'); // 获取平台标识
|
|
if (!in_array($platform, ['H5', 'App', 'wxMiniProgram', 'wxOfficialAccount'])) {
|
|
$this->error('请使用正确客户端访问');
|
|
}
|
|
$data = []; // 设置信息
|
|
$configFields = ['shopro', 'share', 'chat', 'store', 'withdraw', $platform]; // 定义设置字段
|
|
$configModel = new \addons\shopro\model\Config;
|
|
$config = $configModel->where('name', 'in', $configFields)->column('value', 'name');
|
|
|
|
// 商城基本设置
|
|
$shoproConfig = json_decode($config['shopro'], true);
|
|
$shoproConfig['logo'] = cdnurl($shoproConfig['logo'], true);
|
|
$data['shop'] = $shoproConfig;
|
|
|
|
// 支付设置
|
|
$payment = $configModel->where('group', 'payment')->select();
|
|
$paymentConfig = [];
|
|
foreach ($payment as $key => $v) {
|
|
$val = json_decode($v->value, true);
|
|
if ($val && in_array($platform, $val['platform'])) {
|
|
$paymentConfig[] = $v->name;
|
|
}
|
|
}
|
|
$data['payment'] = $paymentConfig; // 平台支持的支付方式
|
|
|
|
// 平台设置
|
|
$platformConfig = json_decode($config[$platform], true);
|
|
if (in_array($platform, ['wxOfficialAccount', 'wxMiniProgram'])) {
|
|
if (isset($platformConfig['auto_login']) && $platformConfig['auto_login'] == 1) {
|
|
$autologin = true;
|
|
} else {
|
|
$autologin = false;
|
|
}
|
|
$data['wechat'] = [
|
|
'appid' => isset($platformConfig['app_id']) ? $platformConfig['app_id'] : '',
|
|
'autologin' => $autologin,
|
|
];
|
|
}
|
|
|
|
// 分享设置
|
|
$shareConfig = json_decode($config['share'], true);
|
|
$data['share'] = [
|
|
'title' => $shareConfig['title'],
|
|
'image' => isset($shareConfig['image']) ? cdnurl($shareConfig['image'], true) : '',
|
|
'goods_poster_bg' => isset($shareConfig['goods_poster_bg']) ? cdnurl($shareConfig['goods_poster_bg'], true) : '',
|
|
'user_poster_bg' => isset($shareConfig['user_poster_bg']) ? cdnurl($shareConfig['user_poster_bg'], true) : '',
|
|
'groupon_poster_bg' => isset($shareConfig['groupon_poster_bg']) ? cdnurl($shareConfig['groupon_poster_bg'], true) : '',
|
|
];
|
|
|
|
$withdrawConfig = json_decode($config['withdraw'], true);
|
|
$recharge = $withdrawConfig['recharge'] ?? [];
|
|
$data['recharge'] = [
|
|
'enable' => $recharge['enable'] ?? 0,
|
|
'methods' => $recharge['methods'] ?? [],
|
|
'moneys' => $recharge['moneys'] ?? [],
|
|
];
|
|
|
|
// 插件设置
|
|
$data['addons'] = array_keys(get_addon_list());
|
|
|
|
// 客服设置
|
|
$data['chat'] = isset($config['chat']) ? json_decode($config['chat'], true) : [];
|
|
// 门店配置
|
|
$data['store'] = isset($config['store']) ? json_decode($config['store'], true) : [];
|
|
$this->success('初始化数据', $data);
|
|
}
|
|
|
|
// 商城模板数据
|
|
public function template()
|
|
{
|
|
$get = $this->request->get();
|
|
$platform = $this->request->header('platform');
|
|
if (isset($get['shop_id']) && $get['shop_id'] != 0) {
|
|
$template = \addons\shopro\model\Decorate::getCurrentPlatformDecorate('preview', $get['shop_id']);
|
|
} else {
|
|
$template = \addons\shopro\model\Decorate::getCurrentPlatformDecorate($platform);
|
|
}
|
|
$this->success('模板数据', $template);
|
|
}
|
|
|
|
// 自定义页面
|
|
public function custom()
|
|
{
|
|
$get = $this->request->get();
|
|
$decorate = \addons\shopro\model\Decorate::get($get['custom_id']);
|
|
if (!$decorate) {
|
|
$this->error('未找到自定义页面');
|
|
}
|
|
$decorate->template = \addons\shopro\model\Decorate::getCustomDecorate($get['custom_id']);
|
|
$this->success('自定义模板数据', $decorate);
|
|
}
|
|
|
|
// 富文本详情
|
|
public function richtext()
|
|
{
|
|
$id = $this->request->get('id');
|
|
$data = \addons\shopro\model\Richtext::get(['id' => $id]);
|
|
$this->success($data->title, $data);
|
|
}
|
|
|
|
// 同步前端所有页面链接
|
|
public function asyncPages()
|
|
{
|
|
$post = $this->request->post();
|
|
$newLink = $post['data'];
|
|
$existLink = (array)Db::name('shopro_link')->select();
|
|
$newLinkPath = array_column($newLink, 'path');
|
|
$existLinkPath = array_flip(array_column($existLink, 'path'));
|
|
$insertData = [];
|
|
$count = 1;
|
|
foreach ($newLinkPath as $key => $item) {
|
|
if (!isset($existLinkPath[$item]) && isset($newLink[$key]['meta']['async']) && $newLink[$key]['meta']['async']) {
|
|
$insertData[] = [
|
|
'name' => isset($newLink[$key]['meta']['title']) ? $newLink[$key]['meta']['title'] : '新链接' . $count,
|
|
'path' => $item,
|
|
'group' => isset($newLink[$key]['meta']['group']) ? $newLink[$key]['meta']['group'] : '其它',
|
|
'createtime' => time(),
|
|
'updatetime' => time()
|
|
];
|
|
$count++;
|
|
}
|
|
}
|
|
if ($insertData !== []) {
|
|
Db::name('shopro_link')->insertAll($insertData);
|
|
}
|
|
}
|
|
|
|
public function upgrade()
|
|
{
|
|
$upgradeModel = new UpgradeModel();
|
|
$data = $upgradeModel
|
|
->where(['status' => 1])
|
|
->field(['name', 'url', 'content', 'code'])
|
|
->order('id DESC')
|
|
->find();
|
|
|
|
$this->success('获取成功', $data);
|
|
}
|
|
|
|
/**
|
|
* 上传文件
|
|
* @ApiMethod (POST)
|
|
* @param File $file 文件流
|
|
*/
|
|
public function upload()
|
|
{
|
|
$file = $this->request->file('file');
|
|
if (empty($file)) {
|
|
$this->error(__('No file upload or server upload limit exceeded'));
|
|
}
|
|
|
|
//判断是否已经存在附件
|
|
$sha1 = $file->hash();
|
|
|
|
$upload = FaConfig::get('upload');
|
|
|
|
preg_match('/(\d+)(\w+)/', $upload['maxsize'], $matches);
|
|
$type = strtolower($matches[2]);
|
|
$typeDict = ['b' => 0, 'k' => 1, 'kb' => 1, 'm' => 2, 'mb' => 2, 'gb' => 3, 'g' => 3];
|
|
$size = (int)$upload['maxsize'] * pow(1024, isset($typeDict[$type]) ? $typeDict[$type] : 0);
|
|
$fileInfo = $file->getInfo();
|
|
$suffix = strtolower(pathinfo($fileInfo['name'], PATHINFO_EXTENSION));
|
|
$suffix = $suffix && preg_match("/^[a-zA-Z0-9]+$/", $suffix) ? $suffix : 'file';
|
|
|
|
$mimetypeArr = explode(',', strtolower($upload['mimetype']));
|
|
$typeArr = explode('/', $fileInfo['type']);
|
|
|
|
//禁止上传PHP和HTML文件
|
|
if (in_array($fileInfo['type'], ['text/x-php', 'text/html']) || in_array($suffix, ['php', 'html', 'htm'])) {
|
|
$this->error(__('Uploaded file format is limited'));
|
|
}
|
|
//验证文件后缀
|
|
if (
|
|
$upload['mimetype'] !== '*' &&
|
|
(!in_array($suffix, $mimetypeArr)
|
|
|| (stripos($typeArr[0] . '/', $upload['mimetype']) !== false && (!in_array($fileInfo['type'], $mimetypeArr) && !in_array($typeArr[0] . '/*', $mimetypeArr))))
|
|
) {
|
|
$this->error(__('Uploaded file format is limited'));
|
|
}
|
|
//验证是否为图片文件
|
|
$imagewidth = $imageheight = 0;
|
|
if (in_array($fileInfo['type'], ['image/gif', 'image/jpg', 'image/jpeg', 'image/bmp', 'image/png', 'image/webp']) || in_array($suffix, ['gif', 'jpg', 'jpeg', 'bmp', 'png', 'webp'])) {
|
|
$imgInfo = getimagesize($fileInfo['tmp_name']);
|
|
if (!$imgInfo || !isset($imgInfo[0]) || !isset($imgInfo[1])) {
|
|
$this->error(__('Uploaded file is not a valid image'));
|
|
}
|
|
$imagewidth = isset($imgInfo[0]) ? $imgInfo[0] : $imagewidth;
|
|
$imageheight = isset($imgInfo[1]) ? $imgInfo[1] : $imageheight;
|
|
}
|
|
|
|
// 文件 md5
|
|
$fileMd5 = md5_file($fileInfo['tmp_name']);
|
|
|
|
$replaceArr = [
|
|
'{year}' => date("Y"),
|
|
'{mon}' => date("m"),
|
|
'{day}' => date("d"),
|
|
'{hour}' => date("H"),
|
|
'{min}' => date("i"),
|
|
'{sec}' => date("s"),
|
|
'{random}' => Random::alnum(16),
|
|
'{random32}' => Random::alnum(32),
|
|
'{filename}' => $suffix ? substr($fileInfo['name'], 0, strripos($fileInfo['name'], '.')) : $fileInfo['name'],
|
|
'{suffix}' => $suffix,
|
|
'{.suffix}' => $suffix ? '.' . $suffix : '',
|
|
'{filemd5}' => $fileMd5,
|
|
];
|
|
$savekey = $upload['savekey'];
|
|
$savekey = str_replace(array_keys($replaceArr), array_values($replaceArr), $savekey);
|
|
|
|
$uploadDir = substr($savekey, 0, strripos($savekey, '/') + 1);
|
|
$fileName = substr($savekey, strripos($savekey, '/') + 1);
|
|
//
|
|
|
|
if (in_array($upload['storage'], ['cos', 'alioss', 'qiniu'])) { // upyun:又拍云 ,bos:百度BOS,ucloud: Ucloud, 如果要使用这三种,请自行安装插件配置,并将标示填入前面数组,进行测试
|
|
$token_name = $upload['storage'] . 'token'; // costoken, aliosstoken, qiniutoken
|
|
$controller_name = '\\addons\\' . $upload['storage'] . '\\controller\\Index';
|
|
|
|
$storageToken[$token_name] = $upload['multipart'] && $upload['multipart'][$token_name] ? $upload['multipart'][$token_name] : '';
|
|
$domain = request()->domain();
|
|
|
|
try {
|
|
$uploadCreate = \think\Request::create('foo', 'POST', array_merge([
|
|
'name' => $fileInfo['name'],
|
|
'md5' => $fileMd5,
|
|
'chunk' => 0,
|
|
], $storageToken));
|
|
|
|
// 重新设置跨域允许域名
|
|
$cors = config('fastadmin.cors_request_domain');
|
|
config('fastadmin.cors_request_domain', $cors . ',' . $domain);
|
|
|
|
$uploadController = new $controller_name($uploadCreate);
|
|
$uploadController->upload();
|
|
} catch (HttpResponseException $e) {
|
|
$result = $e->getResponse()->getData();
|
|
if (isset($result['code']) && $result['code'] == 0) {
|
|
$this->error($result['msg']);
|
|
}
|
|
|
|
$resultData = $result['data'];
|
|
}
|
|
} else {
|
|
$splInfo = $file->validate(['size' => $size])->move(ROOT_PATH . '/public' . $uploadDir, $fileName);
|
|
|
|
if ($splInfo) {
|
|
$resultData = [
|
|
'url' => $uploadDir . $splInfo->getSaveName(),
|
|
'fullurl' => request()->domain() . $uploadDir . $splInfo->getSaveName()
|
|
];
|
|
} else {
|
|
// 上传失败获取错误信息
|
|
$this->error($file->getError());
|
|
}
|
|
}
|
|
|
|
$params = array(
|
|
'admin_id' => 0,
|
|
'user_id' => (int)$this->auth->id,
|
|
'filename' => substr(htmlspecialchars(strip_tags($fileInfo['name'])), 0, 100),
|
|
'filesize' => $fileInfo['size'],
|
|
'imagewidth' => $imagewidth,
|
|
'imageheight' => $imageheight,
|
|
'imagetype' => $suffix,
|
|
'imageframes' => 0,
|
|
'mimetype' => $fileInfo['type'] == 'application/octet-stream' && in_array($suffix, ['gif', 'jpg', 'jpeg', 'bmp', 'png', 'webp']) ? 'image/' . $suffix : $fileInfo['type'],
|
|
'url' => $resultData['url'],
|
|
'uploadtime' => time(),
|
|
'storage' => $upload['storage'],
|
|
'sha1' => $sha1,
|
|
);
|
|
$attachment = new \app\common\model\Attachment;
|
|
$attachment->data(array_filter($params));
|
|
$attachment->save();
|
|
\think\Hook::listen("upload_after", $attachment);
|
|
$this->success(__('Upload successful'), $resultData);
|
|
}
|
|
|
|
|
|
public function debugLog()
|
|
{
|
|
$params = $this->request->post();
|
|
\think\Log::write($params, 'Frontend-Debug');
|
|
}
|
|
|
|
}
|