This commit is contained in:
weipengfei 2024-06-17 18:08:29 +08:00
parent 0788b36218
commit 9329366191
10 changed files with 102 additions and 28 deletions

View File

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

View File

@ -184,3 +184,10 @@ export function merchantOrderCountApi(data) {
export function storeOrderCheckSmsApi(data) { export function storeOrderCheckSmsApi(data) {
return request.post(`/store_order/StoreOrder/checkSms`, data) return request.post(`/store_order/StoreOrder/checkSms`, data)
} }
/**
* @description 订单打印
*/
export function storeOrderPrintApi(data) {
return request.get(`/store_order/StoreOrder/print`, { params: data })
}

View File

@ -28,7 +28,7 @@ export function logout() {
} }
/** /**
* @description 会员类型 * @description 用户类型
*/ */
export function userShipApi(data) { export function userShipApi(data) {
return request.get(`/user/UserShip/lists`, { params: data }) return request.get(`/user/UserShip/lists`, { params: data })
@ -75,3 +75,10 @@ export function userAddressEditApi(data) {
export function userRechangeAmountApi(data) { export function userRechangeAmountApi(data) {
return request.post(`/store_order/StoreOrder/rechange_amount`, data) return request.post(`/store_order/StoreOrder/rechange_amount`, data)
} }
/**
* @description 设置会员
*/
export function userShipUpdateApi(data) {
return request.post(`/user/user/user_ship`, data)
}

View File

@ -4,6 +4,9 @@ import { orderCreateApi, orderStatusApi, orderPayApi, storeOrderCheckSmsApi } fr
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { audioplay } from "@/utils/audio.js"; import { audioplay } from "@/utils/audio.js";
import mitt from "@/utils/mitt.js"; import mitt from "@/utils/mitt.js";
import {
storeOrderPrintApi
} from "@/api/store.js";
import { useUserStore } from "@/store/user.js"; import { useUserStore } from "@/store/user.js";
const drawer = ref(false); const drawer = ref(false);
@ -13,6 +16,15 @@ const codeRef = ref("");
const userStore = useUserStore(); const userStore = useUserStore();
const onPrint = (id) => {
storeOrderPrintApi({
id: id,
}).then(res => {
mitt.emit('letPrintReceipt', res.data);
})
}
const cancelClick = () => { const cancelClick = () => {
beforeClose(); beforeClose();
}; };
@ -51,7 +63,7 @@ const setForm = (e) => {
form.value = e.data; form.value = e.data;
cart_id.value = e.cart_id; cart_id.value = e.cart_id;
uid.value = e.uid; uid.value = e.uid;
console.log('选择了用户==', uid.value||'游客'); console.log('选择了用户==', uid.value || '游客');
isRePay.value = e.isRePay || false; isRePay.value = e.isRePay || false;
}; };
@ -117,6 +129,7 @@ const handleEnter = () => {
}); });
// if(res.data.message) audioplay(res.data.message); // if(res.data.message) audioplay(res.data.message);
beforeClose(res.data); beforeClose(res.data);
onPrint(res.data.id);
} else { } else {
if (res.msg == "用户支付中" && res.code == 1) { if (res.msg == "用户支付中" && res.code == 1) {
ElMessage.warning(res.msg); ElMessage.warning(res.msg);
@ -125,6 +138,7 @@ const handleEnter = () => {
message: "支付成功", message: "支付成功",
type: "success", type: "success",
}); });
onPrint(res.data.id);
setTimeout(() => { setTimeout(() => {
mitt.off("pay_success"); mitt.off("pay_success");
}, 200); }, 200);
@ -167,6 +181,7 @@ const orderPay = () => {
message: "支付成功", message: "支付成功",
type: "success", type: "success",
}); });
onPrint(res.data.id);
// if(res.data.message) audioplay(res.data.message); // if(res.data.message) audioplay(res.data.message);
beforeClose(); beforeClose();
} else { } else {
@ -177,6 +192,7 @@ const orderPay = () => {
message: "支付成功", message: "支付成功",
type: "success", type: "success",
}); });
onPrint(res.data.id);
setTimeout(() => { setTimeout(() => {
mitt.off("pay_success"); mitt.off("pay_success");
}, 200); }, 200);
@ -327,6 +343,7 @@ const cashBnt = () => {
message: res.msg, message: res.msg,
type: "success", type: "success",
}); });
onPrint(res.data.id);
changeActive(1); changeActive(1);
beforeClose(); beforeClose();
}) })
@ -401,6 +418,7 @@ const keyboard = (event) => {
}; };
const getSms = () => { const getSms = () => {
if(!uid.value) return ElMessage.error('请先选择用户');
storeOrderCheckSmsApi({ storeOrderCheckSmsApi({
cart_id: cart_id.value, cart_id: cart_id.value,
uid: uid.value uid: uid.value
@ -414,6 +432,7 @@ const getSms = () => {
const smsCode = ref(''); const smsCode = ref('');
// / // /
const handlecodeEnter = () => { const handlecodeEnter = () => {
if(!uid.value) return ElMessage.error('请先选择用户');
orderCreateApi({ orderCreateApi({
pay_type: 18, /// pay_type: 18, ///
sms_code: smsCode.value, sms_code: smsCode.value,
@ -425,6 +444,7 @@ const handlecodeEnter = () => {
message: res.msg, message: res.msg,
type: "success", type: "success",
}); });
onPrint(res.data.id);
changeActive(1); changeActive(1);
beforeClose(); beforeClose();
}) })
@ -522,7 +542,7 @@ onUnmounted(() => {
<div class="left"> <div class="left">
<el-button v-for="item in numList" :key="item" @click="numTap(item)">{{ <el-button v-for="item in numList" :key="item" @click="numTap(item)">{{
item item
}} }}
</el-button> </el-button>
</div> </div>
<div class="right"> <div class="right">

View File

@ -84,7 +84,7 @@ defineExpose({
<div class="r-1"><span class="bold">{{ item.nickname }}</span><span>{{ ' (ID:' + item.id <div class="r-1"><span class="bold">{{ item.nickname }}</span><span>{{ ' (ID:' + item.id
+ ')' }}</span> + ')' }}</span>
</div> </div>
<div>手机号: {{ item.account }}</div> <div>手机号: {{ item.mobile || item.account }}</div>
</div> </div>
<div class="bottom flex" style="justify-content: space-between;"> <div class="bottom flex" style="justify-content: space-between;">
<!-- <div class="r-1">积分: <span class="red">55</span></div> --> <!-- <div class="r-1">积分: <span class="red">55</span></div> -->
@ -144,7 +144,7 @@ defineExpose({
.item { .item {
width: 45%; width: 45%;
height: auto; height: 6rem;
border-radius: 0.5rem; border-radius: 0.5rem;
cursor: pointer; cursor: pointer;
box-sizing: border-box; box-sizing: border-box;

View File

@ -7,7 +7,8 @@ import {
cartListApi, cartListApi,
cashierinfoListApi, cashierinfoListApi,
cashierinfoDetailsApi, cashierinfoDetailsApi,
writeoffOrderApi writeoffOrderApi,
storeOrderPrintApi
} from "@/api/store.js"; } from "@/api/store.js";
import { useUserStore } from "@/store/user.js"; import { useUserStore } from "@/store/user.js";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
@ -125,9 +126,17 @@ const convert = ()=>{
writeoffOrderApi({ writeoffOrderApi({
verify_code: formData.value.verify_code verify_code: formData.value.verify_code
}).then(res=>{ }).then(res=>{
console.log("===", res);
if(res.show==0&&res.msg=='核销成功') ElMessage.success(res.msg); if(res.show==0&&res.msg=='核销成功') ElMessage.success(res.msg);
formData.value.is_writeoff = 1; formData.value.is_writeoff = 1;
onPrint();
})
}
const onPrint = ()=>{
storeOrderPrintApi({
id: formData.value.id,
}).then(res=>{
mitt.emit('letPrintReceipt', res.data);
}) })
} }
@ -217,7 +226,8 @@ onUnmounted(() => {
</div> </div>
<div class="footer"> <div class="footer">
<el-button v-if="formData.is_writeoff==0" type="primary" size="large" :disabled="formData.is_writeoff" @click="convert">立即核销</el-button> <el-button v-if="formData.is_writeoff==0" type="primary" size="large" :disabled="formData.is_writeoff" @click="convert">立即核销</el-button>
<div v-else>该订单已核销</div> <div v-if="formData.is_writeoff==1">该订单已核销</div>
<el-button style="margin-left: 1rem" v-if="formData.is_writeoff==1" type="warning" size="large" @click="onPrint">打印小票</el-button>
</div> </div>
</div> </div>
<div v-else> <div v-else>

View File

@ -135,7 +135,7 @@ onUnmounted(() => {
<el-avatar class="avatar" :src="userInfo.avatar" /> <el-avatar class="avatar" :src="userInfo.avatar" />
<div class="info" v-if="userInfo.uid"> <div class="info" v-if="userInfo.uid">
<div class="flex-bewteen"> <div class="flex-bewteen">
<div>手机号: {{ userInfo.account }}</div> <div>手机号: {{ userInfo.mobile || userInfo.account }}</div>
<el-button type="primary" link class="change-user" @click="userListRef.open()">切换用户<el-icon><ArrowRight /></el-icon></el-button> <el-button type="primary" link class="change-user" @click="userListRef.open()">切换用户<el-icon><ArrowRight /></el-icon></el-button>
</div> </div>
<div class="flex-bewteen" style="align-items: flex-end;"> <div class="flex-bewteen" style="align-items: flex-end;">

View File

@ -18,7 +18,7 @@ const formDataRules = reactive({
{ pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' } { pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' }
], ],
user_ship: [ user_ship: [
{ required: true, message: '请选择会员类型', trigger: 'change' } { required: true, message: '请选择用户类型', trigger: 'change' }
], ],
selectedValues: [ selectedValues: [
{ required: true, message: '请选择用户地址', trigger: 'change' } { required: true, message: '请选择用户地址', trigger: 'change' }
@ -145,11 +145,11 @@ defineExpose({
<template> <template>
<div class="add-user"> <div class="add-user">
<el-form :model="formDataInfo" :rules="formDataRules" ref="formDataRef" label-width="80px"> <el-form :model="formDataInfo" :rules="formDataRules" ref="formDataRef" label-width="80px">
<el-form-item label="会员电话" prop="mobile"> <el-form-item label="用户电话" prop="mobile">
<el-input v-model="formDataInfo.mobile" placeholder="请输入会员电话" /> <el-input v-model="formDataInfo.mobile" placeholder="请输入用户电话" />
</el-form-item> </el-form-item>
<el-form-item label="会员类型" prop="user_ship"> <el-form-item label="用户类型" prop="user_ship">
<el-select v-model="formDataInfo.user_ship" placeholder="请选择会员类型" style="width: 100%;"> <el-select v-model="formDataInfo.user_ship" placeholder="请选择用户类型" style="width: 100%;">
<el-option v-for="item in userShip" :key="item.id" :label="item.title" :value="item.id" :disabled="item.id==1" /> <el-option v-for="item in userShip" :key="item.id" :label="item.title" :value="item.id" :disabled="item.id==1" />
</el-select> </el-select>
</el-form-item> </el-form-item>

View File

@ -7,6 +7,7 @@ import mitt from "@/utils/mitt.js";
import payUser from "@/components/payUser.vue"; import payUser from "@/components/payUser.vue";
import { userAddressDetailApi, userAddressEditApi, userDetailApi } from "@/api/user" import { userAddressDetailApi, userAddressEditApi, userDetailApi } from "@/api/user"
import { apiProvince, apiCity, apiArea, apiStreet, apiVillage, apiBrigade } from '@/api/public' import { apiProvince, apiCity, apiArea, apiStreet, apiVillage, apiBrigade } from '@/api/public'
import { userShipApi, userShipUpdateApi } from "@/api/user"
const userStore = useUserStore(); const userStore = useUserStore();
const router = useRouter(); const router = useRouter();
@ -41,6 +42,29 @@ const paySuccess = () => {
mitt.emit('re-load-user-list'); mitt.emit('re-load-user-list');
} }
const updateShip = ref(false);
const userShip = ref([]);
const getUserShip = () => {
userShipApi().then(res => {
userShip.value = res.data.lists;
})
}
getUserShip()
const updateUserShip = ()=>{
userShipUpdateApi({
id: formData.value.id,
user_ship: formData.value.user_ship
}).then(res => {
ElMessage.success('修改成功');
formData.value.user_ship_name = userShip.value.find(item=>item.id==formData.value.user_ship)?.title;
updateShip.value = false;
})
}
const cancelUserShip = ()=>{
updateShip.value = false;
}
const addressInfo = ref({ const addressInfo = ref({
id: '', id: '',
province: '', province: '',
@ -213,13 +237,17 @@ onUnmounted(() => {
</div> </div>
</div> </div>
<div class="info-item"> <div class="info-item">
<div class="info-item-title">用户昵称:</div> <div class="info-item-title">礼品券:</div>
<div class="info-item-info">{{ formData.nickname }}</div> <div class="info-item-info red">¥{{ formData.integral }}</div>
</div> </div>
<div class="info-item"> <div class="info-item">
<div class="info-item-title">ID:</div> <div class="info-item-title">ID:</div>
<div class="info-item-info">{{ formData.id }}</div> <div class="info-item-info">{{ formData.id }}</div>
</div> </div>
<div class="info-item">
<div class="info-item-title">用户昵称:</div>
<div class="info-item-info">{{ formData.nickname }}</div>
</div>
<div class="info-item"> <div class="info-item">
<div class="info-item-title">用户电话:</div> <div class="info-item-title">用户电话:</div>
<div class="info-item-info">{{ formData.mobile }}</div> <div class="info-item-info">{{ formData.mobile }}</div>
@ -236,21 +264,21 @@ onUnmounted(() => {
<div class="info-item-title">用户类型:</div> <div class="info-item-title">用户类型:</div>
<div class="info-item-info"> <div class="info-item-info">
<template v-if="updateShip == false"> <template v-if="updateShip == false">
<el-tag type="primary" v-if="formData.user_ship == 0">{{ formData.user_ship_name <el-tag type="primary" size="large" v-if="formData.user_ship != 1">{{ formData.user_ship_name
}}</el-tag> }}</el-tag>
<el-tag type="success" v-else>{{ formData.user_ship_name }}</el-tag> <el-tag type="success" size="large" v-else>{{ formData.user_ship_name }}</el-tag>
<el-button v-if="isDisabled" type="primary" style="margin-left: 1rem;" size="small" <el-button type="primary" style="margin-left: 1rem;"
@click="isDisabled = false">修改</el-button> @click="updateShip = true">修改</el-button>
</template> </template>
<template v-else> <template v-else>
<el-select v-model="formDataInfo.user_ship" placeholder="请选择会员类型" style="width: 100%;"> <el-select v-model="formData.user_ship" placeholder="请选择用户类型" style="width: 10rem;">
<el-option v-for="item in userShip" :key="item.id" :label="item.title" <el-option v-for="item in userShip" :key="item.id" :label="item.title"
:value="item.id" :disabled="item.id == 1" /> :value="item.id" :disabled="item.id == 1" />
</el-select> </el-select>
<el-button v-if="!isDisabled" type="primary" style="margin-left: 1rem;" <el-button type="primary" style="margin-left: 1rem;"
@click="updateAddress">确认</el-button> @click="updateUserShip">确认</el-button>
<el-button v-if="!isDisabled" style="margin-left: 1rem;" <el-button style="margin-left: 1rem;"
@click="cancelUpdate">取消</el-button> @click="cancelUserShip">取消</el-button>
</template> </template>
</div> </div>
</div> </div>

View File

@ -120,6 +120,7 @@ onUnmounted(()=>{
<div>余额: <span class="red">{{item.now_money}}</span></div> <div>余额: <span class="red">{{item.now_money}}</span></div>
<div>采购款: <span class="red">{{item.purchase_funds}}</span></div> <div>采购款: <span class="red">{{item.purchase_funds}}</span></div>
<div>待返还: <span class="red">{{item.return_money}}</span></div> <div>待返还: <span class="red">{{item.return_money}}</span></div>
<div>礼品券: <span class="red">{{item.integral}}</span></div>
<div> <div>
<el-tag type="primary" v-if="item.user_ship!=1">{{ item.user_ship_name }}</el-tag> <el-tag type="primary" v-if="item.user_ship!=1">{{ item.user_ship_name }}</el-tag>
<el-tag type="success" v-else>{{ item.user_ship_name }}</el-tag> <el-tag type="success" v-else>{{ item.user_ship_name }}</el-tag>
@ -206,7 +207,8 @@ onUnmounted(()=>{
margin-right: 1rem; margin-right: 1rem;
} }
.bottom { .bottom>div{
margin-left: 0.5rem;
} }
.red { .red {