更新存取货,分类用户,修复bug

This commit is contained in:
weipengfei 2024-06-28 18:13:10 +08:00
parent 44c7223ca0
commit 7f94d55df0
8 changed files with 152 additions and 118 deletions

View File

@ -4,11 +4,11 @@ VITE_NOW_TYPE = 'dist'
# VITE_PUSH_URL = 'ws://192.168.1.201:8787'
# VITE_BASE_URL = 'http://192.168.1.201:8545'
# VITE_PUSH_URL = 'ws://192.168.1.22:8787'
# VITE_BASE_URL = 'http://192.168.1.22:8545'
VITE_PUSH_URL = 'ws://192.168.1.22:8787'
VITE_BASE_URL = 'http://192.168.1.22:8545'
VITE_PUSH_URL ='wss://test-multi-store.lihaink.cn/pull'
VITE_BASE_URL = 'https://test-multi-store.lihaink.cn'
# VITE_PUSH_URL ='wss://test-multi-store.lihaink.cn/pull'
# VITE_BASE_URL = 'https://test-multi-store.lihaink.cn'
# VITE_PUSH_URL ='wss://multi-store.lihaink.cn/pull'
# VITE_BASE_URL = 'https://multi-store.lihaink.cn'

View File

@ -191,3 +191,18 @@ export function storeOrderCheckSmsApi(data) {
export function storeOrderPrintApi(data) {
return request.get(`/store_order/StoreOrder/print`, { params: data })
}
/**
* @description 用户商品存储列表
*/
export function userProductStorageApi(data) {
return request.get(`/user_product_storage/UserProductStorage/lists`, { params: data })
}
/**
* @description 用户商品存储出库
*/
export function userProductStorageSupplyApi(data) {
return request.post(`/user_product_storage/UserProductStorage/supply`, data)
}

View File

@ -61,10 +61,12 @@ const form = ref({});
const cart_id = ref([]);
const uid = ref('');
const isRePay = ref(false);
let is_storage = 0;
const setForm = (e) => {
form.value = e.data;
cart_id.value = e.cart_id;
uid.value = e.uid;
is_storage = e.is_storage || 0;
console.log('选择了用户==', uid.value || '游客');
isRePay.value = e.isRePay || false;
};
@ -72,6 +74,7 @@ const setForm = (e) => {
const setRePay = (e) => {
form.value.pay_price = e.price;
order_id.value = e.order_id;
is_storage = e.is_storage || 0;
};
const emit = defineEmits(["paySuccess"]);
@ -120,6 +123,7 @@ const handleEnter = () => {
key: form.value.key,
cart_id: cart_id.value,
pay_type: pay_type,
is_storage: is_storage,
auth_code: input.value,
uid: uid.value
})
@ -176,6 +180,7 @@ const orderPay = () => {
orderPayApi({
order_id: form.value.order_id,
pay_type: pay_type,
is_storage: is_storage,
auth_code: input.value,
uid: uid.value
}).then((res) => {
@ -345,6 +350,7 @@ const cashBnt = () => {
orderCreateApi({
cart_id: cart_id.value,
pay_type: "17", // 17
is_storage: is_storage,
uid: uid.value
})
.then((res) => {
@ -452,6 +458,7 @@ const handlecodeEnter = () => {
if (active.value == 4) pay_type = 19; //
orderCreateApi({
pay_type: pay_type,
is_storage: is_storage,
sms_code: smsCode.value,
cart_id: cart_id.value,
uid: uid.value

View File

@ -47,11 +47,11 @@ const getList = () => {
extend.value = res.data.extend;
list.value = res.data.lists || [];
// if (res.data?.lists?.length > 0) {
// list.value = res.data.lists;
// allPrice.value = res.data?.lists.reduce((previous, current) => {
// return previous + Number(current.total_price);
// }, 0)
// costPrice.value = allPrice.value;
// list.value = res.data.lists;
// allPrice.value = res.data?.lists.reduce((previous, current) => {
// return previous + Number(current.total_price);
// }, 0)
// costPrice.value = allPrice.value;
// } else list.value = [];
});
};
@ -74,11 +74,11 @@ const changeCartNum = (val, old) => {
// allPrice.value += item.price * item.cart_num;
// });
// costPrice.value = allPrice.value;
}).catch((err)=>{
}).catch((err) => {
let match = err?.msg?.match(/\b\d+(\.\d+)?\b/);
if(match){
if (match) {
val.cart_num = +match[0];
}else val.cart_num = 1;
} else val.cart_num = 1;
});
};
@ -111,12 +111,22 @@ const setUser = (row) => {
userInfo.value.uid = row.id;
}
const is_storage = ref(false)
const resetView = ()=>{
is_storage.value = false;
userInfo.value.uid = "";
getList();
}
defineExpose({
getList,
resetView,
list,
discounts,
allPrice,
userInfo
userInfo,
is_storage
});
//
@ -152,7 +162,8 @@ onUnmounted(() => {
</div>
<div class="flex-bewteen" style="align-items: flex-end;">
<div style="display:flex;">
<div style="margin-right: 0.5rem;">采购款: <span style="color: #f70;">{{ userInfo.purchase_funds }}</span></div>
<div style="margin-right: 0.5rem;">采购款: <span style="color: #f70;">{{
userInfo.purchase_funds }}</span></div>
<div>礼品券: <span style="color: #f70;">{{ userInfo.get_frozen }}</span></div>
</div>
<el-button link @click="userInfo.uid = ''">重置<el-icon>
@ -198,8 +209,8 @@ onUnmounted(() => {
¥<span>{{ item.price }}</span>
</div>
<div>
<el-input-number v-model="item.cart_num" :min="+item.batch > 0 ? +item.batch : 1" :step="1" step-strictly
@change="changeCartNum(item)" />
<el-input-number v-model="item.cart_num" :min="+item.batch > 0 ? +item.batch : 1" :step="1"
step-strictly @change="changeCartNum(item)" />
</div>
</div>
</div>
@ -207,28 +218,34 @@ onUnmounted(() => {
</div>
<div class="order-footer">
<div class="order-total">
<div class="price">
<div class="price" style="flex-direction: column; align-items: flex-start;">
<div class="total-item" style="flex-shrink: 0;">
合计:
<span>¥<span style="font-size: 1.4rem">
{{ extend.pay_price || '0.00' }}</span></span>
{{ extend.pay_price || '0.00' }}</span></span>
</div>
<div v-if="extend.msg" class="total-item" style="padding-right: 0;line-height: 0.8rem;"><span style="font-size: 0.8rem">{{ extend.msg }}</span></div>
<div v-if="extend.msg" class="total-item" style="padding-right: 0;line-height: 0.8rem;"><span
style="font-size: 0.8rem">{{ extend.msg }}</span></div>
<!-- <div class="total-item">
优惠:
<span
>¥<span>{{ discounts.toFixed(2) }}</span></span
>
</div> -->
</div>
<!-- <div class="update-price">
<el-button class="btn" type="primary" @click="showPrice"
>改价 (Insert)</el-button
>
</div> -->
</div>
<div class="update-price" v-if="userInfo.uid">
<el-switch
v-model="is_storage"
size="large"
inline-prompt
active-text="存货"
inactive-text="不存"
/>
</div>
</div>
<div class="order-btn">
<el-button class="btn" type="primary" @click="goPay" :disabled="list.length == 0">{{ "立即结账 (F9)" }}</el-button>
<el-button class="btn" type="primary" @click="goPay" :disabled="list.length == 0">{{ "立即结账 (F9)"
}}</el-button>
</div>
</div>
<price ref="priceRef" @changeAllPrice="changeAllPrice"></price>
@ -361,7 +378,7 @@ onUnmounted(() => {
background-color: #fff;
.order-total {
height: 2.5rem;
height: 3.5rem;
padding: 1rem 2rem;
display: flex;
justify-content: space-between;

View File

@ -108,7 +108,7 @@ const checkOut = () => {
let cart_id = orderRef.value.list.map((item) => item.id);
let query = {
cart_id: cart_id,
uid: orderRef.value?.userInfo?.uid || ""
uid: orderRef.value?.userInfo?.uid || "",
};
if (orderRef.value.discounts > 0) {
query.deduction_price = orderRef.value.discounts.toFixed(2);
@ -119,7 +119,8 @@ const checkOut = () => {
payRef.value.setForm({
data: res.data.order,
cart_id: cart_id,
uid: orderRef.value?.userInfo?.uid || ""
uid: orderRef.value?.userInfo?.uid || "",
is_storage: orderRef.value?.is_storage ? 1 : 0,
});
});
};
@ -138,7 +139,7 @@ const paySuccess = (data = null) => {
// }
// if(data) onPrint(data);
setTimeout(() => {
orderRef.value.getList();
orderRef.value.resetView();
})
};

View File

@ -3,8 +3,9 @@ import { ref, onMounted, onUnmounted, reactive } from "vue";
import { apiProvince, apiCity, apiArea, apiStreet, apiVillage, apiBrigade } from '@/api/public'
import { userShipApi, userAddApi, userArchivesSmsApi } from "@/api/user"
import { ElMessage } from "element-plus";
import { useUserStore } from "@/store/user";
const userStore = useUserStore();
const formDataRef = ref(null);
const formDataInfo = reactive({
mobile: '',
@ -138,6 +139,7 @@ const addUser = () => {
forms.street = formDataInfo.selectedValues[2]
forms.village = formDataInfo.selectedValues[3]
forms.brigade = formDataInfo.selectedValues[4]
forms.store_id = userStore.userInfo.store_id;
userAddApi(forms).then(res=>{
emit('close')
})

View File

@ -6,6 +6,7 @@ import { useRouter } from "vue-router";
import mitt from "@/utils/mitt.js";
import payUser from "@/components/payUser.vue";
import { userAddressDetailApi, userAddressEditApi, userDetailApi } from "@/api/user"
import { userProductStorageApi, userProductStorageSupplyApi } from "@/api/store"
import { apiProvince, apiCity, apiArea, apiStreet, apiVillage, apiBrigade } from '@/api/public'
import { userShipApi, userShipUpdateApi, userLabelListApi, userLabelUpdateApi } from "@/api/user"
@ -221,83 +222,63 @@ const activeStoreList = ref(["基本信息", "用户资产"]);
const isOut = ref(false); //
const productList = ref([]); //
const initProduct = ()=>{
productList.value = [
{
"id": 574,
"oid": 568,
"product_id": 44,
"cart_info": {
"product_id": 44,
"cart_num": 3,
"price": "56.00",
"cost": "56.00",
"total_price": "189.00",
"deduction_price": 0,
"vip": 0,
"purchase": "162.00",
"pay_price": "168.00",
"store_price": "168.00",
"old_cart_id": 766,
"verify_code": "8-12407",
"name": "陈醋",
"image": "https://lihaiim.oss-cn-chengdu.aliyuncs.com/public/uploads/images/20240615/202406151511024463d0051.jpg"
}
},
{
"id": 575,
"oid": 568,
"product_id": 45,
"cart_info": {
"product_id": 45,
"cart_num": 2,
"price": "164.00",
"cost": "164.00",
"total_price": "368.00",
"deduction_price": 0,
"vip": 0,
"purchase": "312.00",
"pay_price": "328.00",
"store_price": "328.00",
"old_cart_id": 767,
"verify_code": "8-12407",
"name": "青花椒油",
"image": "https://lihaiim.oss-cn-chengdu.aliyuncs.com/public/uploads/images/20240615/202406151511025ef012582.jpg"
}
},
{
"id": 576,
"oid": 568,
"product_id": 40,
"cart_info": {
"product_id": 40,
"cart_num": 2,
"price": "2.50",
"cost": "2.50",
"total_price": "5.60",
"deduction_price": 0,
"vip": 0,
"purchase": "48.00",
"pay_price": "5.00",
"store_price": "5.00",
"old_cart_id": 769,
"verify_code": "8-12407",
"name": "草果",
"image": "https://lihaiim.oss-cn-chengdu.aliyuncs.com/public/uploads/images/20240615/20240615150435f2ea41542.jpg"
}
}
]
const whereProduct = ref({
page_no: 1,
page_size: 10,
loading: false,
loadend: false
})
let info = []; //
const initProduct = (re=false)=>{
if(re){
productList.value = [];
whereProduct.value.page_no = 1;
whereProduct.value.loadend = false;
}
if(whereProduct.value.loadend || whereProduct.value.loading) return ;
whereProduct.value.loading = true;
userProductStorageApi({
uid: formData.value.id,
page_no: whereProduct.value.page_no,
page_size: whereProduct.value.page_size
}).then(res=>{
productList.value = [...productList.value, ...res.data.lists];
whereProduct.value.loading = false;
whereProduct.value.page_no++;
if(res.data.lists.length < whereProduct.value.page_size) {
whereProduct.value.loadend = true;
}
})
}
//
const onOutAll = ()=>{
info = productList.value.filter(item=>item.n_num).map(item=>{
return {
product_id: item.product_id,
nums: item.n_num
}
})
if(info.length==0) return ElMessage.error("请选择商品")
onOutPut();
}
//
const onOutAll = ()=>{
ElMessage.error("未全部出库")
const onOutPut = ()=>{
userProductStorageSupplyApi({
uid: formData.value.id,
info: info
}).then(res=>{
isOut.value = false;
ElMessage.success("出库成功");
initProduct(true);
})
}
onMounted(() => {
mitt.on("set-user-detail", (res) => {
formData.value = res;
isOut.value = false;
userDetailApi({
id: res.id
}).then(({ data }) => {
@ -305,7 +286,7 @@ onMounted(() => {
console.log(formData.value);
})
getAddress();
initProduct();
initProduct(true);
});
});
@ -462,37 +443,38 @@ onUnmounted(() => {
</div>
</div>
</div>
<div class="detail" v-if="formData.id && activeStore == 1">
<div class="table">
<div class="detail" v-if="formData.id && activeStore == 1" v-loading="whereProduct.loading">
<div class="table" v-infinite-scroll="initProduct" :infinite-scroll-distance="300"
:infinite-scroll-delay="300" style="overflow: auto" :infinite-scroll-immediate="false">
<el-table :data="productList">
<el-table-column label="商品信息">
<template #default="{ row }">
<div style="display: flex; align-items: center">
<el-image style="height: 3rem; width: 3rem" :src="row.cart_info?.image"></el-image>
<span style="margin-left: 0.5rem">{{ row.cart_info?.name }}</span>
<el-image style="height: 3rem; width: 3rem" :src="row.image"></el-image>
<span style="margin-left: 0.5rem">{{ row.store_name }}</span>
</div>
</template>
</el-table-column>
<el-table-column prop="cart_info.price" label="单价" width="150" />
<el-table-column prop="cart_info.cart_num" v-if="isOut" label="数量" width="250">
<el-table-column prop="price" label="单价" width="150" />
<el-table-column prop="nums" v-if="isOut" label="数量" width="250">
<template #default="{ row }">
<div style="display: flex; align-items: center">
<el-input-number v-model="row.cart_info.n_num" step-strictly :min="1" :max="row.cart_info.cart_num" />
<el-button type="primary" style="margin-left: 1rem;" @click="row.cart_info.n_num = row.cart_info.cart_num">全部</el-button>
<div style="display: flex; align-items: center" v-if="row.nums">
<el-input-number v-model="row.n_num" step-strictly :min="0" :max="row.nums" />
<el-button type="primary" style="margin-left: 1rem;" @click="row.n_num = row.nums">全部</el-button>
</div>
</template>
</el-table-column>
<el-table-column prop="cart_info.cart_num" v-else label="数量" width="250" />
<!-- <el-table-column prop="cart_info.pay_price" label="总价" width="150" /> -->
<el-table-column prop="nums" v-else label="数量" width="250" />
<!-- <el-table-column prop="pay_price" label="总价" width="150" /> -->
</el-table>
</div>
<div class="footer">
<div v-if="!isOut">
<el-button type="warning" size="large" @click="isOut = true">部分出库</el-button>
<el-button type="primary" size="large" @click="onOutAll">全部出库</el-button>
<el-button type="warning" size="large" @click="isOut = true" :disabled="productList.length == 0">商品出库</el-button>
<!-- <el-button type="primary" size="large" @click="onOutAll">全部出库</el-button> -->
</div>
<div v-else>
<el-button type="primary" size="large" @click="isOut = false">确认出库</el-button>
<el-button type="primary" size="large" @click="onOutAll">确认出库</el-button>
<el-button size="large" @click="isOut = false">取消</el-button>
</div>
</div>
@ -554,7 +536,7 @@ onUnmounted(() => {
.table {
padding: 1rem;
padding-bottom: 6rem;
padding-bottom: 7rem;
box-sizing: border-box;
overflow-y: auto;
height: 100%;
@ -654,6 +636,7 @@ onUnmounted(() => {
.footer {
position: absolute;
z-index: 1000;
bottom: 0;
left: 0;
width: 100%;

View File

@ -29,7 +29,7 @@ const where = ref({
page_no: 1,
page_size: 20,
mobile: "",
user_ship: ""
user_ship: "",
});
const loading = ref(false);
@ -42,6 +42,9 @@ const getOrderList = (reload = false) => {
if (reload) where.value.page_no = 1;
else if (loadEnd.value || loading.value) return;
loading.value = true;
if(where.value.mobile == '' && where.value.user_ship == ''){
where.value.store_id = userStore.userInfo.store_id;
} else where.value.store_id = null;
userListsApi(where.value)
.then((res) => {
if (reload) orderList.value = res.data.lists;
@ -83,6 +86,12 @@ const getUserShip = () => {
}
getUserShip()
const resetWhere = ()=>{
where.value.mobile = "";
where.value.user_ship = "";
getOrderList(true);
}
onMounted(() => {
mitt.on('re-load-user-list', () => {
getOrderList(true);
@ -108,7 +117,7 @@ onUnmounted(() => {
<el-select v-model="where.user_ship" @change="getOrderList(true)" placeholder="请选择用户类型" style="flex: 1">
<el-option v-for="item in userShip" :key="item.id" :label="item.title" :value="item.id" />
</el-select>
<el-button @click="where.user_ship='';getOrderList(true)" style="margin-left: 1rem;">重置</el-button>
<el-button @click="resetWhere" style="margin-left: 1rem;">重置</el-button>
</div>
<div class="header-input">
<el-input v-model="where.mobile" placeholder="搜索手机号/ID" @keydown.enter="getOrderList(true)"