mirror of
https://github.com/crmeb/CRMEB.git
synced 2026-01-27 22:28:10 +00:00
update v5.2.1
This commit is contained in:
parent
4512becd44
commit
6e1752992c
2
LICENSE
2
LICENSE
@ -1,4 +1,4 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
|
||||
@ -13,7 +13,7 @@ CRMEB开源商城系统PHP版
|
||||
<img src="https://img.shields.io/badge/Licence-GPL3.0-green.svg?style=flat" />
|
||||
</a>
|
||||
<a href="http://www.crmeb.com">
|
||||
<img src="https://img.shields.io/badge/Edition-5.1-blue.svg" />
|
||||
<img src="https://img.shields.io/badge/Edition-5.2-blue.svg" />
|
||||
</a>
|
||||
<a href="https://gitee.com/ZhongBangKeJi/CRMEB/repository/archive/master.zip">
|
||||
<img src="https://img.shields.io/badge/Download-240m-red.svg" />
|
||||
@ -115,9 +115,9 @@ Redis
|
||||
|
||||
账号:demo 密码:crmeb.com
|
||||
|
||||
H5端:http://v5.crmeb.net/(移动端打开)
|
||||
H5端:http://v5.crmeb.net/ (移动端打开)
|
||||
|
||||
PC端:http://v5.crmeb.net/(电脑端打开)
|
||||
PC端:http://v5.crmeb.net/ (电脑端打开)
|
||||
|
||||
APP下载:http://app.crmeb.cn/bzv (苹果手机直接在APP Store里搜索CRMEB下载)
|
||||
|
||||
@ -153,6 +153,9 @@ APP下载:http://app.crmeb.cn/bzv (苹果手机直接在APP Store里搜索CR
|
||||
|
||||
So~~想要用CRMEB开源商城系统做公益项目的朋友,可以来免费申请商业版系统哦!有需要的朋友,快去找官方客服咨询吧!
|
||||
|
||||

|
||||

|
||||
|
||||
---
|
||||
### 💎 捐赠
|
||||
赠人玫瑰,手留余香!CRMEB诚挚地邀请大家积极参与捐赠,我们会将捐赠获得的费用,悉数用于支持公益项目,让善意无限传递下去!
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
version=CRMEB-KY v5.2.0
|
||||
version_code=520
|
||||
version=CRMEB-KY v5.2.1
|
||||
version_code=521
|
||||
platform=github
|
||||
app_id=ze7x9rxsv09l6pvsyo
|
||||
app_key=fuF7U9zaybLa5gageVQzxtxQMFnvU2OI
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -69,13 +69,13 @@ class AgentLevel extends AuthController
|
||||
['name', ''],
|
||||
['grade', 0],
|
||||
['image', ''],
|
||||
['one_brokerage', 0],
|
||||
['two_brokerage', 0],
|
||||
['one_brokerage_percent', 0],
|
||||
['two_brokerage_percent', 0],
|
||||
['status', 0]]);
|
||||
if (!$data['name']) return app('json')->fail(400200);
|
||||
if (!$data['grade']) return app('json')->fail(400201);
|
||||
if (!$data['image']) return app('json')->fail(400202);
|
||||
if ($data['two_brokerage'] > $data['one_brokerage']) {
|
||||
if ($data['two_brokerage_percent'] > $data['one_brokerage_percent']) {
|
||||
return app('json')->fail(400203);
|
||||
}
|
||||
$grade = $this->services->get(['grade' => $data['grade'], 'is_del' => 0]);
|
||||
@ -121,13 +121,13 @@ class AgentLevel extends AuthController
|
||||
['name', ''],
|
||||
['grade', 0],
|
||||
['image', ''],
|
||||
['one_brokerage', 0],
|
||||
['two_brokerage', 0],
|
||||
['one_brokerage_percent', 0],
|
||||
['two_brokerage_percent', 0],
|
||||
['status', 0]]);
|
||||
if (!$data['name']) return app('json')->fail(400200);
|
||||
if (!$data['grade']) return app('json')->fail(400201);
|
||||
if (!$data['image']) return app('json')->fail(400202);
|
||||
if ($data['two_brokerage'] > $data['one_brokerage']) {
|
||||
if ($data['two_brokerage_percent'] > $data['one_brokerage_percent']) {
|
||||
return app('json')->fail(400203);
|
||||
}
|
||||
if (!$levelInfo = $this->services->getLevelInfo((int)$id)) return app('json')->fail(400206);
|
||||
@ -139,8 +139,8 @@ class AgentLevel extends AuthController
|
||||
$levelInfo->name = $data['name'];
|
||||
$levelInfo->grade = $data['grade'];
|
||||
$levelInfo->image = $data['image'];
|
||||
$levelInfo->one_brokerage = $data['one_brokerage'];
|
||||
$levelInfo->two_brokerage = $data['two_brokerage'];
|
||||
$levelInfo->one_brokerage_percent = $data['one_brokerage_percent'];
|
||||
$levelInfo->two_brokerage_percent = $data['two_brokerage_percent'];
|
||||
$levelInfo->status = $data['status'];
|
||||
$levelInfo->save();
|
||||
return app('json')->success(100001);
|
||||
|
||||
@ -75,6 +75,7 @@ class SystemAttachmentCategory extends AuthController
|
||||
['pid', 0],
|
||||
['name', '']
|
||||
]);
|
||||
if (is_array($data['pid'])) $data['pid'] = end($data['pid']);
|
||||
if (!$data['name']) {
|
||||
return app('json')->fail(400100);
|
||||
}
|
||||
@ -108,6 +109,9 @@ class SystemAttachmentCategory extends AuthController
|
||||
if (!$data['name']) {
|
||||
return app('json')->fail(400100);
|
||||
}
|
||||
if ($data['pid'] == $id) {
|
||||
return app('json')->fail('上级分类不能是自己');
|
||||
}
|
||||
$info = $this->service->get($id);
|
||||
$count = $this->service->count(['pid' => $id]);
|
||||
if ($count && $info['pid'] != $data['pid']) return app('json')->fail(400105);
|
||||
|
||||
@ -87,6 +87,7 @@ class StoreBargain extends AuthController
|
||||
['postage', 0],//邮费
|
||||
['custom_form', ''],
|
||||
['virtual_type', 0],
|
||||
['is_commission', 0],
|
||||
]);
|
||||
$this->validate($data, \app\adminapi\validate\marketing\StoreBargainValidate::class, 'save');
|
||||
if ($data['section_time']) {
|
||||
|
||||
@ -43,6 +43,7 @@ class StoreCouponIssue extends AuthController
|
||||
['coupon_title', ''],
|
||||
['receive_type', ''],
|
||||
['type', ''],
|
||||
['coupon_type', ''],
|
||||
]);
|
||||
$list = $this->services->getCouponIssueList($where);
|
||||
return app('json')->success($list);
|
||||
@ -55,6 +56,7 @@ class StoreCouponIssue extends AuthController
|
||||
public function saveCoupon()
|
||||
{
|
||||
$data = $this->request->postMore([
|
||||
['id', 0],
|
||||
['coupon_title', ''],
|
||||
['coupon_price', 0.00],
|
||||
['use_min_price', 0.00],
|
||||
|
||||
@ -87,6 +87,7 @@ class StoreSeckill extends AuthController
|
||||
['postage', 0],//邮费
|
||||
['custom_form', ''],
|
||||
['virtual_type', 0],
|
||||
['is_commission', 0],
|
||||
]);
|
||||
$this->validate($data, \app\adminapi\validate\marketing\StoreSeckillValidate::class, 'save');
|
||||
$this->services->saveData($id, $data);
|
||||
|
||||
@ -14,6 +14,7 @@ use app\adminapi\controller\AuthController;
|
||||
use app\adminapi\validate\order\StoreOrderValidate;
|
||||
use app\jobs\OrderExpressJob;
|
||||
use app\services\serve\ServeServices;
|
||||
use app\services\wechat\WechatUserServices;
|
||||
use crmeb\services\FileService;
|
||||
use app\services\order\{StoreOrderCartInfoServices,
|
||||
StoreOrderDeliveryServices,
|
||||
@ -452,7 +453,7 @@ class StoreOrder extends AuthController
|
||||
if (!$id) {
|
||||
return app('json')->fail(100100);
|
||||
}
|
||||
return app('json')->success($services->refundOrderForm((int)$id));
|
||||
return app('json')->success($services->refundOrderForm((int)$id, 'order'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -467,7 +468,6 @@ class StoreOrder extends AuthController
|
||||
{
|
||||
$data = $this->request->postMore([
|
||||
['refund_price', 0],
|
||||
['type', 1]
|
||||
]);
|
||||
if (!$id) {
|
||||
return app('json')->fail(100100);
|
||||
@ -476,44 +476,63 @@ class StoreOrder extends AuthController
|
||||
if (!$order) {
|
||||
return app('json')->fail(400118);
|
||||
}
|
||||
|
||||
$refundData = [
|
||||
'refund_reason' => '后台主动退款',
|
||||
'refund_explain' => '后台主动退款',
|
||||
'refund_img' => json_encode([]),
|
||||
];
|
||||
|
||||
$res = $services->applyRefund((int)$id, $order['uid'], $order, [], 1, (float)$data['refund_price'], $refundData);
|
||||
|
||||
if (!$res) {
|
||||
return app('json')->fail('退款单生成失败');
|
||||
}
|
||||
|
||||
$orderRefund = $services->get(['store_order_id' => $id]);
|
||||
|
||||
|
||||
$data['refund_status'] = 2;
|
||||
$data['refund_type'] = 6;
|
||||
$data['refunded_time'] = time();
|
||||
|
||||
//0元退款
|
||||
if ($order['pay_price'] == 0 && in_array($order['refund_status'], [0, 1])) {
|
||||
if ($orderRefund['refund_price'] == 0 && in_array($orderRefund['refund_type'], [1, 5])) {
|
||||
$refund_price = 0;
|
||||
} else {
|
||||
if ($order['pay_price'] == $order['refund_price']) {
|
||||
return app('json')->fail(400147);
|
||||
}
|
||||
if (!$data['refund_price']) {
|
||||
return app('json')->fail(400146);
|
||||
}
|
||||
$refund_price = $data['refund_price'];
|
||||
$data['refund_price'] = bcadd($data['refund_price'], $order['refund_price'], 2);
|
||||
$bj = bccomp((string)$order['pay_price'], (string)$data['refund_price'], 2);
|
||||
if ($bj < 0) {
|
||||
return app('json')->fail(400148);
|
||||
if ($orderRefund['refund_price'] == $orderRefund['refunded_price']) {
|
||||
return app('json')->fail(400147);
|
||||
}
|
||||
$refund_price = $data['refund_price'];
|
||||
}
|
||||
if ($data['type'] == 1) {
|
||||
$data['refund_status'] = 2;
|
||||
} else if ($data['type'] == 2) {
|
||||
$data['refund_status'] = 0;
|
||||
|
||||
$data['refunded_price'] = bcadd($data['refund_price'], $orderRefund['refunded_price'], 2);
|
||||
$bj = bccomp((string)$orderRefund['refund_price'], (string)$data['refunded_price'], 2);
|
||||
if ($bj < 0) {
|
||||
return app('json')->fail(400148);
|
||||
}
|
||||
$data['refund_type'] = 6;
|
||||
$type = $data['type'];
|
||||
unset($data['type']);
|
||||
|
||||
$refund_data['pay_price'] = $order['pay_price'];
|
||||
$refund_data['refund_price'] = $refund_price;
|
||||
if ($order['refund_price'] > 0) {
|
||||
mt_srand();
|
||||
$refund_data['refund_id'] = $order['order_id'] . rand(100, 999);
|
||||
}
|
||||
//退款处理
|
||||
$services->payOrderRefund($type, $order, $refund_data);
|
||||
($order['pid'] > 0) ? $refund_data['order_id'] = $this->services->value(['id' => (int)$order['pid']], 'order_id') : $refund_data['order_id'] = $order['order_id'];
|
||||
/** @var WechatUserServices $wechatUserServices */
|
||||
$wechatUserServices = app()->make(WechatUserServices::class);
|
||||
$refund_data['open_id'] = $wechatUserServices->uidToOpenid((int)$order['uid'], 'routine') ?? '';
|
||||
$refund_data['refund_no'] = $orderRefund['order_id'];
|
||||
//修改订单退款状态
|
||||
if ($this->services->update($id, $data)) {
|
||||
$services->storeProductOrderRefundY($data, $order, $refund_price);
|
||||
unset($data['refund_price']);
|
||||
if ($services->agreeRefund($orderRefund['id'], $refund_data)) {
|
||||
$services->update($orderRefund['id'], $data);
|
||||
return app('json')->success(400149);
|
||||
} else {
|
||||
$services->storeProductOrderRefundYFasle((int)$id, $refund_price);
|
||||
$services->storeProductOrderRefundYFasle((int)$orderRefund['id'], $refund_price);
|
||||
return app('json')->fail(400150);
|
||||
}
|
||||
}
|
||||
@ -883,4 +902,24 @@ class StoreOrder extends AuthController
|
||||
}
|
||||
return app('json')->success('批量发货成功');
|
||||
}
|
||||
|
||||
/**
|
||||
* 配货单
|
||||
* @param $order_id
|
||||
* @return \think\Response
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @author: 吴汐
|
||||
* @email: 442384644@qq.com
|
||||
* @date: 2023/10/11
|
||||
*/
|
||||
public function printShipping($order_id)
|
||||
{
|
||||
if (!$order_id) {
|
||||
return app('json')->fail('参数错误');
|
||||
}
|
||||
$data = $this->services->printShippingData($order_id);
|
||||
return app('json')->success($data);
|
||||
}
|
||||
}
|
||||
|
||||
@ -340,7 +340,7 @@ class SystemConfig extends AuthController
|
||||
if (!is_int($post['sign_give_point']) || $post['sign_give_point'] < 0) return app('json')->fail('签到赠送积分请填写大于等于0的整数');
|
||||
}
|
||||
if (isset($post['sign_give_exp'])) {
|
||||
if (!is_int($post['sign_give_exp']) || $post['sign_give_exp'] < 0) return app('json')->fail('签到赠送经验请填写大于等于0的整数');
|
||||
if ((int)$post['sign_give_exp'] < 0) return app('json')->fail('签到赠送经验请填写大于等于0的整数');
|
||||
}
|
||||
if (isset($post['integral_frozen'])) {
|
||||
if (!ctype_digit($post['integral_frozen']) || $post['integral_frozen'] < 0) return app('json')->fail('积分冻结天数请填写大于等于0的整数');
|
||||
@ -358,6 +358,9 @@ class SystemConfig extends AuthController
|
||||
if (isset($post['customer_phone'])) {
|
||||
if (!ctype_digit($post['customer_phone']) || strlen($post['customer_phone']) > 11) return app('json')->fail('客服手机号为11位数字');
|
||||
}
|
||||
if (isset($post['refund_time_available'])) {
|
||||
if (!ctype_digit($post['refund_time_available'])) return app('json')->fail('售后期限必须为大于0的整数');
|
||||
}
|
||||
|
||||
foreach ($post as $k => $v) {
|
||||
$config_one = $this->services->getOne(['menu_name' => $k]);
|
||||
|
||||
@ -20,12 +20,15 @@ use app\services\system\log\SystemFileServices;
|
||||
use app\services\system\SystemCrudDataService;
|
||||
use app\services\system\SystemCrudServices;
|
||||
use app\services\system\SystemMenusServices;
|
||||
use app\services\system\SystemRouteServices;
|
||||
use crmeb\services\CacheService;
|
||||
use crmeb\services\crud\enum\FormTypeEnum;
|
||||
use crmeb\services\crud\Make;
|
||||
use crmeb\services\crud\Service;
|
||||
use crmeb\services\FileService;
|
||||
use think\facade\App;
|
||||
use think\facade\Db;
|
||||
use think\facade\Env;
|
||||
use think\helper\Str;
|
||||
use think\Response;
|
||||
|
||||
@ -548,13 +551,20 @@ class SystemCrud extends AuthController
|
||||
return app('json')->fail(100026);
|
||||
}
|
||||
|
||||
$services->transaction(function () use ($services, $info) {
|
||||
if ($info->menu_ids) {
|
||||
$services->deleteMenus($info->menu_ids);
|
||||
}
|
||||
$menusServices = app()->make(SystemMenusServices::class);
|
||||
if ($info->menu_ids) {
|
||||
$menusServices->deleteMenus($info->menu_ids);
|
||||
}
|
||||
if ($info->menu_id) {
|
||||
$menusServices->deleteMenus([$info->menu_id]);
|
||||
}
|
||||
|
||||
$info->delete();
|
||||
});
|
||||
$routeServices = app()->make(SystemRouteServices::class);
|
||||
if ($info->route_ids) {
|
||||
$routeServices->deleteRoutes($info->route_ids);
|
||||
}
|
||||
|
||||
Db::query("DROP TABLE `" . Env::get('database.prefix', 'eb_') . $info->table_name . "`");
|
||||
|
||||
if ($info->make_path) {
|
||||
$errorFile = [];
|
||||
@ -577,6 +587,8 @@ class SystemCrud extends AuthController
|
||||
}
|
||||
}
|
||||
|
||||
$info->delete();
|
||||
|
||||
|
||||
return app('json')->success(100002);
|
||||
}
|
||||
|
||||
@ -106,7 +106,7 @@ class SystemRole extends AuthController
|
||||
if (!$role) {
|
||||
return app('json')->fail(100100);
|
||||
}
|
||||
$menus = $services->getMenus($this->adminInfo['level'] == 0 ? [] : $this->adminInfo['roles']);
|
||||
$menus = $services->getMenus($this->adminInfo['level'] == 0 ? [] : $this->adminInfo['roles'], explode(',', $role['rules']));
|
||||
return app('json')->success(['role' => $role->toArray(), 'menus' => $menus]);
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
namespace app\adminapi\controller\v1\statistic;
|
||||
|
||||
use app\adminapi\controller\AuthController;
|
||||
use app\services\user\UserMoneyServices;
|
||||
use think\facade\App;
|
||||
|
||||
class BalanceStatistic extends AuthController
|
||||
{
|
||||
/**
|
||||
* @param App $app
|
||||
* @param UserMoneyServices $services
|
||||
*/
|
||||
public function __construct(App $app, UserMoneyServices $services)
|
||||
{
|
||||
parent::__construct($app);
|
||||
$this->services = $services;
|
||||
}
|
||||
|
||||
/**
|
||||
* 余额统计基础信息
|
||||
* @return mixed
|
||||
*/
|
||||
public function getBasic()
|
||||
{
|
||||
$data = $this->services->getBasic();
|
||||
return app('json')->success($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 余额统计趋势图
|
||||
* @return mixed
|
||||
*/
|
||||
public function getTrend()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['time', '']
|
||||
]);
|
||||
$data = $this->services->getTrend($where);
|
||||
return app('json')->success($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 余额来源
|
||||
* @return mixed
|
||||
*/
|
||||
public function getChannel()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['time', '']
|
||||
]);
|
||||
$data = $this->services->getChannel($where);
|
||||
return app('json')->success($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 余额类型
|
||||
* @return mixed
|
||||
*/
|
||||
public function getType()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['time', '']
|
||||
]);
|
||||
$data = $this->services->getType($where);
|
||||
return app('json')->success($data);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace app\adminapi\controller\v1\statistic;
|
||||
|
||||
use app\adminapi\controller\AuthController;
|
||||
use app\services\statistic\OrderStatisticServices;
|
||||
use think\facade\App;
|
||||
|
||||
class OrderStatistic extends AuthController
|
||||
{
|
||||
public function __construct(App $app, OrderStatisticServices $services)
|
||||
{
|
||||
parent::__construct($app);
|
||||
$this->services = $services;
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单统计基础信息
|
||||
* @return mixed
|
||||
*/
|
||||
public function getBasic()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['time', '']
|
||||
]);
|
||||
$data = $this->services->getBasic($where);
|
||||
return app('json')->success($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单统计趋势图
|
||||
* @return mixed
|
||||
*/
|
||||
public function getTrend()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['time', '']
|
||||
]);
|
||||
$data = $this->services->getTrend($where);
|
||||
return app('json')->success($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单来源
|
||||
* @return mixed
|
||||
*/
|
||||
public function getChannel()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['time', '']
|
||||
]);
|
||||
$data = $this->services->getChannel($where);
|
||||
return app('json')->success($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单类型
|
||||
* @return mixed
|
||||
*/
|
||||
public function getType()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['time', '']
|
||||
]);
|
||||
$data = $this->services->getType($where);
|
||||
return app('json')->success($data);
|
||||
}
|
||||
}
|
||||
106
crmeb/app/adminapi/controller/v1/statistic/ProductStatistic.php
Normal file
106
crmeb/app/adminapi/controller/v1/statistic/ProductStatistic.php
Normal file
@ -0,0 +1,106 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: CRMEB Team <admin@crmeb.com>
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\adminapi\controller\v1\statistic;
|
||||
|
||||
|
||||
use app\adminapi\controller\AuthController;
|
||||
use app\services\statistic\ProductStatisticServices;
|
||||
use think\facade\App;
|
||||
|
||||
/**
|
||||
* Class ProductStatistic
|
||||
* @package app\adminapi\controller\v1\statistic
|
||||
*/
|
||||
class ProductStatistic extends AuthController
|
||||
{
|
||||
/**
|
||||
* ProductStatistic constructor.
|
||||
* @param App $app
|
||||
* @param ProductStatisticServices $services
|
||||
*/
|
||||
public function __construct(App $app, ProductStatisticServices $services)
|
||||
{
|
||||
parent::__construct($app);
|
||||
$this->services = $services;
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品基础
|
||||
* @return mixed
|
||||
*/
|
||||
public function getBasic()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['data', '', '', 'time']
|
||||
]);
|
||||
return app('json')->success($this->services->getBasic($where));
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品趋势
|
||||
* @return mixed
|
||||
*/
|
||||
public function getTrend()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['data', '', '', 'time']
|
||||
]);
|
||||
$where['time'] = $this->getDay($where['time']);
|
||||
return app('json')->success($this->services->getTrend($where));
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品排行
|
||||
* @return mixed
|
||||
*/
|
||||
public function getProductRanking()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['data', '', '', 'time'],
|
||||
['sort', '']
|
||||
]);
|
||||
$where['time'] = $this->getDay($where['time']);
|
||||
return app('json')->success($this->services->getProductRanking($where));
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出
|
||||
* @return mixed
|
||||
*/
|
||||
public function getExcel()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['data', '', '', 'time']
|
||||
]);
|
||||
$where['time'] = $this->getDay($where['time']);
|
||||
return app('json')->success($this->services->getTrend($where, true));
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化时间
|
||||
* @param $time
|
||||
* @return string
|
||||
*/
|
||||
public function getDay($time)
|
||||
{
|
||||
if (strstr($time, '-') !== false) {
|
||||
[$startTime, $endTime] = explode('-', $time);
|
||||
if (!$startTime || !$endTime) {
|
||||
return date("Y/m/d 00:00:00", strtotime("-30 days", time())) . '-' . date("Y/m/d 23:59:59", time());
|
||||
} else {
|
||||
return date('Y/m/d 00:00:00', strtotime($startTime)).'-'.date('Y/m/d 23:59:59', strtotime($endTime));
|
||||
}
|
||||
} else {
|
||||
return date("Y/m/d 00:00:00", strtotime("-30 days", time())) . '-' . date("Y/m/d 23:59:59", time());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,74 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: CRMEB Team <admin@crmeb.com>
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\adminapi\controller\v1\statistic;
|
||||
|
||||
|
||||
use app\adminapi\controller\AuthController;
|
||||
use app\services\statistic\TradeStatisticServices;
|
||||
use think\facade\App;
|
||||
|
||||
/**
|
||||
* Class TradeStatistic
|
||||
* @package app\controller\admin\v1\statistic
|
||||
*/
|
||||
class TradeStatistic extends AuthController
|
||||
{
|
||||
/**
|
||||
* TradeStatistic constructor.
|
||||
* @param App $app
|
||||
* @param TradeStatisticServices $services
|
||||
*/
|
||||
public function __construct(App $app, TradeStatisticServices $services)
|
||||
{
|
||||
parent::__construct($app);
|
||||
$this->services = $services;
|
||||
}
|
||||
|
||||
/**
|
||||
* 顶部数据
|
||||
* @return mixed
|
||||
*/
|
||||
public function topTrade()
|
||||
{
|
||||
$leftToday = $this->services->getTopLeftTrade(['time' => 'today']);
|
||||
$leftyestoday = $this->services->getTopLeftTrade(['time' => 'yestoday']);
|
||||
$rightOne = $this->services->getTopRightOneTrade();
|
||||
$rightTwo = $this->services->getTopRightTwoTrade();
|
||||
$right = ['today' => $rightOne, 'month' => $rightTwo];
|
||||
$totalleft = [$leftToday, $leftyestoday];
|
||||
$left = [];
|
||||
foreach ($totalleft as $k => $v) {
|
||||
$left['name'] = "当日订单金额";
|
||||
$left['x'] = $v['curve']['x'];
|
||||
$left['series'][$k]['money'] = round($v['total_money'], 2);
|
||||
$left['series'][$k]['value'] = array_values($v['curve']['y']);
|
||||
}
|
||||
|
||||
$data['left'] = $left;
|
||||
$data['right'] = $right;
|
||||
return app('json')->success($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 底部数据
|
||||
* @return mixed
|
||||
*/
|
||||
public function bottomTrade()
|
||||
{
|
||||
$day = $this->request->getMore([
|
||||
['data', ""],
|
||||
]);
|
||||
$bottom = $this->services->getBottomTrade($day);
|
||||
return app('json')->success($bottom);
|
||||
}
|
||||
|
||||
}
|
||||
152
crmeb/app/adminapi/controller/v1/statistic/UserStatistic.php
Normal file
152
crmeb/app/adminapi/controller/v1/statistic/UserStatistic.php
Normal file
@ -0,0 +1,152 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: CRMEB Team <admin@crmeb.com>
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\adminapi\controller\v1\statistic;
|
||||
|
||||
|
||||
use app\adminapi\controller\AuthController;
|
||||
use app\services\statistic\UserStatisticServices;
|
||||
use think\facade\App;
|
||||
|
||||
/**
|
||||
* Class UserStatistic
|
||||
* @package app\adminapi\controller\v1\statistic
|
||||
*/
|
||||
class UserStatistic extends AuthController
|
||||
{
|
||||
/**
|
||||
* UserStatistic constructor.
|
||||
* @param App $app
|
||||
* @param UserStatisticServices $services
|
||||
*/
|
||||
public function __construct(App $app, UserStatisticServices $services)
|
||||
{
|
||||
parent::__construct($app);
|
||||
$this->services = $services;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户基础信息
|
||||
* @return mixed
|
||||
*/
|
||||
public function getBasic()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['channel_type', ''],
|
||||
['data', '', '', 'time']
|
||||
]);
|
||||
return app('json')->success($this->services->getBasic($where));
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户趋势
|
||||
* @return mixed
|
||||
*/
|
||||
public function getTrend()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['channel_type', ''],
|
||||
['data', '', '', 'time']
|
||||
]);
|
||||
$where['time'] = $this->getDay($where['time']);
|
||||
return app('json')->success($this->services->getTrend($where));
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信用户信息
|
||||
* @return mixed
|
||||
*/
|
||||
public function getWechat()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['channel_type', ''],
|
||||
['data', '', '', 'time']
|
||||
]);
|
||||
$where['time'] = $this->getDay($where['time']);
|
||||
return app('json')->success($this->services->getWechat($where));
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信用户趋势
|
||||
* @return mixed
|
||||
*/
|
||||
public function getWechatTrend()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['channel_type', ''],
|
||||
['data', '', '', 'time']
|
||||
]);
|
||||
$where['time'] = $this->getDay($where['time']);
|
||||
return app('json')->success($this->services->getWechatTrend($where));
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户地域
|
||||
* @return mixed
|
||||
*/
|
||||
public function getRegion()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['channel_type', ''],
|
||||
['data', '', '', 'time'],
|
||||
['sort', 'allNum']
|
||||
]);
|
||||
$where['time'] = $this->getDay($where['time']);
|
||||
return app('json')->success($this->services->getRegion($where));
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户性别
|
||||
* @return mixed
|
||||
*/
|
||||
public function getSex()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['channel_type', ''],
|
||||
['data', '', '', 'time']
|
||||
]);
|
||||
$where['time'] = $this->getDay($where['time']);
|
||||
return app('json')->success($this->services->getSex($where));
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户统计导出
|
||||
* @return mixed
|
||||
*/
|
||||
public function getExcel()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['channel_type', ''],
|
||||
['data', '', '', 'time']
|
||||
]);
|
||||
$where['time'] = $this->getDay($where['time']);
|
||||
return app('json')->success($this->services->getTrend($where, true));
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化时间
|
||||
* @param $time
|
||||
* @return string
|
||||
*/
|
||||
public function getDay($time)
|
||||
{
|
||||
if (strstr($time, '-') !== false) {
|
||||
[$startTime, $endTime] = explode('-', $time);
|
||||
if (!$startTime || !$endTime) {
|
||||
return date("Y/m/d 00:00:00", strtotime("-30 days", time())) . '-' . date("Y/m/d 23:59:59", time());
|
||||
} else {
|
||||
return date('Y/m/d 00:00:00', strtotime($startTime)).'-'.date('Y/m/d 23:59:59', strtotime($endTime));
|
||||
}
|
||||
} else {
|
||||
return date("Y/m/d 00:00:00", strtotime("-30 days", time())) . '-' . date("Y/m/d 23:59:59", time());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -57,6 +57,7 @@ class User extends AuthController
|
||||
['field_key', ''],
|
||||
['isMember', '']
|
||||
]);
|
||||
$where['label_id'] = stringToIntArray($where['label_id']);
|
||||
return app('json')->success($this->services->index($where));
|
||||
}
|
||||
|
||||
|
||||
@ -112,6 +112,8 @@ Route::group('order', function () {
|
||||
Route::get('delivery/list', 'v1.order.DeliveryService/get_delivery_list')->option(['real_name' => '订单列表获取配送员']);
|
||||
//电子面单模板列表
|
||||
Route::get('expr/temp', 'v1.order.StoreOrder/expr_temp')->option(['real_name' => '电子面单模板列表']);
|
||||
//打印发货单
|
||||
Route::get('print/shipping/:order_id', 'v1.order.StoreOrder/printShipping')->option(['real_name' => '打印发货单']);
|
||||
|
||||
//更多操作打印电子面单
|
||||
Route::get('order_dump/:order_id', 'v1.order.StoreOrder/order_dump')->option(['real_name' => '更多操作打印电子面单']);
|
||||
|
||||
@ -307,10 +307,10 @@ class PublicController
|
||||
['image', ''],
|
||||
['code', ''],
|
||||
], true);
|
||||
if ($imageUrl !== '' && !preg_match('/.*(\.png|\.jpg|\.jpeg|\.gif)$/', $imageUrl) && strpos($imageUrl, "phar://") !== false) {
|
||||
if ($imageUrl !== '' && !preg_match('/.*(\.png|\.jpg|\.jpeg|\.gif)$/', $imageUrl) && strpos(strtolower($imageUrl), "phar://") !== false) {
|
||||
return app('json')->success(['code' => false, 'image' => false]);
|
||||
}
|
||||
if ($codeUrl !== '' && !(preg_match('/.*(\.png|\.jpg|\.jpeg|\.gif)$/', $codeUrl) || strpos($codeUrl, 'https://mp.weixin.qq.com/cgi-bin/showqrcode') !== false) && strpos($codeUrl, "phar://") !== false) {
|
||||
if ($codeUrl !== '' && !(preg_match('/.*(\.png|\.jpg|\.jpeg|\.gif)$/', $codeUrl) || strpos($codeUrl, 'https://mp.weixin.qq.com/cgi-bin/showqrcode') !== false) && strpos(strtolower($codeUrl), "phar://") !== false) {
|
||||
return app('json')->success(['code' => false, 'image' => false]);
|
||||
}
|
||||
try {
|
||||
@ -319,7 +319,9 @@ class PublicController
|
||||
if (!$codeTmp) {
|
||||
$putCodeUrl = put_image($codeUrl);
|
||||
$code = $putCodeUrl ? image_to_base64(app()->request->domain(true) . '/' . $putCodeUrl) : false;
|
||||
$code ?? unlink($_SERVER["DOCUMENT_ROOT"] . '/' . $putCodeUrl);
|
||||
if ($putCodeUrl) {
|
||||
unlink($_SERVER["DOCUMENT_ROOT"] . '/' . $putCodeUrl);
|
||||
}
|
||||
}
|
||||
return $code;
|
||||
});
|
||||
@ -328,7 +330,9 @@ class PublicController
|
||||
if (!$imageTmp) {
|
||||
$putImageUrl = put_image($imageUrl);
|
||||
$image = $putImageUrl ? image_to_base64(app()->request->domain(true) . '/' . $putImageUrl) : false;
|
||||
$image ?? unlink($_SERVER["DOCUMENT_ROOT"] . '/' . $putImageUrl);
|
||||
if ($putImageUrl) {
|
||||
unlink($_SERVER["DOCUMENT_ROOT"] . '/' . $putImageUrl);
|
||||
}
|
||||
}
|
||||
return $image;
|
||||
});
|
||||
|
||||
@ -559,7 +559,8 @@ class StoreOrderController
|
||||
'unique' => $unique,
|
||||
'product_id' => $productId,
|
||||
'add_time' => time(),
|
||||
'reply_type' => 'product'
|
||||
'reply_type' => 'product',
|
||||
'suk' => $cartInfo['cart_info']['productInfo']['attrInfo']['suk']
|
||||
]);
|
||||
|
||||
$res = $replyServices->save($group);
|
||||
|
||||
@ -87,6 +87,7 @@ class StoreCartController
|
||||
} elseif ($where['advanceId']) {
|
||||
$type = 6;
|
||||
}
|
||||
if ($type == 0) $cartService->checkVipGoodsBuy($request->user(), $where['productId']);
|
||||
$res = $cartService->setCart($request->uid(), $where['productId'], $where['cartNum'], $where['uniqueId'], $type, $new, $where['combinationId'], $where['secKillId'], $where['bargainId'], $where['advanceId']);
|
||||
if (!$res) return app('json')->fail(100022);
|
||||
else return app('json')->success(['cartId' => $res]);
|
||||
|
||||
@ -220,7 +220,8 @@ if (!function_exists('make_path')) {
|
||||
} catch (\Exception $e) {
|
||||
if ($force)
|
||||
throw new \Exception($e->getMessage());
|
||||
return '无法创建文件夹,请检查您的上传目录权限:' . app()->getRootPath() . 'public' . DS . 'uploads' . DS . 'attach' . DS;
|
||||
// return '无法创建文件夹,请检查您的上传目录权限:' . app()->getRootPath() . 'public' . DS . 'uploads' . DS . 'attach' . DS;
|
||||
return '';
|
||||
}
|
||||
|
||||
}
|
||||
@ -1110,3 +1111,17 @@ if (!function_exists('dump_sql')) {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('stringToIntArray')) {
|
||||
|
||||
/**
|
||||
* 处理ids等并过滤参数
|
||||
* @param string $string
|
||||
* @param string $separator
|
||||
* @return array
|
||||
*/
|
||||
function stringToIntArray(string $string, string $separator = ',')
|
||||
{
|
||||
return !empty($string) ? array_unique(array_diff(array_map('intval', explode($separator, $string)), [0])) : [];
|
||||
}
|
||||
}
|
||||
|
||||
@ -82,7 +82,7 @@ class StoreOrderDao extends BaseDao
|
||||
$query->where('paid', 1)->where('status', 0)->where('refund_status', 0)->where('shipping_type', 2)->where('is_del', 0);
|
||||
break;
|
||||
case 6://已支付 已核销 没有退款
|
||||
$query->where('paid', 1)->where('status', 2)->where('refund_status', 0)->where('shipping_type', 2)->where('is_del', 0);
|
||||
$query->where('paid', 1)->whereIn('status', [2,3])->where('refund_status', 0)->where('shipping_type', 2)->where('is_del', 0);
|
||||
break;
|
||||
case -1://退款中
|
||||
$query->where('paid', 1)->whereIn('refund_status', [1, 4])->where('is_del', 0);
|
||||
@ -174,7 +174,7 @@ class StoreOrderDao extends BaseDao
|
||||
}
|
||||
})->when($realName && !$fieldKey, function ($query) use ($where) {
|
||||
$query->where(function ($que) use ($where) {
|
||||
$que->whereLike('order_id|real_name', '%' . $where['real_name'] . '%')->whereOr('uid', 'in', function ($q) use ($where) {
|
||||
$que->whereLike('order_id|real_name|user_phone', '%' . $where['real_name'] . '%')->whereOr('uid', 'in', function ($q) use ($where) {
|
||||
$q->name('user')->whereLike('nickname|uid|phone', '%' . $where['real_name'] . '%')->field(['uid'])->select();
|
||||
})->whereOr('id', 'in', function ($que) use ($where) {
|
||||
$que->name('store_order_cart_info')->whereIn('product_id', function ($q) use ($where) {
|
||||
|
||||
@ -38,7 +38,7 @@ class StoreProductLogDao extends BaseDao
|
||||
'SUM(pay_num) as pay',
|
||||
'SUM(pay_price * pay_num) as price',
|
||||
'SUM(cost_price) as cost',
|
||||
'ROUND((SUM(pay_price)-SUM(cost_price))/SUM(cost_price),2) as profit',
|
||||
'ROUND((SUM(pay_price)-SUM(cost_price))/SUM(pay_price),2) as profit',
|
||||
'SUM(collect_num) as collect',
|
||||
'ROUND((COUNT(distinct(pay_uid))-1)/COUNT(distinct(uid)),2) as changes',
|
||||
'COUNT(distinct(pay_uid))-1 as repeats'
|
||||
|
||||
@ -73,6 +73,7 @@ class UserBrokerageDao extends BaseDao
|
||||
public function brokerageRankList(array $where, int $page = 0, int $limit = 0)
|
||||
{
|
||||
//SUM(IF(pm=1,`number`,-`number`))
|
||||
if ($where['pm'] == 1) $where['not_type'] = ['extract_fail'];
|
||||
return $this->search($where)->field('uid,SUM(number) as brokerage_price')->with(['user' => function ($query) {
|
||||
$query->field('uid,avatar,nickname');
|
||||
}])->order('brokerage_price desc')->group('uid')->when($page && $limit, function ($query) use ($page, $limit) {
|
||||
@ -88,6 +89,7 @@ class UserBrokerageDao extends BaseDao
|
||||
*/
|
||||
public function getBrokerageSumColumn(array $where)
|
||||
{
|
||||
if ($where['pm'] == 1) $where['not_type'] = ['extract_fail'];
|
||||
if (isset($where['uid']) && is_array($where['uid'])) {
|
||||
return $this->search($where)->group('uid')->column('sum(number) as num', 'uid');
|
||||
} else
|
||||
|
||||
@ -134,4 +134,14 @@ class StoreCouponIssue extends BaseModel
|
||||
{
|
||||
if ($value) $query->whereLike('coupon_title', '%' . $value . '%');
|
||||
}
|
||||
|
||||
/**
|
||||
* 优惠券类型
|
||||
* @param Model $query
|
||||
* @param $value
|
||||
*/
|
||||
public function searchCouponTypeAttr($query, $value)
|
||||
{
|
||||
if ($value != '') $query->where('type', $value);
|
||||
}
|
||||
}
|
||||
|
||||
@ -871,7 +871,7 @@ class StoreBargainServices extends BaseServices
|
||||
}
|
||||
/** @var StoreBargainUserServices $services */
|
||||
$services = app()->make(StoreBargainUserServices::class);
|
||||
$bargainUser = $services->get(['bargain_id' => $bargainId, 'uid' => $user['uid']], ['price', 'bargain_price_min']);
|
||||
$bargainUser = $services->get(['bargain_id' => $bargainId, 'uid' => $user['uid'], 'status' => 1], ['price', 'bargain_price_min']);
|
||||
if (!$bargainUser) {
|
||||
throw new ApiException(410304);
|
||||
}
|
||||
@ -1029,7 +1029,7 @@ class StoreBargainServices extends BaseServices
|
||||
[$page, $limit] = $this->getPageValue();
|
||||
$where = $where + ['paid' => 1, 'refund_status' => 0, 'is_del' => 0];
|
||||
$list = $orderServices->bargainStatisticsOrder($id, $where, $page, $limit);
|
||||
$count = $orderServices->bargainStatisticsOrderCount($where);
|
||||
$count = $orderServices->bargainStatisticsOrderCount($id, $where);
|
||||
foreach ($list as &$item) {
|
||||
if ($item['status'] == 0) {
|
||||
if ($item['paid'] == 0) {
|
||||
|
||||
@ -662,7 +662,7 @@ class StoreCombinationServices extends BaseServices
|
||||
[$page, $limit] = $this->getPageValue();
|
||||
$where = $where + ['paid' => 1, 'refund_status' => 0, 'is_del' => 0];
|
||||
$list = $orderServices->combinationStatisticsOrder($id, $where, $page, $limit);
|
||||
$count = $orderServices->combinationStatisticsCount($where);
|
||||
$count = $orderServices->combinationStatisticsCount($id, $where);
|
||||
foreach ($list as &$item) {
|
||||
if ($item['status'] == 0) {
|
||||
if ($item['paid'] == 0) {
|
||||
|
||||
@ -89,6 +89,19 @@ class StoreCouponIssueServices extends BaseServices
|
||||
*/
|
||||
public function saveCoupon($data)
|
||||
{
|
||||
if ($data['id']) {
|
||||
$res = $this->dao->update($data['id'], [
|
||||
'coupon_title' => $data['coupon_title'],
|
||||
'title' => $data['coupon_title'],
|
||||
'total_count' => $data['total_count'],
|
||||
'remain_count' => $data['total_count'],
|
||||
'receive_limit' => $data['receive_limit'],
|
||||
'status' => $data['status'],
|
||||
]);
|
||||
if (!$res) throw new AdminException(100007);
|
||||
return (int)$data['id'];
|
||||
}
|
||||
|
||||
if ($data['start_time'] && $data['start_use_time']) {
|
||||
|
||||
if ($data['start_time'] < date('Y-m-d 00:00:00')) {
|
||||
|
||||
@ -210,46 +210,41 @@ class AgentLevelServices extends BaseServices
|
||||
|
||||
/**
|
||||
* 分销等级上浮
|
||||
* @param int $uid
|
||||
* @param array $userInfo
|
||||
* @param $storeBrokerageRatio
|
||||
* @param $storeBrokerageTwo
|
||||
* @param $spread_one_uid
|
||||
* @param $spread_two_uid
|
||||
* @return array|int[]
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
public function getAgentLevelBrokerage(int $uid, $userInfo = [])
|
||||
public function getAgentLevelBrokerage($storeBrokerageRatio, $storeBrokerageTwo, $spread_one_uid, $spread_two_uid)
|
||||
{
|
||||
$one_brokerage_up = $two_brokerage_up = $spread_one_uid = $spread_two_uid = 0;
|
||||
if (!$uid) {
|
||||
return [$one_brokerage_up, $two_brokerage_up, $spread_one_uid, $spread_two_uid];
|
||||
}
|
||||
//商城分销是否开启
|
||||
if (!sys_config('brokerage_func_status')) {
|
||||
return [$one_brokerage_up, $two_brokerage_up, $spread_one_uid, $spread_two_uid];
|
||||
}
|
||||
/** @var UserServices $userServices */
|
||||
$userServices = app()->make(UserServices::class);
|
||||
if (!$userInfo) {
|
||||
$userInfo = $userServices->getUserInfo($uid);
|
||||
}
|
||||
if (!$userInfo) {
|
||||
return [$one_brokerage_up, $two_brokerage_up, $spread_one_uid, $spread_two_uid];
|
||||
}
|
||||
//获取上级uid || 开启自购返回自己uid
|
||||
$spread_one_uid = $userServices->getSpreadUid($uid, $userInfo);
|
||||
$one_agent_level = 0;
|
||||
$two_agent_level = 0;
|
||||
$spread_two_uid = 0;
|
||||
if ($spread_one_uid > 0 && $one_user_info = $userServices->getUserInfo($spread_one_uid)) {
|
||||
$one_agent_level = $one_user_info['agent_level'] ?? 0;
|
||||
$spread_two_uid = $userServices->getSpreadUid($spread_one_uid, $one_user_info, false);
|
||||
if ($spread_two_uid > 0 && $two_user_info = $userServices->getUserInfo($spread_two_uid)) {
|
||||
$two_agent_level = $two_user_info['agent_level'] ?? 0;
|
||||
$one_agent_level = $userServices->value(['uid' => $spread_one_uid], 'agent_level') ?? 0;
|
||||
$two_agent_level = $userServices->value(['uid' => $spread_two_uid], 'agent_level') ?? 0;
|
||||
|
||||
if ($one_agent_level) {
|
||||
$oneLevelInfo = $this->getLevelInfo($one_agent_level);
|
||||
if ($oneLevelInfo['one_brokerage_percent'] == '0.00') {
|
||||
$storeBrokerageRatio = $storeBrokerageRatio + (($storeBrokerageRatio * $oneLevelInfo['one_brokerage'] ?? 0) / 100);
|
||||
} else {
|
||||
$storeBrokerageRatio = $oneLevelInfo['one_brokerage_percent'];
|
||||
}
|
||||
}
|
||||
$one_brokerage_up = $one_agent_level ? ($this->getLevelInfo($one_agent_level)['one_brokerage'] ?? 0) : 0;
|
||||
$two_brokerage_up = $two_agent_level ? ($this->getLevelInfo($two_agent_level)['two_brokerage'] ?? 0) : 0;
|
||||
return [$one_brokerage_up, $two_brokerage_up, $spread_one_uid, $spread_two_uid];
|
||||
|
||||
if ($two_agent_level) {
|
||||
$twoLevelInfo = $this->getLevelInfo($two_agent_level);
|
||||
if ($twoLevelInfo['two_brokerage_percent'] == '0.00') {
|
||||
$storeBrokerageTwo = $storeBrokerageTwo + (($storeBrokerageTwo * $twoLevelInfo['two_brokerage'] ?? 0) / 100);
|
||||
} else {
|
||||
$storeBrokerageTwo = $twoLevelInfo['two_brokerage_percent'];
|
||||
}
|
||||
}
|
||||
|
||||
return [$storeBrokerageRatio, $storeBrokerageTwo];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -263,16 +258,16 @@ class AgentLevelServices extends BaseServices
|
||||
$field[] = Form::input('name', '等级名称')->maxlength(8)->col(24);
|
||||
$field[] = Form::number('grade', '等级', 0)->min(0)->precision(0);
|
||||
$field[] = Form::frameImage('image', '背景图', Url::buildUrl(config('app.admin_prefix', 'admin') . '/widget.images/index', array('fodder' => 'image')))->icon('el-icon-picture-outline')->width('950px')->height('560px')->props(['footer' => false]);
|
||||
$field[] = Form::number('one_brokerage', '一级上浮', 0)->appendRule('suffix', [
|
||||
$field[] = Form::number('one_brokerage_percent', '一级佣金比例', 0)->appendRule('suffix', [
|
||||
'type' => 'div',
|
||||
'class' => 'tips-info',
|
||||
'domProps' => ['innerHTML' => '在分销一级佣金基础上浮(0-1000之间整数)百分比,目前一级返佣比率:10%,上浮5%,则返佣比率:一级返佣比率 * (1 + 一级上浮比率) = 10.50%']
|
||||
])->max(1000)->precision(0);
|
||||
$field[] = Form::number('two_brokerage', '二级上浮', 0)->appendRule('suffix', [
|
||||
'domProps' => ['innerHTML' => '到达该等级之后,一级分佣按照此比例计算佣金']
|
||||
])->max(100)->precision(2);
|
||||
$field[] = Form::number('two_brokerage_percent', '二级佣金比例', 0)->appendRule('suffix', [
|
||||
'type' => 'div',
|
||||
'class' => 'tips-info',
|
||||
'domProps' => ['innerHTML' => '在分销二级佣金基础上浮(0-1000之间整数)百分比,目前二级返佣比率:10%,上浮2%,则返佣比率:二级返佣比率 * (1 + 二级上浮比率) = 5.10%']
|
||||
])->min(0)->max(1000)->precision(0);
|
||||
'domProps' => ['innerHTML' => '到达该等级之后,二级分佣按照此比例计算佣金']
|
||||
])->min(0)->max(100)->precision(2);
|
||||
$field[] = Form::radio('status', '是否显示', 1)->options([['value' => 1, 'label' => '显示'], ['value' => 0, 'label' => '隐藏']]);
|
||||
return create_form('添加分销员等级', $field, Url::buildUrl('/agent/level'), 'POST');
|
||||
}
|
||||
@ -293,16 +288,16 @@ class AgentLevelServices extends BaseServices
|
||||
$field[] = Form::input('name', '等级名称', $levelInfo['name'])->maxlength(8)->col(24);
|
||||
$field[] = Form::number('grade', '等级', $levelInfo['grade'])->min(0)->precision(0);
|
||||
$field[] = Form::frameImage('image', '背景图', Url::buildUrl(config('app.admin_prefix', 'admin') . '/widget.images/index', array('fodder' => 'image')), $levelInfo['image'])->icon('el-icon-picture-outline')->width('950px')->height('560px')->props(['footer' => false]);
|
||||
$field[] = Form::number('one_brokerage', '一级上浮', $levelInfo['one_brokerage'])->appendRule('suffix', [
|
||||
$field[] = Form::number('one_brokerage_percent', '一级佣金比例', $levelInfo['one_brokerage_percent'])->appendRule('suffix', [
|
||||
'type' => 'div',
|
||||
'class' => 'tips-info',
|
||||
'domProps' => ['innerHTML' => '在分销一级佣金基础上浮(0-1000之间整数)百分比,目前一级返佣比率:10%,上浮5%,则返佣比率:一级返佣比率 * (1 + 一级上浮比率) = 10.50%']
|
||||
])->min(0)->max(1000)->precision(0);
|
||||
$field[] = Form::number('two_brokerage', '二级上浮', $levelInfo['two_brokerage'])->appendRule('suffix', [
|
||||
'domProps' => ['innerHTML' => '到达该等级之后,一级分佣按照此比例计算佣金']
|
||||
])->max(100)->precision(2);
|
||||
$field[] = Form::number('two_brokerage_percent', '二级佣金比例', $levelInfo['two_brokerage_percent'])->appendRule('suffix', [
|
||||
'type' => 'div',
|
||||
'class' => 'tips-info',
|
||||
'domProps' => ['innerHTML' => '在分销二级佣金基础上浮(0-1000之间整数)百分比,目前二级返佣比率:10%,上浮2%,则返佣比率:二级返佣比率 * (1 + 二级上浮比率) = 5.10%']
|
||||
])->min(0)->max(1000)->precision(0);
|
||||
'domProps' => ['innerHTML' => '到达该等级之后,二级分佣按照此比例计算佣金']
|
||||
])->min(0)->max(100)->precision(2);
|
||||
$field[] = Form::radio('status', '是否显示', $levelInfo['status'])->options([['value' => 1, 'label' => '显示'], ['value' => 0, 'label' => '隐藏']]);
|
||||
|
||||
return create_form('编辑分销员等级', $field, Url::buildUrl('/agent/level/' . $id), 'PUT');
|
||||
|
||||
@ -47,6 +47,8 @@ class AgentManageServices extends BaseServices
|
||||
$data = $userServices->getAgentUserList($where, '*', $is_page);
|
||||
/** @var UserBrokerageServices $frozenPrices */
|
||||
$frozenPrices = app()->make(UserBrokerageServices::class);
|
||||
/** @var StoreOrderServices $orderServices */
|
||||
$orderServices = app()->make(StoreOrderServices::class);
|
||||
foreach ($data['list'] as &$item) {
|
||||
$item['headimgurl'] = $item['avatar'];
|
||||
$item['extract_count_price'] = $item['extract'][0]['extract_count_price'] ?? 0;
|
||||
@ -71,6 +73,7 @@ class AgentManageServices extends BaseServices
|
||||
if (strpos($item['headimgurl'], '/statics/system_images/') !== false) {
|
||||
$item['headimgurl'] = set_file_url($item['headimgurl']);
|
||||
}
|
||||
$item['spread_order'] = $orderServices->get(['spread_uid' => $item['uid'], 'paid' => 1, 'refund_status' => 0, 'pid' => 0], ['sum(pay_price) as order_price','count(id) as order_count']);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
@ -14,9 +14,9 @@ use crmeb\exceptions\AdminException;
|
||||
use crmeb\exceptions\ApiException;
|
||||
use crmeb\services\FormBuilder as Form;
|
||||
use app\services\other\UploadService;
|
||||
use think\facade\Config;
|
||||
use think\facade\Log;
|
||||
use think\facade\Route;
|
||||
use think\facade\Config;
|
||||
|
||||
class DivisionAgentApplyServices extends BaseServices
|
||||
{
|
||||
|
||||
@ -726,4 +726,20 @@ class StoreCartServices extends BaseServices
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否非付费会员购买会员专属商品
|
||||
* @param $user
|
||||
* @param $pid
|
||||
* @return bool
|
||||
* @author: 吴汐
|
||||
* @email: 442384644@qq.com
|
||||
* @date: 2023/10/30
|
||||
*/
|
||||
public function checkVipGoodsBuy($user, $pid)
|
||||
{
|
||||
$is_vip_product = app()->make(StoreProductServices::class)->value(['id' => $pid], 'vip_product');
|
||||
if ($is_vip_product == 1 && $user['is_money_level'] == 0) throw new ApiException('此商品为付费会员专属,您无权购买');
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -305,9 +305,8 @@ class StoreOrderComputedServices extends BaseServices
|
||||
* @param array $userInfo
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderPriceGroup($storeFreePostage, $cartInfo, $addr, $userInfo = [])
|
||||
public function getOrderPriceGroup($storeFreePostage, $cartInfo, $addr, $userInfo = [], $shipping_type = 1)
|
||||
{
|
||||
$sumPrice = $totalPrice = $costPrice = $vipPrice = 0;
|
||||
$storePostage = 0;
|
||||
$storePostageDiscount = 0;
|
||||
$isStoreFreePostage = false;//是否满额包邮
|
||||
@ -321,12 +320,17 @@ class StoreOrderComputedServices extends BaseServices
|
||||
// 判断商品包邮和固定运费
|
||||
foreach ($cartInfo as $key => &$item) {
|
||||
$item['postage_price'] = 0;
|
||||
if ($item['productInfo']['freight'] == 1) {
|
||||
$item['postage_price'] = 0;
|
||||
} elseif ($item['productInfo']['freight'] == 2) {
|
||||
$item['postage_price'] = bcmul((string)$item['productInfo']['postage'], (string)$item['cart_num'], 2);
|
||||
$item['origin_postage_price'] = bcmul((string)$item['productInfo']['postage'], (string)$item['cart_num'], 2);
|
||||
$storePostage = bcadd((string)$storePostage, (string)$item['postage_price'], 2);
|
||||
if ($shipping_type == 1) {
|
||||
if ($item['productInfo']['freight'] == 1) {
|
||||
$item['postage_price'] = 0;
|
||||
} elseif ($item['productInfo']['freight'] == 2) {
|
||||
$item['postage_price'] = bcmul((string)$item['productInfo']['postage'], (string)$item['cart_num'], 2);
|
||||
$item['origin_postage_price'] = bcmul((string)$item['productInfo']['postage'], (string)$item['cart_num'], 2);
|
||||
$storePostage = bcadd((string)$storePostage, (string)$item['postage_price'], 2);
|
||||
}
|
||||
if ($sumPrice >= $storeFreePostage) {
|
||||
$item['postage_price'] = $item['origin_postage_price'] = $storePostage = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
$postageArr = [];
|
||||
|
||||
@ -450,9 +450,15 @@ class StoreOrderCreateServices extends BaseServices
|
||||
$isCommission = 0;
|
||||
if ($order['combination_id']) {
|
||||
//检测拼团是否参与返佣
|
||||
/** @var StoreCombinationServices $combinationServices */
|
||||
$combinationServices = app()->make(StoreCombinationServices::class);
|
||||
$isCommission = $combinationServices->value(['id' => $order['combination_id']], 'is_commission');
|
||||
$isCommission = app()->make(StoreCombinationServices::class)->value(['id' => $order['combination_id']], 'is_commission');
|
||||
}
|
||||
if ($order['seckill_id']) {
|
||||
//检测秒杀是否参与返佣
|
||||
$isCommission = app()->make(StoreSeckillServices::class)->value(['id' => $order['seckill_id']], 'is_commission');
|
||||
}
|
||||
if ($order['bargain_id']) {
|
||||
//检测砍价是否参与返佣
|
||||
$isCommission = app()->make(StoreBargainServices::class)->value(['id' => $order['bargain_id']], 'is_commission');
|
||||
}
|
||||
if ($cartInfo && (!$activity || $isCommission)) {
|
||||
/** @var StoreOrderComputedServices $orderComputed */
|
||||
@ -510,7 +516,7 @@ class StoreOrderCreateServices extends BaseServices
|
||||
}
|
||||
}
|
||||
try {
|
||||
[$cartInfo, $spread_ids] = $this->computeOrderProductBrokerage($uid, $cartInfo, $orderInfo);
|
||||
[$cartInfo, $spread_ids] = $this->computeOrderProductBrokerage($uid, $cartInfo);
|
||||
} catch (\Throwable $e) {
|
||||
Log::error('订单商品结算失败,File:' . $e->getFile() . ',Line:' . $e->getLine() . ',Message:' . $e->getMessage());
|
||||
throw new ApiException(410248);
|
||||
@ -767,19 +773,10 @@ class StoreOrderCreateServices extends BaseServices
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
public function computeOrderProductBrokerage(int $uid, array $cartInfo, $orderInfo)
|
||||
public function computeOrderProductBrokerage(int $uid, array $cartInfo)
|
||||
{
|
||||
/** @var AgentLevelServices $agentLevelServices */
|
||||
$agentLevelServices = app()->make(AgentLevelServices::class);
|
||||
[$one_brokerage_up, $two_brokerage_up, $spread_one_uid, $spread_two_uid] = $agentLevelServices->getAgentLevelBrokerage($uid);
|
||||
|
||||
$BrokerageOne = sys_config('store_brokerage_ratio') != '' ? sys_config('store_brokerage_ratio') : 0;
|
||||
$BrokerageTwo = sys_config('store_brokerage_two') != '' ? sys_config('store_brokerage_two') : 0;
|
||||
$storeBrokerageRatio = $BrokerageOne + (($BrokerageOne * $one_brokerage_up) / 100);
|
||||
$storeBrokerageTwo = $BrokerageTwo + (($BrokerageTwo * $two_brokerage_up) / 100);
|
||||
if (sys_config('brokerage_level') == 1) {
|
||||
$storeBrokerageTwo = $spread_two_uid = 0;
|
||||
}
|
||||
[$storeBrokerageRatio, $storeBrokerageTwo, $spread_one_uid, $spread_two_uid] = $this->getSpreadDate($uid);
|
||||
|
||||
/** @var DivisionServices $divisionService */
|
||||
$divisionService = app()->make(DivisionServices::class);
|
||||
@ -844,4 +841,52 @@ class StoreOrderCreateServices extends BaseServices
|
||||
|
||||
return [$cartInfo, [$spread_one_uid, $spread_two_uid]];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取计算好的佣金比例以及返佣人员uid
|
||||
* @param int $uid
|
||||
* @return array|int[]
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @author: 吴汐
|
||||
* @email: 442384644@qq.com
|
||||
* @date: 2023/10/8
|
||||
*/
|
||||
public function getSpreadDate(int $uid)
|
||||
{
|
||||
//商城分销是否开启,用户uid是否存在,全部返回0
|
||||
if (!sys_config('brokerage_func_status') || !$uid) {
|
||||
return [0, 0, 0, 0];
|
||||
}
|
||||
|
||||
//获取用户信息,获取不到全部返回0
|
||||
/** @var UserServices $userServices */
|
||||
$userServices = app()->make(UserServices::class);
|
||||
$userInfo = $userServices->getUserInfo($uid);
|
||||
if (!$userInfo) {
|
||||
return [0, 0, 0, 0];
|
||||
}
|
||||
|
||||
//获取系统一二级分佣比例
|
||||
$storeBrokerageRatio = sys_config('store_brokerage_ratio') != '' ? sys_config('store_brokerage_ratio') : 0;
|
||||
$storeBrokerageTwo = sys_config('store_brokerage_two') != '' ? sys_config('store_brokerage_two') : 0;
|
||||
|
||||
//获取上级和上上级的uid,开启自购获取自己和上级的uid
|
||||
$spread_one_uid = $userServices->getSpreadUid($uid, $userInfo);
|
||||
$spread_two_uid = 0;
|
||||
if ($spread_one_uid > 0 && $one_user_info = $userServices->getUserInfo($spread_one_uid)) {
|
||||
$spread_two_uid = $userServices->getSpreadUid($spread_one_uid, $one_user_info, false);
|
||||
}
|
||||
|
||||
//计算分销等级之后的佣金比例
|
||||
[$storeBrokerageRatio, $storeBrokerageTwo] = app()->make(AgentLevelServices::class)->getAgentLevelBrokerage($storeBrokerageRatio, $storeBrokerageTwo, $spread_one_uid, $spread_two_uid);
|
||||
|
||||
//判断返佣层级为一级时,将二级用户uid和二级分佣比例改为0
|
||||
if (sys_config('brokerage_level') == 1) {
|
||||
$storeBrokerageTwo = $spread_two_uid = 0;
|
||||
}
|
||||
return [$storeBrokerageRatio, $storeBrokerageTwo, $spread_one_uid, $spread_two_uid];
|
||||
}
|
||||
}
|
||||
|
||||
@ -602,6 +602,7 @@ class StoreOrderRefundServices extends BaseServices
|
||||
$order['nickname'] = $userInfo['nickname'];
|
||||
$order['phone'] = $userInfo['phone'];
|
||||
if (in_array($order['pay_type'], ['weixin', 'alipay', 'allinpay', 'offline'])) {
|
||||
$order['refund_price'] = $refund_price;
|
||||
$capitalFlowServices->setFlow($order, 'refund');
|
||||
}
|
||||
|
||||
|
||||
@ -17,6 +17,7 @@ use app\services\activity\combination\StorePinkServices;
|
||||
use app\services\activity\seckill\StoreSeckillServices;
|
||||
use app\services\BaseServices;
|
||||
use app\services\other\PosterServices;
|
||||
use app\services\other\UploadService;
|
||||
use app\services\pay\OrderPayServices;
|
||||
use app\services\pay\PayServices;
|
||||
use app\services\product\product\StoreProductLogServices;
|
||||
@ -34,13 +35,14 @@ use app\services\wechat\WechatUserServices;
|
||||
use crmeb\exceptions\AdminException;
|
||||
use crmeb\exceptions\ApiException;
|
||||
use crmeb\exceptions\PayException;
|
||||
use crmeb\services\app\MiniProgramService;
|
||||
use crmeb\services\CacheService;
|
||||
use crmeb\services\easywechat\orderShipping\MiniOrderService;
|
||||
use crmeb\services\FormBuilder as Form;
|
||||
use crmeb\services\printer\Printer;
|
||||
use crmeb\services\SystemConfigService;
|
||||
use crmeb\utils\Arr;
|
||||
use think\exception\ValidateException;
|
||||
use Guzzle\Http\EntityBody;
|
||||
use think\facade\Log;
|
||||
|
||||
/**
|
||||
@ -1648,7 +1650,7 @@ HTML;
|
||||
}
|
||||
/** @var StoreOrderComputedServices $computedServices */
|
||||
$computedServices = app()->make(StoreOrderComputedServices::class);
|
||||
$priceGroup = $computedServices->getOrderPriceGroup($storeFreePostage, $validCartInfo, $addr, $user);
|
||||
$priceGroup = $computedServices->getOrderPriceGroup($storeFreePostage, $validCartInfo, $addr, $user, $shipping_type);
|
||||
$validCartInfo = $priceGroup['cartInfo'] ?? $validCartInfo;
|
||||
$other = [
|
||||
'offlinePostage' => sys_config('offline_postage'),
|
||||
@ -2438,22 +2440,61 @@ HTML;
|
||||
$storeServices = app()->make(SystemStoreServices::class);
|
||||
$order['system_store'] = $storeServices->getStoreDispose($order['store_id']);
|
||||
}
|
||||
$order['code'] = '';
|
||||
if (($order['shipping_type'] === 2 || $order['delivery_uid'] != 0) && $order['verify_code']) {
|
||||
$name = $order['verify_code'] . '.jpg';
|
||||
/** @var SystemAttachmentServices $attachmentServices */
|
||||
$attachmentServices = app()->make(SystemAttachmentServices::class);
|
||||
$imageInfo = $attachmentServices->getInfo(['name' => $name]);
|
||||
$siteUrl = sys_config('site_url');
|
||||
if (!$imageInfo) {
|
||||
$imageInfo = PosterServices::getQRCodePath($order['verify_code'], $name);
|
||||
if (is_array($imageInfo)) {
|
||||
$attachmentServices->attachmentAdd($imageInfo['name'], $imageInfo['size'], $imageInfo['type'], $imageInfo['dir'], $imageInfo['thumb_path'], 1, $imageInfo['image_type'], $imageInfo['time'], 2);
|
||||
// $name = $order['verify_code'] . '.jpg';
|
||||
// /** @var SystemAttachmentServices $attachmentServices */
|
||||
// $attachmentServices = app()->make(SystemAttachmentServices::class);
|
||||
// $imageInfo = $attachmentServices->getInfo(['name' => $name]);
|
||||
// $siteUrl = sys_config('site_url');
|
||||
// if (!$imageInfo) {
|
||||
// $imageInfo = PosterServices::getQRCodePath($order['verify_code'], $name);
|
||||
// if (is_array($imageInfo)) {
|
||||
// $attachmentServices->attachmentAdd($imageInfo['name'], $imageInfo['size'], $imageInfo['type'], $imageInfo['dir'], $imageInfo['thumb_path'], 1, $imageInfo['image_type'], $imageInfo['time'], 2);
|
||||
// $url = $imageInfo['dir'];
|
||||
// } else
|
||||
// $url = '';
|
||||
// } else $url = $imageInfo['att_dir'];
|
||||
// if (isset($imageInfo['image_type']) && $imageInfo['image_type'] == 1) $url = $siteUrl . $url;
|
||||
// $order['code'] = $url;
|
||||
try {
|
||||
$verifyName = 'verify_code_' . $order['verify_code'] . '.jpg';
|
||||
$data = 'verify_code=' . $order['verify_code'];
|
||||
/** @var SystemAttachmentServices $systemAttachmentService */
|
||||
$systemAttachmentService = app()->make(SystemAttachmentServices::class);
|
||||
$imageInfo = $systemAttachmentService->getOne(['name' => $verifyName]);
|
||||
$siteUrl = sys_config('site_url');
|
||||
if (!$imageInfo) {
|
||||
$res = MiniProgramService::appCodeUnlimitService($data, 'pages/admin/order_cancellation/index', 280);
|
||||
if (!$res) throw new ApiException('小程序核销码生成失败');
|
||||
$uploadType = (int)sys_config('upload_type', 1);
|
||||
$upload = UploadService::init();
|
||||
$res = (string)EntityBody::factory($res);
|
||||
$res = $upload->to('routine/product')->validate()->setAuthThumb(false)->stream($res, $verifyName);
|
||||
if ($res === false) throw new ApiException('小程序核销码生成失败');
|
||||
$imageInfo = $upload->getUploadInfo();
|
||||
$imageInfo['image_type'] = $uploadType;
|
||||
if ($imageInfo['image_type'] == 1) $remoteImage = PosterServices::remoteImage($siteUrl . $imageInfo['dir']);
|
||||
else $remoteImage = PosterServices::remoteImage($imageInfo['dir']);
|
||||
if (!$remoteImage['status']) throw new ApiException('小程序核销码生成失败');
|
||||
$systemAttachmentService->save([
|
||||
'name' => $imageInfo['name'],
|
||||
'att_dir' => $imageInfo['dir'],
|
||||
'satt_dir' => $imageInfo['thumb_path'],
|
||||
'att_size' => $imageInfo['size'],
|
||||
'att_type' => $imageInfo['type'],
|
||||
'image_type' => $imageInfo['image_type'],
|
||||
'module_type' => 2,
|
||||
'time' => time(),
|
||||
'pid' => 1,
|
||||
'type' => 2
|
||||
]);
|
||||
$url = $imageInfo['dir'];
|
||||
} else
|
||||
$url = '';
|
||||
} else $url = $imageInfo['att_dir'];
|
||||
if (isset($imageInfo['image_type']) && $imageInfo['image_type'] == 1) $url = $siteUrl . $url;
|
||||
$order['code'] = $url;
|
||||
} else $url = $imageInfo['att_dir'];
|
||||
if ($imageInfo['image_type'] == 1) $url = $siteUrl . $url;
|
||||
$order['code'] = $url;
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
}
|
||||
$order['mapKey'] = sys_config('tengxun_map_key');
|
||||
$order['yue_pay_status'] = (int)sys_config('balance_func_status') && (int)sys_config('yue_pay_status') == 1 ? (int)1 : (int)2;//余额支付 1 开启 2 关闭
|
||||
@ -2523,9 +2564,31 @@ HTML;
|
||||
}
|
||||
|
||||
}
|
||||
$orderData['is_refund_available'] = $this->isRefundAvailable((int)$order['id']);
|
||||
return $orderData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测订单是否能退款
|
||||
* @param $oid
|
||||
* @return bool
|
||||
* @author: 吴汐
|
||||
* @email: 442384644@qq.com
|
||||
* @date: 2023/10/11
|
||||
*/
|
||||
public function isRefundAvailable($oid)
|
||||
{
|
||||
$refundTimeAvailable = (int)sys_config('refund_time_available');
|
||||
if ($refundTimeAvailable == 0) return true;
|
||||
$statusInfo = app()->make(StoreOrderStatusServices::class)->get(['oid' => $oid, 'change_type' => 'take_delivery']);
|
||||
if (!$statusInfo) return true;
|
||||
$changeTime = preg_match('/^\d+$/', $statusInfo['change_time']) ? intval($statusInfo['change_time']) : strtotime($statusInfo['change_time']);
|
||||
if (($changeTime + ($refundTimeAvailable * 86400)) < time()) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取确认订单页面是否展示快递配送和到店自提
|
||||
* @param $uid
|
||||
@ -2690,13 +2753,13 @@ HTML;
|
||||
{
|
||||
$orderInfo = $this->dao->get($id);
|
||||
if (!$orderInfo) {
|
||||
throw new ValidateException('取消的订单不存在');
|
||||
throw new AdminException('取消的订单不存在');
|
||||
}
|
||||
if (!$orderInfo->kuaidi_task_id || !$orderInfo->kuaidi_order_id) {
|
||||
throw new ValidateException('商家寄件订单信息不存在,无法取消');
|
||||
throw new AdminException('商家寄件订单信息不存在,无法取消');
|
||||
}
|
||||
if ($orderInfo->is_stock_up != 1) {
|
||||
throw new ValidateException('订单状态不正确,无法取消寄件');
|
||||
throw new AdminException('订单状态不正确,无法取消寄件');
|
||||
}
|
||||
|
||||
//发起取消商家寄件
|
||||
@ -2768,4 +2831,48 @@ HTML;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 配货单数据
|
||||
* @param $oid
|
||||
* @return array
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @author: 吴汐
|
||||
* @email: 442384644@qq.com
|
||||
* @date: 2023/10/11
|
||||
*/
|
||||
public function printShippingData($order_id)
|
||||
{
|
||||
$orderInfo = $this->dao->get(['order_id' => $order_id]);
|
||||
if (!$orderInfo) {
|
||||
throw new AdminException('订单不存在');
|
||||
}
|
||||
$orderInfo = $this->tidyOrder($orderInfo->toArray(), true);
|
||||
$data['user_name'] = $orderInfo['real_name'];
|
||||
$data['user_phone'] = $orderInfo['user_phone'];
|
||||
$data['user_address'] = $orderInfo['user_address'];
|
||||
$data['order_id'] = $orderInfo['order_id'];
|
||||
$data['pay_time'] = $orderInfo['_pay_time'];
|
||||
$data['pay_type'] = $orderInfo['_status']['_payType'];
|
||||
$data['pay_price'] = $orderInfo['pay_price'];
|
||||
$data['pay_postage'] = $orderInfo['pay_postage'];
|
||||
$data['deduction_price'] = $orderInfo['deduction_price'];
|
||||
$data['coupon_price'] = $orderInfo['coupon_price'];
|
||||
$data['mark'] = $orderInfo['mark'];
|
||||
$data['product_info'] = [];
|
||||
$data['vip_price'] = 0;
|
||||
foreach ($orderInfo['cartInfo'] as $item) {
|
||||
$data['product_info'][] = [
|
||||
'name' => $item['productInfo']['store_name'],
|
||||
'sku' => $item['attrInfo']['suk'],
|
||||
'price' => $item['sum_price'],
|
||||
'num' => $item['cart_num'],
|
||||
'sum_price' => bcmul((string)$item['sum_price'], (string)$item['cart_num'], 2)
|
||||
];
|
||||
$data['vip_price'] = bcadd((string)$data['vip_price'], $item['vip_sum_truePrice'], 2);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,8 +13,10 @@ namespace app\services\order;
|
||||
|
||||
|
||||
use app\dao\order\StoreOrderDao;
|
||||
use app\services\activity\bargain\StoreBargainServices;
|
||||
use app\services\activity\combination\StoreCombinationServices;
|
||||
use app\services\activity\combination\StorePinkServices;
|
||||
use app\services\activity\seckill\StoreSeckillServices;
|
||||
use app\services\BaseServices;
|
||||
use app\services\user\member\MemberCardServices;
|
||||
use app\services\user\UserBillServices;
|
||||
@ -351,10 +353,12 @@ class StoreOrderTakeServices extends BaseServices
|
||||
}
|
||||
}
|
||||
if (isset($orderInfo['seckill_id']) && $orderInfo['seckill_id']) {
|
||||
return true;
|
||||
$seckill_commission = app()->make(StoreSeckillServices::class)->value(['id' => $orderInfo['seckill_id']], 'is_commission');
|
||||
if (!$seckill_commission) return true;
|
||||
}
|
||||
if (isset($orderInfo['bargain_id']) && $orderInfo['bargain_id']) {
|
||||
return true;
|
||||
$bargain_commission = app()->make(StoreBargainServices::class)->value(['id' => $orderInfo['bargain_id']], 'is_commission');
|
||||
if (!$bargain_commission) return true;
|
||||
}
|
||||
//绑定失效
|
||||
if (isset($orderInfo['spread_uid']) && $orderInfo['spread_uid'] == -1) {
|
||||
|
||||
@ -74,7 +74,7 @@ class ExportServices extends BaseServices
|
||||
*/
|
||||
public function exportOrderList($where)
|
||||
{
|
||||
$header = ['订单号', '收货人姓名', '收货人电话', '收货地址', '商品信息', '总价格', '实际支付', '支付状态', '支付时间', '订单状态', '下单时间', '用户备注', '商家备注', '表单信息'];
|
||||
$header = ['订单号', '收货人姓名', '收货人电话', '收货地址', '商品名称', '规格', '数量', '价格', '总价格', '实际支付', '支付状态', '支付时间', '订单状态', '下单时间', '用户备注', '商家备注', '表单信息'];
|
||||
$filename = '订单列表_' . date('YmdHis', time());
|
||||
$export = $fileKey = [];
|
||||
/** @var StoreOrderServices $orderServices */
|
||||
@ -136,38 +136,63 @@ class ExportServices extends BaseServices
|
||||
}
|
||||
}
|
||||
|
||||
$goodsName = [];
|
||||
// $goodsName = [];
|
||||
// foreach ($item['_info'] as $value) {
|
||||
// $_info = $value['cart_info'];
|
||||
// $sku = '';
|
||||
// if (isset($_info['productInfo']['attrInfo'])) {
|
||||
// if (isset($_info['productInfo']['attrInfo']['suk'])) {
|
||||
// $sku = '(' . $_info['productInfo']['attrInfo']['suk'] . ')';
|
||||
// }
|
||||
// }
|
||||
// if (isset($_info['productInfo']['store_name'])) {
|
||||
// $goodsName[] = implode(' ',
|
||||
// [$_info['productInfo']['store_name'],
|
||||
// $sku,
|
||||
// "[{$_info['cart_num']} * {$_info['truePrice']}]"
|
||||
// ]);
|
||||
// }
|
||||
// }
|
||||
// $one_data = [
|
||||
// 'order_id' => $item['order_id'],
|
||||
// 'real_name' => $item['real_name'],
|
||||
// 'user_phone' => $item['user_phone'],
|
||||
// 'user_address' => $item['user_address'],
|
||||
// 'goods_name' => $goodsName ? implode("\n", $goodsName) : '',
|
||||
// 'total_price' => $item['total_price'],
|
||||
// 'pay_price' => $item['pay_price'],
|
||||
// 'pay_type_name' => $item['pay_type_name'],
|
||||
// 'pay_time' => $item['pay_time'] > 0 ? date('Y-m-d H:i', (int)$item['pay_time']) : '暂无',
|
||||
// 'status_name' => $item['status_name'] ?? '未知状态',
|
||||
// 'add_time' => $item['add_time'],
|
||||
// 'mark' => $item['mark'],
|
||||
// 'remark' => $item['remark'],
|
||||
// 'custom_form' => $custom_form,
|
||||
// ];
|
||||
$goodsInfo = [];
|
||||
foreach ($item['_info'] as $value) {
|
||||
$_info = $value['cart_info'];
|
||||
$sku = '';
|
||||
if (isset($_info['productInfo']['attrInfo'])) {
|
||||
if (isset($_info['productInfo']['attrInfo']['suk'])) {
|
||||
$sku = '(' . $_info['productInfo']['attrInfo']['suk'] . ')';
|
||||
}
|
||||
}
|
||||
if (isset($_info['productInfo']['store_name'])) {
|
||||
$goodsName[] = implode(' ',
|
||||
[$_info['productInfo']['store_name'],
|
||||
$sku,
|
||||
"[{$_info['cart_num']} * {$_info['truePrice']}]"
|
||||
]);
|
||||
}
|
||||
$goodsInfo[] = [
|
||||
$value['cart_info']['productInfo']['store_name'],
|
||||
$value['cart_info']['productInfo']['attrInfo']['suk'],
|
||||
$value['cart_info']['cart_num'],
|
||||
$value['cart_info']['truePrice'],
|
||||
];
|
||||
}
|
||||
$one_data = [
|
||||
'order_id' => $item['order_id'],
|
||||
'real_name' => $item['real_name'],
|
||||
'user_phone' => $item['user_phone'],
|
||||
'user_address' => $item['user_address'],
|
||||
'goods_name' => $goodsName ? implode("\n", $goodsName) : '',
|
||||
'total_price' => $item['total_price'],
|
||||
'pay_price' => $item['pay_price'],
|
||||
'pay_type_name' => $item['pay_type_name'],
|
||||
'pay_time' => $item['pay_time'] > 0 ? date('Y-m-d H:i', (int)$item['pay_time']) : '暂无',
|
||||
'status_name' => $item['status_name'] ?? '未知状态',
|
||||
'add_time' => $item['add_time'],
|
||||
'mark' => $item['mark'],
|
||||
'remark' => $item['remark'],
|
||||
'custom_form' => $custom_form,
|
||||
$item['order_id'],
|
||||
$item['real_name'],
|
||||
$item['user_phone'],
|
||||
$item['user_address'],
|
||||
$goodsInfo,
|
||||
$item['total_price'],
|
||||
$item['pay_price'],
|
||||
$item['pay_type_name'],
|
||||
$item['pay_time'] > 0 ? date('Y-m-d H:i', (int)$item['pay_time']) : '暂无',
|
||||
$item['status_name'] ?? '未知状态',
|
||||
$item['add_time'],
|
||||
$item['mark'],
|
||||
$item['remark'],
|
||||
$custom_form,
|
||||
];
|
||||
$export[] = $one_data;
|
||||
if ($i == 0) {
|
||||
@ -594,8 +619,8 @@ class ExportServices extends BaseServices
|
||||
$item['nickname'],
|
||||
$item['phone'],
|
||||
$item['spread_count'],
|
||||
$item['order_count'],
|
||||
$item['order_price'],
|
||||
$item['spread_order']['order_count'],
|
||||
$item['spread_order']['order_price'],
|
||||
$item['brokerage_money'],
|
||||
$item['extract_count_price'],
|
||||
$item['extract_count_num'],
|
||||
@ -604,7 +629,7 @@ class ExportServices extends BaseServices
|
||||
];
|
||||
}
|
||||
}
|
||||
$header = ['用户编号', '昵称', '电话号码', '推广用户数量', '订单数量', '推广订单金额', '佣金金额', '已提现金额', '提现次数', '未提现金额', '上级推广人'];
|
||||
$header = ['用户编号', '昵称', '电话号码', '推广用户数量', '推广订单数量', '推广订单金额', '佣金金额', '已提现金额', '提现次数', '未提现金额', '上级推广人'];
|
||||
$title = ['推广用户', '推广用户导出' . time(), ' 生成时间:' . date('Y-m-d H:i:s', time())];
|
||||
$filename = '推广用户_' . date('YmdHis', time());
|
||||
$suffix = 'xlsx';
|
||||
|
||||
@ -47,7 +47,7 @@ class OrderServices extends BaseServices
|
||||
/** @var StoreOrderServices $order */
|
||||
$order = app()->make(StoreOrderServices::class);
|
||||
$data['list'] = $order->getOrderApiList($where, $field, $with);
|
||||
$data['count'] = $order->count($where);
|
||||
$data['count'] = $order->dao->count($where, false);
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
@ -132,6 +132,7 @@ class CopyTaobaoServices extends BaseServices
|
||||
$productInfo['temp_id'] = 1;
|
||||
$productInfo['freight'] = 3;
|
||||
$productInfo['recommend'] = [];
|
||||
$productInfo['logistics'] = ['1', '2'];
|
||||
$data['productInfo'] = $productInfo;
|
||||
return $data;
|
||||
} else {
|
||||
|
||||
@ -1104,7 +1104,7 @@ class StoreProductServices extends BaseServices
|
||||
unset($where['productId']);
|
||||
}
|
||||
$where['vip_user'] = $uid ? app()->make(UserServices::class)->value(['uid' => $uid], 'is_money_level') : 0;
|
||||
$list = $this->dao->getSearchList($where, $page, $limit, ['id,store_name,cate_id,image,IFNULL(sales, 0) + IFNULL(ficti, 0) as sales,price,stock,activity,ot_price,spec_type,recommend_image,unit_name,is_vip,vip_price,is_virtual,presale,custom_form,virtual_type']);
|
||||
$list = $this->dao->getSearchList($where, $page, $limit, ['id,store_name,cate_id,image,IFNULL(sales, 0) + IFNULL(ficti, 0) as sales,price,stock,activity,ot_price,spec_type,recommend_image,unit_name,is_vip,vip_price,is_virtual,presale,custom_form,virtual_type,min_qty']);
|
||||
/** @var MemberCardServices $memberCardService */
|
||||
$memberCardService = app()->make(MemberCardServices::class);
|
||||
$vipStatus = $memberCardService->isOpenMemberCard('vip_price');
|
||||
|
||||
@ -75,6 +75,7 @@ class StoreProductAttrServices extends BaseServices
|
||||
} else {
|
||||
/** @var StoreProductVirtualServices $productVirtual */
|
||||
$productVirtual = app()->make(StoreProductVirtualServices::class);
|
||||
$cardStock = 0;
|
||||
foreach ($data['valueGroup'] as &$item) {
|
||||
$res = $storeProductAttrValueServices->save($item);
|
||||
if ($item['is_virtual'] && count($item['virtual_list']) && !$item['coupon_id'] && $item['disk_info'] == '') {
|
||||
@ -94,8 +95,10 @@ class StoreProductAttrServices extends BaseServices
|
||||
}
|
||||
$allStock = $productVirtual->count(['product_id' => $id, 'attr_unique' => $item['unique']]);
|
||||
$storeProductAttrValueServices->update(['id' => $res['id']], ['stock' => $allStock - $sales, 'sales' => $sales]);
|
||||
$cardStock = $cardStock + ($allStock - $sales);
|
||||
}
|
||||
}
|
||||
if ($cardStock > 0) $storeProductService->update($id, ['stock' => $cardStock]);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -82,19 +82,25 @@ class SystemClearServices extends BaseServices
|
||||
$valueJosn = str_replace('http://', 'http:\\\/\\\/', $url);
|
||||
$prefix = Config::get('database.connections.' . Config::get('database.default') . '.prefix');
|
||||
$sql = [
|
||||
"UPDATE `{$prefix}system_attachment` SET `att_dir` = replace(att_dir ,'{$siteUrl}','{$url}'),`satt_dir` = replace(satt_dir ,'{$siteUrl}','{$url}')",
|
||||
"UPDATE `{$prefix}store_product` SET `image` = replace(image ,'{$siteUrl}','{$url}'),`slider_image` = replace(slider_image ,'{$siteUrlJosn}','{$valueJosn}')",
|
||||
"UPDATE `{$prefix}store_product_attr_value` SET `image` = replace(image ,'{$siteUrl}','{$url}')",
|
||||
"UPDATE `{$prefix}store_seckill` SET `image` = replace(image ,'{$siteUrl}','{$url}'),`images` = replace(images,'{$siteUrlJosn}','{$valueJosn}')",
|
||||
"UPDATE `{$prefix}store_combination` SET `image` = replace(image ,'{$siteUrl}','{$url}'),`images` = replace(images,'{$siteUrlJosn}','{$valueJosn}')",
|
||||
"UPDATE `{$prefix}store_bargain` SET `image` = replace(image ,'{$siteUrl}','{$url}'),`images` = replace(images,'{$siteUrlJosn}','{$valueJosn}')",
|
||||
"UPDATE `{$prefix}system_config` SET `value` = replace(value ,'{$siteUrlJosn}','{$valueJosn}')",
|
||||
"UPDATE `{$prefix}article_category` SET `image` = replace(`image` ,'{$siteUrl}','{$url}')",
|
||||
"UPDATE `{$prefix}article` SET `image_input` = replace(`image_input` ,'{$siteUrl}','{$url}')",
|
||||
"UPDATE `{$prefix}article_category` SET `image` = replace(`image` ,'{$siteUrl}','{$url}')",
|
||||
"UPDATE `{$prefix}article_content` SET `content` = replace(`content` ,'{$siteUrl}','{$url}')",
|
||||
"UPDATE `{$prefix}store_category` SET `pic` = replace(`pic` ,'{$siteUrl}','{$url}')",
|
||||
"UPDATE `{$prefix}diy` SET `value` = replace(value ,'{$siteUrlJosn}','{$valueJosn}'),`default_value` = replace(default_value ,'{$siteUrlJosn}','{$valueJosn}')",
|
||||
"UPDATE `{$prefix}luck_lottery` SET `image` = replace(image ,'{$siteUrlJosn}','{$valueJosn}')",
|
||||
"UPDATE `{$prefix}luck_prize` SET `image` = replace(image ,'{$siteUrlJosn}','{$valueJosn}')",
|
||||
"UPDATE `{$prefix}store_bargain` SET `image` = replace(image ,'{$siteUrl}','{$url}'),`images` = replace(images,'{$siteUrlJosn}','{$valueJosn}')",
|
||||
"UPDATE `{$prefix}store_category` SET `pic` = replace(`pic` ,'{$siteUrl}','{$url}'),`big_pic` = replace(`big_pic` ,'{$siteUrl}','{$url}')",
|
||||
"UPDATE `{$prefix}store_combination` SET `image` = replace(image ,'{$siteUrl}','{$url}'),`images` = replace(images,'{$siteUrlJosn}','{$valueJosn}')",
|
||||
"UPDATE `{$prefix}store_integral` SET `image` = replace(image ,'{$siteUrl}','{$url}'),`images` = replace(images,'{$siteUrlJosn}','{$valueJosn}')",
|
||||
"UPDATE `{$prefix}store_product` SET `image` = replace(image ,'{$siteUrl}','{$url}'),`slider_image` = replace(slider_image ,'{$siteUrlJosn}','{$valueJosn}'),`recommend_image` = replace(recommend_image ,'{$siteUrlJosn}','{$valueJosn}')",
|
||||
"UPDATE `{$prefix}store_product_attr_result` SET `result` = replace(result ,'{$siteUrl}','{$url}')",
|
||||
"UPDATE `{$prefix}store_product_attr_value` SET `image` = replace(image ,'{$siteUrl}','{$url}')",
|
||||
"UPDATE `{$prefix}store_product_description` SET `description`= replace(description,'{$siteUrl}','{$url}')",
|
||||
"UPDATE `{$prefix}store_seckill` SET `image` = replace(image ,'{$siteUrl}','{$url}'),`images` = replace(images,'{$siteUrlJosn}','{$valueJosn}')",
|
||||
"UPDATE `{$prefix}system_attachment` SET `att_dir` = replace(att_dir ,'{$siteUrl}','{$url}'),`satt_dir` = replace(satt_dir ,'{$siteUrl}','{$url}')",
|
||||
"UPDATE `{$prefix}system_config` SET `value` = replace(value ,'{$siteUrlJosn}','{$valueJosn}')",
|
||||
"UPDATE `{$prefix}system_group_data` SET `value` = replace(value ,'{$siteUrlJosn}','{$valueJosn}')",
|
||||
"UPDATE `{$prefix}store_product_description` SET `description`= replace(description,'{$siteUrl}','{$url}')"
|
||||
"UPDATE `{$prefix}user` SET `avatar` = replace(avatar ,'{$siteUrlJosn}','{$valueJosn}')",
|
||||
];
|
||||
return $this->transaction(function () use ($sql) {
|
||||
try {
|
||||
|
||||
@ -243,7 +243,7 @@ class SystemMenusServices extends BaseServices
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
public function getMenus($roles): array
|
||||
public function getMenus($roles, $check = []): array
|
||||
{
|
||||
$field = ['menu_name', 'pid', 'id'];
|
||||
$where = ['is_del' => 0, 'is_show_path' => 1];
|
||||
@ -256,6 +256,9 @@ class SystemMenusServices extends BaseServices
|
||||
$ids = $service->getRoleIds($roles);
|
||||
$menus = $this->dao->getMenusRoule(['rule' => $ids] + $where, $field);
|
||||
}
|
||||
foreach ($menus as &$item) {
|
||||
$item['checked'] = in_array($item['id'], $check);
|
||||
}
|
||||
return $this->tidyMenuTier(false, $menus);
|
||||
}
|
||||
|
||||
|
||||
@ -54,28 +54,28 @@ class UpgradeServices extends BaseServices
|
||||
*/
|
||||
public function __construct(UpgradeLogDao $dao)
|
||||
{
|
||||
$versionData = $this->getVersion();
|
||||
if ($versionData['version_code'] < 450) return true;
|
||||
if (empty($versionData)) {
|
||||
throw new AdminException('授权信息丢失');
|
||||
}
|
||||
|
||||
$this->timeStamp = time();
|
||||
$recVersion = $this->recombinationVersion($versionData['version'] ?? '');
|
||||
$this->dao = $dao;
|
||||
|
||||
$this->requestData = [
|
||||
'nonce' => mt_rand(111, 999),
|
||||
'host' => app()->request->host(),
|
||||
'timestamp' => $this->timeStamp,
|
||||
'app_id' => trim($versionData['app_id'] ?? ''),
|
||||
'app_key' => trim($versionData['app_key'] ?? ''),
|
||||
'version' => implode('.', $recVersion)
|
||||
];
|
||||
|
||||
if (!CacheService::get('upgrade_auth_token')) {
|
||||
$this->getAuth();
|
||||
}
|
||||
// $versionData = $this->getVersion();
|
||||
// if ($versionData['version_code'] < 450) return true;
|
||||
// if (empty($versionData)) {
|
||||
// throw new AdminException('授权信息丢失');
|
||||
// }
|
||||
//
|
||||
// $this->timeStamp = time();
|
||||
// $recVersion = $this->recombinationVersion($versionData['version'] ?? '');
|
||||
// $this->dao = $dao;
|
||||
//
|
||||
// $this->requestData = [
|
||||
// 'nonce' => mt_rand(111, 999),
|
||||
// 'host' => app()->request->host(),
|
||||
// 'timestamp' => $this->timeStamp,
|
||||
// 'app_id' => trim($versionData['app_id'] ?? ''),
|
||||
// 'app_key' => trim($versionData['app_key'] ?? ''),
|
||||
// 'version' => implode('.', $recVersion)
|
||||
// ];
|
||||
//
|
||||
// if (!CacheService::get('upgrade_auth_token')) {
|
||||
// $this->getAuth();
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -124,6 +124,9 @@ class SystemAttachmentServices extends BaseServices
|
||||
}
|
||||
try {
|
||||
$path = make_path('attach', 2, true);
|
||||
if ($path === '') {
|
||||
throw new AdminException(400555);
|
||||
}
|
||||
$upload = UploadService::init($upload_type);
|
||||
$res = $upload->to($path)->validate()->move($file, $realName);
|
||||
if ($res === false) {
|
||||
|
||||
@ -405,7 +405,7 @@ class SystemConfigServices extends BaseServices
|
||||
break;
|
||||
default:
|
||||
$data['value'] = isset($data['value']) ? json_decode($data['value'], true) : '';
|
||||
if ($data['menu_name'] == 'api') {
|
||||
if ($data['menu_name'] == 'api' || $data['menu_name'] == 'routine_api') {
|
||||
$formbuider[] = $this->builder->input($data['menu_name'], $data['info'], strpos($data['value'], 'http') === false ? sys_config('site_url') . $data['value'] : $data['value'])->appendRule('suffix', [
|
||||
'type' => 'div',
|
||||
'class' => 'tips-info',
|
||||
|
||||
@ -35,8 +35,8 @@ class LangCodeServices extends BaseServices
|
||||
$typeList = $langTypeServices->getColumn([['status', '=', 1], ['is_del', '=', 0]], 'language_name,file_name,id', 'id');
|
||||
$langType = [
|
||||
'isAdmin' => [
|
||||
['title' => '用户端页面', 'value' => 0],
|
||||
['title' => '后端接口', 'value' => 1]
|
||||
['title' => '页面语言', 'value' => 0],
|
||||
['title' => '接口语言', 'value' => 1]
|
||||
]
|
||||
];
|
||||
foreach ($typeList as $value) {
|
||||
|
||||
@ -310,6 +310,13 @@ class SystemFileServices extends BaseServices
|
||||
//读取文件
|
||||
public function openfile($filepath)
|
||||
{
|
||||
//根目录
|
||||
$rootDir = $this->formatPath(app()->getRootPath());
|
||||
//防止查看站点以外的文件
|
||||
if (strpos($filepath, $rootDir) === false || $filepath == '') {
|
||||
throw new AdminException('无法打开站点以外的文件');
|
||||
}
|
||||
|
||||
$filepath = $this->formatPath($filepath);
|
||||
$content = FileClass::readFile($filepath);//防止页面内嵌textarea标签
|
||||
$ext = FileClass::getExt($filepath);
|
||||
|
||||
@ -773,7 +773,7 @@ class UserBillServices extends BaseServices
|
||||
}
|
||||
/** @var UserUserBrokerageServices $userUserBrokerage */
|
||||
$userUserBrokerage = app()->make(UserUserBrokerageServices::class);
|
||||
[$count, $list] = $userUserBrokerage->getBrokerageList($where_data, 'b.type,b.pm,sum(IF(b.pm = 1, b.number, 0)) as income,sum(IF(b.pm = 0, b.number, 0)) as pay,u.nickname,u.phone,u.uid,u.now_money,u.brokerage_price,b.add_time as time', $order_string, $limit);
|
||||
[$count, $list] = $userUserBrokerage->getBrokerageList($where_data, 'b.type,b.pm,sum(IF(b.pm = 1 AND b.type <> \'extract_fail\', b.number, 0)) as income,sum(IF(b.pm = 0, b.number, 0)) as pay,u.nickname,u.phone,u.uid,u.now_money,u.brokerage_price,b.add_time as time', $order_string, $limit);
|
||||
$uids = array_unique(array_column($list, 'uid'));
|
||||
/** @var UserExtractServices $userExtract */
|
||||
$userExtract = app()->make(UserExtractServices::class);
|
||||
|
||||
@ -349,6 +349,8 @@ class UserBrokerageServices extends BaseServices
|
||||
$data['uid'] = $uid;
|
||||
$data['pm'] = 1;
|
||||
$data['commissionSum'] = $this->getUsersBokerageSum($data);
|
||||
$extract_fail = $this->dao->sum(['uid' => $uid, 'pm' => 1, 'type' => 'extract_fail'], 'number');
|
||||
$data['commissionSum'] = bcadd($data['commissionSum'], $extract_fail, 2);
|
||||
$data['pm'] = 0;
|
||||
$data['commissionRefund'] = $this->getUsersBokerageSum($data);
|
||||
$data['commissionCount'] = $data['commissionSum'] > $data['commissionRefund'] ? bcsub((string)$data['commissionSum'], (string)$data['commissionRefund'], 2) : 0.00;
|
||||
|
||||
@ -233,19 +233,8 @@ class UserRechargeServices extends BaseServices
|
||||
|
||||
try {
|
||||
$recharge_type = $UserRecharge['recharge_type'];
|
||||
|
||||
if (sys_config('pay_wechat_type')) {
|
||||
$drivers = 'v3_wechat_pay';
|
||||
$trade_no = $UserRecharge['trade_no'];
|
||||
} else {
|
||||
$drivers = 'wechat_pay';
|
||||
$trade_no = $UserRecharge['order_id'];
|
||||
}
|
||||
/** @var Pay $pay */
|
||||
$pay = app()->make(Pay::class, [$drivers]);
|
||||
if ($recharge_type == 'weixin') {
|
||||
$refund_data['wechat'] = true;
|
||||
$pay->refund($trade_no, $refund_data);
|
||||
} else {
|
||||
$refund_data['trade_no'] = $UserRecharge['trade_no'];
|
||||
$refund_data['order_id'] = $UserRecharge['order_id'];
|
||||
@ -256,8 +245,20 @@ class UserRechargeServices extends BaseServices
|
||||
/** @var StoreOrderCreateServices $storeOrderCreateServices */
|
||||
$storeOrderCreateServices = app()->make(StoreOrderCreateServices::class);
|
||||
$refund_data['refund_no'] = $storeOrderCreateServices->getNewOrderId('tk');
|
||||
$pay->refund($UserRecharge['order_id'], $refund_data);
|
||||
}
|
||||
if ($recharge_type == 'allinpay') {
|
||||
$drivers = 'allin_pay';
|
||||
$trade_no = $UserRecharge['trade_no'];
|
||||
} elseif (sys_config('pay_wechat_type')) {
|
||||
$drivers = 'v3_wechat_pay';
|
||||
$trade_no = $UserRecharge['trade_no'];
|
||||
} else {
|
||||
$drivers = 'wechat_pay';
|
||||
$trade_no = $UserRecharge['order_id'];
|
||||
}
|
||||
/** @var Pay $pay */
|
||||
$pay = app()->make(Pay::class, [$drivers]);
|
||||
$pay->refund($trade_no, $refund_data);
|
||||
} catch (\Exception $e) {
|
||||
throw new AdminException($e->getMessage());
|
||||
}
|
||||
|
||||
@ -1995,7 +1995,7 @@ class UserServices extends BaseServices
|
||||
$this->dao->update(['uid' => $uid], ['is_money_level' => 0/*, 'overdue_time' => 0*/]);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
return $userInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -158,6 +158,8 @@ class UserSignServices extends BaseServices
|
||||
throw new ApiException(410032);
|
||||
}
|
||||
|
||||
$userServices->offMemberLevel($uid);
|
||||
|
||||
//检测今天是否已经签到
|
||||
if ($this->getIsSign($uid, 'today')) {
|
||||
throw new ApiException(410293);
|
||||
@ -257,7 +259,7 @@ class UserSignServices extends BaseServices
|
||||
/** @var UserBillServices $userBill */
|
||||
$userBill = app()->make(UserBillServices::class);
|
||||
$user['sum_integral'] = intval($userBill->getRecordCount($user['uid'], 'integral', 'sign,system_add,gain,lottery_add,product_gain,pay_product_integral_back'));
|
||||
$user['deduction_integral'] = intval($userBill->getRecordCount($user['uid'], 'integral', 'deduction,lottery_use,order_deduction', '', true) ?? 0);
|
||||
$user['deduction_integral'] = intval($userBill->getRecordCount($user['uid'], 'integral', 'deduction,lottery_use,order_deduction,storeIntegral_use', '', true) ?? 0);
|
||||
$user['today_integral'] = intval($userBill->getRecordCount($user['uid'], 'integral', 'sign,system_add,gain,product_gain,lottery_add,pay_product_integral_back', 'today'));
|
||||
/** @var UserBillServices $userBillServices */
|
||||
$userBillServices = app()->make(UserBillServices::class);
|
||||
@ -338,14 +340,14 @@ class UserSignServices extends BaseServices
|
||||
$nextContinuousDays = 0;
|
||||
foreach ($nextContinuousSignRewardList as $continuousNext) {
|
||||
if ($continuousSignDays < $continuousNext['days']) {
|
||||
$nextContinuousDays = $continuousNext['days'] - $continuousSignDays > 0 ?: 1;
|
||||
$nextContinuousDays = $continuousNext['days'] - $continuousSignDays > 0 ? $continuousNext['days'] - $continuousSignDays : 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$nextCumulativeDays = 0;
|
||||
foreach ($nextCumulativeSignRewardList as $cumulativeNext) {
|
||||
if ($cumulativeSignDays < $cumulativeNext['days']) {
|
||||
$nextCumulativeDays = $cumulativeNext['days'] - $cumulativeSignDays > 0 ?: 1;
|
||||
$nextCumulativeDays = $cumulativeNext['days'] - $cumulativeSignDays > 0 ? $cumulativeNext['days'] - $cumulativeSignDays : 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -264,7 +264,7 @@ class WechatUserServices extends BaseServices
|
||||
|
||||
/**
|
||||
* 微信授权成功后
|
||||
* @param array $data
|
||||
* @param $data
|
||||
* @return array|mixed|\think\Model|null
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
@ -273,8 +273,9 @@ class WechatUserServices extends BaseServices
|
||||
* @email 442384644@qq.com
|
||||
* @date 2023/02/24
|
||||
*/
|
||||
public function wechatOauthAfter(array $data)
|
||||
public function wechatOauthAfter($data)
|
||||
{
|
||||
if (!$data) throw new ApiException('用户信息获取失败,请刷新页面重试');
|
||||
[$openid, $wechatInfo, $spreadId, $login_type, $userType] = $data;
|
||||
/** @var UserServices $userServices */
|
||||
$userServices = app()->make(UserServices::class);
|
||||
|
||||
@ -989,7 +989,7 @@ class FileService
|
||||
$t3 = $this->objToStr($sheet->getCellByColumnAndRow(3, $i)->getValue());
|
||||
$t4 = $this->objToStr($sheet->getCellByColumnAndRow(4, $i)->getValue());
|
||||
$t5 = $this->objToStr($sheet->getCellByColumnAndRow(5, $i)->getValue());
|
||||
if ($t3 && $t4 && $t5) {
|
||||
if ($t3 && $t5) {
|
||||
$data[] = [
|
||||
'id' => $t1,
|
||||
'delivery_name' => $t3,
|
||||
|
||||
@ -40,10 +40,6 @@ class SystemConfigService
|
||||
|
||||
try {
|
||||
return $callable();
|
||||
// if ($isCaChe) {
|
||||
// return $callable();
|
||||
// }
|
||||
// return CacheService::remember($key, $callable);
|
||||
} catch (\Throwable $e) {
|
||||
return $default;
|
||||
}
|
||||
@ -64,10 +60,7 @@ class SystemConfigService
|
||||
return Arr::getDefaultValue($keys, $service->getConfigAll($keys));
|
||||
};
|
||||
try {
|
||||
if ($isCaChe)
|
||||
return $callable();
|
||||
|
||||
return CacheService::remember(md5(implode(',', $keys)), $callable);
|
||||
return $callable();
|
||||
} catch (\Throwable $e) {
|
||||
return Arr::getDefaultValue($keys);
|
||||
}
|
||||
|
||||
@ -95,7 +95,7 @@ class MiniProgramService
|
||||
*/
|
||||
public static function options()
|
||||
{
|
||||
$wechat = SystemConfigService::more(['wechat_app_appsecret', 'wechat_app_appid', 'site_url', 'routine_appId', 'routine_appsecret', 'wechat_token', 'wechat_encodingaeskey']);
|
||||
$wechat = SystemConfigService::more(['wechat_app_appsecret', 'wechat_app_appid', 'site_url', 'routine_appId', 'routine_appsecret', 'routine_token', 'routine_encodingaeskey']);
|
||||
$payment = SystemConfigService::more(['pay_weixin_mchid', 'pay_weixin_key', 'pay_weixin_client_cert', 'pay_weixin_client_key', 'pay_weixin_open', 'pay_new_weixin_open', 'pay_new_weixin_mchid']);
|
||||
$config = [];
|
||||
if (request()->isApp()) {
|
||||
@ -106,14 +106,14 @@ class MiniProgramService
|
||||
$appsecret = isset($wechat['routine_appsecret']) ? trim($wechat['routine_appsecret']) : '';
|
||||
}
|
||||
$config = [
|
||||
'token' => isset($wechat['wechat_token']) ? trim($wechat['wechat_token']) : '',
|
||||
'aes_key' => isset($wechat['wechat_encodingaeskey']) ? trim($wechat['wechat_encodingaeskey']) : '',
|
||||
'token' => isset($wechat['routine_token']) ? trim($wechat['routine_token']) : '',
|
||||
'aes_key' => isset($wechat['routine_encodingaeskey']) ? trim($wechat['routine_encodingaeskey']) : '',
|
||||
];
|
||||
$config['mini_program'] = [
|
||||
'app_id' => $appId,
|
||||
'secret' => $appsecret,
|
||||
'token' => isset($wechat['wechat_token']) ? trim($wechat['wechat_token']) : '',
|
||||
'aes_key' => isset($wechat['wechat_encodingaeskey']) ? trim($wechat['wechat_encodingaeskey']) : ''
|
||||
'token' => isset($wechat['routine_token']) ? trim($wechat['routine_token']) : '',
|
||||
'aes_key' => isset($wechat['routine_encodingaeskey']) ? trim($wechat['routine_encodingaeskey']) : ''
|
||||
];
|
||||
$config['payment'] = [
|
||||
'app_id' => $appId,
|
||||
|
||||
@ -151,11 +151,11 @@ class FeiEYun extends BasePrinter
|
||||
unset($price);
|
||||
}
|
||||
$this->printerContent .= '--------------------------------<BR>';
|
||||
$this->printerContent .= '合计:' . number_format($orderInfo['total_price'], 1) . '元<BR>';
|
||||
$this->printerContent .= '邮费:' . number_format($orderInfo['pay_postage'], 1) . '元<BR>';
|
||||
$this->printerContent .= '优惠:' . number_format($orderInfo['coupon_price'], 1) . '元<BR>';
|
||||
$this->printerContent .= '抵扣:' . number_format($orderInfo['deduction_price'], 1) . '元<BR>';
|
||||
$this->printerContent .= '实际支付:' . number_format($orderInfo['pay_price'], 1) . '元<BR>';
|
||||
$this->printerContent .= '合计:' . number_format($orderInfo['total_price'], 2) . '元<BR>';
|
||||
$this->printerContent .= '邮费:' . number_format($orderInfo['pay_postage'], 2) . '元<BR>';
|
||||
$this->printerContent .= '优惠:' . number_format($orderInfo['coupon_price'], 2) . '元<BR>';
|
||||
$this->printerContent .= '抵扣:' . number_format($orderInfo['deduction_price'], 2) . '元<BR>';
|
||||
$this->printerContent .= '实际支付:' . number_format($orderInfo['pay_price'], 2) . '元<BR>';
|
||||
$this->printerContent .= '<QR>' . $config['url'] . '</QR>';//把解析后的二维码生成的字符串用标签套上即可自动生成二维码
|
||||
return $this;
|
||||
}
|
||||
|
||||
@ -261,7 +261,10 @@ class Canvas
|
||||
if ($strlen !== false) {
|
||||
$path = substr($this->path, 8);
|
||||
}
|
||||
make_path($path, 4, true);
|
||||
|
||||
if (make_path($path, 4, true) === '') {
|
||||
throw new \RuntimeException(400555);
|
||||
}
|
||||
|
||||
$save_file = $this->path . $this->fileName . '.' . $this->imageType;
|
||||
switch ($this->imageType) {
|
||||
|
||||
@ -14,8 +14,8 @@ namespace crmeb\utils;
|
||||
|
||||
use app\services\other\UploadService;
|
||||
use crmeb\exceptions\AdminException;
|
||||
use think\Image;
|
||||
use think\facade\Config;
|
||||
use think\Image;
|
||||
|
||||
/**
|
||||
* 下载图片到本地
|
||||
|
||||
@ -75,6 +75,11 @@ class Translate extends V4Curl
|
||||
if ($resp->getStatusCode() != 200) {
|
||||
throw new ApiException("failed to translate: status_code=%d, resp=%s", $resp->getStatusCode(), $resp->getBody());
|
||||
}
|
||||
return json_decode($resp->getBody()->getContents(), true)["TranslationList"];
|
||||
$result = json_decode($resp->getBody()->getContents(), true);
|
||||
if (isset($result["TranslationList"])) {
|
||||
return $result["TranslationList"];
|
||||
} else {
|
||||
throw new ApiException("failed to translate: " . $result["ResponseMetadata"]['Error']['Message']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
crmeb/public/admin/system_static/css/app.9806600e.css
Normal file
1
crmeb/public/admin/system_static/css/app.9806600e.css
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
.box-container[data-v-7f68792c]{overflow:hidden}.box-container .list[data-v-7f68792c]{float:left;line-height:40px}.box-container .sp[data-v-7f68792c]{width:50%}.box-container .sp3[data-v-7f68792c]{width:33.3333%}.box-container .sp100[data-v-7f68792c]{width:100%}.box-container .list .name[data-v-7f68792c]{display:inline-block;width:150px;text-align:right;color:#606266}.box-container .list .blue[data-v-7f68792c]{color:var(--prev-color-primary)}.box-container .list.image[data-v-7f68792c]{margin-bottom:40px}.box-container .list.image img[data-v-7f68792c]{position:relative;top:40px}.el-textarea[data-v-7f68792c]{width:400px}.item[data-v-a6b38ede]{margin-bottom:10px}.upload-box[data-v-a6b38ede]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:60px;height:60px;background:#ccc}.box[data-v-a6b38ede],.upload-box[data-v-a6b38ede]{display:-webkit-box;display:-ms-flexbox;display:flex}.box[data-v-a6b38ede]{-ms-flex-wrap:wrap;flex-wrap:wrap}.box .box-item[data-v-a6b38ede]{position:relative;margin-right:20px}.box .box-item .ivu-icon[data-v-a6b38ede]{position:absolute;right:-10px;top:-8px;color:#999;cursor:pointer}.box .box-item[data-v-a6b38ede],.box .upload-box[data-v-a6b38ede]{width:60px;height:60px;margin-bottom:10px}.box .box-item img[data-v-a6b38ede],.box .upload-box img[data-v-a6b38ede]{width:100%;height:100%}[data-v-d90f7ce0] .goodList .ivu-input-group{width:200%!important}
|
||||
.box-container[data-v-7f68792c]{overflow:hidden}.box-container .list[data-v-7f68792c]{float:left;line-height:40px}.box-container .sp[data-v-7f68792c]{width:50%}.box-container .sp3[data-v-7f68792c]{width:33.3333%}.box-container .sp100[data-v-7f68792c]{width:100%}.box-container .list .name[data-v-7f68792c]{display:inline-block;width:150px;text-align:right;color:#606266}.box-container .list .blue[data-v-7f68792c]{color:var(--prev-color-primary)}.box-container .list.image[data-v-7f68792c]{margin-bottom:40px}.box-container .list.image img[data-v-7f68792c]{position:relative;top:40px}.el-textarea[data-v-7f68792c]{width:400px}.item[data-v-a6b38ede]{margin-bottom:10px}.upload-box[data-v-a6b38ede]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:60px;height:60px;background:#ccc}.box[data-v-a6b38ede],.upload-box[data-v-a6b38ede]{display:-webkit-box;display:-ms-flexbox;display:flex}.box[data-v-a6b38ede]{-ms-flex-wrap:wrap;flex-wrap:wrap}.box .box-item[data-v-a6b38ede]{position:relative;margin-right:20px}.box .box-item .ivu-icon[data-v-a6b38ede]{position:absolute;right:-10px;top:-8px;color:#999;cursor:pointer}.box .box-item[data-v-a6b38ede],.box .upload-box[data-v-a6b38ede]{width:60px;height:60px;margin-bottom:10px}.box .box-item img[data-v-a6b38ede],.box .upload-box img[data-v-a6b38ede]{width:100%;height:100%}[data-v-33e3ef7e] .goodList .ivu-input-group{width:200%!important}
|
||||
@ -0,0 +1 @@
|
||||
.card_box_cir1[data-v-50f2a66a] .iconfont{font-size:26px;color:#fff}.one[data-v-50f2a66a]{background:#e4ecff}.two[data-v-50f2a66a]{background:#fff3e0}.three[data-v-50f2a66a]{background:#eaf9e1}.four[data-v-50f2a66a]{background:#ffeaf4}.five[data-v-50f2a66a]{background:#f1e4ff}.one1[data-v-50f2a66a]{background:#4d7cfe}.two1[data-v-50f2a66a]{background:#ffab2b}.three1[data-v-50f2a66a]{background:#6dd230}.four1[data-v-50f2a66a]{background:#ff85c0}.five1[data-v-50f2a66a]{background:#b37feb}.card_box[data-v-50f2a66a]{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px}.card_box .card_box_cir[data-v-50f2a66a]{width:60px;height:60px;overflow:hidden;margin-right:20px}.card_box .card_box_cir .card_box_cir1[data-v-50f2a66a],.card_box .card_box_cir[data-v-50f2a66a]{border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.card_box .card_box_cir .card_box_cir1[data-v-50f2a66a]{width:48px;height:48px}.card_box .card_box_txt .sp1[data-v-50f2a66a]{display:block;color:#252631;font-size:24px}.card_box .card_box_txt .sp2[data-v-50f2a66a]{display:block;color:#98a9bc;font-size:12px}.Refresh[data-v-0bad4f21]{font-size:12px;color:var(--prev-color-primary);cursor:pointer}.ivu-form-item[data-v-0bad4f21]{margin-bottom:10px}.tabform[data-v-0bad4f21] .ivu-col{padding:0!important}.tabform[data-v-0bad4f21] .ivu-row-flex{margin:0!important}.withdrawal[data-v-0bad4f21] .item{margin-right:10px}.tab_data[data-v-0bad4f21] .ivu-form-item-content{margin-left:10px!important}.ivu-form-label-left[data-v-0bad4f21] .ivu-form-item-label{text-align:right}.customer[data-v-1ce641b4]{height:100%;background-color:#fff}.tabBox_img[data-v-1ce641b4]{width:36px;height:36px;border-radius:4px;cursor:pointer}.tabBox_img img[data-v-1ce641b4]{width:100%;height:100%}.modelBox .ivu-table-header[data-v-1ce641b4],.modelBox[data-v-1ce641b4]{width:100%!important}.trees-coadd[data-v-1ce641b4]{width:100%;height:385px}.trees-coadd .scollhide[data-v-1ce641b4]{width:100%;height:100%;overflow-x:hidden;overflow-y:scroll}.scollhide[data-v-1ce641b4]::-webkit-scrollbar{display:none}.footer[data-v-1ce641b4]{margin:15px 0;padding-right:20px}[data-v-1ce641b4] .el-form--inline .el-form-item{margin-bottom:0}.picBox[data-v-461cdd99]{display:inline-block;cursor:pointer}.picBox .upLoad[data-v-461cdd99]{width:58px;height:58px;line-height:58px;border:1px dotted rgba(0,0,0,.1);border-radius:4px;background:rgba(0,0,0,.02)}.picBox .pictrue[data-v-461cdd99]{width:60px;height:60px;border:1px dotted rgba(0,0,0,.1);margin-right:10px}.picBox .pictrue img[data-v-461cdd99]{width:100%;height:100%}.picBox .iconfont[data-v-461cdd99]{color:#898989}.QRpic[data-v-461cdd99]{width:180px;height:180px}.QRpic img[data-v-461cdd99]{width:100%;height:100%}.QRpic_sp1[data-v-461cdd99]{font-size:13px;color:#19be6b;cursor:pointer}.QRpic_sp2[data-v-461cdd99]{font-size:13px;color:#2d8cf0;cursor:pointer}img[data-v-461cdd99]{height:36px;display:block}.ivu-mt .name .item[data-v-461cdd99]{margin:3px 0}.tabform[data-v-461cdd99]{margin-bottom:10px}.Refresh[data-v-461cdd99]{font-size:12px;color:var(--prev-color-primary);cursor:pointer}.ivu-form-item[data-v-461cdd99]{margin-bottom:10px}
|
||||
@ -0,0 +1 @@
|
||||
.radio[data-v-224af4d2]{margin-bottom:14px}.radio[data-v-224af4d2] .name{width:125px;text-align:right;padding-right:12px}
|
||||
@ -1 +0,0 @@
|
||||
.tabBox_img[data-v-a1538fac]{width:36px;height:36px;border-radius:4px;cursor:pointer}.tabBox_img img[data-v-a1538fac]{width:100%;height:100%}
|
||||
@ -1 +0,0 @@
|
||||
input[data-v-72963ce8]{display:block;height:100%;background:none;color:inherit;opacity:1;-webkit-text-fill-color:currentcolor;font:inherit;line-height:inherit;letter-spacing:inherit;text-align:inherit;text-indent:inherit;text-transform:inherit;text-shadow:inherit;border:none}.priceChange[data-v-72963ce8]{position:fixed;width:5.8rem;height:6.7rem;background-color:#fff;border-radius:.1rem;top:50%;left:50%;margin-left:-2.9rem;margin-top:-3.35rem;z-index:99;transition:all .3s ease-in-out 0s;-webkit-transition:all .3s ease-in-out 0s;-o-transition:all .3s ease-in-out 0s;-moz-transition:all .3s ease-in-out 0s;-webkit-transform:scale(0);transform:scale(0);opacity:0}.priceChange.on[data-v-72963ce8]{opacity:1;transform:scale(1);-webkit-transform:scale(1);-o-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1)}.priceChange .priceTitle[data-v-72963ce8]{background:url(../../system_static/img/pricetitle.d0496d6f.jpg) no-repeat;background-size:100% 100%;width:100%;height:1.6rem;border-radius:.1rem .1rem 0 0;text-align:center;font-size:.4rem;color:#fff;line-height:1.6rem;position:relative}.priceChange .priceTitle .iconfontYI[data-v-72963ce8]{position:absolute;font-size:.4rem;right:.26rem;top:.23rem;width:.4rem;height:.4rem;line-height:.4rem}.priceChange .listChange[data-v-72963ce8]{padding:0 .4rem}.priceChange .listChange .item[data-v-72963ce8]{height:1.03rem;border-bottom:1px solid #e3e3e3;font-size:.32rem;color:#333}.priceChange .listChange .item .money[data-v-72963ce8]{color:#666;width:3rem;text-align:right}.priceChange .listChange .item .money .iconfontYI[data-v-72963ce8]{font-size:.32rem;margin-left:.2rem}.priceChange .listChange .item .money input[data-v-72963ce8]{width:100%;height:100%;text-align:right;color:#ccc;border:none}.priceChange .listChange .item .money input.on[data-v-72963ce8]{color:#666}.priceChange .modify[data-v-72963ce8]{color:#fff;background-color:#2291f8;margin:.53rem auto 0 auto}.priceChange .modify1[data-v-72963ce8],.priceChange .modify[data-v-72963ce8]{font-size:.32rem;width:4.9rem;height:.9rem;text-align:center;line-height:.9rem;border-radius:.45rem}.priceChange .modify1[data-v-72963ce8]{color:#312b2b;background-color:#eee;margin:.3rem auto 0 auto}.priceChange .listChange textarea[data-v-72963ce8]{border:1px solid #eee;width:100%;height:2rem;margin-top:.5rem;border-radius:.1rem;color:#333;padding:.2rem;font-size:.3rem}
|
||||
@ -0,0 +1 @@
|
||||
.box[data-v-25599488]{width:100%;height:100%;background:#fff}[data-v-25599488] .el-card__body{min-height:700px;padding:16px 16px 16px 0}[data-v-25599488] .conter .pictrueList{max-width:100%}
|
||||
@ -1 +0,0 @@
|
||||
.list[data-v-406d2a02]{height:80%;min-height:500px}.pictrue[data-v-406d2a02]{width:100%;max-width:300px;height:360px}.right[data-v-406d2a02]{padding-right:75px}.left[data-v-406d2a02]{padding-left:75px}.num[data-v-406d2a02]{margin-bottom:24px;color:#515a6e;font-weight:600;font-size:72px;line-height:72px}.desc[data-v-406d2a02]{margin-bottom:16px;color:#808695;font-size:20px;line-height:28px}
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@
|
||||
.card_box_cir1[data-v-50f2a66a] .iconfont{font-size:26px;color:#fff}.one[data-v-50f2a66a]{background:#e4ecff}.two[data-v-50f2a66a]{background:#fff3e0}.three[data-v-50f2a66a]{background:#eaf9e1}.four[data-v-50f2a66a]{background:#ffeaf4}.five[data-v-50f2a66a]{background:#f1e4ff}.one1[data-v-50f2a66a]{background:#4d7cfe}.two1[data-v-50f2a66a]{background:#ffab2b}.three1[data-v-50f2a66a]{background:#6dd230}.four1[data-v-50f2a66a]{background:#ff85c0}.five1[data-v-50f2a66a]{background:#b37feb}.card_box[data-v-50f2a66a]{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px}.card_box .card_box_cir[data-v-50f2a66a]{width:60px;height:60px;overflow:hidden;margin-right:20px}.card_box .card_box_cir .card_box_cir1[data-v-50f2a66a],.card_box .card_box_cir[data-v-50f2a66a]{border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.card_box .card_box_cir .card_box_cir1[data-v-50f2a66a]{width:48px;height:48px}.card_box .card_box_txt .sp1[data-v-50f2a66a]{display:block;color:#252631;font-size:24px}.card_box .card_box_txt .sp2[data-v-50f2a66a]{display:block;color:#98a9bc;font-size:12px}.article-manager[data-v-16a342c6]{margin-top:3px}.tabBox_img[data-v-16a342c6]{width:36px;height:36px;border-radius:4px;cursor:pointer}.tabBox_img img[data-v-16a342c6]{width:100%;height:100%}
|
||||
@ -1 +1 @@
|
||||
.df-cc[data-v-31821268]{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.df-cc[data-v-31821268],.steps-item[data-v-31821268]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.steps-item[data-v-31821268]{width:-webkit-max-content;width:-moz-max-content;width:max-content}.steps-item .dot[data-v-31821268]{width:28px;height:28px;color:#c0c4cc;border:1px solid #c0c4cc;border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-right:8px}.steps-item .title[data-v-31821268]{font-size:16px;font-weight:400;color:#909399;line-height:16px;white-space:nowrap}.steps-item .line[data-v-31821268]{height:1px;margin:0 20px;background:#ddd}.steps-item .wd160[data-v-31821268]{width:160px}.steps-item .wd120[data-v-31821268]{width:120px}.steps-item .wd100[data-v-31821268]{width:100px}.steps-item.active .title[data-v-31821268]{font-size:16px;font-weight:500;color:#303133;line-height:16px}.steps-item.active .dot[data-v-31821268]{width:28px;height:28px;background:var(--prev-color-primary);border:1px solid var(--prev-color-primary);color:#fff}.grey[data-v-35162228]{color:#999}.maxW[data-v-35162228] .ivu-select-dropdown{max-width:600px}.ivu-table-wrapper[data-v-35162228]{border-left:1px solid #dcdee2;border-top:1px solid #dcdee2}.tabBox_img[data-v-35162228]{width:50px;height:50px}.tabBox_img img[data-v-35162228]{width:100%;height:100%}.priceBox[data-v-35162228]{width:100%}.form .picBox[data-v-35162228],.form .pictrue[data-v-35162228]{display:inline-block;cursor:pointer}.form .pictrue[data-v-35162228]{width:60px;height:60px;border:1px dotted rgba(0,0,0,.1);margin-right:15px;position:relative}.form .pictrue img[data-v-35162228]{width:100%;height:100%}.form .pictrue .btndel[data-v-35162228]{position:absolute;z-index:9;width:20px!important;height:20px!important;left:46px;top:-4px}.form .upLoad[data-v-35162228]{width:58px;height:58px;line-height:58px;border:1px dotted rgba(0,0,0,.1);border-radius:4px;background:rgba(0,0,0,.02);cursor:pointer}.form .col[data-v-35162228]{color:#2d8cf0;cursor:pointer}
|
||||
.df-cc[data-v-31821268]{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.df-cc[data-v-31821268],.steps-item[data-v-31821268]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.steps-item[data-v-31821268]{width:-webkit-max-content;width:-moz-max-content;width:max-content}.steps-item .dot[data-v-31821268]{width:28px;height:28px;color:#c0c4cc;border:1px solid #c0c4cc;border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-right:8px}.steps-item .title[data-v-31821268]{font-size:16px;font-weight:400;color:#909399;line-height:16px;white-space:nowrap}.steps-item .line[data-v-31821268]{height:1px;margin:0 20px;background:#ddd}.steps-item .wd160[data-v-31821268]{width:160px}.steps-item .wd120[data-v-31821268]{width:120px}.steps-item .wd100[data-v-31821268]{width:100px}.steps-item.active .title[data-v-31821268]{font-size:16px;font-weight:500;color:#303133;line-height:16px}.steps-item.active .dot[data-v-31821268]{width:28px;height:28px;background:var(--prev-color-primary);border:1px solid var(--prev-color-primary);color:#fff}.grey[data-v-612103c6]{color:#999}.maxW[data-v-612103c6] .ivu-select-dropdown{max-width:600px}.ivu-table-wrapper[data-v-612103c6]{border-left:1px solid #dcdee2;border-top:1px solid #dcdee2}.tabBox_img[data-v-612103c6]{width:50px;height:50px}.tabBox_img img[data-v-612103c6]{width:100%;height:100%}.priceBox[data-v-612103c6]{width:100%}.form .picBox[data-v-612103c6],.form .pictrue[data-v-612103c6]{display:inline-block;cursor:pointer}.form .pictrue[data-v-612103c6]{width:60px;height:60px;border:1px dotted rgba(0,0,0,.1);margin-right:15px;position:relative}.form .pictrue img[data-v-612103c6]{width:100%;height:100%}.form .pictrue .btndel[data-v-612103c6]{position:absolute;z-index:9;width:20px!important;height:20px!important;left:46px;top:-4px}.form .upLoad[data-v-612103c6]{width:58px;height:58px;line-height:58px;border:1px dotted rgba(0,0,0,.1);border-radius:4px;background:rgba(0,0,0,.02);cursor:pointer}.form .col[data-v-612103c6]{color:#2d8cf0;cursor:pointer}
|
||||
@ -0,0 +1 @@
|
||||
.picBox[data-v-494d3bec]{display:inline-block;cursor:pointer}.picBox .upLoad[data-v-494d3bec]{width:58px;height:58px;line-height:58px;border:1px dotted rgba(0,0,0,.1);border-radius:4px;background:rgba(0,0,0,.02)}.picBox .pictrue[data-v-494d3bec]{width:60px;height:60px;border:1px dotted rgba(0,0,0,.1);margin-right:10px}.picBox .pictrue img[data-v-494d3bec]{width:100%;height:100%}.picBox .iconfont[data-v-494d3bec]{color:#898989}.mapBox[data-v-494d3bec] .ivu-modal-body{height:640px!important}
|
||||
@ -0,0 +1 @@
|
||||
.showOn[data-v-52237a78]{color:#2d8cf0;background:#f0faff;z-index:2}[data-v-52237a78] .ivu-menu-vertical .ivu-menu-item-group-title,[data-v-52237a78] .ivu-menu-vertical.ivu-menu-light:after{display:none}.left-wrapper[data-v-52237a78]{height:920px;background:#fff;border-right:1px solid #f2f2f2}.menu-item[data-v-52237a78]{z-index:50;position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;word-break:break-all}.menu-item .icon-box[data-v-52237a78]{z-index:3;position:absolute;right:20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:none}.menu-item:hover .icon-box[data-v-52237a78]{display:block}.menu-item .right-menu[data-v-52237a78]{z-index:10;position:absolute;right:-106px;top:-11px;width:auto;min-width:121px}
|
||||
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
.label-wrapper .list[data-v-37eb90ed]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.label-wrapper .list .label-item[data-v-37eb90ed]{margin:10px 8px 10px 0;padding:3px 8px;background:#eee;color:#333;border-radius:2px;cursor:pointer;font-size:12px}.label-wrapper .list .label-item.on[data-v-37eb90ed]{color:#fff;background:var(--prev-color-primary)}.label-wrapper .footer[data-v-37eb90ed]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;margin-top:40px}.label-wrapper .footer button[data-v-37eb90ed]{margin-left:10px}.btn[data-v-37eb90ed]{width:60px;height:24px}.title[data-v-37eb90ed]{font-size:13px}.list-box[data-v-37eb90ed]{overflow-y:auto;overflow-x:hidden;max-height:240px}.label-box[data-v-37eb90ed]{margin-bottom:10px}.customer[data-v-2f15f824]{height:100%;background-color:#fff}.tabBox_img[data-v-2f15f824]{width:36px;height:36px;border-radius:4px;cursor:pointer}.tabBox_img img[data-v-2f15f824]{width:100%;height:100%}.modelBox .ivu-table-header[data-v-2f15f824],.modelBox[data-v-2f15f824]{width:100%!important}.trees-coadd[data-v-2f15f824]{width:100%;height:385px}.trees-coadd .scollhide[data-v-2f15f824]{width:100%;height:100%;overflow-x:hidden;overflow-y:scroll}.scollhide[data-v-2f15f824]::-webkit-scrollbar{display:none}.footer[data-v-2f15f824]{margin:15px 0;padding-right:20px}[data-v-2f15f824] .el-form--inline .el-form-item{margin-bottom:0}.content_width[data-v-42114b4c]{width:460px}.info[data-v-42114b4c]{color:#888;font-size:12px}.ivu-row[data-v-42114b4c]{border:1px solid #f2f2f2}.ivu-form-item[data-v-42114b4c]{padding:10px 0;max-width:1100px}.ivu-form[data-v-42114b4c] .ivu-form-item-label{font-weight:700;font-size:14px!important}.ivu-input-wrapper[data-v-42114b4c]{width:320px}.ivu-radio-wrapper[data-v-42114b4c]{margin-right:30px;font-size:14px!important}.ivu-radio-wrapper[data-v-42114b4c] .ivu-radio{margin-right:10px}.ivu-input-number[data-v-42114b4c]{width:160px}.ivu-date-picker[data-v-42114b4c]{width:320px}.ivu-icon-ios-camera-outline[data-v-42114b4c]{background-color:rgba(0,0,0,.02);line-height:58px}.ivu-icon-ios-camera-outline[data-v-42114b4c],.upload-list[data-v-42114b4c]{width:58px;height:58px;border:1px dotted rgba(0,0,0,.1);border-radius:4px;cursor:pointer;vertical-align:middle}.upload-list[data-v-42114b4c]{margin-right:15px;display:inline-block;position:relative}.upload-list img[data-v-42114b4c]{display:block;width:100%;height:100%}.ivu-icon-ios-close-circle[data-v-42114b4c]{position:absolute;top:0;right:0;-webkit-transform:translate(50%,-50%);transform:translate(50%,-50%)}.modelBox[data-v-42114b4c] .ivu-modal-body{padding:0 16px 16px 16px!important}.header-save[data-v-42114b4c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.trip[data-v-42114b4c]{color:#ccc}.submit[data-v-42114b4c]{margin:30px 0 30px 50px}textarea[data-v-42114b4c]{padding:0 5px;border-radius:3px;border-color:#c5c8ce;outline-color:#2d8cf0;font-size:14px}.picBox[data-v-42114b4c]{display:inline-block;cursor:pointer}.picBox .upLoad[data-v-42114b4c]{width:58px;height:58px;line-height:58px;border:1px dotted rgba(0,0,0,.1);border-radius:4px;background:rgba(0,0,0,.02)}.picBox .pictrue[data-v-42114b4c]{width:60px;height:60px;border:1px dotted rgba(0,0,0,.1);margin-right:10px}.picBox .pictrue img[data-v-42114b4c]{width:100%;height:100%}.picBox .iconfont[data-v-42114b4c]{color:#898989}.addfont[data-v-42114b4c]{display:inline-block;font-size:13px;font-weight:400;color:var(--prev-color-primary);margin-left:14px;cursor:pointer;margin-left:10px}.iconxiayi[data-v-42114b4c]{font-size:14px}.ivu-page-header-title[data-v-42114b4c]{padding-bottom:0}.news-box[data-v-42114b4c]{width:200px;background-color:#f2f2f2;padding:10px;border-radius:10px;margin-top:20px;position:relative}.news-box .news_pic[data-v-42114b4c]{width:100%;height:150px}.news-box .del_icon[data-v-42114b4c]{position:absolute;right:-8px;top:-8px;cursor:pointer}.labelInput[data-v-42114b4c]{border:1px solid #dcdee2;width:460px;padding:0 15px;border-radius:5px;min-height:30px;cursor:pointer}.labelInput .span[data-v-42114b4c]{color:#c5c8ce}.labelInput .ivu-icon-ios-arrow-down[data-v-42114b4c]{font-size:14px;color:#808695}
|
||||
@ -0,0 +1 @@
|
||||
.customer[data-v-1ce641b4]{height:100%;background-color:#fff}.tabBox_img[data-v-1ce641b4]{width:36px;height:36px;border-radius:4px;cursor:pointer}.tabBox_img img[data-v-1ce641b4]{width:100%;height:100%}.modelBox .ivu-table-header[data-v-1ce641b4],.modelBox[data-v-1ce641b4]{width:100%!important}.trees-coadd[data-v-1ce641b4]{width:100%;height:385px}.trees-coadd .scollhide[data-v-1ce641b4]{width:100%;height:100%;overflow-x:hidden;overflow-y:scroll}.scollhide[data-v-1ce641b4]::-webkit-scrollbar{display:none}.footer[data-v-1ce641b4]{margin:15px 0;padding-right:20px}[data-v-1ce641b4] .el-form--inline .el-form-item{margin-bottom:0}
|
||||
@ -1 +1 @@
|
||||
.label-wrapper .list[data-v-34379f5b]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.label-wrapper .list .label-item[data-v-34379f5b]{margin:10px 8px 10px 0;padding:3px 8px;background:#eee;color:#333;border-radius:2px;cursor:pointer;font-size:12px}.label-wrapper .list .label-item.on[data-v-34379f5b]{color:#fff;background:var(--prev-color-primary)}.label-wrapper .footer[data-v-34379f5b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;margin-top:40px}.label-wrapper .footer button[data-v-34379f5b]{margin-left:10px}.label-box[data-v-34379f5b]{margin-bottom:10px}.btn[data-v-34379f5b]{width:60px;height:24px}.title[data-v-34379f5b]{font-size:13px}.nonefont[data-v-34379f5b]{text-align:center;padding-top:20px}.pictrueBox[data-v-661be351]{display:inline-block}.pictrue[data-v-661be351]{width:60px;height:60px;border:1px dotted rgba(0,0,0,.1);margin-right:15px;display:inline-block;position:relative;cursor:pointer}.pictrue img[data-v-661be351]{width:100%;height:100%}.pictrue .btndel[data-v-661be351]{position:absolute;z-index:1;width:20px!important;height:20px!important;left:46px;top:-4px}.upload-list[data-v-661be351]{width:58px;height:58px;line-height:58px;border:1px dotted rgba(0,0,0,.1);border-radius:4px;background:rgba(0,0,0,.02);cursor:pointer;position:relative}.upload-list .el-icon-error[data-v-661be351]{position:absolute;right:-8px;top:-8px}.upload-list img[data-v-661be351]{display:block;width:100%;height:100%}.upLoad[data-v-661be351]{width:58px;height:58px;line-height:58px;border:1px dotted rgba(0,0,0,.1);border-radius:4px;background:rgba(0,0,0,.02);cursor:pointer}.ivu-icon-ios-close-circle[data-v-661be351]{position:absolute;top:0;right:0;-webkit-transform:translate(50%,-50%);transform:translate(50%,-50%)}.grey[data-v-661be351]{color:#999}.content_width[data-v-2bd7abff]{width:460px}[data-v-2bd7abff] .el-tabs__item{height:54px!important;line-height:54px!important}.custom-label[data-v-2bd7abff]{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;line-height:1.5}.grey[data-v-2bd7abff]{color:#999}.maxW[data-v-2bd7abff] .ivu-select-dropdown{max-width:600px}.ivu-table-wrapper[data-v-2bd7abff]{border-left:1px solid #dcdee2;border-top:1px solid #dcdee2}.tabBox_img[data-v-2bd7abff]{width:50px;height:50px}.tabBox_img img[data-v-2bd7abff]{width:100%;height:100%}.priceBox[data-v-2bd7abff]{width:100%}.form .picBox[data-v-2bd7abff],.form .pictrue[data-v-2bd7abff]{display:inline-block;cursor:pointer}.form .pictrue[data-v-2bd7abff]{width:58px;height:58px;border:1px dotted rgba(0,0,0,.1);margin-right:0;position:relative}.form .pictrue img[data-v-2bd7abff]{width:100%;height:100%}.form .pictrue .btndel[data-v-2bd7abff]{position:absolute;z-index:9;font-size:20px;left:46px;top:-4px}.form .upLoad[data-v-2bd7abff]{width:58px;height:58px;line-height:58px;border:1px dotted rgba(0,0,0,.1);border-radius:4px;background:rgba(0,0,0,.02);cursor:pointer}.labelInput[data-v-2bd7abff]{border:1px solid #dcdee2;padding:0 15px;width:460px;border-radius:5px;min-height:30px;cursor:pointer}.labelInput .span[data-v-2bd7abff]{font-size:12px;color:#c5c8ce}.labelInput .ivu-icon-ios-arrow-down[data-v-2bd7abff]{font-size:14px;color:#808695}
|
||||
.label-wrapper .list[data-v-34379f5b]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.label-wrapper .list .label-item[data-v-34379f5b]{margin:10px 8px 10px 0;padding:3px 8px;background:#eee;color:#333;border-radius:2px;cursor:pointer;font-size:12px}.label-wrapper .list .label-item.on[data-v-34379f5b]{color:#fff;background:var(--prev-color-primary)}.label-wrapper .footer[data-v-34379f5b]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;margin-top:40px}.label-wrapper .footer button[data-v-34379f5b]{margin-left:10px}.label-box[data-v-34379f5b]{margin-bottom:10px}.btn[data-v-34379f5b]{width:60px;height:24px}.title[data-v-34379f5b]{font-size:13px}.nonefont[data-v-34379f5b]{text-align:center;padding-top:20px}.pictrueBox[data-v-661be351]{display:inline-block}.pictrue[data-v-661be351]{width:60px;height:60px;border:1px dotted rgba(0,0,0,.1);margin-right:15px;display:inline-block;position:relative;cursor:pointer}.pictrue img[data-v-661be351]{width:100%;height:100%}.pictrue .btndel[data-v-661be351]{position:absolute;z-index:1;width:20px!important;height:20px!important;left:46px;top:-4px}.upload-list[data-v-661be351]{width:58px;height:58px;line-height:58px;border:1px dotted rgba(0,0,0,.1);border-radius:4px;background:rgba(0,0,0,.02);cursor:pointer;position:relative}.upload-list .el-icon-error[data-v-661be351]{position:absolute;right:-8px;top:-8px}.upload-list img[data-v-661be351]{display:block;width:100%;height:100%}.upLoad[data-v-661be351]{width:58px;height:58px;line-height:58px;border:1px dotted rgba(0,0,0,.1);border-radius:4px;background:rgba(0,0,0,.02);cursor:pointer}.ivu-icon-ios-close-circle[data-v-661be351]{position:absolute;top:0;right:0;-webkit-transform:translate(50%,-50%);transform:translate(50%,-50%)}.grey[data-v-661be351]{color:#999}.content_width[data-v-4ac704aa]{width:460px}[data-v-4ac704aa] .el-tabs__item{height:54px!important;line-height:54px!important}.custom-label[data-v-4ac704aa]{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;line-height:1.5}.grey[data-v-4ac704aa]{color:#999}.maxW[data-v-4ac704aa].ivu-select-dropdown{max-width:600px}.ivu-table-wrapper[data-v-4ac704aa]{border-left:1px solid #dcdee2;border-top:1px solid #dcdee2}.tabBox_img[data-v-4ac704aa]{width:50px;height:50px}.tabBox_img img[data-v-4ac704aa]{width:100%;height:100%}.priceBox[data-v-4ac704aa]{width:100%}.form .picBox[data-v-4ac704aa],.form .pictrue[data-v-4ac704aa]{display:inline-block;cursor:pointer}.form .pictrue[data-v-4ac704aa]{width:58px;height:58px;border:1px dotted rgba(0,0,0,.1);margin-right:0;position:relative}.form .pictrue img[data-v-4ac704aa]{width:100%;height:100%}.form .pictrue .btndel[data-v-4ac704aa]{position:absolute;z-index:9;font-size:20px;left:46px;top:-4px}.form .upLoad[data-v-4ac704aa]{width:58px;height:58px;line-height:58px;border:1px dotted rgba(0,0,0,.1);border-radius:4px;background:rgba(0,0,0,.02);cursor:pointer}.labelInput[data-v-4ac704aa]{border:1px solid #dcdee2;padding:0 15px;width:460px;border-radius:5px;min-height:30px;cursor:pointer}.labelInput .span[data-v-4ac704aa]{font-size:12px;color:#c5c8ce}.labelInput .ivu-icon-ios-arrow-down[data-v-4ac704aa]{font-size:14px;color:#808695}
|
||||
@ -1 +0,0 @@
|
||||
.radio[data-v-58fdaf03]{margin-bottom:14px}.radio[data-v-58fdaf03] .name{width:125px;text-align:right;padding-right:12px}
|
||||
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
.ivu-mt .type .item[data-v-022c298e]{margin:3px 0}.tabform[data-v-022c298e]{margin-bottom:10px}.Refresh[data-v-022c298e]{font-size:12px;color:var(--prev-color-primary);cursor:pointer}.ivu-form-item[data-v-022c298e]{margin-bottom:10px}.status[data-v-022c298e] .item~.item{margin-left:6px}.status[data-v-022c298e] .statusVal{margin-bottom:7px}.type[data-v-022c298e]{padding:3px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.tabBox_img[data-v-022c298e]{width:36px;height:36px;border-radius:4px;cursor:pointer}.tabBox_img img[data-v-022c298e]{width:100%;height:100%}
|
||||
@ -1 +0,0 @@
|
||||
.maxInpt[data-v-45e913b4]{max-width:500px;margin-left:auto;margin-right:auto}.index_from[data-v-45e913b4]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.trip[data-v-45e913b4]{width:580px;text-align:left;color:#aaa}.page-account-container[data-v-45e913b4]{text-align:center;padding:200px 0}.page-account-top[data-v-45e913b4]{margin-bottom:50px}.page-account-top-tit[data-v-45e913b4]{font-size:30px;color:var(--prev-color-primary);font-weight:500}.page-account-other[data-v-45e913b4]{text-align:center;color:var(--prev-color-primary);font-size:12px}.page-account-other span[data-v-45e913b4]{cursor:pointe}[data-v-45e913b4] .btn{font-size:15px!important}
|
||||
@ -1 +1 @@
|
||||
.card_box_cir1[data-v-0eb9e1a0] .iconfont{font-size:26px;color:#fff}.one[data-v-0eb9e1a0]{background:#e4ecff}.two[data-v-0eb9e1a0]{background:#fff3e0}.three[data-v-0eb9e1a0]{background:#eaf9e1}.four[data-v-0eb9e1a0]{background:#ffeaf4}.five[data-v-0eb9e1a0]{background:#f1e4ff}.one1[data-v-0eb9e1a0]{background:#4d7cfe}.two1[data-v-0eb9e1a0]{background:#ffab2b}.three1[data-v-0eb9e1a0]{background:#6dd230}.four1[data-v-0eb9e1a0]{background:#ff85c0}.five1[data-v-0eb9e1a0]{background:#b37feb}.card_box[data-v-0eb9e1a0]{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px}.card_box .card_box_cir[data-v-0eb9e1a0]{width:60px;height:60px;overflow:hidden;margin-right:20px}.card_box .card_box_cir .card_box_cir1[data-v-0eb9e1a0],.card_box .card_box_cir[data-v-0eb9e1a0]{border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.card_box .card_box_cir .card_box_cir1[data-v-0eb9e1a0]{width:48px;height:48px}.card_box .card_box_txt .sp1[data-v-0eb9e1a0]{display:block;color:#252631;font-size:24px}.card_box .card_box_txt .sp2[data-v-0eb9e1a0]{display:block;color:#98a9bc;font-size:12px}.cl[data-v-1901b596]{margin-right:20px}.code-row-bg[data-v-1901b596]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.code-row-bg .ivu-mt[data-v-1901b596]{width:100%}.ech-box[data-v-1901b596]{margin-top:10px}.change-style[data-v-1901b596]{border:1px solid #ccc;border-radius:15px;padding:0 10px;cursor:pointer}.percent-box[data-v-1901b596]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-right:10px}.line[data-v-1901b596]{width:100%;position:relative}.bg[data-v-1901b596]{position:absolute;width:100%;height:8px;border-radius:8px;background-color:#f2f2f2}.percent[data-v-1901b596]{position:absolute;border-radius:5px;height:8px;background-color:var(--prev-color-primary);z-index:9999}.num[data-v-1901b596]{white-space:nowrap;margin:0 10px;width:20px}
|
||||
.card_box_cir1[data-v-50f2a66a] .iconfont{font-size:26px;color:#fff}.one[data-v-50f2a66a]{background:#e4ecff}.two[data-v-50f2a66a]{background:#fff3e0}.three[data-v-50f2a66a]{background:#eaf9e1}.four[data-v-50f2a66a]{background:#ffeaf4}.five[data-v-50f2a66a]{background:#f1e4ff}.one1[data-v-50f2a66a]{background:#4d7cfe}.two1[data-v-50f2a66a]{background:#ffab2b}.three1[data-v-50f2a66a]{background:#6dd230}.four1[data-v-50f2a66a]{background:#ff85c0}.five1[data-v-50f2a66a]{background:#b37feb}.card_box[data-v-50f2a66a]{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px}.card_box .card_box_cir[data-v-50f2a66a]{width:60px;height:60px;overflow:hidden;margin-right:20px}.card_box .card_box_cir .card_box_cir1[data-v-50f2a66a],.card_box .card_box_cir[data-v-50f2a66a]{border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.card_box .card_box_cir .card_box_cir1[data-v-50f2a66a]{width:48px;height:48px}.card_box .card_box_txt .sp1[data-v-50f2a66a]{display:block;color:#252631;font-size:24px}.card_box .card_box_txt .sp2[data-v-50f2a66a]{display:block;color:#98a9bc;font-size:12px}.cl[data-v-1901b596]{margin-right:20px}.code-row-bg[data-v-1901b596]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.code-row-bg .ivu-mt[data-v-1901b596]{width:100%}.ech-box[data-v-1901b596]{margin-top:10px}.change-style[data-v-1901b596]{border:1px solid #ccc;border-radius:15px;padding:0 10px;cursor:pointer}.percent-box[data-v-1901b596]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-right:10px}.line[data-v-1901b596]{width:100%;position:relative}.bg[data-v-1901b596]{position:absolute;width:100%;height:8px;border-radius:8px;background-color:#f2f2f2}.percent[data-v-1901b596]{position:absolute;border-radius:5px;height:8px;background-color:var(--prev-color-primary);z-index:9999}.num[data-v-1901b596]{white-space:nowrap;margin:0 10px;width:20px}
|
||||
@ -0,0 +1 @@
|
||||
[data-v-5431626c]{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}[data-v-5431626c] .el-card__body{padding:60px 20px}.left[data-v-5431626c]{min-width:390px;min-height:550px;position:relative;padding-left:40px}.top[data-v-5431626c]{position:absolute;top:0}.bottom[data-v-5431626c],.textbot[data-v-5431626c]{position:absolute;bottom:0}.textbot[data-v-5431626c]{left:55px;width:100%}.active[data-v-5431626c]{border:1px solid var(--prev-color-primary)!important;color:var(--prev-color-primary)!important}.li[data-v-5431626c]{float:left;width:92px;height:48px;line-height:48px;border-left:1px solid #e7e7eb;background:#fafafa;text-align:center;cursor:pointer;color:#999;position:relative}.text[data-v-5431626c]{height:50px;white-space:nowrap;width:100%;overflow:hidden;text-overflow:ellipsis;padding:0 5px}.text[data-v-5431626c]:hover{color:#000}.add[data-v-5431626c]{position:absolute;bottom:65px;width:100%;line-height:40px;background:#fafafa}.arrow[data-v-5431626c]{position:absolute;bottom:-16px;left:36px;width:0;height:0;font-size:0;border:8px solid;border-color:#fafafa #f4f5f9 #f4f5f9 #f4f5f9}.tianjia[data-v-5431626c]{position:absolute;bottom:107px;width:100%;line-height:48px;background:#fafafa}.tianjia[data-v-5431626c] :first-child{border:none}.addadd[data-v-5431626c]{width:100%;line-height:40px;border-top:1px solid #f0f0f0;background:#fafafa;height:40px}.right[data-v-5431626c]{background:#fff;min-height:400px}.spwidth[data-v-5431626c]{width:100%}.userAlert[data-v-5431626c]{margin-top:16px!important}
|
||||
@ -0,0 +1 @@
|
||||
.showOn[data-v-9c838424]{color:#2d8cf0;background:#f0faff;z-index:2}.tabBox_img[data-v-9c838424]{width:36px;height:36px;border-radius:4px;cursor:pointer}.tabBox_img img[data-v-9c838424]{width:100%;height:100%}.modelBox .ivu-table-header[data-v-9c838424],.modelBox[data-v-9c838424]{width:100%!important}.label-name[data-v-9c838424]{margin:2px 2px}.trees-coadd[data-v-9c838424]{width:100%;height:385px}.trees-coadd .scollhide[data-v-9c838424]{width:100%;height:100%;overflow-x:hidden;overflow-y:scroll}.scollhide[data-v-9c838424]::-webkit-scrollbar{display:none}[data-v-9c838424] .ivu-menu-vertical .ivu-menu-item-group-title,[data-v-9c838424] .ivu-menu-vertical.ivu-menu-light:after{display:none}.left-wrapper[data-v-9c838424]{height:904px;background:#fff;border-right:1px solid #f2f2f2}.menu-item[data-v-9c838424]{z-index:50;position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;word-break:break-all}.menu-item .icon-box[data-v-9c838424]{z-index:3;position:absolute;right:20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:none}.menu-item:hover .icon-box[data-v-9c838424]{display:block}.menu-item .right-menu[data-v-9c838424]{z-index:10;position:absolute;right:-106px;top:-11px;width:auto;min-width:121px}
|
||||
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