Merge pull request 'dev' (#77) from dev into preview

Reviewed-on: https://gitea.lihaink.cn/mkm/shop-php/pulls/77
This commit is contained in:
mkm 2023-11-17 18:55:45 +08:00
commit ea6a3638e6
33 changed files with 578 additions and 1321 deletions

View File

@ -30,6 +30,7 @@ class StoreCartDao extends BaseDao
const SOURCE_STORE_CLOUD = 101; //店铺内云商品
const SOURCE_CLOUD = 102; //云仓内店铺商品
const CITY_CLOUD = 103; //市级云仓商品
const SOURCE_PROCURE = 200; //供应链采购商品B2B
const SOURCE_COMMUNITY_RESALE = 201; //转售商品
const SOURCE_COMMUNITY_ENTRUST = 202; //委托商品
@ -76,7 +77,7 @@ class StoreCartDao extends BaseDao
$query->field('product_id,image,store_name,is_show,status,is_del,unit_name,price,mer_status,is_used,product_type,once_max_count,once_min_count,pay_limit,mer_svip_status,svip_price_type');
},
'productAttr' => function ($query) {
$query->field('product_id,stock,price,unique,sku,image,svip_price');
$query->field('product_id,stock,price,unique,sku,image,svip_price,procure_price');
},
'merchant' => function ($query) {
$query->field('mer_id,mer_name,mer_state,mer_avatar,is_trader,type_id,credit_buy,street_id')->with(['type_names']);
@ -113,7 +114,7 @@ class StoreCartDao extends BaseDao
}
},
'productAttr' => function (Relation $query) {
$query->field('image,extension_one,extension_two,product_id,stock,price,unique,sku,volume,weight,ot_price,cost,svip_price')
$query->field('image,extension_one,extension_two,product_id,stock,price,unique,sku,volume,weight,ot_price,cost,svip_price,procure_price')
->append(['bc_extension_one', 'bc_extension_two']);
},
'merchant' => function (Relation $query) use ($uid) {
@ -148,7 +149,7 @@ class StoreCartDao extends BaseDao
*/
public function getCartCount(int $uid,$product_type)
{
$data = ($this->getModel()::getDB())->where(['uid' => $uid, 'is_del' => 0, 'is_new' => 0, 'is_pay' => 0,'product_type' => $product_type])->field('count(*) as count')->select();
$data = ($this->getModel()::getDB())->where(['uid' => $uid, 'is_del' => 0, 'is_new' => 0, 'is_pay' => 0,'product_type' => $product_type,'is_fail'=>0])->field('count(*) as count')->select();
$data[0]['count'] = $data[0]['count'] ? $data[0]['count'] : 0;
return $data;
}

View File

@ -90,9 +90,9 @@ class MerchantAdminDao extends BaseDao
* @author xaboy
* @day 2020/7/7
*/
public function merIdByAdmin(int $merId)
public function merIdByAdmin(int $merId,$where=[],$level=0)
{
return MerchantAdmin::getDB()->where('mer_id', $merId)->where('level', 0)->find();
return MerchantAdmin::getDB()->where('mer_id', $merId)->where('level',$level)->where($where)->find();
}
/**

View File

@ -34,9 +34,12 @@ class MerchantAuthMiddleware extends BaseMiddleware
/** @var MenuRepository $menu */
$menu = app()->make(MenuRepository::class);
if ($admin->level) {
$rules = $role->idsByRules($request->merId(), $admin->roles);
if($admin->level==2){
$rules = $role->idsByRules(0, $admin->roles);
}else{
$rules = $role->idsByRules($request->merId(), $admin->roles);
}
$menus = count($rules) ? ($merchant->type_id ? $menu->typesByRoutes($merchant->type_id, $rules) : $menu->idsByRoutes($rules)) : [];
$msg = '没有权限访问';
} else {

View File

@ -238,6 +238,11 @@ class StoreCart extends BaseModel
//库存不足
if($sku->stock < $this->cart_num || $sku->sku->stock < $this->cart_num) return false;
break;
case 98: //供应链商品
if ($this->product->product_type !== 98 || $this->product->is_show !== 1 || $this->productAttr->stock < $this->cart_num || $this->product->is_used !== 1) {
return false;
}
break;
case 100: //扫码枪商品
if ($this->product->product_type !== 0 || $this->product->is_show !== 1 || $this->productAttr->stock < $this->cart_num || $this->product->is_used !== 1) {
return false;

View File

@ -1,130 +0,0 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\common\repositories\store\order;
use app\common\dao\store\order\StoreCartDao;
use app\common\model\store\product\Product;
use app\common\repositories\BaseRepository;
use app\common\repositories\store\coupon\StoreCouponProductRepository;
use app\common\repositories\store\coupon\StoreCouponRepository;
use app\common\repositories\store\product\ProductRepository;
use think\exception\ValidateException;
/**
* Class StoreCartRepository
* @package app\common\repositories\store\order
* @author xaboy
* @day 2020/5/30
* @mixin StoreCartDao
*/
class StoreCartRepository extends BaseRepository
{
/**
* StoreCartRepository constructor.
* @param StoreCartDao $dao
*/
public function __construct(StoreCartDao $dao)
{
$this->dao = $dao;
}
/**
* @param $uid
* @return array
* @author Qinii
*/
public function getList($user)
{
$res = $this->dao->getAll($user->uid)->append(['checkCartProduct', 'UserPayCount', 'ActiveSku', 'attrValue', 'attr','spu']);
$make = app()->make(ProductRepository::class);
$res->map(function ($item) use ($make) {
$item['attr'] = $make->detailAttr($item['attr']);
});
return $this->checkCartList($res, $user->uid, $user);
}
public function checkCartList($res, $hasCoupon = 0, $user = null)
{
$arr = $fail = [];
$product_make = app()->make(ProductRepository::class);
$svip_status = ($user && $user->is_svip > 0 && systemConfig('svip_switch_status')) ? true : false;
foreach ($res as $item) {
if (!$item['checkCartProduct']) {
$item['product'] = $product_make->getFailProduct($item['product_id']);
$fail[] = $item;
} else {
$merchantData = $item['merchant']->append(['openReceipt'])->toArray();
unset($item['merchant']);
$coupon_make = app()->make(StoreCouponRepository::class);
if (!isset($arr[$item['mer_id']])) {
if ($hasCoupon)
$merchantData['hasCoupon'] = $coupon_make->validMerCouponExists($item['mer_id'], $hasCoupon);
$arr[$item['mer_id']] = $merchantData;
}
if ($hasCoupon && !$arr[$item['mer_id']]['hasCoupon']) {
$couponIds = app()->make(StoreCouponProductRepository::class)->productByCouponId([$item['product']['product_id']]);
$arr[$item['mer_id']]['hasCoupon'] = count($couponIds) ? $coupon_make->validProductCouponExists([$item['product']['product_id']], $hasCoupon) : 0;
}
if ($svip_status && $item['product']['show_svip_price']) {
$item['productAttr']['show_svip_price'] = true;
$item['productAttr']['org_price'] = $item['productAttr']['price'];
$item['productAttr']['price'] = $item['productAttr']['svip_price'];
} else {
$item['productAttr']['show_svip_price'] = false;
}
$arr[$item['mer_id']]['list'][] = $item;
}
}
$list = array_values($arr);
return compact('list', 'fail');
}
/**
* 获取单条购物车信息
* @Author:Qinii
* @Date: 2020/5/30
* @param int $id
* @return mixed
*/
public function getOne(int $id,int $uid)
{
$where = [$this->dao->getPk() => $id,'is_del'=>0,'is_fail'=>0,'is_new'=>0,'is_pay'=>0,'uid' => $uid];
return ($this->dao->getWhere($where));
}
/**
* 查看相同商品的sku是存在
* @param $sku
* @param $uid
* @author Qinii
*/
public function getCartByProductSku($sku,$uid)
{
$where = ['is_del'=>0,'is_fail'=>0,'is_new'=>0,'is_pay'=>0,'uid' => $uid,'product_type' => 0,'product_attr_unique' => $sku];
return ($this->dao->getWhere($where));
}
public function getProductById($productId)
{
$where = [
'is_del' =>0,
'is_new'=>0,
'is_pay'=>0,
'product_id'=>$productId
];
return $this->dao->getWhereCount($where);
}
}

View File

@ -107,28 +107,28 @@ class StoreOrderCreateRepository extends StoreOrderRepository
}
}
}
if (($order_type == 98 || $order_type == 99) && count($merchantCartList) > 1) {
throw new ValidateException('采购、委托商品不支持跨店购买');
}
// if (($order_type == 98 || $order_type == 99) && count($merchantCartList) > 1) {
// throw new ValidateException('采购、委托商品不支持跨店购买');
// }
$community = [];
if ($order_type == 98) {
$sourceIdArray = [];
foreach($merchantCart['list'] as $prod){
if ($prod['source_id'] > 0) {
$sourceIdArray[] = $prod['source_id'];
}
}
if (count($sourceIdArray)) {
if (count(array_unique($sourceIdArray)) > 1) {
throw new ValidateException('转售商品数据异常');
}
$community = Db::name('Community')->where('community_id', $sourceIdArray[0] ?? 0)->field('community_id, title, image')->fetchSql(false)->find();
if ($community) {
$deliverMethod = Db::name('resale')->where('community_id', $sourceIdArray[0] ?? 0)->value('deliver_method');
$deliverMethodArray = explode(',', $deliverMethod);
}
}
}
// if ($order_type == 98) {
// $sourceIdArray = [];
// foreach($merchantCart['list'] as $prod){
// if ($prod['source_id'] > 0) {
// $sourceIdArray[] = $prod['source_id'];
// }
// }
// if (count($sourceIdArray)) {
// if (count(array_unique($sourceIdArray)) > 1) {
// throw new ValidateException('转售商品数据异常');
// }
// $community = Db::name('Community')->where('community_id', $sourceIdArray[0] ?? 0)->field('community_id, title, image')->fetchSql(false)->find();
// if ($community) {
// $deliverMethod = Db::name('resale')->where('community_id', $sourceIdArray[0] ?? 0)->value('deliver_method');
// $deliverMethodArray = explode(',', $deliverMethod);
// }
// }
// }
unset($merchantCart, $cart);
$order_price = 0;
$total_true_price = 0;
@ -139,6 +139,7 @@ class StoreOrderCreateRepository extends StoreOrderRepository
$fn = [];
$enabledPlatformCoupon = !$order_type;
$order_total_postage = 0;
$platformCoupon = [];
//套餐订单
@ -182,9 +183,6 @@ class StoreOrderCreateRepository extends StoreOrderRepository
$product_cart = [];
foreach ($merchantCart['list'] as $k => $cart) {
if ($order_type == 98) {
$merchantCart['list'][$k]['product']['delivery_way'] = $cart['product']['delivery_way'] = $deliverMethod ?? '';
}
//获取订单类型, 活动商品单次只能购买一个
if ($cart['product']['delivery_way']) {
$delivery_way = explode(',', $cart['product']['delivery_way']);
@ -233,7 +231,10 @@ class StoreOrderCreateRepository extends StoreOrderRepository
}
$svip_discount = 0;
$realPrice = $this->cartByPrice($cart);
if ($cart['product_type'] == 98 || $cart['product_type'] == 99) {
if ($source == StoreCartDao::SOURCE_PROCURE) {
if($realPrice==0){
throw new ValidateException('价格必须大于0');
}
$cart['product']['price'] = $realPrice;
$cart['productAttr']['price'] = $realPrice;
$cart['productAttr']['stock'] = $cart['cart_num'];
@ -394,105 +395,14 @@ class StoreOrderCreateRepository extends StoreOrderRepository
});
}
//过滤不可用店铺优惠券
foreach ($merchantCart['coupon'] as &$coupon) {
if (!$coupon['coupon']['type']) continue;
$coupon['disabled'] = false;
$coupon['checked'] = false;
if (count(array_intersect(array_column($coupon['product'], 'product_id'), array_keys($product_price))) == 0) {
$coupon['disabled'] = true;
continue;
}
if($svip_coupon_merge != '1' && $use_svip){
$coupon['disabled'] = true;
continue;
}
$flag = false;
foreach ($coupon['product'] as $_product) {
if (isset($product_price[$_product['product_id']]) && $product_price[$_product['product_id']] >= $coupon['use_min_price']) {
$flag = true;
break;
}
}
if (!$flag) {
$coupon['disabled'] = true;
}
// if (!$coupon['disabled']) {
// $all_coupon_product[] = $coupon['coupon_user_id'];
// }
}
unset($coupon);
//if ($useCouponFlag && count(array_diff($all_coupon_product, $use_coupon_product))) {
// throw new ValidateException('请选择有效的商品券');
//}
//计算商品券金额
foreach ($merchantCart['coupon'] as &$coupon) {
if (!$coupon['coupon']['type']) continue;
if ($coupon['disabled']) continue;
foreach ($coupon['product'] as $_product) {
if (isset($product_price[$_product['product_id']]) && $product_price[$_product['product_id']] >= $coupon['use_min_price']) {
if ($useCouponFlag) {
if (!in_array($coupon['coupon_user_id'], $merCouponIds) || isset($use_coupon_product[$_product['product_id']])) {
continue;
}
} else if (isset($use_coupon_product[$_product['product_id']])) {
continue;
}
$coupon_price = bcadd($coupon_price, $coupon['coupon_price'], 2);
$use_coupon_product[$_product['product_id']] = $coupon;
$coupon['checked'] = true;
break;
}
}
unset($_product);
}
unset($coupon);
$pay_price = max(bcsub($valid_total_price, $coupon_price, 2), 0);
$_pay_price = $pay_price;
//计算店铺券
foreach ($merchantCart['coupon'] as &$coupon) {
if ($coupon['coupon']['type']) continue;
$coupon['checked'] = false;
$coupon['disabled'] = $pay_price <= 0;
if ($use_store_coupon || $pay_price <= 0) continue;
if($svip_coupon_merge != '1' && $use_svip){
$coupon['disabled'] = true;
continue;
}
//店铺券
if ($valid_total_price >= $coupon['use_min_price']) {
if ($useCouponFlag) {
if (!in_array($coupon['coupon_user_id'], $merCouponIds)) {
continue;
}
}
$use_store_coupon = $coupon;
$coupon_price = bcadd($coupon_price, $coupon['coupon_price'], 2);
$_pay_price = bcsub($_pay_price, $coupon['coupon_price'], 2);
$coupon['checked'] = true;
} else {
$coupon['disabled'] = true;
}
}
unset($coupon);
$productCouponRate = [];
$storeCouponRate = null;
$useCouponIds = [];
//计算优惠占比
foreach ($use_coupon_product as $productId => $coupon) {
$productCouponRate[$productId] = [
'rate' => $product_price[$productId] > 0 ? bcdiv($coupon['coupon_price'], $product_price[$productId], 4) : 1,
'coupon_price' => $coupon['coupon_price'],
'price' => $product_price[$productId]
];
$useCouponIds[] = $coupon['coupon_user_id'];
}
if ($use_store_coupon) {
$storeCouponRate = [
@ -507,39 +417,6 @@ class StoreOrderCreateRepository extends StoreOrderRepository
foreach ($merchantCart['list'] as $_k => &$cart) {
$cartTotalPrice = bcmul($this->cartByPrice($cart), $cart['cart_num'], 2);
$_cartTotalPrice = $cartTotalPrice;
if (!$cart['product_type'] && $cartTotalPrice > 0) {
if (isset($productCouponRate[$cart['product_id']])) {
//计算每个商品优惠金额(商品券)
if ($productCouponRate[$cart['product_id']]['rate'] >= 1) {
$cartTotalPrice = 0;
} else {
array_pop($product_cart);
if (!count($product_cart)) {
$cartTotalPrice = bcsub($cartTotalPrice, $productCouponRate[$cart['product_id']]['coupon_price'], 2);
$productCouponRate[$cart['product_id']]['coupon_price'] = 0;
} else {
$couponPrice = bcmul($cartTotalPrice, $productCouponRate[$cart['product_id']]['rate'], 2);
$cartTotalPrice = bcsub($cartTotalPrice, $couponPrice, 2);
$productCouponRate[$cart['product_id']]['coupon_price'] = bcsub($productCouponRate[$cart['product_id']]['coupon_price'], $couponPrice, 2);
}
}
}
//(店铺券)
if ($storeCouponRate && $cartTotalPrice > 0) {
if ($storeCouponRate['rate'] >= 1) {
$cartTotalPrice = 0;
} else {
if (count($merchantCart['list']) == $_k + 1) {
$cartTotalPrice = bcsub($cartTotalPrice, $storeCouponRate['coupon_price'], 2);
} else {
$couponPrice = bcmul($cartTotalPrice, $storeCouponRate['rate'], 2);
$cartTotalPrice = bcsub($cartTotalPrice, $couponPrice, 2);
$storeCouponRate['coupon_price'] = bcsub($storeCouponRate['coupon_price'], $couponPrice, 2);
}
}
}
}
//单个商品实际支付金额
$cart['coupon_price'] = bcsub($_cartTotalPrice, $cartTotalPrice, 2);
@ -558,6 +435,7 @@ class StoreOrderCreateRepository extends StoreOrderRepository
'final_price' => $final_price,
'down_price' => $down_price,
'coupon_price' => $coupon_price,
'platformCoupon' => $platformCoupon,
'svip_coupon_merge' => $svip_coupon_merge,
'postage_price' => $postage_price,
'isTake' => $isTake,
@ -578,8 +456,8 @@ class StoreOrderCreateRepository extends StoreOrderRepository
}
unset($merchantCart);
$usePlatformCouponId = $useCoupon[0] ?? 0;
$usePlatformCouponId = is_array($usePlatformCouponId) ? array_pop($usePlatformCouponId) : $usePlatformCouponId;
$usePlatformCouponId = 0;
$total_platform_coupon_price = 0;
$usePlatformCouponFlag = isset($useCoupon[0]);
foreach ($merchantCartList as &$merchantCart) {
@ -601,154 +479,8 @@ class StoreOrderCreateRepository extends StoreOrderRepository
}
unset($merchantCart);
//计算平台券优惠金额
// if ($total_true_price > 0) {
$StoreCouponUser = app()->make(StoreCouponUserRepository::class);
$platformCoupon = $StoreCouponUser->validUserPlatformCoupon($uid);
if ($enabledPlatformCoupon && count($platformCoupon)) {
$catePriceLst = [];
$storePriceLst = [];
$_cartNum = 0;
foreach ($merchantCartList as &$merchantCart) {
if ($merchantCart['order']['true_price'] <= 0) continue;
foreach ($merchantCart['list'] as &$cart) {
$_cartNum++;
if ($cart['product']['cate_id']) {
if (!isset($catePriceLst[$cart['product']['cate_id']])) {
$catePriceLst[$cart['product']['cate_id']] = ['price' => 0, 'cart' => []];
}
$catePriceLst[$cart['product']['cate_id']]['price'] = bcadd($catePriceLst[$cart['product']['cate_id']]['price'], $cart['true_price']);
$catePriceLst[$cart['product']['cate_id']]['cart'][] = &$cart;
}
}
unset($cart);
$storePriceLst[$merchantCart['mer_id']] = [
'price' => $merchantCart['order']['true_price'],
'num' => count($merchantCart['list'])
];
}
unset($merchantCart);
$flag = false;
$platformCouponRate = null;
foreach ($platformCoupon as &$coupon) {
$coupon['checked'] = false;
//通用券
if ($coupon['coupon']['type'] === StoreCouponRepository::TYPE_PLATFORM_ALL) {
$coupon['disabled'] = $total_true_price <= 0 || $coupon['use_min_price'] > $total_true_price;
if (!$platformCouponRate && !$coupon['disabled'] && !$flag && ((!$usePlatformCouponId && !$usePlatformCouponFlag) || $usePlatformCouponId == $coupon['coupon_user_id'])) {
$platformCouponRate = [
'id' => $coupon['coupon_user_id'],
'type' => $coupon['coupon']['type'],
'price' => $total_true_price,
'coupon_price' => $coupon['coupon_price'],
'use_count' => $_cartNum,
'check' => function ($cart) {
return true;
}
];
$coupon['checked'] = true;
$flag = true;
}
//品类券
} else if ($coupon['coupon']['type'] === StoreCouponRepository::TYPE_PLATFORM_CATE) {
$_price = 0;
$_use_count = 0;
$cateIds = $coupon['product']->column('product_id');
$allCateIds = array_unique(array_merge(app()->make(StoreCategoryRepository::class)->allChildren($cateIds), $cateIds));
$flag2 = true;
foreach ($allCateIds as $cateId) {
if (isset($catePriceLst[$cateId])) {
$_price = bcadd($catePriceLst[$cateId]['price'], $_price, 2);
$_use_count += count($catePriceLst[$cateId]['cart']);
$flag2 = false;
}
}
$coupon['disabled'] = $flag2 || $coupon['use_min_price'] > $_price;
//品类券可用
if (!$platformCouponRate && !$coupon['disabled'] && !$flag && !$flag2 && ((!$usePlatformCouponId && !$usePlatformCouponFlag) || $usePlatformCouponId == $coupon['coupon_user_id'])) {
$platformCouponRate = [
'id' => $coupon['coupon_user_id'],
'type' => $coupon['coupon']['type'],
'price' => $_price,
'use_cate' => $allCateIds,
'coupon_price' => $coupon['coupon_price'],
'use_count' => $_use_count,
'check' => function ($cart) use ($allCateIds) {
return in_array($cart['product']['cate_id'], $allCateIds);
}
];
$coupon['checked'] = true;
$flag = true;
}
//跨店券
} else if ($coupon['coupon']['type'] === StoreCouponRepository::TYPE_PLATFORM_STORE) {
$_price = 0;
$_use_count = 0;
$flag2 = true;
foreach ($coupon['product'] as $item) {
$merId = $item['product_id'];
if (isset($storePriceLst[$merId])) {
$_price = bcadd($storePriceLst[$merId]['price'], $_price, 2);
$_use_count += $storePriceLst[$merId]['num'];
$flag2 = false;
}
}
$coupon['disabled'] = $flag2 || $coupon['use_min_price'] > $_price;
//店铺券可用
if (!$platformCouponRate && !$coupon['disabled'] && !$flag && !$flag2 && ((!$usePlatformCouponId && !$usePlatformCouponFlag) || $usePlatformCouponId == $coupon['coupon_user_id'])) {
$_merIds = $coupon['product']->column('product_id');
$platformCouponRate = [
'id' => $coupon['coupon_user_id'],
'type' => $coupon['coupon']['type'],
'price' => $_price,
'use_store' => $_merIds,
'coupon_price' => $coupon['coupon_price'],
'use_count' => $_use_count,
'check' => function ($cart) use ($_merIds) {
return in_array($cart['mer_id'], $_merIds);
}
];
$coupon['checked'] = true;
$flag = true;
}
}
}
unset($coupon);
}
// }
$usePlatformCouponId = 0;
$total_platform_coupon_price = 0;
//计算平台优惠券
if (isset($platformCouponRate)) {
$_coupon_price = $platformCouponRate['coupon_price'];
foreach ($merchantCartList as &$merchantCart) {
$_price = 0;
foreach ($merchantCart['list'] as &$cart) {
if ($cart['true_price'] <= 0 || !$platformCouponRate['check']($cart)) continue;
if ($platformCouponRate['use_count'] === 1) {
$couponPrice = min($platformCouponRate['coupon_price'], $cart['true_price']);
} else {
$couponPrice = min(bcmul($_coupon_price, bcdiv($cart['true_price'], $platformCouponRate['price'], 3), 2), $cart['true_price']);
}
$platformCouponRate['coupon_price'] = bcsub($platformCouponRate['coupon_price'], $couponPrice, 2);
$cart['true_price'] = bcsub($cart['true_price'], $couponPrice, 2);
$cart['platform_coupon_price'] = $couponPrice;
$platformCouponRate['use_count']--;
$_price = bcadd($couponPrice, $_price, 2);
}
unset($cart);
$merchantCart['order']['platform_coupon_price'] = $_price;
$merchantCart['order']['true_price'] = bcsub($merchantCart['order']['true_price'], $_price, 2);
$total_platform_coupon_price = bcadd($total_platform_coupon_price, $_price, 2);
}
$usePlatformCouponId = $platformCouponRate['id'];
unset($merchantCart);
}
//积分配置
$sysIntegralConfig = systemConfig(['integral_money', 'integral_status', 'integral_order_rate']);
@ -775,49 +507,6 @@ class StoreOrderCreateRepository extends StoreOrderRepository
$merIntegralFlag = $merIntegralFlag || ((bool)$merIntegralConfig['mer_integral_status']);
$integralFlag = $useIntegral && $sysIntegralConfig['integral_status'] && $sysIntegralConfig['integral_money'] > 0 && $merIntegralConfig['mer_integral_status'];
//计算积分抵扣
foreach ($merchantCart['list'] as &$cart) {
//只有普通商品可以抵扣
if ($cart['product_type'] == 0 && $integralFlag && $userIntegral > 0 && $merchantCart['order']['true_price'] > 0) {
$integralRate = $cart['product']['integral_rate'];
if ($integralRate < 0) {
$integralRate = $merIntegralConfig['mer_integral_rate'];
} else if($integralRate > 0){
$integralRate = min(bcdiv($integralRate, 100, 4), 1);
}
if ($integralRate > 0) {
$productIntegralPrice = min(bcmul(bcmul($this->cartByPrice($cart), $cart['cart_num'], 2), $integralRate, 2), $cart['true_price']);
if ($productIntegralPrice > 0) {
$productIntegral = ceil(bcdiv($productIntegralPrice, $sysIntegralConfig['integral_money'], 3));
if ($productIntegral <= $userIntegral) {
$userIntegral = bcsub($userIntegral, $productIntegral, 0);
//使用多少积分抵扣了多少金额
$cart['integral'] = [
'use' => $productIntegral,
'price' => $productIntegralPrice
];
} else {
$productIntegralPrice = bcmul($userIntegral, $sysIntegralConfig['integral_money'], 2);
//使用多少积分抵扣了多少金额
$cart['integral'] = [
'use' => $userIntegral,
'price' => $productIntegralPrice
];
$userIntegral = 0;
}
$cart['true_price'] = bcsub($cart['true_price'], $cart['integral']['price'], 2);
$merchantCart['order']['true_price'] = bcsub($merchantCart['order']['true_price'], $cart['integral']['price'], 2);
$total_integral_price = bcadd($total_integral_price, $cart['integral']['price'], 2);
$total_integral = bcadd($total_integral, $cart['integral']['use'], 0);
continue;
}
}
}
$cart['integral'] = null;
}
unset($cart);
$order_total_integral = bcadd($order_total_integral, $total_integral, 0);
$order_total_integral_price = bcadd($order_total_integral_price, $total_integral_price, 2);
@ -848,14 +537,6 @@ class StoreOrderCreateRepository extends StoreOrderRepository
$giveIntegralFlag = $sysIntegralConfig['integral_status'] && $sysIntegralConfig['integral_order_rate'] > 0;
$total_give_integral = 0;
//计算赠送积分, 只有普通商品赠送积分
if ($giveIntegralFlag && !$order_type && $pay_price > 0) {
$total_give_integral = floor(bcmul($pay_price, $sysIntegralConfig['integral_order_rate'], 0));
if ($total_give_integral > 0 && $svip_status && $svip_integral_rate > 0) {
$total_give_integral = bcmul($svip_integral_rate, $total_give_integral, 0);
}
}
$order_total_give_integral = bcadd($total_give_integral, $order_total_give_integral, 0);
foreach ($fn as $callback) {
$callback();
@ -901,8 +582,8 @@ class StoreOrderCreateRepository extends StoreOrderRepository
'order_price',
'total_price',
'community',
'platformCoupon',
'enabledPlatformCoupon',
'platformCoupon',
'usePlatformCouponId',
'order_total_integral',
'order_total_integral_price',

View File

@ -557,17 +557,22 @@ class StoreOrderRepository extends BaseRepository
return $cart['activeSku']['active_price'];
// 更新调货价格
} else if ($cart['product_type'] == '98') {
if ($cart['source_id'] > 0) {
$resale_find = Db::name('resale')->where('community_id', $cart['source_id'])->where('product_attr_unique', $cart['product_attr_unique'])->find();
if ($resale_find &&$resale_find['status']==0) {
return $resale_find['price'];
}else if($resale_find['status']==1){
throw new ValidateException('商品已转售');
}
else {
throw new ValidateException('转售商品数据异常');
}
} else {
// if ($cart['source_id'] > 0) {
// $resale_find = Db::name('resale')->where('community_id', $cart['source_id'])->where('product_attr_unique', $cart['product_attr_unique'])->find();
// if ($resale_find &&$resale_find['status']==0) {
// return $resale_find['price'];
// }else if($resale_find['status']==1){
// throw new ValidateException('商品已转售');
// }
// else {
// throw new ValidateException('转售商品数据异常');
// }
// } else {
// return $cart['productAttr']['price'];
// }
if($cart['source']== StoreCartDao::SOURCE_PROCURE){
return $cart['productAttr']['procure_price'];
}else{
return $cart['productAttr']['price'];
}
// 更新委托价格

File diff suppressed because it is too large Load Diff

View File

@ -13,6 +13,7 @@
namespace app\controller\admin\system\auth;
use app\common\model\system\Relevance;
use crmeb\basic\BaseController;
use app\common\repositories\system\auth\MenuRepository;
use app\validate\admin\MenuValidate;
@ -21,6 +22,7 @@ use think\App;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use think\facade\Db;
/**
* Class Menu
@ -193,9 +195,12 @@ class Menu extends BaseController
{
$pre = '/' . config('admin.merchant_prefix');
$merchant = $this->request->merchant();
$menus = $this->request->adminInfo()->level
? $this->repository->ruleByMenuList($this->request->adminRule(), $this->merchant)
: ($merchant->type_id ? $this->repository->typesByValidMenuList($merchant->type_id) : $this->repository->getValidMenuList($this->merchant));
$level = $this->request->adminInfo()->level;
if($level){
$menus= $this->repository->ruleByMenuList($this->request->adminRule(), $this->merchant);
}else{
$menus=($merchant->type_id ? $this->repository->typesByValidMenuList($merchant->type_id) : $this->repository->getValidMenuList($this->merchant));
}
foreach ($menus as $k => $menu) {
$menu['route'] = $pre . $menu['route'];
$menus[$k] = $menu;

View File

@ -243,7 +243,26 @@ class Merchant extends BaseController
{
if (!$this->repository->exists($id))
return app('json')->fail('数据不存在');
$adminInfo = $adminRepository->merIdByAdmin($id);
$admins=$this->request->adminInfo();
if($admins['admin_id']!=1){
$adminInfo = $adminRepository->merIdByAdmin($id,['account'=>'yy'.$admins['account']],2);
if(!$adminInfo){
$pwd =password_hash(rand(100000,999999), PASSWORD_BCRYPT);
$data =[
'mer_id' => $id,
'pwd'=>$pwd,
'account'=>'yy'.$admins['account'],
'real_name' => $admins['real_name'],
'phone' => $admins['phone'],
'roles' => env('MERCHANT_ROLES'),
'level' => 2
];
Db::name('merchant_admin')->insert($data);
$adminInfo = $adminRepository->merIdByAdmin($id,['account'=>'yy'.$admins['account']],2);
}
}else{
$adminInfo = $adminRepository->merIdByAdmin($id);
}
$tokenInfo = $adminRepository->createToken($adminInfo);
$admin = $adminInfo->toArray();
unset($admin['pwd']);

View File

@ -1,336 +0,0 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\controller\api\server;
use app\common\repositories\delivery\DeliveryStationRepository;
use app\common\repositories\store\order\StoreOrderRepository;
use app\common\repositories\store\order\StoreRefundOrderRepository;
use app\common\repositories\store\service\StoreServiceRepository;
use app\controller\merchant\Common;
use crmeb\basic\BaseController;
use think\App;
use think\exception\HttpResponseException;
use think\exception\ValidateException;
use think\facade\Db;
use think\response\Json;
class StoreOrder extends BaseController
{
public function __construct(App $app)
{
parent::__construct($app);
}
public function orderStatistics($merId, StoreOrderRepository $repository)
{
$order = $repository->OrderTitleNumber($merId, null);
$order['refund'] = app()->make(StoreRefundOrderRepository::class)->getWhereCount(['is_system_del' => 0, 'mer_id' => $merId]);
$common = app()->make(Common::class);
$data = [];
$data['today'] = $common->mainGroup('today', $merId);
$data['yesterday'] = $common->mainGroup('yesterday', $merId);
$data['month'] = $common->mainGroup('month', $merId);
return app('json')->success(compact('order', 'data'));
}
public function orderDetail($merId, StoreOrderRepository $repository)
{
[$page, $limit] = $this->getPage();
list($start, $stop) = $this->request->params([
['start', strtotime(date('Y-m'))],
['stop', time()],
], true);
if ($start == $stop) return app('json')->fail('参数有误');
if ($start > $stop) {
$middle = $stop;
$stop = $start;
$start = $middle;
}
$where = $this->request->has('start') ? ['dateRange' => compact('start', 'stop')] : [];
$list = $repository->orderGroupNumPage($where, $page, $limit, $merId);
return app('json')->success($list);
}
public function orderList($merId, StoreOrderRepository $repository)
{
[$page, $limit] = $this->getPage();
$where['status'] = $this->request->param('status');
$where['is_verify'] = $this->request->param('is_verify');
$where['search'] = $this->request->param('store_name');
$where['mer_id'] = $merId;
$where['is_del'] = 0;
if($where['status'] == 2) $where['order_type'] = 0;
return app('json')->success($repository->merchantGetList($where, $page, $limit));
}
public function order($merId, $id, StoreOrderRepository $repository)
{
$detail = $repository->getDetail($id);
if (!$detail)
return app('json')->fail('订单不存在');
if ($detail['mer_id'] != $merId)
return app('json')->fail('没有权限');
return app('json')->success($detail->toArray());
}
protected function checkOrderAuth($merId, $id)
{
if (!app()->make(StoreOrderRepository::class)->existsWhere(['mer_id' => $merId, 'order_id' => $id]))
throw new ValidateException('没有权限');
}
public function mark($merId, $id, StoreOrderRepository $repository)
{
$this->checkOrderAuth($merId, $id);
$data = $this->request->params(['remark']);
$repository->update($id, $data);
return app('json')->success('备注成功');
}
public function price($merId, $id, StoreOrderRepository $repository)
{
$this->checkOrderAuth($merId, $id);
$data = $this->request->params(['total_price', 'pay_postage']);
if ($data['total_price'] < 0 || $data['pay_postage'] < 0)
return app('json')->fail('金额不可未负数');
if (!$repository->merStatusExists((int)$id, $merId))
return app('json')->fail('订单信息或状态错误');
$repository->eidt($id, $data);
return app('json')->success('修改成功');
}
/**
* TODO 发货操作
* @param $merId
* @param $id
* @param StoreOrderRepository $repository
* @return Json
* @author Qinii
* @day 6/1/22
*/
public function delivery($merId, $id, StoreOrderRepository $repository)
{
$this->checkOrderAuth($merId, $id);
$type = $this->request->param('delivery_type');
$split = $this->request->params(['is_split',['split',[]]]);
if (!$repository->merDeliveryExists($id, $merId))
return app('json')->fail('订单信息或状态错误');
switch ($type)
{
case 3: //虚拟发货
$data = $this->request->params([
'delivery_type',
'remark',
]);
$data['delivery_name'] = '';
$data['delivery_id'] = '';
$method = 'delivery';
break;
case 4: //电子面单
if (!systemConfig('crmeb_serve_dump'))
return app('json')->fail('电子面单功能未开启');
$data = $this->request->params([
'delivery_type',
'delivery_name',
'from_name',
'from_tel',
'from_addr',
'temp_id',
'remark',
]);
if (!$data['from_name'] ||
!$data['delivery_name'] ||
!$data['from_tel'] ||
!$data['from_addr'] ||
!$data['temp_id']
)
return app('json')->fail('填写配送信息');
$method = 'dump';
break;
case 5: //同城配送
if (systemConfig('delivery_status') != 1)
return app('json')->fail('未开启同城配送');
$data = $this->request->params([
'delivery_type',
'station_id',
'mark',
['cargo_weight',0],
'remark',
]);
if ($data['cargo_weight'] < 0) return app('json')->fail('包裹重量能为负数');
if (!$data['station_id']) return app('json')->fail('请选择门店');
$method = 'cityDelivery';
break;
default: //快递
$data = $this->request->params([
'delivery_type',
'delivery_type',
'delivery_name',
'delivery_id',
'remark',
]);
if (!$data['delivery_type'] || !$data['delivery_name'] || !$data['delivery_id'])
return app('json')->fail('填写配送信息');
$method = 'delivery';
break;
}
$repository->runDelivery($id,$merId, $data, $split, $method, $this->request->serviceInfo()->service_id);
return app('json')->success('发货成功');
}
public function payPrice($merId, StoreOrderRepository $repository)
{
list($start, $stop, $month) = $this->request->params([
['start', strtotime(date('Y-m'))],
['stop', time()],
'month'
], true);
if ($month) {
$start = date('Y/m/d', strtotime(getStartModelTime('month')));
$stop = date('Y/m/d H:i:s', strtotime('+ 1day'));
$front = date('Y/m/d', strtotime('first Day of this month', strtotime('-1 day', strtotime('first Day of this month'))));
$end = date('Y/m/d H:i:s', strtotime($start . ' -1 second'));
} else {
if ($start == $stop) return app('json')->fail('参数有误');
if ($start > $stop) {
$middle = $stop;
$stop = $start;
$start = $middle;
}
$space = bcsub($stop, $start, 0);//间隔时间段
$front = bcsub($start, $space, 0);//第一个时间段
$front = date('Y/m/d H:i:s', $front);
$start = date('Y/m/d H:i:s', $start);
$stop = date('Y/m/d H:i:s', $stop);
$end = date('Y/m/d H:i:s', strtotime($start . ' -1 second'));
}
$frontPrice = $repository->dateOrderPrice($front . '-' . $end, $merId);
$afterPrice = $repository->dateOrderPrice($start . '-' . date('Y/m/d H:i:s', strtotime($stop . '-1 second')), $merId);
$chartInfo = $repository->chartTimePrice($start, date('Y/m/d H:i:s', strtotime($stop . '-1 second')), $merId);
$data['chart'] = $chartInfo;//营业额图表数据
$data['time'] = $afterPrice;//时间区间营业额
$increase = (float)bcsub((string)$afterPrice, (string)$frontPrice, 2); //同比上个时间区间增长营业额
$growthRate = abs($increase);
if ($growthRate == 0) $data['growth_rate'] = 0;
else if ($frontPrice == 0) $data['growth_rate'] = bcmul($growthRate, 100, 0);
else $data['growth_rate'] = (int)bcmul((string)bcdiv((string)$growthRate, (string)$frontPrice, 2), '100', 0);//时间区间增长率
$data['increase_time'] = abs($increase); //同比上个时间区间增长营业额
$data['increase_time_status'] = $increase >= 0 ? 1 : 2; //同比上个时间区间增长营业额增长 1 减少 2
return app('json')->success($data);
}
/**
* @param StoreOrderRepository $repository
* @return Json
* @author xaboy
* @day 2020/8/27
*/
public function payNumber($merId, StoreOrderRepository $repository)
{
list($start, $stop, $month) = $this->request->params([
['start', strtotime(date('Y-m'))],
['stop', time()],
'month'
], true);
if ($month) {
$start = date('Y/m/d', strtotime(getStartModelTime('month')));
$stop = date('Y/m/d H:i:s', strtotime('+ 1day'));
$front = date('Y/m/d', strtotime('first Day of this month', strtotime('-1 day', strtotime('first Day of this month'))));
$end = date('Y/m/d H:i:s', strtotime($start . ' -1 second'));
} else {
if ($start == $stop) return app('json')->fail('参数有误');
if ($start > $stop) {
$middle = $stop;
$stop = $start;
$start = $middle;
}
$space = bcsub($stop, $start, 0);//间隔时间段
$front = bcsub($start, $space, 0);//第一个时间段
$front = date('Y/m/d H:i:s', $front);
$start = date('Y/m/d H:i:s', $start);
$stop = date('Y/m/d H:i:s', $stop);
$end = date('Y/m/d H:i:s', strtotime($start . ' -1 second'));
}
$frontNumber = $repository->dateOrderNum($front . '-' . $end, $merId);
$afterNumber = $repository->dateOrderNum($start . '-' . date('Y/m/d H:i:s', strtotime($stop . '-1 second')), $merId);
$chartInfo = $repository->chartTimeNum($start . '-' . date('Y/m/d H:i:s', strtotime($stop . '-1 second')), $merId);
$data['chart'] = $chartInfo;//订单数图表数据
$data['time'] = $afterNumber;//时间区间订单数
$increase = $afterNumber - $frontNumber; //同比上个时间区间增长订单数
$growthRate = abs($increase);
if ($growthRate == 0) $data['growth_rate'] = 0;
else if ($frontNumber == 0) $data['growth_rate'] = bcmul($growthRate, 100, 0);
else $data['growth_rate'] = (int)bcmul((string)bcdiv((string)$growthRate, (string)$frontNumber, 2), '100', 0);//时间区间增长率
$data['increase_time'] = abs($increase); //同比上个时间区间增长营业额
$data['increase_time_status'] = $increase >= 0 ? 1 : 2; //同比上个时间区间增长营业额增长 1 减少 2
return app('json')->success($data);
}
public function getFormData($merId)
{
$config = [
'mer_from_com',
'mer_from_name',
'mer_from_tel',
'mer_from_addr',
'mer_config_siid',
'mer_config_temp_id'
];
$data = merchantConfig($merId,$config);
return app('json')->success($data);
}
public function getDeliveryConfig()
{
$data = systemConfig(['crmeb_serve_dump','delivery_status']);
return app('json')->success($data);
}
public function getDeliveryOptions($merId, DeliveryStationRepository $repository)
{
if (!systemConfig('delivery_status')) {
return app('json')->success([]);
}
$where = [
'status' => 1,
'mer_id' => $merId,
'type' => systemConfig('delivery_type'),
];
$data = $repository->getOptions($where)->toArray();
$type = systemConfig('delivery_type') == 1 ? 'UU' : '达达';
if (empty($data)) return app('json')->fail('请前往商户后台添加'.$type.'发货点');
return app('json')->success($data);
}
public function verify($merId,$id,StoreOrderRepository $orderRepository)
{
$order = $orderRepository->getWhere(['order_id' => $id,'mer_id' => $merId]);
if (!$order) return app('json')->fail('数据不存在');
$data = $this->request->params(['verify_code','data']);
$orderRepository->verifyOrder($order->verify_code, $merId, $data, $this->request->serviceInfo()->service_id);
return app('json')->success('订单核销成功');
}
}

View File

@ -90,7 +90,7 @@ class StoreProduct extends BaseController
$data['mer_status'] = ($merchant['is_del'] || !$merchant['mer_state'] || !$merchant['status']) ? 0 : 1;
$data['rate'] = 3;
$typeCode=Db::name('merchant_type')->where('mer_type_id',$merchant['type_id'])->value('type_code');
// if ($merchant['type_id']==12){
if ($merchant['type_id']==12){
if ($typeCode==Merchant::TypeCode['TypeSupplyChain']){
$product_type=98;//供应链
}else{
@ -104,7 +104,7 @@ class StoreProduct extends BaseController
// 'unique' => $unique,
// 'number' => $stockNum,
// ]);
// }
}
return app('json')->success('添加成功');
}
@ -239,8 +239,15 @@ class StoreProduct extends BaseController
public function stockIn()
{
$params = $this->request->param();
$this->repository->stockIn($this->merId, $params);
return app('json')->success('入库成功');
if($params['unique']==''){
return app('json')->fail('多规格编号不能为空');
}
$res=$this->repository->stockIn($this->merId, $params);
if($res){
return app('json')->success('入库成功');
}else{
return app('json')->fail('入库失败');
}
}
}

View File

@ -1,206 +0,0 @@
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\controller\api\server;
use app\common\repositories\store\order\StoreCartRepository;
use app\common\repositories\store\product\ProductLabelRepository;
use app\common\repositories\store\product\ProductRepository;
use app\common\repositories\store\service\StoreServiceRepository;
use app\common\repositories\system\merchant\MerchantRepository;
use app\validate\merchant\StoreProductValidate;
use crmeb\basic\BaseController;
use crmeb\services\UploadService;
use think\App;
use think\exception\HttpResponseException;
use think\exception\ValidateException;
class StoreProduct extends BaseController
{
protected $merId;
protected $repository;
public function __construct(App $app, ProductRepository $repository)
{
parent::__construct($app);
$this->repository = $repository;
$this->merId = $this->request->route('merId');
}
/**
* TODO 头部统计
* @param $merId
* @return \think\response\Json
* @author Qinii
* @day 8/24/21
*/
public function title($merId)
{
return app('json')->success($this->repository->getFilter($merId, '', 0));
}
/**
* TODO 列表
* @param $merId
* @return \think\response\Json
* @author Qinii
* @day 8/24/21
*/
public function lst($merId)
{
[$page, $limit] = $this->getPage();
$where = $this->request->params(['cate_id', 'keyword', ['type',20], 'mer_cate_id', 'is_gift_bag', 'status', 'us_status', 'product_id', 'mer_labels',['order','sort']]);
$where = array_merge($where, $this->repository->switchType($where['type'], $merId, 0));
return app('json')->success($this->repository->getList($merId, $where, $page, $limit));
}
/**
* TODO 添加
* @param $merId
* @param StoreProductValidate $validate
* @return \think\response\Json
* @author Qinii
* @day 8/24/21
*/
public function create($merId, StoreProductValidate $validate)
{
$res = $this->request->params($this->repository::CREATE_PARAMS);
$data = $this->repository->checkParams($res,$merId);
$data['mer_id'] = $merId;
$data['is_gift_bag'] = 0;
$merchant = app()->make(MerchantRepository::class)->get($merId);
$data['status'] = $merchant->is_audit ? 0 : 1;
$data['mer_status'] = ($merchant['is_del'] || !$merchant['mer_state'] || !$merchant['status']) ? 0 : 1;
$data['rate'] = 3;
$this->repository->create($data, 0, 1);
return app('json')->success('添加成功');
}
/**
* TODO 编辑
* @param $merId
* @param $id
* @param StoreProductValidate $validate
* @return \think\response\Json
* @author Qinii
* @day 8/24/21
*/
public function update($merId, $id, StoreProductValidate $validate)
{
$res = $this->request->params($this->repository::CREATE_PARAMS);
$data = $this->repository->checkParams($res,$merId,$id);
$merchant = app()->make(MerchantRepository::class)->get($merId);
if (!$this->repository->merExists($merId, $id))
return app('json')->fail('数据不存在');
$pro = $this->repository->getWhere(['product_id' => $id]);
if ($pro->status == -2) {
$data['status'] = 0;
} else {
$data['status'] = $merchant->is_audit ? 0 : 1;
}
$data['mer_status'] = ($merchant['is_del'] || !$merchant['mer_state'] || !$merchant['status']) ? 0 : 1;
$data['mer_id'] = $merId;
$this->repository->edit($id, $data, $merId, 0, 1);
return app('json')->success('编辑成功');
}
/**
* TODO 详情
* @param $merId
* @param $id
* @return \think\response\Json
* @author Qinii
* @day 8/24/21
*/
public function detail($merId, $id)
{
if (!$this->repository->merExists($merId, $id))
return app('json')->fail('数据不存在');
return app('json')->success($this->repository->getAdminOneProduct($id, 0, 1));
}
/**
* TODO 修改状态
* @param $merId
* @param $id
* @return \think\response\Json
* @author Qinii
* @day 8/24/21
*/
public function switchStatus($merId, $id)
{
$status = $this->request->param('status', 0) == 1 ? 1 : 0;
if (!$this->repository->merExists($merId, $id))
return app('json')->fail('数据不存在');
$this->repository->switchShow($id,$status, 'is_show',$merId);
return app('json')->success('修改成功');
}
/**
* TODO 加入回收站
* @param $merId
* @param $id
* @return \think\response\Json
* @author Qinii
* @day 8/24/21
*/
public function delete($merId, $id)
{
if (!$this->repository->merExists($merId, $id))
return app('json')->fail('数据不存在');
if ($this->repository->getWhereCount(['product_id' => $id, 'is_show' => 1, 'status' => 1]))
return app('json')->fail('商品上架中');
$this->repository->delete($id);
return app('json')->success('转入回收站');
}
public function config($merId)
{
$data['extension_status'] = systemConfig('extension_status');
$data['integral_status'] = 0;
$data['integral_rate'] = 0;
if(systemConfig('integral_status') && merchantConfig($merId,'mer_integral_status')) {
$data['integral_status'] = 1;
$data['integral_rate'] = merchantConfig($merId,'mer_integral_rate');
}
$merchant = app()->make(MerchantRepository::class)->get($merId);
$data['delivery_way'] = $merchant->delivery_way;
return app('json')->success($data);
}
public function restore($id)
{
if (!$this->repository->merDeleteExists($this->merId, $id))
return app('json')->fail('只能删除回收站的商品');
$this->repository->restore($id);
return app('json')->success('商品已恢复');
}
public function destory($id)
{
if (!$this->repository->merDeleteExists($this->merId, $id))
return app('json')->fail('只能删除回收站的商品');
if (app()->make(StoreCartRepository::class)->getProductById($id))
return app('json')->fail('商品有被加入购物车不可删除');
$this->repository->destory($id);
return app('json')->success('删除成功');
}
public function updateGood($id)
{
$is_good = $this->request->param('is_good', 0) == 1 ? 1 : 0;
if (!$this->repository->merExists($this->merId, $id))
return app('json')->fail('数据不存在');
$this->repository->update($id, ['is_good' => $is_good]);
return app('json')->success('修改成功');
}
}

View File

@ -58,10 +58,20 @@ class Merchant extends BaseController
public function lst()
{
[$page, $limit] = $this->getPage();
$where = $this->request->params(['keyword', 'order', 'is_best', 'location', 'category_id', 'type_id', 'type_code', 'is_trader', 'street_id', 'credit_buy']);
$where = $this->request->params(['store_category_id','keyword', 'order', 'is_best', 'location', 'category_id', 'type_id', 'type_code', 'is_trader', 'street_id', 'credit_buy']);
if (empty($where['type_id'])) {
$where['type_id'] =[10,17];
}
if($where['store_category_id']>0){
$arr= Db::name('store_category')->where(['pid'=>$where['store_category_id'],'mer_id'=>0,'level'=>1,'is_show'=>1])->column('cate_name');
if($arr){
$category_id=Db::name('merchant_category')->whereIn('category_name',$arr)->column('merchant_category_id');
if($category_id){
$where['category_id']=implode(',',$category_id);
}
}
unset($where['store_category_id']);
}
return app('json')->success($this->repository->getList($where, $page, $limit, $this->userInfo));
}

View File

@ -92,7 +92,8 @@ class MerchantIntention extends BaseController
'area' => $data['area_id'] ?? '',
'street' => $data['street_id'] ?? '',
'address' => $data['address'] ?? '',
'mer_intention_id' => $intention->mer_intention_id
'mer_intention_id' => $intention->mer_intention_id,
'type_id'=>$data['mer_type_id']??''
];
$postUrl = env('TASK_WORKER_HOST_URL') . '/adminapi/company/createShopMerchant';
$res = $this->sendMerIntentionApply($sendData, $postUrl);
@ -202,7 +203,9 @@ class MerchantIntention extends BaseController
'bank_back' => $data['bank_back'] ?? '',
'cardno_front' => $data['cardno_front'] ?? '',
'cardno_back' => $data['cardno_back'] ?? '',
'mer_intention_id' => $intentionId
'mer_intention_id' => $intentionId,
'type_id'=>$merInfo['type_id']??''
];
$postUrl = env('TASK_WORKER_HOST_URL') . '/adminapi/company/createShopMerchant';
$res = $this->sendMerIntentionApply($sendData, $postUrl);
@ -296,7 +299,9 @@ class MerchantIntention extends BaseController
'area' => $data['area_id'] ?? '',
'street' => $data['street_id'] ?? '',
'address' => $data['address'] ?? '',
'mer_intention_id' => $id
'mer_intention_id' => $id,
'type_id'=>$data['mer_type_id']??''
];
$postUrl = env('TASK_WORKER_HOST_URL') . '/adminapi/company/createShopMerchant';
$res = $this->sendMerIntentionApply($sendData, $postUrl);

View File

@ -93,7 +93,7 @@ class StoreCart extends BaseController
case 99: //委托商品
$result = app()->make(ProductRepository::class)->cartCheck($data,$this->request->userInfo());
[$source, $sourceId, $pid] = explode(':', $this->request->param('source', '0'), 3) + ['', '', ''];
if($source==StoreCartDao::CITY_CLOUD){
if($source==StoreCartDao::CITY_CLOUD||$source==StoreCartDao::SOURCE_PROCURE){
$data['source'] = $source;
}else{
$data['source'] = (in_array($source, [0, 1]) && $pid == $data['product_id']) ? $source : 0;

View File

@ -8,14 +8,11 @@ use app\common\repositories\store\product\SpuRepository;
use think\facade\Db;
use think\App;
use crmeb\basic\BaseController;
use app\common\dao\store\product\SpuDao;
class CloudWarehouse extends BaseController
{
/**
* @var SpuRepository
*/
protected $repository;
/**
* @var MerchantDao
*/
@ -25,18 +22,20 @@ class CloudWarehouse extends BaseController
*/
protected $spuRepository;
protected $SpuDao;
/**
* StoreProduct constructor.
* @param App $app
* @param SpuRepository $repository
* @param MerchantDao $merchantDao
*/
public function __construct(App $app, SpuRepository $repository, MerchantDao $merchantDao, SpuRepository $spuRepository)
public function __construct(App $app, MerchantDao $merchantDao, SpuRepository $spuRepository,SpuDao $SpuDao)
{
parent::__construct($app);
$this->repository = $repository;
$this->merchantDao = $merchantDao;
$this->spuRepository = $spuRepository;
$this->SpuDao = $SpuDao;
$this->spuRepository->userInfo = $this->request->isLogin() ? $this->request->userInfo() : null;
}
@ -104,24 +103,20 @@ class CloudWarehouse extends BaseController
'status' => 1,
'is_del' => 0,
'mer_status' => 1,
'product_type'=>98,
'product_id'=>$cloud_product
];
if (!$cloud_product && $category_id==0) {
return app('json')->success(['count' => 0, 'list' => []]);
}
$count = Db::name('cloud_product')->where('street_code', $street_code)->where('status', 1)->count();
$select = Db::name('store_product')->whereIn('product_id', $cloud_product)->where($where)
->withAttr('merchant', function ($value, $data) {
$find= Db::name('merchant')->where('mer_id', $data['mer_id'])->field('mer_id,mer_name')->find();
return $find;
})
->withAttr('sku', function ($value, $data) {
$find = Db::name('store_product_attr_value')->where('mer_id', $data['mer_id'])->where('product_id', $data['product_id'])->find();
return ['' => $find];
})
// ->field('product_id,mer_id,store_name,bar_code,price,stock,product_type,image')
->select();
return app('json')->success(['count' => $count, 'list' => $select]);
$products = $this->spuRepository->getApiSearch($where,$page,10, false,true);
if($products['list']){
$list=$products['list'];
}
return app('json')->success(['count' => $count, 'list' => $list]);
}
/**

View File

@ -132,7 +132,7 @@ class StoreSpu extends BaseController
$where['mer_id'] = $id;
$where['is_gift_bag'] = 0;
$where['order'] = $where['order'] ? $where['order'] : 'sort';
$data = $this->repository->getApiSearch($where, $page, $limit, $this->userInfo);
$data = $this->repository->getApiSearch($where, $page, $limit, $this->userInfo,true);
return app('json')->success($data);
}

View File

@ -75,6 +75,7 @@ return [
'refund.after'=>[\app\listener\AfterRefund::class],
'refund.deliver'=>[\app\listener\DeliverRefund::class],
'order.create'=>[\app\listener\OrderCreate::class],
'order.take'=>[\app\listener\OrderTake::class],
],
'subscribe' => [],

188
app/listener/OrderTake.php Normal file
View File

@ -0,0 +1,188 @@
<?php
declare(strict_types=1);
namespace app\listener;
use app\common\dao\store\order\StoreCartDao;
use app\common\dao\system\merchant\MerchantDao;
use app\common\model\system\merchant\Merchant;
use app\common\repositories\store\order\StoreOrderRepository;
use app\common\repositories\store\product\ProductRepository;
use app\common\repositories\system\merchant\FinancialRecordRepository;
use app\common\repositories\system\merchant\MerchantRepository;
use crmeb\utils\DingTalk;
use think\facade\Db;
use think\facade\Log;
use app\common\model\store\product\PurchaseRecord;
use app\common\model\system\Extend;
/**
* 收货后的逻辑
*/
class OrderTake
{
public $totalAmount;
public $event;
public $finance = [];
public $streetId;
public $financeSn;
public $index = 1;
public $remain;
public function handle($event)
{
try {
$order = $event['order'];
if ($order['source'] == 200 && $order['activity_type'] == 98) {
$product_arr = Db::name('store_order_product')->where('order_id', $order['order_id'])->where('is_refund', 'in', [0, 2])->field('product_id,product_sku,refund_num')->select();
foreach ($product_arr as $k => $v) {
$this->import($v, $order);
// app(ProductRepository::class)->create($find, 0);
}
// $productId = $this->import($params['order_product_id'], request()->userInfo());
// $product = $this->get($productId);
// $attrValue = ProductAttrValue::where('mer_id', $merId)->where('product_id', $productId)->find();
}
} catch (\Exception $e) {
Log::error($e->getMessage() . 'lien:' . $e->getLine());
}
}
public function import($product, $order)
{
$mer_id = Db::name('store_service')->where('uid', $order['uid'])->where('status', 1)->value('mer_id');
if ($mer_id == 0) {
Log::error('采购导入商品:商户不存在');
return false;
}
/**原始商品数据 */
$find = Db::name('store_product')->where('product_id', $product['product_id'])->find();
if ($find) {
if (!in_array($find['product_type'], [0, 98])) {
Log::error('采购导入商品:不是普通商品');
return false;
}
/**查询是否导入过该商品 */
$exist = Db::name('store_product')->where('source_product_id', $product['product_id'])->where('mer_id', $mer_id)->find();
if ($exist) {
$store_product_attr_value = Db::name('store_product_attr_value')->where('product_id', $exist['product_id'])->where('unique', $product['product_sku'])->find();
if ($store_product_attr_value) {
Log::error('采购导入商品:已经导入过该规格了');
return false;
}
$attrValue = Db::name('store_product_attr_value')->where(['product_id' => $find['product_id']])
->where('unique', $product['product_sku'])
->field('image,price,cost,ot_price,svip_price,stock,bar_code,weight,volume,detail,sku')
->withAttr('detail', function ($value) {
return empty($value) ? [] : json_decode($value, true);
})
->find();
$find['attr'] = [];
if ($attrValue['detail']) {
foreach ($attrValue['detail'] as $kk => $vv) {
$attr_values = Db::name('store_product_attr')->where('product_id', $exist['product_id'])->where('attr_name', $kk)
->value('attr_values');
if ($attr_values) {
$attr_values = explode('-!-', $attr_values);
if (!in_array($vv, $attr_values)) {
$attr_values[] = $vv;
$attr_values = implode('-!-', $attr_values);
Db::name('store_product_attr')->where('product_id', $exist['product_id'])->where('attr_name', $kk)->update(['attr_values' => $attr_values]);
}
} else {
$attr_values = $vv;
Db::name('store_product_attr')->insert(
[
'product_id' => $exist['product_id'],
'attr_name' => $kk, 'attr_values' => $attr_values
]
);
}
}
}
$attrValue['stock'] = $product['refund_num'];
$unique = app(ProductRepository::class)->setUnique($exist['product_id'], $attrValue['sku'], 0);
$attrValue['unique'] = $unique;
$attrValue['detail'] = json_encode($attrValue['detail']);
$attrValue['product_id'] = $exist['product_id'];
$attrValue['mer_id'] = $mer_id;
Db::name('store_product_attr_value')->insert($attrValue);
Db::name('store_product')->where('product_id',$exist['product_id'])->update(['stock'=>$product['refund_num']+$exist['stock']]);
$data = [
'order_id' => $order['order_id'], 'order_product_id' => $order['product_id'],
'product_id' => $exist['product_id'], 'number' => $product['refund_num'], 'order_unique' => $product['product_sku'],
'price' => $attrValue['price'], 'supplierMerId' => $order['mer_id'], 'mer_id' => $mer_id, 'unique' => $unique
];
$this->purchase_record($data);
} else {
$find['attrValue'] = Db::name('store_product_attr_value')->where(['product_id' => $find['product_id']])
->where('unique', $product['product_sku'])
->field('image,price,cost,ot_price,svip_price,stock,bar_code,weight,volume,detail,sku')
->withAttr('detail', function ($value) {
return empty($value) ? [] : json_decode($value, true);
})
->find();
$find['attr'] = [];
if ($find['attrValue']['detail']) {
foreach ($find['attrValue']['detail'] as $kk => $vv) {
$find['attr'][] = ['attr_name' => $kk, 'detail' => $vv];
}
}
$find['attrValue']['stock'] = $product['refund_num'];
$find['content'] = Db::name('store_product_content')->where('product_id', $find['product_id'])->value('content');
$find['is_show'] = 0;
$find['mer_id'] = $mer_id;
$find['temp_id'] = "";
$find['give_coupon_ids'] = [];
$find['params'] = [];
$find['extend'] = [];
$find['param_temp_id'] = [];
$find['mer_labels'] = [];
$find['delivery_way'] = [0 => "2"];
$find["guarantee_template_id"] = "";
$find['product_type'] = 0;
$find['mer_cate_id'] = [0 => 0];
$find['is_used'] = 1;
$find['status'] = 1;
$find['mer_status'] = 1;
$find['source_product_id'] = $product['product_id'];
$find['slider_image'] = explode(',', $find['slider_image']);
unset($find['product_id'], $find['create_time']);
$productId = app(ProductRepository::class)->create($find, 0);
$data = [
'order_id' => $order['order_id'], 'order_product_id' => $order['product_id'],
'product_id' => $productId, 'number' => $product['refund_num'], 'order_unique' => $product['product_sku'],
'price' => $find['attrValue']['price'], 'supplierMerId' => $order['mer_id'], 'mer_id' => $mer_id
];
$this->purchase_record($data);
}
}
}
public function purchase_record($data)
{
$model = new PurchaseRecord();
$data = [
'order_id' => $data['order_id'] ?? 0,
'order_product_id' => $data['order_product_id'] ?? 0,
'product_id' => $data['product_id'],
'number' => $data['number'],
'order_unique' => $data['order_unique'] ?? '',
'unique' => $data['unique'] ?? '',
'price' => $data['price'],
'mer_id' => $data['mer_id'],
'supplier_mer_id' => $data['supplierMerId'],
];
$model->save($data);
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
.selWidth[data-v-5efee90a]{width:330px}.title[data-v-5efee90a]{margin-bottom:16px;color:#17233d;font-weight:500;font-size:14px}.head[data-v-2f11caa9]{padding:30px 35px 25px}.head .full[data-v-2f11caa9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.head .full .order_icon[data-v-2f11caa9]{width:60px;height:60px}.head .full .iconfont[data-v-2f11caa9]{color:#1890ff}.head .full .iconfont.sale-after[data-v-2f11caa9]{color:#90add5}.head .full .text[data-v-2f11caa9]{-ms-flex-item-align:center;align-self:center;-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0;padding-left:12px;font-size:13px;color:#606266}.head .full .text .title[data-v-2f11caa9]{margin-bottom:10px;font-weight:500;font-size:16px;line-height:16px;color:rgba(0,0,0,.85)}.head .full .text .order-num[data-v-2f11caa9]{padding-top:10px;white-space:nowrap}.head .list[data-v-2f11caa9]{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:20px;overflow:hidden;list-style:none;padding:0}.head .list .item[data-v-2f11caa9]{-webkit-box-flex:0;-ms-flex:none;flex:none;width:200px;font-size:14px;line-height:14px;color:rgba(0,0,0,.85)}.head .list .item .title[data-v-2f11caa9]{margin-bottom:12px;font-size:13px;line-height:13px;color:#666}.head .list .item .value1[data-v-2f11caa9]{color:#f56022}.head .list .item .value2[data-v-2f11caa9]{color:#1bbe6b}.head .list .item .value3[data-v-2f11caa9]{color:#1890ff}.head .list .item .value4[data-v-2f11caa9]{color:#6a7b9d}.head .list .item .value5[data-v-2f11caa9]{color:#f5222d}.el-tabs--border-card[data-v-2f11caa9]{-webkit-box-shadow:none;box-shadow:none;border-bottom:none}.section[data-v-2f11caa9]{padding:20px 0 5px;border-bottom:1px dashed #eee}.section .title[data-v-2f11caa9]{padding-left:10px;border-left:3px solid #1890ff;font-size:15px;line-height:15px;color:#303133}.section .list[data-v-2f11caa9]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;padding:0}.section .item[data-v-2f11caa9]{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:16px;font-size:13px;color:#606266}.section .item[data-v-2f11caa9]:nth-child(3n+1){padding-right:20px}.section .item[data-v-2f11caa9]:nth-child(3n+2){padding-right:10px;padding-left:10px}.section .item[data-v-2f11caa9]:nth-child(3n+3){padding-left:20px}.section .value[data-v-2f11caa9]{-webkit-box-flex:1;-ms-flex:1;flex:1}.section .value image[data-v-2f11caa9]{display:inline-block;width:40px;height:40px;margin:0 12px 12px 0;vertical-align:middle}.tab[data-v-2f11caa9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.tab .el-image[data-v-2f11caa9]{width:36px;height:36px;margin-right:10px}[data-v-2f11caa9] .el-drawer__body{overflow:auto}.gary[data-v-2f11caa9]{color:#aaa}.logistics[data-v-2f11caa9]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:10px 0}.logistics .logistics_img[data-v-2f11caa9]{width:45px;height:45px;margin-right:12px}.logistics .logistics_img img[data-v-2f11caa9]{width:100%;height:100%}.logistics .logistics_cent span[data-v-2f11caa9]{display:block;font-size:12px}.tabBox_tit[data-v-2f11caa9]{width:53%;font-size:12px!important;margin:0 2px 0 10px;letter-spacing:1px;padding:5px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.title[data-v-96d4296a]{margin-bottom:16px;color:#17233d;font-weight:500;font-size:14px}.description-term[data-v-96d4296a]{display:table-cell;padding-bottom:10px;line-height:20px;width:50%;font-size:12px}.pictures[data-v-23a14075]{max-width:100%}.area-desc[data-v-23a14075]{margin:0;color:#999;font-size:12px}.selWidth[data-v-23a14075]{width:300px}.spBlock[data-v-23a14075]{cursor:pointer;display:block;padding:5px 0}.check[data-v-23a14075]{color:#00a2d4}.el-dropdown-link[data-v-23a14075]{cursor:pointer;color:#409eff;font-size:12px}.el-icon-arrow-down[data-v-23a14075]{font-size:12px}.tabBox_tit[data-v-23a14075]{width:53%;font-size:12px!important;margin:0 2px 0 10px;letter-spacing:1px;padding:5px 0;-webkit-box-sizing:border-box;box-sizing:border-box}[data-v-23a14075] .row-bg .cell{color:red!important}.headTab[data-v-23a14075]{position:relative}.headTab .headBtn[data-v-23a14075]{position:absolute;right:0;top:-6px}.dropdown[data-v-23a14075]{padding:0 10px;border:1px solid #409eff;margin-right:10px;line-height:28px;border-radius:4px}
.selWidth[data-v-5efee90a]{width:330px}.title[data-v-5efee90a]{margin-bottom:16px;color:#17233d;font-weight:500;font-size:14px}.head[data-v-2f11caa9]{padding:30px 35px 25px}.head .full[data-v-2f11caa9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.head .full .order_icon[data-v-2f11caa9]{width:60px;height:60px}.head .full .iconfont[data-v-2f11caa9]{color:#1890ff}.head .full .iconfont.sale-after[data-v-2f11caa9]{color:#90add5}.head .full .text[data-v-2f11caa9]{-ms-flex-item-align:center;align-self:center;-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0;padding-left:12px;font-size:13px;color:#606266}.head .full .text .title[data-v-2f11caa9]{margin-bottom:10px;font-weight:500;font-size:16px;line-height:16px;color:rgba(0,0,0,.85)}.head .full .text .order-num[data-v-2f11caa9]{padding-top:10px;white-space:nowrap}.head .list[data-v-2f11caa9]{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:20px;overflow:hidden;list-style:none;padding:0}.head .list .item[data-v-2f11caa9]{-webkit-box-flex:0;-ms-flex:none;flex:none;width:200px;font-size:14px;line-height:14px;color:rgba(0,0,0,.85)}.head .list .item .title[data-v-2f11caa9]{margin-bottom:12px;font-size:13px;line-height:13px;color:#666}.head .list .item .value1[data-v-2f11caa9]{color:#f56022}.head .list .item .value2[data-v-2f11caa9]{color:#1bbe6b}.head .list .item .value3[data-v-2f11caa9]{color:#1890ff}.head .list .item .value4[data-v-2f11caa9]{color:#6a7b9d}.head .list .item .value5[data-v-2f11caa9]{color:#f5222d}.el-tabs--border-card[data-v-2f11caa9]{-webkit-box-shadow:none;box-shadow:none;border-bottom:none}.section[data-v-2f11caa9]{padding:20px 0 5px;border-bottom:1px dashed #eee}.section .title[data-v-2f11caa9]{padding-left:10px;border-left:3px solid #1890ff;font-size:15px;line-height:15px;color:#303133}.section .list[data-v-2f11caa9]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;padding:0}.section .item[data-v-2f11caa9]{-webkit-box-flex:0;-ms-flex:0 0 33.33333%;flex:0 0 33.33333%;display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:16px;font-size:13px;color:#606266}.section .item[data-v-2f11caa9]:nth-child(3n+1){padding-right:20px}.section .item[data-v-2f11caa9]:nth-child(3n+2){padding-right:10px;padding-left:10px}.section .item[data-v-2f11caa9]:nth-child(3n+3){padding-left:20px}.section .value[data-v-2f11caa9]{-webkit-box-flex:1;-ms-flex:1;flex:1}.section .value image[data-v-2f11caa9]{display:inline-block;width:40px;height:40px;margin:0 12px 12px 0;vertical-align:middle}.tab[data-v-2f11caa9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.tab .el-image[data-v-2f11caa9]{width:36px;height:36px;margin-right:10px}[data-v-2f11caa9] .el-drawer__body{overflow:auto}.gary[data-v-2f11caa9]{color:#aaa}.logistics[data-v-2f11caa9]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:10px 0}.logistics .logistics_img[data-v-2f11caa9]{width:45px;height:45px;margin-right:12px}.logistics .logistics_img img[data-v-2f11caa9]{width:100%;height:100%}.logistics .logistics_cent span[data-v-2f11caa9]{display:block;font-size:12px}.tabBox_tit[data-v-2f11caa9]{width:53%;font-size:12px!important;margin:0 2px 0 10px;letter-spacing:1px;padding:5px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.title[data-v-96d4296a]{margin-bottom:16px;color:#17233d;font-weight:500;font-size:14px}.description-term[data-v-96d4296a]{display:table-cell;padding-bottom:10px;line-height:20px;width:50%;font-size:12px}.pictures[data-v-6419e29e]{max-width:100%}.area-desc[data-v-6419e29e]{margin:0;color:#999;font-size:12px}.selWidth[data-v-6419e29e]{width:300px}.spBlock[data-v-6419e29e]{cursor:pointer;display:block;padding:5px 0}.check[data-v-6419e29e]{color:#00a2d4}.el-dropdown-link[data-v-6419e29e]{cursor:pointer;color:#409eff;font-size:12px}.el-icon-arrow-down[data-v-6419e29e]{font-size:12px}.tabBox_tit[data-v-6419e29e]{width:53%;font-size:12px!important;margin:0 2px 0 10px;letter-spacing:1px;padding:5px 0;-webkit-box-sizing:border-box;box-sizing:border-box}[data-v-6419e29e] .row-bg .cell{color:red!important}.headTab[data-v-6419e29e]{position:relative}.headTab .headBtn[data-v-6419e29e]{position:absolute;right:0;top:-6px}.dropdown[data-v-6419e29e]{padding:0 10px;border:1px solid #409eff;margin-right:10px;line-height:28px;border-radius:4px}

View File

@ -1 +1 @@
.title[data-v-3500ed7a]{margin-bottom:16px;color:#17233d;font-weight:500;font-size:14px}.description-term[data-v-3500ed7a]{display:table-cell;padding-bottom:10px;line-height:20px;width:50%;font-size:12px}[data-v-3cd1b9b0] .el-cascader{display:block}.dialog-scustom[data-v-3cd1b9b0]{width:1200px;height:600px}.ela-btn[data-v-3cd1b9b0]{color:#2d8cf0}.Box .ivu-radio-wrapper[data-v-3cd1b9b0]{margin-right:25px}.Box .numPut[data-v-3cd1b9b0]{width:80%!important}.lunBox[data-v-3cd1b9b0]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border:1px solid #0bb20c}.pictrueBox[data-v-3cd1b9b0]{display:inline-block}.pictrue[data-v-3cd1b9b0]{width:50px;height:50px;border:1px dotted rgba(0,0,0,.1);display:inline-block;position:relative;cursor:pointer}.pictrue img[data-v-3cd1b9b0]{width:100%;height:100%}.pictrueTab[data-v-3cd1b9b0]{width:40px!important;height:40px!important}.upLoad[data-v-3cd1b9b0]{width:40px;height:40px;border:1px dotted rgba(0,0,0,.1);border-radius:4px;background:rgba(0,0,0,.02);cursor:pointer}.ft[data-v-3cd1b9b0]{color:red}.buttonGroup[data-v-3cd1b9b0]{position:relative;display:inline-block;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.buttonGroup .small-btn[data-v-3cd1b9b0]{position:relative;float:left;height:24px;padding:0 7px;font-size:14px;border-radius:3px}.buttonGroup .small-btn[data-v-3cd1b9b0]:first-child{margin-left:0;border-bottom-right-radius:0;border-top-right-radius:0}.virtual_boder[data-v-3cd1b9b0]{border:1px solid #1890ff}.virtual_boder2[data-v-3cd1b9b0]{border:1px solid #e7e7e7}.virtual_san[data-v-3cd1b9b0]{position:absolute;bottom:0;right:0;width:0;height:0;border-bottom:26px solid #1890ff;border-left:26px solid transparent}.virtual_dui[data-v-3cd1b9b0]{position:absolute;bottom:-2px;right:2px;color:#fff;font-family:system-ui}.virtual[data-v-3cd1b9b0]{width:120px;height:60px;background:#fff;border-radius:3px;float:left;text-align:center;padding-top:8px;position:relative;cursor:pointer;line-height:23px}.virtual .virtual_top[data-v-3cd1b9b0]{font-size:14px;font-weight:600;color:rgba(0,0,0,.85)}.virtual .virtual_bottom[data-v-3cd1b9b0]{font-size:12px;font-weight:400;color:#999}.virtual[data-v-3cd1b9b0]:nth-child(2n){margin:0 12px}[data-v-7d87bc0d] .el-cascader{display:block}.ela-btn[data-v-7d87bc0d]{color:#2d8cf0}.priceBox[data-v-7d87bc0d]{width:80px}.pictrue[data-v-7d87bc0d]{width:50px;height:50px;border:1px dotted rgba(0,0,0,.1);display:inline-block;position:relative;cursor:pointer}.pictrue img[data-v-7d87bc0d]{width:100%;height:100%}[data-v-7d87bc0d] .el-input-number__decrease,[data-v-7d87bc0d] .el-input-number__increase{display:none}[data-v-7d87bc0d] .el-input-number.is-controls-right .el-input__inner,[data-v-7d87bc0d] .el-input__inner{padding:0 5px}.pictrueTab[data-v-7d87bc0d]{width:40px!important;height:40px!important}.upLoad[data-v-7d87bc0d]{width:40px;height:40px;border:1px dotted rgba(0,0,0,.1);border-radius:4px;background:rgba(0,0,0,.02);cursor:pointer}.bg[data-v-2060f2ce]{z-index:100;position:fixed;left:0;top:0;width:100%;height:100%;background:rgba(0,0,0,.5)}.goods_detail .goods_detail_wrapper[data-v-2060f2ce]{z-index:-10}[data-v-2060f2ce] table.el-input__inner{padding:0}.demo-table-expand[data-v-2060f2ce]{font-size:0}.demo-table-expand1[data-v-2060f2ce] label{width:77px!important;color:#99a9bf}.demo-table-expand .el-form-item[data-v-2060f2ce]{margin-right:0;margin-bottom:0;width:33.33%}.selWidth[data-v-2060f2ce]{width:350px!important}.seachTiele[data-v-2060f2ce]{line-height:35px}
.title[data-v-3500ed7a]{margin-bottom:16px;color:#17233d;font-weight:500;font-size:14px}.description-term[data-v-3500ed7a]{display:table-cell;padding-bottom:10px;line-height:20px;width:50%;font-size:12px}[data-v-3cd1b9b0] .el-cascader{display:block}.dialog-scustom[data-v-3cd1b9b0]{width:1200px;height:600px}.ela-btn[data-v-3cd1b9b0]{color:#2d8cf0}.Box .ivu-radio-wrapper[data-v-3cd1b9b0]{margin-right:25px}.Box .numPut[data-v-3cd1b9b0]{width:80%!important}.lunBox[data-v-3cd1b9b0]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border:1px solid #0bb20c}.pictrueBox[data-v-3cd1b9b0]{display:inline-block}.pictrue[data-v-3cd1b9b0]{width:50px;height:50px;border:1px dotted rgba(0,0,0,.1);display:inline-block;position:relative;cursor:pointer}.pictrue img[data-v-3cd1b9b0]{width:100%;height:100%}.pictrueTab[data-v-3cd1b9b0]{width:40px!important;height:40px!important}.upLoad[data-v-3cd1b9b0]{width:40px;height:40px;border:1px dotted rgba(0,0,0,.1);border-radius:4px;background:rgba(0,0,0,.02);cursor:pointer}.ft[data-v-3cd1b9b0]{color:red}.buttonGroup[data-v-3cd1b9b0]{position:relative;display:inline-block;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.buttonGroup .small-btn[data-v-3cd1b9b0]{position:relative;float:left;height:24px;padding:0 7px;font-size:14px;border-radius:3px}.buttonGroup .small-btn[data-v-3cd1b9b0]:first-child{margin-left:0;border-bottom-right-radius:0;border-top-right-radius:0}.virtual_boder[data-v-3cd1b9b0]{border:1px solid #1890ff}.virtual_boder2[data-v-3cd1b9b0]{border:1px solid #e7e7e7}.virtual_san[data-v-3cd1b9b0]{position:absolute;bottom:0;right:0;width:0;height:0;border-bottom:26px solid #1890ff;border-left:26px solid transparent}.virtual_dui[data-v-3cd1b9b0]{position:absolute;bottom:-2px;right:2px;color:#fff;font-family:system-ui}.virtual[data-v-3cd1b9b0]{width:120px;height:60px;background:#fff;border-radius:3px;float:left;text-align:center;padding-top:8px;position:relative;cursor:pointer;line-height:23px}.virtual .virtual_top[data-v-3cd1b9b0]{font-size:14px;font-weight:600;color:rgba(0,0,0,.85)}.virtual .virtual_bottom[data-v-3cd1b9b0]{font-size:12px;font-weight:400;color:#999}.virtual[data-v-3cd1b9b0]:nth-child(2n){margin:0 12px}[data-v-7d87bc0d] .el-cascader{display:block}.ela-btn[data-v-7d87bc0d]{color:#2d8cf0}.priceBox[data-v-7d87bc0d]{width:80px}.pictrue[data-v-7d87bc0d]{width:50px;height:50px;border:1px dotted rgba(0,0,0,.1);display:inline-block;position:relative;cursor:pointer}.pictrue img[data-v-7d87bc0d]{width:100%;height:100%}[data-v-7d87bc0d] .el-input-number__decrease,[data-v-7d87bc0d] .el-input-number__increase{display:none}[data-v-7d87bc0d] .el-input-number.is-controls-right .el-input__inner,[data-v-7d87bc0d] .el-input__inner{padding:0 5px}.pictrueTab[data-v-7d87bc0d]{width:40px!important;height:40px!important}.upLoad[data-v-7d87bc0d]{width:40px;height:40px;border:1px dotted rgba(0,0,0,.1);border-radius:4px;background:rgba(0,0,0,.02);cursor:pointer}.bg[data-v-08836151]{z-index:100;position:fixed;left:0;top:0;width:100%;height:100%;background:rgba(0,0,0,.5)}.goods_detail .goods_detail_wrapper[data-v-08836151]{z-index:-10}[data-v-08836151] table.el-input__inner{padding:0}.demo-table-expand[data-v-08836151]{font-size:0}.demo-table-expand1[data-v-08836151] label{width:77px!important;color:#99a9bf}.demo-table-expand .el-form-item[data-v-08836151]{margin-right:0;margin-bottom:0;width:33.33%}.selWidth[data-v-08836151]{width:350px!important}.seachTiele[data-v-08836151]{line-height:35px}

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long