!255 商品列表统计

Merge pull request !255 from 杨建炊/fix-release-1.0.0/yjc-migrate
This commit is contained in:
杨建炊 2024-11-21 08:15:34 +00:00 committed by Gitee
commit b6855614d3
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
38 changed files with 589 additions and 623 deletions

View File

@ -50,6 +50,89 @@ class GoodsSkusController extends Controller
} }
public function index(Request $request) public function index(Request $request)
{
$ids = [];
$externals = $this->buildExternals($ids);
$builder = GoodsSku::query();
$this->preparQueryGoodsSkus($request, $builder);
$day = DateTimeUtils::getToday();
$sortField = $request->input('sort_field', 'id');//stock sale_stock order_goods_num
$sortValue = $request->input('sort_value', 'desc');
$goodsSkusBuilder = (clone $builder)->filter()->with(['goods' => function ($query) {
$query->with(['type' => function ($query) {
$query->with("parentType:id,name")->select(["id", "name", "parent_id"]);
}]);
}])
->with(['daily' => function ($query) use ($day) {
$query->where('day', $day);
}])
->where('is_combination', 0);
$sum = null;
if ($request->get('goods_title')) {
$fields = implode(',', [
'SUM(stock) as stock',
"GROUP_CONCAT(id) as ids"
]);
$sum = (clone $goodsSkusBuilder)->select(DB::raw($fields))->first();
$sum['goods_number'] = 0;
if (!empty($sum['ids'])) {
foreach (explode(",", $sum['ids']) as $item) {
$sum['goods_number'] += $ids[$item] ?? 0;
}
}
$sum['real_stock'] = ($sum['stock'] ?? 0) + $sum['goods_number'];
}
if ($sortField == "order_goods_num") {
$finalIds = [];
asort($ids);
foreach ($ids as $id => $number) {
$finalIds[] = $id;
}
if (empty($finalIds)) {
$goodsSkusBuilder->orderBy("id", $sortValue);
} else {
$idField = implode(',', $finalIds);
$goodsSkusBuilder->orderByRaw("FIELD(id,{$idField}) {$sortValue}");
}
} else {
$goodsSkusBuilder->orderBy($sortField, $sortValue);
}
$goodsSkus = $goodsSkusBuilder->paginate($request->get('per_page'));
$rolesName = $request->user()->getRoleNames()->toArray();
foreach ($goodsSkus as &$sku) {
$lastInventoryTime = !empty($sku['daily']['inventory_time']) ? $sku['daily']['inventory_time'] : date('Y-m-d 07:00:00');
if (isset($externals[$sku['id']])) {
$sku['order_detail'] = $externals[$sku['id']];
$sku['order_goods_num'] = $ids[$sku['id']] ?? 0;
} else {
$sku['order_detail'] = [];
$sku['order_goods_num'] = 0;
}
$sku['order_goods_num'] -= $sku['daily']['reissue_num'] ?? 0;
$sku['inventory_time'] = $lastInventoryTime;
if ('销售' === $rolesName[0]) {
$sku['cost'] = 0;
}
if (!empty($sku['yesterday_num'])) {
$sku['sale_ratio'] = round($sku['stock'] / $sku['yesterday_num'], 2) * 100;
} else {
$sku['sale_ratio'] = 0;
}
$sku['yesterday_num'] = bcadd($sku['stock'], $sku['order_goods_num']);
}
$data = [
"manage" => ["is_admin" => in_array($rolesName[0], ["运营", "超级管理员", "管理员", "系统管理员", "店铺运营"]) ? 1 : 0],
"sum" => $sum
];
return GoodsSkuResource::collection($goodsSkus)->additional($data);
}
private function buildExternals($ids)
{ {
$fields = implode(',', [ $fields = implode(',', [
'shop_id', 'shop_id',
@ -75,7 +158,7 @@ class GoodsSkusController extends Controller
->orderByDesc('number') ->orderByDesc('number')
->get() ->get()
->toArray(); ->toArray();
$ids = $externals = []; $externals = [];
foreach ($businessOrderItems as $businessOrderItem) { foreach ($businessOrderItems as $businessOrderItem) {
if (is_null($businessOrderItem['goods_sku'])) { if (is_null($businessOrderItem['goods_sku'])) {
continue; continue;
@ -85,6 +168,7 @@ class GoodsSkusController extends Controller
foreach ($businessOrderItem['goods_sku']['combination_goods'] ?? [] as $combinationGoods) { foreach ($businessOrderItem['goods_sku']['combination_goods'] ?? [] as $combinationGoods) {
$ids[$combinationGoods['item_id']] = ($ids[$combinationGoods['item_id']] ?? 0) $ids[$combinationGoods['item_id']] = ($ids[$combinationGoods['item_id']] ?? 0)
+ ((int)$businessOrderItem['number']) * $combinationGoods['item_num']; + ((int)$businessOrderItem['number']) * $combinationGoods['item_num'];
$businessOrderItem['goods_number'] = ((int)$businessOrderItem['number']) * $combinationGoods['item_num'];
$externals[$combinationGoods['item_id']][] = $businessOrderItem; $externals[$combinationGoods['item_id']][] = $businessOrderItem;
} }
} }
@ -96,68 +180,10 @@ class GoodsSkusController extends Controller
$externals[$id][] = $businessOrderItem; $externals[$id][] = $businessOrderItem;
} }
return $externals;
$builder = GoodsSku::query();
$this->preparQueryGoodsSkus($request, $builder);
$day = DateTimeUtils::getToday();
$sortField = $request->input('sort_field', 'id');//stock sale_stock order_goods_num
$sortValue = $request->input('sort_value', 'desc');
$goodsSkusBuilder = (clone $builder)->filter()->with(['goods' => function ($query) {
$query->with(['type' => function ($query) {
$query->with("parentType:id,name")->select(["id", "name", "parent_id"]);
}]);
}])
->with(['daily' => function ($query) use ($day) {
$query->where('day', $day);
}])
->where('is_combination', 0);
if ($sortField == "order_goods_num") {
$finalIds = [];
asort($ids);
foreach ($ids as $id => $number) {
$finalIds[] = $id;
}
if (empty($finalIds)) {
$goodsSkusBuilder->orderBy("id", $sortValue);
} else {
$idField = implode(',', $finalIds);
$goodsSkusBuilder->orderByRaw("FIELD(id,{$idField}) {$sortValue}");
}
} else {
$goodsSkusBuilder->orderBy($sortField, $sortValue);
}
$goodsSkus = $goodsSkusBuilder->paginate($request->get('per_page'));
$rolesName = $request->user()->getRoleNames()->toArray();
foreach ($goodsSkus as &$sku) {
$lastInventoryTime = !empty($sku['daily']['inventory_time']) ? $sku['daily']['inventory_time'] : date('Y-m-d 07:00:00');
if (isset($externals[$sku['id']])) {
$sku['order_detail'] = $externals[$sku['id']];
$sku['order_goods_num'] = $ids[$sku['id']];
} else {
$sku['order_detail'] = [];
$sku['order_goods_num'] = 0;
}
$sku['order_goods_num'] -= $sku['daily']['reissue_num'] ?? 0;
$sku['inventory_time'] = $lastInventoryTime;
if ('销售' === $rolesName[0]) {
$sku['cost'] = 0;
}
if (!empty($sku['yesterday_num'])) {
$sku['sale_ratio'] = round($sku['stock'] / $sku['yesterday_num'], 2) * 100;
} else {
$sku['sale_ratio'] = 0;
}
$sku['yesterday_num'] = bcadd($sku['stock'], $sku['order_goods_num']);
}
$data = ["manage" => ["is_admin" => in_array($rolesName[0], ["运营", "超级管理员", "管理员", "系统管理员", "店铺运营"]) ? 1 : 0]];
return GoodsSkuResource::collection($goodsSkus)->additional($data);
} }
private function preparQueryGoodsSkus(Request $request, &$builder) private function preparQueryGoodsSkus(Request $request, &$builder)
{ {
if ($request->get('keyword_type') && $request->get('keyword_value')) { if ($request->get('keyword_type') && $request->get('keyword_value')) {

View File

@ -77,7 +77,7 @@ class PurchaseImport implements ToArray, SkipsEmptyRows
if (!empty($row[7])) { if (!empty($row[7])) {
$purchaseRecords->arrived_time = DateTimeUtils::excelUploadDateToString($row[7], $today,"Y-m-d H:i:s"); $purchaseRecords->arrived_time = DateTimeUtils::excelUploadDateToString($row[7], $today,"Y-m-d H:i:s");
}else{ }else{
$purchaseRecords->arrived_time = $today; $purchaseRecords->arrived_time = Carbon::now()->toDateTimeString();
} }
$purchaseRecords->buyer_user_id = $buyerUserIdKeyByNameMap[$row[4]] ?? 0; $purchaseRecords->buyer_user_id = $buyerUserIdKeyByNameMap[$row[4]] ?? 0;
$purchaseRecords->buyer_name = $row[4] ?? ''; $purchaseRecords->buyer_name = $row[4] ?? '';

View File

@ -69,7 +69,7 @@ class BusinessOrder extends Model
public function getShippingStatusAttribute($value) public function getShippingStatusAttribute($value)
{ {
$map = ['未发货', '已发货', '部分发货', '' => '']; $map = ['未发货', '已发货', '部分发货',"已收货", '' => ''];
return $map[$value]; return $map[$value];
} }

View File

@ -1 +1 @@
#nprogress{pointer-events:none}#nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:2px solid transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.searchBox[data-v-a256b434]{display:flex;align-items:center;flex-wrap:wrap;white-space:nowrap}.searchBox .row[data-v-a256b434]{font-size:14px;margin-bottom:20px;margin-right:15px;display:flex;align-items:center}.bgBox[data-v-a256b434]{position:relative;border-radius:5px;background-color:#f5f2f2;margin-bottom:15px;padding:15px 30px 15px 0}.bgBox .close[data-v-a256b434]{color:red;position:absolute;right:5px;top:5px;font-size:20px;cursor:pointer}.btn[data-v-a256b434]{display:flex;align-items:center;font-size:14px;color:#409eff;cursor:pointer;width:-moz-fit-content;width:fit-content} #nprogress{pointer-events:none}#nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:2px solid transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.searchBox[data-v-3852f03c]{display:flex;align-items:center;flex-wrap:wrap;white-space:nowrap}.searchBox .row[data-v-3852f03c]{font-size:14px;margin-bottom:20px;margin-right:15px;display:flex;align-items:center}.bgBox[data-v-3852f03c]{position:relative;border-radius:5px;background-color:#f5f2f2;margin-bottom:15px;padding:15px 30px 15px 0}.bgBox .close[data-v-3852f03c]{color:red;position:absolute;right:5px;top:5px;font-size:20px;cursor:pointer}.btn[data-v-3852f03c]{display:flex;align-items:center;font-size:14px;color:#409eff;cursor:pointer;width:-moz-fit-content;width:fit-content}

View File

@ -1 +1 @@
#nprogress{pointer-events:none}#nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:2px solid transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.searchBox[data-v-03f5ca86]{display:flex;align-items:center;flex-wrap:wrap;white-space:nowrap}.searchBox .row[data-v-03f5ca86]{font-size:14px;margin-bottom:20px;margin-right:15px;display:flex;align-items:center}.opaBox[data-v-03f5ca86]{margin-bottom:15px}.bgBox[data-v-03f5ca86]{position:relative;border-radius:5px;background-color:#f5f2f2;margin-bottom:15px;padding:15px 30px 1px 0}.bgBox .close[data-v-03f5ca86]{color:red;position:absolute;right:5px;top:5px;font-size:20px;cursor:pointer}.btn[data-v-03f5ca86]{display:flex;align-items:center;font-size:14px;color:#409eff;cursor:pointer;width:-moz-fit-content;width:fit-content} #nprogress{pointer-events:none}#nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:2px solid transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.searchBox[data-v-475fb543]{display:flex;align-items:center;flex-wrap:wrap;white-space:nowrap}.searchBox .row[data-v-475fb543]{font-size:14px;margin-bottom:20px;margin-right:15px;display:flex;align-items:center}.opaBox[data-v-475fb543]{margin-bottom:15px}.bgBox[data-v-475fb543]{position:relative;border-radius:5px;background-color:#f5f2f2;margin-bottom:15px;padding:15px 30px 1px 0}.bgBox .close[data-v-475fb543]{color:red;position:absolute;right:5px;top:5px;font-size:20px;cursor:pointer}.btn[data-v-475fb543]{display:flex;align-items:center;font-size:14px;color:#409eff;cursor:pointer;width:-moz-fit-content;width:fit-content}

1
public/dist/css/298.d943cf60.css vendored Normal file
View File

@ -0,0 +1 @@
.skuBox[data-v-4de310da]{border:1px solid #e5e5e5;border-radius:5px;padding:15px 0;margin-bottom:15px;background-color:#f3f3f3}.skuBox .tit[data-v-4de310da]{padding-left:40px;font-weight:600;font-size:15px;margin-bottom:15px}.skuBox[data-v-3dbf163e]{border:1px solid #e5e5e5;border-radius:5px;padding:15px 0;margin-bottom:15px;background-color:#f3f3f3}.skuBox .tit[data-v-3dbf163e]{padding-left:40px;font-weight:600;font-size:15px;margin-bottom:15px}.table[data-v-97b6b362]{margin-top:20px;position:relative}.btn[data-v-97b6b362]{float:right}.flex[data-v-97b6b362]{display:flex;align-items:center}.goodBox .Img[data-v-97b6b362]{width:50px;height:50px;margin-right:12px;border-radius:4px}.goodBox .tit[data-v-97b6b362]{color:#000;font-size:13px}.confirmbtn[data-v-97b6b362]{width:114px;height:44px;border-radius:3px;margin-top:21px;margin-bottom:8px}.import-right[data-v-97b6b362]{margin-top:30px}.import-right a[data-v-97b6b362]{color:#409eff}[data-v-97b6b362] .btn11{padding:0;width:14px;height:14px}[data-v-97b6b362] .btn11 img{width:100%;height:100%}.page[data-v-97b6b362]{margin-top:20px}.searchBox[data-v-97b6b362]{display:flex;align-items:center;flex-wrap:wrap;white-space:nowrap}.searchBox .row[data-v-97b6b362]{font-size:14px;margin-bottom:20px;margin-right:15px;display:flex;align-items:center}.titBox[data-v-97b6b362]{display:flex;align-items:center}.red[data-v-97b6b362]{color:red}

View File

@ -1 +0,0 @@
.skuBox[data-v-4de310da]{border:1px solid #e5e5e5;border-radius:5px;padding:15px 0;margin-bottom:15px;background-color:#f3f3f3}.skuBox .tit[data-v-4de310da]{padding-left:40px;font-weight:600;font-size:15px;margin-bottom:15px}.skuBox[data-v-3dbf163e]{border:1px solid #e5e5e5;border-radius:5px;padding:15px 0;margin-bottom:15px;background-color:#f3f3f3}.skuBox .tit[data-v-3dbf163e]{padding-left:40px;font-weight:600;font-size:15px;margin-bottom:15px}.table[data-v-5670c00d]{margin-top:20px;position:relative}.btn[data-v-5670c00d]{float:right}.flex[data-v-5670c00d]{display:flex;align-items:center}.goodBox .Img[data-v-5670c00d]{width:50px;height:50px;margin-right:12px;border-radius:4px}.goodBox .tit[data-v-5670c00d]{color:#000;font-size:13px}.confirmbtn[data-v-5670c00d]{width:114px;height:44px;border-radius:3px;margin-top:21px;margin-bottom:8px}.import-right[data-v-5670c00d]{margin-top:30px}.import-right a[data-v-5670c00d]{color:#409eff}[data-v-5670c00d] .btn11{padding:0;width:14px;height:14px}[data-v-5670c00d] .btn11 img{width:100%;height:100%}.page[data-v-5670c00d]{margin-top:20px}.searchBox[data-v-5670c00d]{display:flex;align-items:center;flex-wrap:wrap;white-space:nowrap}.searchBox .row[data-v-5670c00d]{font-size:14px;margin-bottom:20px;margin-right:15px;display:flex;align-items:center}.titBox[data-v-5670c00d]{display:flex;align-items:center}.red[data-v-5670c00d]{color:red}

View File

@ -1 +1 @@
#nprogress{pointer-events:none}#nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:2px solid transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.block[data-v-6141beb2]{margin-top:20px} #nprogress{pointer-events:none}#nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:2px solid transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}

View File

@ -1 +1 @@
#nprogress{pointer-events:none}#nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:2px solid transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.searchBox[data-v-44368138]{display:flex;align-items:center;flex-wrap:wrap;white-space:nowrap}.searchBox .row[data-v-44368138]{font-size:14px;margin-bottom:20px;margin-right:15px;display:flex;align-items:center}.opaBox[data-v-44368138]{margin-bottom:15px}.bgBox[data-v-44368138]{position:relative;border-radius:5px;background-color:#f5f2f2;margin-bottom:15px;padding:15px 30px 15px 0}.bgBox .close[data-v-44368138]{color:red;position:absolute;right:5px;top:5px;font-size:20px;cursor:pointer}.btn[data-v-44368138]{display:flex;align-items:center;font-size:14px;color:#409eff;cursor:pointer;width:-moz-fit-content;width:fit-content} #nprogress{pointer-events:none}#nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:2px solid transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.searchBox[data-v-91e72f98]{display:flex;align-items:center;flex-wrap:wrap;white-space:nowrap}.searchBox .row[data-v-91e72f98]{font-size:14px;margin-bottom:20px;margin-right:15px;display:flex;align-items:center}.opaBox[data-v-91e72f98]{margin-bottom:15px}.bgBox[data-v-91e72f98]{position:relative;border-radius:5px;background-color:#f5f2f2;margin-bottom:15px;padding:15px 30px 15px 0}.bgBox .close[data-v-91e72f98]{color:red;position:absolute;right:5px;top:5px;font-size:20px;cursor:pointer}.btn[data-v-91e72f98]{display:flex;align-items:center;font-size:14px;color:#409eff;cursor:pointer;width:-moz-fit-content;width:fit-content}

View File

@ -1 +1 @@
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>erp</title><script defer="defer" src="js/chunk-vendors.04652b46.js"></script><script defer="defer" src="js/app.eb0ff1e5.js"></script><link href="css/chunk-vendors.77489a8d.css" rel="stylesheet"><link href="css/app.7e37f273.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but erp doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html> <!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>erp</title><script defer="defer" src="js/chunk-vendors.04652b46.js"></script><script defer="defer" src="js/app.304aa352.js"></script><link href="css/chunk-vendors.77489a8d.css" rel="stylesheet"><link href="css/app.7e37f273.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but erp doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>

2
public/dist/js/134.57e92ad2.js vendored Normal file

File diff suppressed because one or more lines are too long

1
public/dist/js/134.57e92ad2.js.map vendored Normal file

File diff suppressed because one or more lines are too long

2
public/dist/js/24.1eaace62.js vendored Normal file

File diff suppressed because one or more lines are too long

1
public/dist/js/24.1eaace62.js.map vendored Normal file

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

2
public/dist/js/298.143f4f4b.js vendored Normal file

File diff suppressed because one or more lines are too long

1
public/dist/js/298.143f4f4b.js.map vendored Normal file

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

2
public/dist/js/808.eabeec45.js vendored Normal file

File diff suppressed because one or more lines are too long

1
public/dist/js/808.eabeec45.js.map vendored Normal file

File diff suppressed because one or more lines are too long

2
public/dist/js/839.aa0c84c2.js vendored Normal file

File diff suppressed because one or more lines are too long

1
public/dist/js/839.aa0c84c2.js.map vendored Normal file

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

2
public/dist/js/app.304aa352.js vendored Normal file

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

View File

@ -64,8 +64,11 @@
<el-card> <el-card>
<div> <div>
<!-- 表格头部操作 --> <!-- 表格头部操作 -->
<div> <div style="display: flex;align-items: center;justify-content: space-between;">
<span>全部商品({{ total }})</span> <div style="display: flex;flex-wrap: wrap;">
<span style="margin-right: 20px;">全部商品({{ total }})</span>
<div v-if="sum" style="color: #f00;">销量{{ sum.goods_number }}实际库存{{ sum.real_stock }}剩余库存{{ sum.stock }}</div>
</div>
<div class="btn"> <div class="btn">
<el-button @click="resetOrderCount" icon="el-icon-refresh">订单重置</el-button> <el-button @click="resetOrderCount" icon="el-icon-refresh">订单重置</el-button>
<el-button type="primary" @click="petchEditStock" icon="el-icon-edit" :disabled="!chooseList.length">批量更新在售库存</el-button> <el-button type="primary" @click="petchEditStock" icon="el-icon-edit" :disabled="!chooseList.length">批量更新在售库存</el-button>
@ -120,7 +123,7 @@
</el-table-column> </el-table-column>
<el-table-column prop="yesterday_num" label="实际库存" align="center"></el-table-column> <el-table-column prop="yesterday_num" label="实际库存" align="center"></el-table-column>
<el-table-column prop="sale_stock" label="可售库存" sortable="custom"> <el-table-column prop="sale_stock" label="可售库存" sortable="custom" width="160">
<template slot-scope="scope"> <template slot-scope="scope">
<div class="titBox" v-if="scope.row.edit"> <div class="titBox" v-if="scope.row.edit">
<el-input v-model="scope.row.sale_stock" placeholder="可售库存" size="mini" style="width: 100%;"></el-input> <el-input v-model="scope.row.sale_stock" placeholder="可售库存" size="mini" style="width: 100%;"></el-input>
@ -408,6 +411,7 @@
filterTime: [], filterTime: [],
sort_field: '', sort_field: '',
sort_value: '', sort_value: '',
sum: null
} }
}, },
methods: { methods: {
@ -456,6 +460,7 @@
sku_code: this.shopsData sku_code: this.shopsData
} }
this.is_admin = res.data.manage && res.data.manage.is_admin this.is_admin = res.data.manage && res.data.manage.is_admin
this.sum = params.goods_title ? res.data.sum : null
this.loading = false this.loading = false
}).catch(() => { }).catch(() => {
this.loading = false this.loading = false

File diff suppressed because it is too large Load Diff

View File

@ -102,6 +102,7 @@
import { getDailyStock, batchAddDailyStock } from "@/api/supplyChain" import { getDailyStock, batchAddDailyStock } from "@/api/supplyChain"
import axios from "axios" import axios from "axios"
import { goodsSkusList } from "@/api/goods" import { goodsSkusList } from "@/api/goods"
import dayjs from 'dayjs'
export default { export default {
data() { data() {
@ -240,6 +241,9 @@ export default {
} }
}, },
mounted() { mounted() {
let start = dayjs().subtract(7, 'day').format('YYYY-MM-DD') + ' 00:00:00'
let end = dayjs().format('YYYY-MM-DD hh:mm:ss')
this.addTime = [start, end]
this.fetchList() this.fetchList()
} }
} }

View File

@ -44,7 +44,7 @@
<el-table-column prop="cost" label="采购成本" /> <el-table-column prop="cost" label="采购成本" />
<el-table-column prop="buyer_name" label="采购人名称" /> <el-table-column prop="buyer_name" label="采购人名称" />
<!-- <el-table-column prop="status" label="状态" /> --> <!-- <el-table-column prop="status" label="状态" /> -->
<el-table-column prop="expire_time" label="到货时间" /> <el-table-column prop="arrived_time" label="到货时间" />
<el-table-column prop="supplier_name" label="供应商"> <el-table-column prop="supplier_name" label="供应商">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.supplier_name">{{ scope.row.supplier_name }}{{scope.row.supplier_id}}</span> <span v-if="scope.row.supplier_name">{{ scope.row.supplier_name }}{{scope.row.supplier_id}}</span>

View File

@ -48,7 +48,7 @@
<el-table-column prop="cost" label="采购成本" /> <el-table-column prop="cost" label="采购成本" />
<el-table-column prop="buyer_name" label="采购人名称" /> <el-table-column prop="buyer_name" label="采购人名称" />
<!-- <el-table-column prop="status" label="状态" /> --> <!-- <el-table-column prop="status" label="状态" /> -->
<el-table-column prop="expire_time" label="到货时间" /> <el-table-column prop="arrived_time" label="到货时间" />
<el-table-column prop="supplier_name" label="供应商"> <el-table-column prop="supplier_name" label="供应商">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.supplier_name">{{ scope.row.supplier_name }}{{scope.row.supplier_id}}</span> <span v-if="scope.row.supplier_name">{{ scope.row.supplier_name }}{{scope.row.supplier_id}}</span>