From 87e1fcec05052680c058b6be82f9536a42414a20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E4=B8=96=E7=95=8C?= <642747453@qq.com> Date: Thu, 20 Apr 2023 20:43:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20#10000=20=E5=9F=BA=E7=A1=80=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Commands/Test.php | 102 +++++++ app/Exports/DiffTodayPriceGoodsExport.php | 59 ++++ .../Business/BusinessGoodsSkusController.php | 116 +++++++ .../Goods/GoodsCombinationController.php | 109 ++++++- app/Http/Controllers/Menu/MenusController.php | 2 +- app/Imports/TodayPriceImport.php | 35 +++ app/Models/BusinessGoodsSku.php | 6 +- app/Models/CombinationGood.php | 4 +- app/Models/GoodsSku.php | 10 + app/Models/TodayPrice.php | 13 + .../2022_07_28_095523_create_menus_table.php | 1 + ...04_20_091631_create_today_prices_table.php | 38 +++ database/seeds/MenusTableSeeder.php | 2 +- resources/frontend/src/api/goods.js | 47 ++- resources/frontend/src/router/list.js | 39 +-- .../frontend/src/views/goods/combination.vue | 282 ++++++++++++++++++ .../frontend/src/views/goods/location.vue | 2 +- .../frontend/src/views/plat/goodsList.vue | 32 ++ resources/lang/zh-CN/permission.php | 16 + routes/api.php | 7 +- routes/web.php | 2 + 21 files changed, 896 insertions(+), 28 deletions(-) create mode 100644 app/Exports/DiffTodayPriceGoodsExport.php create mode 100644 app/Imports/TodayPriceImport.php create mode 100644 app/Models/TodayPrice.php create mode 100644 database/migrations/2023_04_20_091631_create_today_prices_table.php create mode 100644 resources/frontend/src/views/goods/combination.vue diff --git a/app/Console/Commands/Test.php b/app/Console/Commands/Test.php index 95df5fa..ddaae9a 100644 --- a/app/Console/Commands/Test.php +++ b/app/Console/Commands/Test.php @@ -3,18 +3,21 @@ namespace App\Console\Commands; use App\Events\StockUpdateEvent; +use App\Exports\DiffTodayPriceGoodsExport; use App\Models\BusinessGoodsSku; use App\Models\BusinessOrder; use App\Models\GoodsSku; use App\Models\GoodsType; use App\Models\Log; use App\Models\Shop; +use App\Models\TodayPrice; use App\Services\Business\BusinessFactory; use App\Utils\DateTimeUtils; use Illuminate\Console\Command; use Illuminate\Support\Facades\DB; use App\Jobs\BusinessGoodsSkuIncrQuantity; use Illuminate\Database\Eloquent\Builder; +use Maatwebsite\Excel\Facades\Excel; class Test extends Command { @@ -49,5 +52,104 @@ class Test extends Command */ public function handle() { + $todayPrice = TodayPrice::query() + ->with([ + 'goodsSku:id,goods_id,title,external_sku_id', + 'goodsSku.goods:id,title', + ]) + ->where('day', date('Y-m-d')) + ->get(); + if ($todayPrice->isEmpty()) { + exit('今日价格数据未找到,请先上传'); + } + $todayGoodsPrice = []; + foreach ($todayPrice as $item) { + $todayGoodsPrice[$item['external_sku_id']] = [ + 'today_price' => $item['price'], + 'goods_name' => $item['goodsSku']['goods']['title'] . $item['goodsSku']['title'], + 'external_sku_id' => $item['external_sku_id'], + ]; + } + $shops = Shop::query() + ->where('plat_id', Shop::$PLAT_KTT) + ->where('expires_at', '>', time()) + ->get(); + $data = []; + foreach ($shops as $shop) { + $business = BusinessFactory::init()->make($shop->plat_id); + $business->setShop($shop); + $res = $business->queryGroup(); + if (!isset($res['ktt_group_query_list_response'])) { + continue; + } + $activityNos =$activities = []; + foreach ($res['ktt_group_query_list_response']['activity_list'] as $activity) { + if (0 === $activity['is_help_sell'] && '补款勿拍' !== $activity['title']) { + $activityNos[] = $activity['activity_no']; + $activities[$activity['activity_no']] = $activity['title']; + } + } + $businessGoodsSkus = BusinessGoodsSku::query() + ->where('shop_id', $shop->id) + ->whereIn('activity_no', $activityNos) + ->orderBy('activity_no') + ->get(['shop_id', 'title', 'activity_no', 'goods_name', 'price_in_fen', 'external_sku_id']); + if ($businessGoodsSkus->isEmpty()) { + continue; + } + $data[$shop->name] = $this->diffTodayPrice($businessGoodsSkus, $todayGoodsPrice,$activities); + } + foreach ($data as $shopName => $activity) { + foreach ($activity as $activityNo => $item) { + foreach ($item as $k => $v) { + foreach ($v as $i) { + if ('diff_price' === $k) { + $s[] = [$shopName, $i['title'], $i['goods_name'], $i['price_in_fen'], $i['today_price'], $i['external_sku_id']]; + } + if ('not_in_group' === $k) { + $s[] = [$shopName, $i['title'], $i['goods_name'], '团购无此商品', $i['today_price'], $i['external_sku_id']]; + } + } + } + } + } + dd($s); + + ob_end_clean(); + return Excel::download(new DiffTodayPriceGoodsExport($data), date('Y-m-d') . '今日差价商品.xlsx'); + } + + private function diffTodayPrice($businessGoodsSkus, $todayPrice,$activities) + { + $data = []; + foreach ($businessGoodsSkus as $item) { + // 记录团购下商品id + $data[$item['activity_no']]['ids'][] = $item['external_sku_id']; + // 团购中有,表格没有 +// if (!isset($todayPrice[$item['external_sku_id']])) { +// $data[$item['activity_no']]['in_group'][] = $item->toArray(); +// } + // 价格不一样 + if (isset($todayPrice[$item['external_sku_id']]) && $item['price_in_fen'] != $todayPrice[$item['external_sku_id']]['today_price']) { + $item['today_price'] = $todayPrice[$item['external_sku_id']]['today_price']; + $data[$item['activity_no']]['diff_price'][] = $item->toArray(); + } + } + $todayIds = array_keys($todayPrice); + foreach ($data as $no=> &$arr) { + foreach ($arr as $key => $value) { + if ('ids' === $key) { + $ids = array_unique($value); + $ids = array_diff($todayIds, $ids); + foreach ($ids as $id) { + $todayPrice[$id]['title'] = $activities[$no]; + $arr['not_in_group'][] = $todayPrice[$id]; + } + } + } + unset($arr['ids']); + } + + return $data; } } diff --git a/app/Exports/DiffTodayPriceGoodsExport.php b/app/Exports/DiffTodayPriceGoodsExport.php new file mode 100644 index 0000000..d4595d1 --- /dev/null +++ b/app/Exports/DiffTodayPriceGoodsExport.php @@ -0,0 +1,59 @@ +data = $this->createData($data); + } + + /** + * @return \Illuminate\Support\Collection + */ + public function collection() + { + return new Collection($this->data); + } + + private function createData($data) + { + $headTitle = [ + '店铺', + '团购标题', + '商品名称', + '快团团价格', + '今日价格', + '编码', + ]; + $bodyData = []; + foreach ($data as $shopName => $activity) { + foreach ($activity as $activityNo => $item) { + foreach ($item as $k => $v) { + foreach ($v as $i) { + if ('diff_price' === $k) { + $bodyData[] = [$shopName, $i['title'], $i['goods_name'], $i['price_in_fen'], $i['today_price'], $i['external_sku_id']]; + } + if ('not_in_group' === $k) { + $bodyData[] = [$shopName, $i['title'], $i['goods_name'], '团购无此商品', $i['today_price'], $i['external_sku_id']]; + } + } + } + } + } + + return [$headTitle, $bodyData]; + } +} diff --git a/app/Http/Controllers/Business/BusinessGoodsSkusController.php b/app/Http/Controllers/Business/BusinessGoodsSkusController.php index 9a7f446..204b8ed 100644 --- a/app/Http/Controllers/Business/BusinessGoodsSkusController.php +++ b/app/Http/Controllers/Business/BusinessGoodsSkusController.php @@ -5,14 +5,22 @@ namespace App\Http\Controllers\Business; use App\Events\BusinessOrdersUpdate; use App\Http\Controllers\Controller; use App\Http\Resources\BusinessGoodsSkuResource; +use App\Imports\TodayPriceImport; use App\Models\BusinessGoodsSku; use App\Models\BusinessOrderItem; +use App\Models\Goods; use App\Models\GoodsSku; use App\Models\Log as LogModel; +use App\Models\Shop; +use App\Models\TodayPrice; +use App\Services\Business\BusinessFactory; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rule; +use Illuminate\Validation\ValidationException; +use Maatwebsite\Excel\Facades\Excel; +use App\Exports\DiffTodayPriceGoodsExport; class BusinessGoodsSkusController extends Controller { @@ -90,4 +98,112 @@ class BusinessGoodsSkusController extends Controller } return response($this->res, $this->res['httpCode']); } + + public function todayPriceImport(Request $request) + { + if (!$request->hasFile('today_price')) { + $this->res = [ + 'httpCode' => 404, + 'errorCode' => 404404, + 'errorMessage' => 'not found file', + ]; + } + try { + $import = new TodayPriceImport(); + $path = $request->file('today_price'); + Excel::import($import, $path); + } catch (ValidationException $exception) { + $this->setValidatorFailResponse($exception->validator->getMessageBag()->getMessages()); + } + + return response($this->res, $this->res['httpCode']); + } + + public function exportTodayPrice(Request $request) + { + $todayPrice = TodayPrice::query() + ->with([ + 'goodsSku:id,goods_id,title,external_sku_id', + 'goodsSku.goods:id,title', + ]) + ->where('day', date('Y-m-d')) + ->get(); + if ($todayPrice->isEmpty()) { + exit('今日价格数据未找到,请先上传'); + } + $todayGoodsPrice = []; + foreach ($todayPrice as $item) { + $todayGoodsPrice[$item['external_sku_id']] = [ + 'today_price' => $item['price'], + 'goods_name' => $item['goodsSku']['goods']['title'] . $item['goodsSku']['title'], + 'external_sku_id' => $item['external_sku_id'], + ]; + } + $shops = Shop::query() + ->where('plat_id', Shop::$PLAT_KTT) + ->where('expires_at', '>', time()) + ->get(); + $data = []; + foreach ($shops as $shop) { + $business = BusinessFactory::init()->make($shop->plat_id); + $business->setShop($shop); + $res = $business->queryGroup(); + if (!isset($res['ktt_group_query_list_response'])) { + continue; + } + $activityNos = $activities = []; + foreach ($res['ktt_group_query_list_response']['activity_list'] as $activity) { + if (0 === $activity['is_help_sell'] && '补款勿拍' !== $activity['title']) { + $activityNos[] = $activity['activity_no']; + $activities[$activity['activity_no']] = $activity['title']; + } + } + $businessGoodsSkus = BusinessGoodsSku::query() + ->where('shop_id', $shop->id) + ->whereIn('activity_no', $activityNos) + ->orderBy('activity_no') + ->get(['shop_id', 'title', 'activity_no', 'goods_name', 'price_in_fen', 'external_sku_id']); + if ($businessGoodsSkus->isEmpty()) { + continue; + } + $data[$shop->name] = $this->diffTodayPrice($businessGoodsSkus, $todayGoodsPrice, $activities); + } + + ob_end_clean(); + return Excel::download(new DiffTodayPriceGoodsExport($data), date('Y-m-d') . '今日差价商品.xlsx'); + } + + private function diffTodayPrice($businessGoodsSkus, $todayPrice, $activities) + { + $data = []; + foreach ($businessGoodsSkus as $item) { + // 记录团购下商品id + $data[$item['activity_no']]['ids'][] = $item['external_sku_id']; + // 团购中有,表格没有 +// if (!isset($todayPrice[$item['external_sku_id']])) { +// $data[$item['activity_no']]['in_group'][] = $item->toArray(); +// } + // 价格不一样 + if (isset($todayPrice[$item['external_sku_id']]) && $item['price_in_fen'] != $todayPrice[$item['external_sku_id']]['today_price']) { + $item['today_price'] = $todayPrice[$item['external_sku_id']]['today_price']; + $data[$item['activity_no']]['diff_price'][] = $item->toArray(); + } + } + $todayIds = array_keys($todayPrice); + foreach ($data as $no => &$arr) { + foreach ($arr as $key => $value) { + if ('ids' === $key) { + $ids = array_unique($value); + $ids = array_diff($todayIds, $ids); + foreach ($ids as $id) { + $todayPrice[$id]['title'] = $activities[$no]; + $arr['not_in_group'][] = $todayPrice[$id]; + } + } + } + unset($arr['ids']); + } + + return $data; + } } diff --git a/app/Http/Controllers/Goods/GoodsCombinationController.php b/app/Http/Controllers/Goods/GoodsCombinationController.php index 0ad58fb..9608e47 100644 --- a/app/Http/Controllers/Goods/GoodsCombinationController.php +++ b/app/Http/Controllers/Goods/GoodsCombinationController.php @@ -4,8 +4,12 @@ namespace App\Http\Controllers\Goods; use App\Http\Controllers\Controller; use App\Http\Resources\GoodsSkuResource; +use App\Models\CombinationGood; +use App\Models\Goods; use App\Models\GoodsSku; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Validator; class GoodsCombinationController extends Controller { @@ -14,27 +18,124 @@ class GoodsCombinationController extends Controller $skus = GoodsSku::query() ->where('is_combination', 1) ->with([ - 'combinationItems:goods_sku_id,item_id,item_num', - 'combinationItems.goodsSkuItem:id,goods_id,title,stock,external_sku_id', - 'combinationItems.goodsSkuItem.goods:id,title', + 'combinationGoods:id,goods_sku_id,item_id,item_num', + 'combinationGoods.goodsSkuItem:id,goods_id,title,stock,external_sku_id,updated_at,yesterday_num,reference_price,status', + 'combinationGoods.goodsSkuItem.goods:id,title,img_url', ]) ->paginate($request->get('per_page')); + foreach ($skus as &$item) { + $items = []; + foreach ($item['combinationGoods'] as $combinationItem) { + $items[] = [ + 'cost' => 0, + 'external_sku_id' => $combinationItem['goodsSkuItem']['external_sku_id'], + 'goods_id' => $combinationItem['goodsSkuItem']['goods_id'], + 'id' => $combinationItem['item_id'], + 'is_combination' => 0, + 'num' => $combinationItem['item_num'], + 'reference_price' => $combinationItem['goodsSkuItem']['reference_price'], + 'status' => $combinationItem['goodsSkuItem']['status'], + 'stock' => $combinationItem['goodsSkuItem']['stock'], + 'thumb_url' => $combinationItem['goodsSkuItem']['goods']['img_url'], + 'img_url' => $combinationItem['goodsSkuItem']['goods']['img_url'], + 'title' => $combinationItem['goodsSkuItem']['goods']['title'] . $combinationItem['goodsSkuItem']['title'], + 'updated_at' => $combinationItem['goodsSkuItem']['updated_at'], + 'yesterday_num' => $combinationItem['goodsSkuItem']['yesterday_num'], + ]; + } + $item['children'] = $items; + unset($item['combinationGoods']); + } return GoodsSkuResource::collection($skus); } public function store(Request $request) { + $validator = Validator::make($request->all(), [ + 'title' => 'required', + 'external_sku_id' => 'required', + 'combination_goods.*' => 'required', + 'combination_goods.*.item_id' => 'required', + 'combination_goods.*.item_num' => 'required|gt:0', + ]); + if ($validator->fails()) { + $this->setValidatorFailResponse($validator->getMessageBag()->getMessages()); + return response($this->res, $this->res['httpCode']); + } + DB::beginTransaction(); + try { + if ($id = $request->input('id')) { + $sku = GoodsSku::query()->findOrFail($id); + } else { + $sku = new GoodsSku(); + $sku->goods_id = 0; + $sku->title = $request->input('title'); + $sku->sku_code = $request->input('external_sku_id'); + $sku->external_sku_id = $request->input('external_sku_id'); + $sku->is_combination = 1; + $sku->save(); + } + CombinationGood::query() + ->where('goods_sku_id', $sku->id) + ->delete(); + foreach ($request->input('combination_goods') as $item) { + CombinationGood::query()->create(['goods_sku_id' => $sku->id, 'item_id' => $item['item_id'],'item_num' => $item['item_num']]); + } + DB::commit(); + } catch (\Exception $exception) { + DB::rollBack(); + $this->res = [ + 'httpCode' => 400, + 'errorCode' => 400500, + 'errorMessage' => $exception->getMessage(), + ]; + } + + return response($this->res, $this->res['httpCode']); } public function show(Request $request, $id) { + $sku = GoodsSku::query() + ->with([ + 'combinationGoods:id,goods_sku_id,item_id,item_num', + 'combinationGoods.goodsSkuItem:id,title,goods_id', + 'combinationGoods.goodsSkuItem.goods:id,title', + ]) + ->findOrFail($id); + $items = []; + foreach ($sku['combinationGoods'] as $item) { + $items[] = [ + 'id' => $item['goodsSkuItem']['id'], + 'title' => $item['goodsSkuItem']['goods']['title'] . $item['goodsSkuItem']['title'], + ]; + } + $sku['skus'] = $items; + return new GoodsSkuResource($sku); } - public function update(Request $request, $id) + public function destroy(Request $request, $id) { } + + public function goodsSkus(Request $request, $title) + { + $goodsIds = Goods::query() + ->where('title', 'like', '%' . $title . '%') + ->pluck('id'); + $skus = GoodsSku::query() + ->whereIn('goods_id', $goodsIds) + ->where('is_combination', 0) + ->with('goods:id,title') + ->get(['id', 'title', 'goods_id']); + foreach ($skus as &$sku) { + $sku['title'] = $sku['goods']['title'] . $sku['title']; + } + + return GoodsSkuResource::collection($skus); + } } diff --git a/app/Http/Controllers/Menu/MenusController.php b/app/Http/Controllers/Menu/MenusController.php index 9171667..6bd92ad 100644 --- a/app/Http/Controllers/Menu/MenusController.php +++ b/app/Http/Controllers/Menu/MenusController.php @@ -45,7 +45,7 @@ class MenusController extends Controller } } $permissionCodes = array_unique($permissionCodes); - $menus = Menu::query()->orderBy('parent_id')->orderBy('seq')->get()->toArray(); + $menus = Menu::query()->where('show', 1)->orderBy('parent_id')->orderBy('seq')->get()->toArray(); $hasPermissionMenus = []; foreach ($menus as $menu) { if (in_array($menu['code'], $permissionCodes, true)) { diff --git a/app/Imports/TodayPriceImport.php b/app/Imports/TodayPriceImport.php new file mode 100644 index 0000000..e05e9cd --- /dev/null +++ b/app/Imports/TodayPriceImport.php @@ -0,0 +1,35 @@ + $day, + 'external_sku_id' => $row[0], + 'price' => $row[1], + ]; + } + TodayPrice::query()->delete(); + $model = new TodayPrice(); + $model->batchInsert($data); + } +} diff --git a/app/Models/BusinessGoodsSku.php b/app/Models/BusinessGoodsSku.php index 7c417ea..38ecad1 100644 --- a/app/Models/BusinessGoodsSku.php +++ b/app/Models/BusinessGoodsSku.php @@ -23,7 +23,6 @@ class BusinessGoodsSku extends Model 'limit_buy', 'market_price', 'update_time', - 'price_in_fen', 'quantity', 'goods_purchase_price', 'quantity_type', @@ -66,4 +65,9 @@ class BusinessGoodsSku extends Model { return $this->belongsTo(Shop::class, 'shop_id', 'id'); } + + public function getPriceInFenAttribute($val) + { + return $val / 100; + } } diff --git a/app/Models/CombinationGood.php b/app/Models/CombinationGood.php index 579128f..bb39ad1 100644 --- a/app/Models/CombinationGood.php +++ b/app/Models/CombinationGood.php @@ -6,8 +6,10 @@ use Illuminate\Database\Eloquent\Model; class CombinationGood extends Model { + protected $guarded = []; + public function goodsSkuItem() { - return $this->belongsTo(GoodsSku::class, 'id', 'item_id'); + return $this->belongsTo(GoodsSku::class, 'item_id', 'id'); } } diff --git a/app/Models/GoodsSku.php b/app/Models/GoodsSku.php index 654e911..437f1a6 100644 --- a/app/Models/GoodsSku.php +++ b/app/Models/GoodsSku.php @@ -78,7 +78,17 @@ class GoodsSku extends Model } public function combinationItems() + { + return $this->hasMany(CombinationGood::class, 'item_id', 'id'); + } + + public function combinationGoods() { return $this->hasMany(CombinationGood::class, 'goods_sku_id', 'id'); } + + public function todayPrice() + { + return $this->hasOne(TodayPrice::class, 'external_sku_id', 'external_sku_id'); + } } diff --git a/app/Models/TodayPrice.php b/app/Models/TodayPrice.php new file mode 100644 index 0000000..c954c4a --- /dev/null +++ b/app/Models/TodayPrice.php @@ -0,0 +1,13 @@ +belongsTo(GoodsSku::class, 'external_sku_id', 'external_sku_id'); + } +} diff --git a/database/migrations/2022_07_28_095523_create_menus_table.php b/database/migrations/2022_07_28_095523_create_menus_table.php index 02f5a73..e36cae3 100644 --- a/database/migrations/2022_07_28_095523_create_menus_table.php +++ b/database/migrations/2022_07_28_095523_create_menus_table.php @@ -23,6 +23,7 @@ class CreateMenusTable extends Migration $table->string('name', 32)->comment('菜单名称'); $table->unsignedBigInteger('parent_id')->default(0); $table->unsignedInteger('seq')->default(0)->comment('排序序号'); + $table->tinyInteger('show')->default(1); // 索引 }); } diff --git a/database/migrations/2023_04_20_091631_create_today_prices_table.php b/database/migrations/2023_04_20_091631_create_today_prices_table.php new file mode 100644 index 0000000..0c7794e --- /dev/null +++ b/database/migrations/2023_04_20_091631_create_today_prices_table.php @@ -0,0 +1,38 @@ +bigIncrements('id'); + $table->date('day'); + $table->string('external_sku_id'); + $table->float('price'); + $table->index(['external_sku_id', 'day']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('today_prices'); + } +} diff --git a/database/seeds/MenusTableSeeder.php b/database/seeds/MenusTableSeeder.php index 5ae0163..fc733fc 100644 --- a/database/seeds/MenusTableSeeder.php +++ b/database/seeds/MenusTableSeeder.php @@ -51,7 +51,7 @@ class MenusTableSeeder extends Seeder if (false === strpos($code, '.')) { DB::table('menus')->updateOrInsert( ['id' => $route['id'], 'parent_id' => $route['parent_id'], 'code' => $code], - ['name' => $route['name']] + ['name' => $route['name'], 'show' => $route['show']] ); } } diff --git a/resources/frontend/src/api/goods.js b/resources/frontend/src/api/goods.js index f479d2c..4f465a0 100644 --- a/resources/frontend/src/api/goods.js +++ b/resources/frontend/src/api/goods.js @@ -132,5 +132,50 @@ export function getStockNum() { return http({ url: "/api/stock/goods_skus", method: "get", - }) + }); +} + +export function getGoodsFilter(title) { + return http({ + url: "/api/goods/filter/" + title, + method: "get", + }); +} + +export function addGoodsCombination(data) { + return http({ + url: "/api/goods_combination", + method: "post", + data, + }); +} + +export function getGoodsCombination(params) { + return http({ + url: "/api/goods_combination", + method: "get", + params, + }); +} + +export function showGoodsCombination(id) { + return http({ + url: "/api/goods_combination/" + id, + method: "get", + }); +} + +export function updateGoodsCombination(id, data) { + return http({ + url: "/api/goods_combination/" + id, + method: "patch", + data, + }); +} + +export function delGoodsCombination(id) { + return http({ + url: "/api/goods_combination/" + id, + method: "delete", + }); } diff --git a/resources/frontend/src/router/list.js b/resources/frontend/src/router/list.js index a02ac0d..b2cc417 100644 --- a/resources/frontend/src/router/list.js +++ b/resources/frontend/src/router/list.js @@ -16,6 +16,20 @@ const list = [ keepAlive: true, }, }, + { + path: "ADDGOODS", + name: "新建商品", + component: () => import("../views/goods/addgoods/addgoods.vue"), + }, + { + path: "EDIT_GOODS", + name: "修改商品规格", + component: () => import("../views/goods/editgoods.vue"), + }, + { + path: "/", + redirect: "GOODS_LIST", + }, { path: "GOODS_TYPE", name: "商品种类", @@ -31,6 +45,11 @@ const list = [ name: "商品货架", component: () => import("../views/goods/location.vue"), }, + { + path: "GOODS_COMBINATION", + name: "组合商品", + component: () => import("../views/goods/combination.vue"), + }, { path: "SHOP_MANAGE", name: "店铺管理", @@ -57,29 +76,15 @@ const list = [ component: () => import("../views/logs/record.vue"), }, { - path: "ADDGOODS", - name: "新建商品", - component: () => import("../views/goods/addgoods/addgoods.vue"), - }, - { - path: "EDIT_GOODS", - name: "修改商品规格", - component: () => import("../views/goods/editgoods.vue"), - }, - { - path: "/", - redirect: "GOODS_LIST", + path: "PLAT_ORDER_LIST", + name: "订单列表", + component: () => import("../views/plat/orderList.vue"), }, { path: "PLAT_GOODS_LIST", name: "货品列表", component: () => import("../views/plat/goodsList.vue"), }, - { - path: "PLAT_ORDER_LIST", - name: "订单列表", - component: () => import("../views/plat/orderList.vue"), - }, { path: "GROUP_MANAGEMENT", name: "团购管理", diff --git a/resources/frontend/src/views/goods/combination.vue b/resources/frontend/src/views/goods/combination.vue new file mode 100644 index 0000000..2050e66 --- /dev/null +++ b/resources/frontend/src/views/goods/combination.vue @@ -0,0 +1,282 @@ + + + + + diff --git a/resources/frontend/src/views/goods/location.vue b/resources/frontend/src/views/goods/location.vue index 1b01acb..313677b 100644 --- a/resources/frontend/src/views/goods/location.vue +++ b/resources/frontend/src/views/goods/location.vue @@ -141,7 +141,7 @@ export default { beforeUpload() { this.loadingModule = this.$loading({ lock: true, - text: '盘点导入中...', + text: '表格导入中...', spinner: 'el-icon-loading', background: 'rgba(0, 0, 0, 0.7)' }); diff --git a/resources/frontend/src/views/plat/goodsList.vue b/resources/frontend/src/views/plat/goodsList.vue index f3a9b7d..4794edc 100644 --- a/resources/frontend/src/views/plat/goodsList.vue +++ b/resources/frontend/src/views/plat/goodsList.vue @@ -22,6 +22,12 @@ 筛选 重置筛选 + + 今日商品价格导入 + + 价格差异导出 @@ -37,6 +43,7 @@ +