feat: #10000 团购修改,前端优化

This commit is contained in:
赵世界 2022-10-25 22:08:55 +08:00
parent 7e44bd1a27
commit fcb0ad5208
7 changed files with 93 additions and 42 deletions

View File

@ -24,6 +24,7 @@ use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
use Maatwebsite\Excel\Facades\Excel;
use App\Models\DailyStockRecord;
use App\Models\Shop;
class GoodsSkusController extends Controller
{
@ -107,11 +108,24 @@ class GoodsSkusController extends Controller
public function show($id)
{
return new GoodsSkuResource(GoodsSku::query()
$sku = GoodsSku::query()
->with(['goods' => function ($query) {
$query->with(['type:id,name', 'brand:id,name']);
}])
->find($id));
->find($id)
->toArray();
$shops = Shop::query()->get(['id', 'name'])->toArray();
if (empty($sku['thumb_url'])) {
foreach ($shops as $shop) {
$sku['thumb_url'][] = [
'shop_id' => $shop['id'],
'shop_name' => $shop['name'],
'img_url' => '',
];
}
}
return ['data' => $sku];
}
public function update($id, Request $request)

View File

@ -27,7 +27,8 @@ class UploadController extends Controller
];
}
$this->addLog(0, 'add');
$this->res['resource'] = UploadUtils::putForUploadedFile('image', $request->uploadFile);
$this->res['resource'] = UploadUtils::getFullImgUrl(UploadUtils::putForUploadedFile('image', $request->uploadFile));
$this->res['shop_id'] = $request->get('shop_id') ?: 0;
return response($this->res, $this->res['httpCode']);
}

View File

@ -32,6 +32,7 @@ class GoodsSku extends Model
'yesterday_num',
'reference_price',
'reserve',
'thumb_url'
];
protected $hidden = ['created_at'];
@ -52,6 +53,17 @@ class GoodsSku extends Model
return $map[$value];
}
public function setThumbUrlAttribute($value)
{
$this->attributes['thumb_url'] = json_encode($value, 256);
}
public function getThumbUrlAttribute($value)
{
return json_decode($value, true);
}
/**
* 此规格从属于一个商品
*/

View File

@ -4,6 +4,7 @@ namespace App\Services\Business\KuaiTuanTuan;
use App\Models\Groups as GroupsModel;
use App\Models\GroupGoods;
use App\Utils\ArrayUtils;
use App\Utils\DateTimeUtils;
class Groups
@ -14,13 +15,15 @@ class Groups
$group = GroupsModel::query()->where('parent_id', $localGroupId)->where('shop_id', $shop->id)->first();
$groupGoods = GroupGoods::query()
->where('group_id', $group->parent_id)
->with(['goodsSku:id,stock'])
->with(['goodsSku:id,stock,thumb_url'])
->orderBy('sort')
->get();
$goodsSkus = [];
$operator = substr($shop->ratio, 0, 1);
$ratio = (float)trim(substr($shop->ratio, 1));
foreach ($groupGoods as $item) {
$thumbUrls = $item['goodsSku']['thumb_url'];
$thumbUrls = ArrayUtils::index($thumbUrls, 'shop_id');
$priceInFen = $item['price_in_fen']; // 常规数值
switch ($operator) {
case '+':
@ -37,7 +40,7 @@ class Groups
break;
}
$priceInFen *= 100;
$goodsSkus[] = [
$info = [
'category_name' => $item['category_name'],
'goods_desc' => $item['goods_name'],
'goods_name' => $item['goods_name'],
@ -51,6 +54,10 @@ class Groups
'total_quantity' => $item['goodsSku']['stock'],
]]
];
if (isset($thumbUrls[$shop->id]) && $thumbUrls[$shop->id]['img_url']) {
$info['pic_url_list'] = [$thumbUrls[$shop->id]['img_url']];
}
$goodsSkus[] = $info;
}
$appendParams = [
'end_time' => $group->getOriginal('end_time'),

View File

@ -16,8 +16,8 @@
<el-image v-if="disabled" style="width: 148px; height: 148px" :src="form.img_url" fit="cover">
</el-image>
<el-upload v-else class="avatar-uploader" action="#" :limit="1" :auto-upload="false"
:show-file-list="true" list-type="picture-card" :on-change="handleAvatarSuccess">
<img v-if="imageUrl" :src="imageUrl" class="avatar" />
:show-file-list="false" list-type="picture-card" :on-change="handleAvatarSuccess">
<img v-if="form.img_url" :src="form.img_url" class="avatar" />
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
@ -87,7 +87,6 @@ import { goods_types, Brand_goods_types } from "../../../api/rankingData.js";
export default {
data() {
return {
imageUrl: "",
lid: "", // id
gid: "", // id
brand: [], //

View File

@ -67,26 +67,14 @@
<div>
<el-form-item label="规格图片:">
<div class="shop-sku-img">
<div class="shop">
<div class="shop-name">花梨油品</div>
<div class="shop" v-for="item in goodsData.thumb_url" :key="item.shop_id">
<div class="shop-name">{{ item.shop_name }}</div>
<div>
<el-upload class="avatar-uploader" action="#" :limit="1" :auto-upload="false"
:show-file-list="true" list-type="picture-card"
:on-change="handleAvatarSuccess">
<img v-if="goodsData.goods.img_url" :src="goodsData.goods.img_url"
class="avatar" />
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</div>
</div>
<div class="shop">
<div class="shop-name">花梨油品</div>
<div>
<el-upload class="avatar-uploader" action="#" :limit="1" :auto-upload="false"
:show-file-list="true" list-type="picture-card"
:on-change="handleAvatarSuccess">
<img v-if="goodsData.goods.img_url" :src="goodsData.goods.img_url"
class="avatar" />
<el-upload class="avatar-uploader" action="/api/upload" :limit="1"
accept="image/png,image/jpg,image/jpeg" :show-file-list="false"
list-type="picture-card" :data="{ shop_id: item.shop_id }" name="uploadFile"
:on-success="handleShopImgSuccess" :before-upload="beforeAvatarUpload">
<img v-if="item.img_url" :src="item.img_url" class="avatar" />
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</div>
@ -106,7 +94,6 @@
</template>
<script>
import { storeList } from "../../api/shop";
import { checkGoods, goodsList, updateGoods, imgUpload } from "../../api/goods.js";
import { goods_types, Brand_goods_types } from "../../api/rankingData.js";
export default {
@ -124,6 +111,7 @@ export default {
num: "",
cost: "",
sku_code: "",
thumb_url: [],
goods: {
img_url: "",
title: "",
@ -167,6 +155,38 @@ export default {
this.goodsData.goods.img_url = res.data.resource;
});
},
handleShopImgSuccess(res) {
this.goodsData.thumb_url.forEach((val, key) => {
if (val.shop_id == res.shop_id) {
this.goodsData.thumb_url[key].img_url = res.resource;
}
})
},
beforeAvatarUpload(file) {
const isLt1M = file.size / 1024 / 1024 < 1;
if (!isLt1M) {
this.$message.error('上传头像图片大小不能超过 1MB!');
return false;
}
const isSize = new Promise(function (resolve, reject) {
let width = 1200;
let height = 1200;
let _URL = window.URL || window.webkitURL;
let img = new Image();
img.onload = function () {
let valid = img.width <= width && img.height <= height;
valid ? resolve() : reject();
}
img.src = _URL.createObjectURL(file);
}).then(() => {
return file;
}, () => {
this.$message.error('图片尺寸限制为1200 x 1200大小不可超过1MB')
return Promise.reject();
});
return isSize;
},
//
handleList() {
goodsList().then((res) => {
@ -194,7 +214,15 @@ export default {
status: this.goodsData.status,
num: this.goodsData.num,
cost: this.goodsData.cost,
thumb_url: this.goodsData.thumb_url
};
if (sku.status == "下架") {
sku.status = 0;
} else if (sku.status == "在售") {
sku.status = 1;
} else if (sku.status == "预警") {
sku.status = 2;
}
let updateData = {
goods_id: this.goodsData.goods_id,
goods,
@ -209,16 +237,6 @@ export default {
cancel() {
this.$router.push("/GOODS_LIST");
},
getStoreList() {
let params = {
plat_id: 1,
page: 1,
per_page: 999,
};
storeList(params).then((res) => {
this.shopList = res.data.data
})
}
},
created() {
this.skuId = parseInt(this.$route.query.id);
@ -237,7 +255,6 @@ export default {
});
this.handleList();
this.getGoodsSkuData();
this.getStoreList();
}
};
</script>

View File

@ -44,12 +44,11 @@ Route::middleware(['auth:api', 'check.permissions'])->group(function () {
Route::resource('permissions', 'Permission\PermissionsController', ['only' => ['index',
// 'store', 'show', 'update', 'destroy'
]]);
Route::post('upload', [UploadController::class, 'store'])->name('upload.file');
// 平台
Route::resource('plat_goods', 'Business\BusinessGoodsSkusController', ['only' => ['index', 'update', 'destroy']]);
Route::post('plat/sync/{id}/stock', [BusinessGoodsSkusController::class, 'syncStock'])->name('plat.sync.stock');
// 团购
// Route::resource('group', 'Group\GroupsController', ['only' => ['index', 'store', 'show', 'update', 'destroy']]);
Route::resource('group', 'Group\GroupsController', ['only' => ['index', 'store', 'show', 'update', 'destroy']]);
});
// 登录
Route::post('/auth/login', [LoginController::class, 'login'])->name('auth.login');
@ -67,10 +66,12 @@ Route::get('goodsList', [GroupsController::class, 'goodsList'])->name('goods.lis
Route::get('groupGoods', [GroupsController::class, 'getGoods'])->name('group.get_goods')->middleware('auth:api');
Route::post('groupGoods', [GroupsController::class, 'addGroupGoods'])->name('group.add_goods')->middleware('auth:api');
Route::get('addGoods', [GroupsController::class, 'addGoods'])->name('group.add_goods')->middleware('auth:api');
Route::resource('group', 'Group\GroupsController', ['only' => ['index', 'store', 'show', 'update', 'destroy']]);
// 妙选商城数据推送
Route::post('business', [ShopsController::class, 'business'])->name('shop.put.business');
// 盘点导入
Route::post('inventory/goods_skus', [GoodsSkusController::class, 'inventoryImport'])->name('goods_sku.inventory');
Route::post('upload', [UploadController::class, 'store'])->name('upload.file');