mirror of
https://gitee.com/hzchunfen/erp.git
synced 2025-11-30 22:20:45 +00:00
feat: #10000 团购修改,前端优化
This commit is contained in:
parent
7e44bd1a27
commit
fcb0ad5208
@ -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)
|
||||
|
||||
@ -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']);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 此规格从属于一个商品
|
||||
*/
|
||||
|
||||
@ -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'),
|
||||
|
||||
@ -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: [], // 品牌列表
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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');
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user