mirror of
https://gitee.com/niucloud-team/javashop.git
synced 2026-04-25 11:18:23 +00:00
商城插件更新
This commit is contained in:
parent
0acb40ddd4
commit
ecb1212a2b
@ -42,7 +42,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item prop="address">
|
<el-form-item prop="address">
|
||||||
<el-input v-model.trim="formData.address" clearable :placeholder="t('addressPlaceholder')" class="input-width"/>
|
<el-input v-model.trim="formData.address" clearable :placeholder="t('addressPlaceholder')" @input="areaChange()" class="input-width"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
@ -326,7 +326,8 @@ const areaChange = debounce(() => {
|
|||||||
const address = [
|
const address = [
|
||||||
formData.province_id ? provinceRef.value.states.selectedLabel : '',
|
formData.province_id ? provinceRef.value.states.selectedLabel : '',
|
||||||
formData.city_id ? cityRef.value.states.selectedLabel : '',
|
formData.city_id ? cityRef.value.states.selectedLabel : '',
|
||||||
formData.district_id ? districtRef.value.states.selectedLabel : ''
|
formData.district_id ? districtRef.value.states.selectedLabel : '',
|
||||||
|
formData.address
|
||||||
]
|
]
|
||||||
|
|
||||||
addressToLatLng({ mapKey, address: address.join('') }).then(({ message, result }) => {
|
addressToLatLng({ mapKey, address: address.join('') }).then(({ message, result }) => {
|
||||||
|
|||||||
@ -1,63 +1,63 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="main-container">
|
<div class="main-container">
|
||||||
<el-card class="card !border-none mb-[15px]" shadow="never">
|
<el-card class="card !border-none mb-[15px]" shadow="never">
|
||||||
<el-page-header :content="id ? t('updateStore') : t('addStore')" :icon="ArrowLeft" @back="back" />
|
<el-page-header :content="id ? t('updateStore') : t('addStore')" :icon="ArrowLeft" @back="back" />
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-card class="box-card !border-none" shadow="never" v-loading="loading">
|
<el-card class="box-card !border-none" shadow="never" v-loading="loading">
|
||||||
<el-form :model="formData" label-width="140px" ref="formRef" :rules="formRules" class="page-form">
|
<el-form :model="formData" label-width="140px" ref="formRef" :rules="formRules" class="page-form">
|
||||||
<el-form-item :label="t('storeName')" prop="store_name">
|
<el-form-item :label="t('storeName')" prop="store_name">
|
||||||
<el-input v-model.trim="formData.store_name" clearable :placeholder="t('storeNamePlaceholder')"
|
<el-input v-model.trim="formData.store_name" clearable :placeholder="t('storeNamePlaceholder')"
|
||||||
class="input-width" />
|
class="input-width" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="t('storeDesc')">
|
<el-form-item :label="t('storeDesc')">
|
||||||
<el-input v-model.trim="formData.store_desc" type="textarea" rows="4" clearable
|
<el-input v-model.trim="formData.store_desc" type="textarea" rows="4" clearable
|
||||||
:placeholder="t('storeDescPlaceholder')" class="input-width" />
|
:placeholder="t('storeDescPlaceholder')" class="input-width" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="t('storeLogo')">
|
<el-form-item :label="t('storeLogo')">
|
||||||
<upload-image v-model="formData.store_logo" />
|
<upload-image v-model="formData.store_logo" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="t('storeMobile')" prop="store_mobile">
|
<el-form-item :label="t('storeMobile')" prop="store_mobile">
|
||||||
<el-input v-model.trim="formData.store_mobile" clearable :placeholder="t('storeMobilePlaceholder')"
|
<el-input v-model.trim="formData.store_mobile" clearable :placeholder="t('storeMobilePlaceholder')"
|
||||||
class="input-width" @keyup="filterNumber($event)"
|
class="input-width" @keyup="filterNumber($event)"
|
||||||
@blur="formData.store_mobile = $event.target.value" />
|
@blur="formData.store_mobile = $event.target.value" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="t('tradeTime')" prop="trade_time">
|
<el-form-item :label="t('tradeTime')" prop="trade_time">
|
||||||
<div>
|
<div>
|
||||||
<el-input v-model.trim="formData.trade_time" clearable :placeholder="t('tradeTimePlaceholder')"
|
<el-input v-model.trim="formData.trade_time" clearable :placeholder="t('tradeTimePlaceholder')"
|
||||||
class="input-width" />
|
class="input-width" />
|
||||||
<p class="text-[12px] text-[#999]">{{ t('tradeTimeTips') }}</p>
|
<p class="text-[12px] text-[#999]">{{ t('tradeTimeTips') }}</p>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="t('storeAddress')" prop="address_area">
|
<el-form-item :label="t('storeAddress')" prop="address_area">
|
||||||
<el-select v-model="formData.province_id" value-key="id" clearable class="w-[200px]" ref="provinceRef">
|
<el-select v-model="formData.province_id" value-key="id" clearable class="w-[200px]" ref="provinceRef">
|
||||||
<el-option :label="t('provincePlaceholder')" :value="0"/>
|
<el-option :label="t('provincePlaceholder')" :value="0"/>
|
||||||
<el-option v-for="(item, index) in areaList.province" :key="index" :label="item.name" :value="item.id"/>
|
<el-option v-for="(item, index) in areaList.province" :key="index" :label="item.name" :value="item.id"/>
|
||||||
</el-select>
|
</el-select>
|
||||||
<el-select v-model="formData.city_id" value-key="id" clearable class="w-[200px] ml-3" ref="cityRef">
|
<el-select v-model="formData.city_id" value-key="id" clearable class="w-[200px] ml-3" ref="cityRef">
|
||||||
<el-option :label="t('cityPlaceholder')" :value="0"/>
|
<el-option :label="t('cityPlaceholder')" :value="0"/>
|
||||||
<el-option v-for="(item, index) in areaList.city " :key="index" :label="item.name" :value="item.id"/>
|
<el-option v-for="(item, index) in areaList.city " :key="index" :label="item.name" :value="item.id"/>
|
||||||
</el-select>
|
</el-select>
|
||||||
<el-select v-model="formData.district_id" value-key="id" clearable class="w-[200px] ml-3" ref="districtRef">
|
<el-select v-model="formData.district_id" value-key="id" clearable class="w-[200px] ml-3" ref="districtRef">
|
||||||
<el-option :label="t('districtPlaceholder')" :value="0"/>
|
<el-option :label="t('districtPlaceholder')" :value="0"/>
|
||||||
<el-option v-for="(item, index) in areaList.district " :key="index" :label="item.name" :value="item.id"/>
|
<el-option v-for="(item, index) in areaList.district " :key="index" :label="item.name" :value="item.id"/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item prop="address">
|
<el-form-item prop="address">
|
||||||
<el-input v-model.trim="formData.address" clearable :placeholder="t('addressPlaceholder')" class="input-width"/>
|
<el-input v-model.trim="formData.address" clearable :placeholder="t('addressPlaceholder')" @input="areaChange()" class="input-width"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<div id="container" class="w-[800px] h-[520px] relative" v-loading="mapLoading"></div>
|
<div id="container" class="w-[800px] h-[520px] relative" v-loading="mapLoading"></div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-card>
|
</el-card>
|
||||||
<div class="fixed-footer-wrap">
|
<div class="fixed-footer-wrap">
|
||||||
<div class="fixed-footer !z-[9999]">
|
<div class="fixed-footer !z-[9999]">
|
||||||
<el-button type="primary" @click="onSave(formRef)">{{ t('save') }}</el-button>
|
<el-button type="primary" @click="onSave(formRef)">{{ t('save') }}</el-button>
|
||||||
<el-button @click="back()">{{ t('cancel') }}</el-button>
|
<el-button @click="back()">{{ t('cancel') }}</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
@ -112,7 +112,7 @@ onMounted(() => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 初始化地图
|
* 初始化地图
|
||||||
*/
|
*/
|
||||||
let map: any
|
let map: any
|
||||||
let marker: any
|
let marker: any
|
||||||
@ -172,8 +172,8 @@ const latLngChange = (lat: number, lng: number) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 表单数据
|
* 表单数据
|
||||||
*/
|
*/
|
||||||
const initialFormData = {
|
const initialFormData = {
|
||||||
store_id: 0,
|
store_id: 0,
|
||||||
store_name: '',
|
store_name: '',
|
||||||
@ -276,7 +276,7 @@ watch(() => formData.province_id, (nval) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取区
|
* 获取区
|
||||||
*/
|
*/
|
||||||
watch(() => formData.city_id, (nval) => {
|
watch(() => formData.city_id, (nval) => {
|
||||||
if (nval) {
|
if (nval) {
|
||||||
@ -316,7 +316,8 @@ const areaChange = debounce(() => {
|
|||||||
const address = [
|
const address = [
|
||||||
formData.province_id ? provinceRef.value.states.selectedLabel : '',
|
formData.province_id ? provinceRef.value.states.selectedLabel : '',
|
||||||
formData.city_id ? cityRef.value.states.selectedLabel : '',
|
formData.city_id ? cityRef.value.states.selectedLabel : '',
|
||||||
formData.district_id ? districtRef.value.states.selectedLabel : ''
|
formData.district_id ? districtRef.value.states.selectedLabel : '',
|
||||||
|
formData.address
|
||||||
]
|
]
|
||||||
|
|
||||||
addressToLatLng({ mapKey, address: address.join('') }).then(({ message, result }) => {
|
addressToLatLng({ mapKey, address: address.join('') }).then(({ message, result }) => {
|
||||||
@ -350,7 +351,7 @@ watch(() => storeArea.province_id, (nval) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 地图点选获取区
|
* 地图点选获取区
|
||||||
*/
|
*/
|
||||||
watch(() => storeArea.city_id, (nval) => {
|
watch(() => storeArea.city_id, (nval) => {
|
||||||
if (nval) {
|
if (nval) {
|
||||||
@ -379,8 +380,8 @@ const onSave = async (formEl: FormInstance | undefined) => {
|
|||||||
|
|
||||||
const data = formData
|
const data = formData
|
||||||
formData.province_name = formData.province_id ? provinceRef.value.states.selectedLabel : '',
|
formData.province_name = formData.province_id ? provinceRef.value.states.selectedLabel : '',
|
||||||
formData.city_name = formData.city_id ? cityRef.value.states.selectedLabel : '',
|
formData.city_name = formData.city_id ? cityRef.value.states.selectedLabel : '',
|
||||||
formData.district_name = formData.district_id ? districtRef.value.states.selectedLabel : ''
|
formData.district_name = formData.district_id ? districtRef.value.states.selectedLabel : ''
|
||||||
const address = [
|
const address = [
|
||||||
data.province_id ? provinceRef.value.states.selectedLabel : '',
|
data.province_id ? provinceRef.value.states.selectedLabel : '',
|
||||||
data.city_id ? cityRef.value.states.selectedLabel : '',
|
data.city_id ? cityRef.value.states.selectedLabel : '',
|
||||||
|
|||||||
Binary file not shown.
@ -47,12 +47,12 @@ public class ShopOrderDeliveryController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/delivery/package")
|
@GetMapping("/delivery/package")
|
||||||
public Result<ShopOrderDeliveryInfoVo> getOrderPackage(Integer id, String mobile) {
|
public Result<ShopOrderDeliveryInfoVo> getOrderPackage(@RequestParam(name = "id") Integer id, @RequestParam(name = "mobile") String mobile) {
|
||||||
return Result.success(shopOrderDeliveryService.getDeliveryPackage(id, mobile));
|
return Result.success(shopOrderDeliveryService.getDeliveryPackage(id, mobile));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("'delivery/package/list")
|
@GetMapping("'delivery/package/list")
|
||||||
public Result<List<ShopOrderDeliveryListVo>> getDeliveryPackageList(Integer orderId) {
|
public Result<List<ShopOrderDeliveryListVo>> getDeliveryPackageList(@RequestParam(name = "order_id") Integer orderId) {
|
||||||
|
|
||||||
return Result.success(shopOrderDeliveryService.getDeliveryPackageList(orderId));
|
return Result.success(shopOrderDeliveryService.getDeliveryPackageList(orderId));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -800,13 +800,6 @@ public class ShopGoodsServiceImpl implements IShopGoodsService {
|
|||||||
Integer page = pageParam.getPage();
|
Integer page = pageParam.getPage();
|
||||||
Integer limit = pageParam.getLimit();
|
Integer limit = pageParam.getLimit();
|
||||||
|
|
||||||
// 查询已选的
|
|
||||||
if (ObjectUtil.isNotEmpty(searchParam.getSkuIds())) {
|
|
||||||
List<Integer> goodsIds = shopGoodsSkuMapper.selectList(new QueryWrapper<ShopGoodsSku>().in("sku_id", searchParam.getSkuIds()).groupBy("goods_id").select("sku_id"))
|
|
||||||
.stream().map(i -> i.getSkuId()).collect(Collectors.toList());
|
|
||||||
if (goodsIds.size() > 0 && ObjectUtil.isEmpty(searchParam.getGoodsIds())) searchParam.setGoodsIds(goodsIds);
|
|
||||||
}
|
|
||||||
|
|
||||||
MPJQueryWrapper<ShopGoods> queryWrapper = new MPJQueryWrapper<>();
|
MPJQueryWrapper<ShopGoods> queryWrapper = new MPJQueryWrapper<>();
|
||||||
queryWrapper.setAlias("g")
|
queryWrapper.setAlias("g")
|
||||||
.innerJoin("?_shop_goods_sku gs ON g.goods_id = gs.goods_id AND gs.is_default = 1".replace("?_", GlobalConfig.tablePrefix));
|
.innerJoin("?_shop_goods_sku gs ON g.goods_id = gs.goods_id AND gs.is_default = 1".replace("?_", GlobalConfig.tablePrefix));
|
||||||
|
|||||||
@ -198,6 +198,9 @@ public class ShopCartServiceImpl implements IShopCartService {
|
|||||||
res.setPromotionMoney(data.getPromotionMoney());
|
res.setPromotionMoney(data.getPromotionMoney());
|
||||||
res.setGoodsMoney(data.getGoodsMoney());
|
res.setGoodsMoney(data.getGoodsMoney());
|
||||||
res.setOrderMoney(data.getGoodsMoney().subtract(data.getPromotionMoney()));
|
res.setOrderMoney(data.getGoodsMoney().subtract(data.getPromotionMoney()));
|
||||||
|
if (res.getOrderMoney().compareTo(BigDecimal.ZERO) < 0) {
|
||||||
|
res.setOrderMoney(BigDecimal.ZERO);
|
||||||
|
}
|
||||||
List<ShopCartCalculateVo.Goods> goodsList = data.getGoodsList();
|
List<ShopCartCalculateVo.Goods> goodsList = data.getGoodsList();
|
||||||
List<ShopCartCalculateResVo.Goods> matchList = new ArrayList<>();
|
List<ShopCartCalculateResVo.Goods> matchList = new ArrayList<>();
|
||||||
for (ShopCartCalculateVo.Goods goods : goodsList) {
|
for (ShopCartCalculateVo.Goods goods : goodsList) {
|
||||||
|
|||||||
@ -352,7 +352,7 @@ public class GoodsServiceImpl implements IGoodsService {
|
|||||||
JSONObject memberPriceConfig = ObjectUtil.isNotEmpty(item.getMemberPrice()) ? JSONUtil.parseObj(item.getMemberPrice()) : new JSONObject();
|
JSONObject memberPriceConfig = ObjectUtil.isNotEmpty(item.getMemberPrice()) ? JSONUtil.parseObj(item.getMemberPrice()) : new JSONObject();
|
||||||
skuVo.setMemberPrice(calculateMemberPrice(memberLevel, goods.getMemberDiscount(), memberPriceConfig, item.getPrice()));
|
skuVo.setMemberPrice(calculateMemberPrice(memberLevel, goods.getMemberDiscount(), memberPriceConfig, item.getPrice()));
|
||||||
} else {
|
} else {
|
||||||
skuVo.setMemberPrice(sku.getPrice());
|
skuVo.setMemberPrice(item.getPrice());
|
||||||
}
|
}
|
||||||
skuListVo.add(skuVo);
|
skuListVo.add(skuVo);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -280,11 +280,11 @@ public class CoreManjianServiceImpl extends ServiceImpl<ShopManjianMapper, ShopM
|
|||||||
}
|
}
|
||||||
if (rule.getBool("is_give_point")) {
|
if (rule.getBool("is_give_point")) {
|
||||||
rule.put("point", rule.getBigDecimal("point", BigDecimal.ZERO).multiply(new BigDecimal(cycleNum)));
|
rule.put("point", rule.getBigDecimal("point", BigDecimal.ZERO).multiply(new BigDecimal(cycleNum)));
|
||||||
gift.put("point", rule.getBigDecimal("point", BigDecimal.ZERO).multiply(new BigDecimal(cycleNum)));
|
gift.put("point", rule.getBigDecimal("point"));
|
||||||
}
|
}
|
||||||
if (rule.getBool("is_give_balance")) {
|
if (rule.getBool("is_give_balance")) {
|
||||||
rule.put("balance", rule.getBigDecimal("balance", BigDecimal.ZERO).multiply(new BigDecimal(cycleNum)));
|
rule.put("balance", rule.getBigDecimal("balance", BigDecimal.ZERO).multiply(new BigDecimal(cycleNum)));
|
||||||
gift.put("balance", rule.getBigDecimal("balance", BigDecimal.ZERO).multiply(new BigDecimal(cycleNum)));
|
gift.put("balance", rule.getBigDecimal("balance"));
|
||||||
}
|
}
|
||||||
if (rule.getBool("is_give_coupon")) {
|
if (rule.getBool("is_give_coupon")) {
|
||||||
JSONArray giftCoupon = rule.getJSONArray("coupon");
|
JSONArray giftCoupon = rule.getJSONArray("coupon");
|
||||||
@ -300,9 +300,7 @@ public class CoreManjianServiceImpl extends ServiceImpl<ShopManjianMapper, ShopM
|
|||||||
} else {
|
} else {
|
||||||
coupon.put("coupon_name", "满" + couponManjian.getMinConditionMoney() + "元减" + couponManjian.getPrice() + "元券");
|
coupon.put("coupon_name", "满" + couponManjian.getMinConditionMoney() + "元减" + couponManjian.getPrice() + "元券");
|
||||||
}
|
}
|
||||||
if (couponManjian.getRemainCount() > 0 && couponManjian.getLimitCount() > couponManjian.getReceiveCount()) {
|
updatedGiftCoupon.add(coupon);
|
||||||
updatedGiftCoupon.add(coupon);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rule.put("coupon", updatedGiftCoupon);
|
rule.put("coupon", updatedGiftCoupon);
|
||||||
|
|||||||
@ -243,7 +243,7 @@ public class CoreOrderBatchDeliveryServiceImpl implements ICoreOrderBatchDeliver
|
|||||||
|
|
||||||
Integer itemExpressCompanyId = 0;
|
Integer itemExpressCompanyId = 0;
|
||||||
OrderDeliveryTypeEnum deliveryType = OrderDeliveryTypeEnum.NONE_EXPRESS;
|
OrderDeliveryTypeEnum deliveryType = OrderDeliveryTypeEnum.NONE_EXPRESS;
|
||||||
if (row.getCompanyName().equals("无需物流")) {
|
if (!row.getCompanyName().equals("无需物流")) {
|
||||||
deliveryType = OrderDeliveryTypeEnum.EXPRESS;
|
deliveryType = OrderDeliveryTypeEnum.EXPRESS;
|
||||||
if (!companyMap.containsKey(row.getCompanyName())) {
|
if (!companyMap.containsKey(row.getCompanyName())) {
|
||||||
throw new RuntimeException("物流公司不存在");
|
throw new RuntimeException("物流公司不存在");
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -65,7 +65,7 @@
|
|||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
</view>
|
</view>
|
||||||
<view v-if="item.manjian_info && Object.keys(item.manjian_info).length && item.manjian_info.is_show" class="flex items-center mt-[8rpx] mb-[auto]" @click.stop="manjianOpenFn(item.manjian_info)">
|
<view v-if="item.manjian_info && Object.keys(item.manjian_info).length && item.manjian_info.is_join" class="flex items-center mt-[8rpx] mb-[auto]" @click.stop="manjianOpenFn(item.manjian_info)">
|
||||||
<view class="bg-[var(--primary-color-light)] text-[var(--primary-color)] rounded-[6rpx] text-[20rpx] flex items-center justify-center w-[88rpx] h-[36rpx] mr-[6rpx]">满减送</view>
|
<view class="bg-[var(--primary-color-light)] text-[var(--primary-color)] rounded-[6rpx] text-[20rpx] flex items-center justify-center w-[88rpx] h-[36rpx] mr-[6rpx]">满减送</view>
|
||||||
<text class="text-[22rpx] text-[#999]">{{item.manjian_info.manjian_name}}</text>
|
<text class="text-[22rpx] text-[#999]">{{item.manjian_info.manjian_name}}</text>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user