feat(绑定/寄件):逻辑修改

This commit is contained in:
changzihao 2024-10-23 18:01:09 +08:00
parent 70067fb4dd
commit 9a30ed22f6
7 changed files with 295 additions and 120 deletions

View File

@ -195,6 +195,14 @@ export default {
data: data, data: data,
}); });
}, },
//寄件修改,从我的样本列表进入,
sampleEdit(data, sampleId) {
return request({
url: BASE_API + `/sample/bind/edit/${sampleId}/`,
method: "post",
data: data,
});
},
//上传文件 //上传文件
uploadFile(data) { uploadFile(data) {
return request({ return request({

View File

@ -36,7 +36,14 @@
</view> </view>
<view class="bind-samples-box-btns"> <view class="bind-samples-box-btns">
<button @click="reScan">重新扫码</button> <button @click="reScan">重新扫码</button>
<button class="button2" @click="bingSample">确定</button>
<button
v-if="fromType == 'sampleList'"
class="button2"
@click="bingSample2">
确定2
</button>
<button v-else class="button2" @click="bingSample">确定1</button>
</view> </view>
</view> </view>
<modalCount :isShow="isShow" :content="content"></modalCount> <modalCount :isShow="isShow" :content="content"></modalCount>
@ -69,13 +76,19 @@ import { sampleTypeList } from "@/common/js/data.js";
const sampleId = ref(); const sampleId = ref();
onLoad((query) => { onLoad((query) => {
console.log("query", query);
console.log("样本绑定页面,要绑定的样本是", query.sampleId); console.log("样本绑定页面,要绑定的样本是", query.sampleId);
sampleId.value = query.sampleId; sampleId.value = query.sampleId;
getMemberList(); getMemberList();
uni.$on("memberListRefresh", () => { uni.$on("memberListRefresh", () => {
getMemberList(); getMemberList();
}); });
if (query.from == "sampleList") {
//
fromType.value = query.from;
}
}); });
const fromType = ref("");
/* 获取成员列表 */ /* 获取成员列表 */
const memberList = ref([]); const memberList = ref([]);
@ -180,61 +193,45 @@ onMounted(() => {
isShow.value = false; isShow.value = false;
}); });
uni.$on("to-bind-sample", () => { uni.$on("to-bind-sample", () => {
console.log("to-bind-sample");
// //
uni.redirectTo({ uni.navigateTo({
url: "/pages/scan/bindSamples/bindSamples?sampleId=" + sampleCode.value, url: "/pages/scan/bindSamples/bindSamples?sampleId=" + sampleCode.value,
}); });
}); });
}); });
// //
const bingSample = () => { const bingSample = () => {
console.log("要绑定的成员数据", memberList.value[selectedIndex.value]);
console.log("要绑定的样本id", sampleId.value);
if (!memberList.value[selectedIndex.value]) { if (!memberList.value[selectedIndex.value]) {
uni.showToast({ uni.showToast({
title: "请选择要绑定的成员", title: "请选择要绑定的成员",
icon: "none", icon: "none",
}); });
return; return;
} else {
proxy.$store.user.useUserStore().fillInAddressSample = sampleId.value;
proxy.$store.user.useUserStore().bindPerson =
memberList.value[selectedIndex.value];
uni.navigateTo({
url: "/pages/user/address/fillInAddress/fillInAddress",
});
}
};
//
const bingSample2 = () => {
if (!memberList.value[selectedIndex.value]) {
uni.showToast({
title: "请选择要绑定的成员",
icon: "none",
});
return;
} else {
proxy.$store.user.useUserStore().fillInAddressSample = sampleId.value;
proxy.$store.user.useUserStore().bindPerson =
memberList.value[selectedIndex.value];
uni.navigateBack({ delta: 1 });
} }
let data = {
code: sampleId.value,
member: memberList.value[selectedIndex.value].id,
upload_time: "2024-10-14 16:44:00",
};
console.log("data", data);
proxy.$api.user.bingSample(data).then((res) => {
//
console.log("绑定样本结果", res);
if (res.code == 200) {
//
proxy.$store.user.useUserStore().bindSample = sampleId.value;
proxy.$store.user.useUserStore().bingPerson =
memberList.value[selectedIndex.value].id;
uni.showToast({
title: res.msg,
icon: "none",
});
setTimeout(() => {
uni.redirectTo({
url:
"/pages/user/address/fillInAddress/fillInAddress?sampleId=" +
sampleId.value,
});
}, 2000);
//
proxy.$store.user.useUserStore().fillInAddressMember =
memberList.value[selectedIndex.value];
proxy.$store.user.useUserStore().fillInAddressSample = sampleId.value;
proxy.$store.user.useUserStore().fillInAddressSampleId = res.data.id;
} else {
uni.showToast({
title: res.msg,
icon: "none",
});
}
});
}; };
</script> </script>

View File

@ -10,8 +10,9 @@
<text class="name">{{ sendInfo.name }}</text> <text class="name">{{ sendInfo.name }}</text>
<text class="mobile">{{ sendInfo.mobile }}</text> <text class="mobile">{{ sendInfo.mobile }}</text>
</view> </view>
<view class="sender-info-right" @click="toPage"> <view class="sender-info-right">
<text>地址簿</text> <text v-if="props.sampleStatus && props.fromType == 1">查看</text>
<text v-else="!props.sampleStatus" @click="toPage">地址簿</text>
</view> </view>
</view> </view>
<view class="sender-info-left-info-row2"> <view class="sender-info-left-info-row2">
@ -34,6 +35,18 @@ import {
nextTick, nextTick,
} from "vue"; } from "vue";
import { onShow, onHide, onReady, onLoad, onLaunch } from "@dcloudio/uni-app"; import { onShow, onHide, onReady, onLoad, onLaunch } from "@dcloudio/uni-app";
const props = defineProps({
fromType: {
type: Number, //12
default: 0,
},
sampleStatus: {
type: Boolean,
default: true,
},
});
// //
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const toPage = () => { const toPage = () => {

View File

@ -9,27 +9,62 @@
<view class="content-nopadding-box"> <view class="content-nopadding-box">
<personInfoSample <personInfoSample
:memberInfo="memberData" :memberInfo="memberData"
:click="false" :click="true"
:toPage="`/pages/scan/bindSamples/bindSamples?sampleId=${
proxy.$store.user.useUserStore().fillInAddressSample
}&from=sampleList`"
:showSample="true" :showSample="true"
:sampleCode=" :sampleCode="
proxy.$store.user.useUserStore().fillInAddressSample proxy.$store.user.useUserStore().fillInAddressSample
"></personInfoSample> "></personInfoSample>
<senderInfo></senderInfo>
<view class="fill-address-time-row"> <view class="fill-address-time-row">
<view class="fill-address-left"> <view class="fill-address-left">
<image <image
src="@/common/img/scan/time.svg" src="@/common/img/scan/time.svg"
mode="scaleToFill" mode="scaleToFill"
class="image" /> class="image" />
<view class="fill-address-left-text">采样时间</view>
</view>
<view class="fill-address-right">
<uni-datetime-picker
type="date"
v-model="formData.upload_time"
:disabled="sampleStatus2 && fromType == 1"
placeholder="选择采样时间"
@change="changeSampleTime" />
</view> </view>
<uni-datetime-picker
type="datetime"
v-model="formData.sendStartTm"
placeholder="选择取件时间"
@change="changeLog" />
</view> </view>
<button class="button-blue-single-bottom" @click="sendConfirm"> <senderInfo
保存 :fromType="fromType"
:sampleStatus="sampleStatus"></senderInfo>
<view v-if="true" class="fill-address-time-row">
<view class="fill-address-left">
<image
src="@/common/img/scan/time.svg"
mode="scaleToFill"
class="image" />
<view class="fill-address-left-text">取件时间</view>
</view>
<view class="fill-address-right">
<uni-datetime-picker
type="datetime"
v-model="formData.sendStartTm"
placeholder="选择取件时间"
@change="changeSendTime" />
</view>
</view>
<button
v-if="!sampleStatus"
class="button-blue-single-bottom"
@click="bindSample">
保存1
</button>
<!-- pendingwaiting_pickup可以修改成员和采样时间的 -->
<button
v-if="sampleStatus && fromType == 1"
class="button-blue-single-bottom"
@click="editSample">
保存2
</button> </button>
</view> </view>
</view> </view>
@ -48,6 +83,7 @@ import {
} from "vue"; } from "vue";
import { onShow, onHide, onReady, onLoad, onLaunch } from "@dcloudio/uni-app"; import { onShow, onHide, onReady, onLoad, onLaunch } from "@dcloudio/uni-app";
import { boxHeight } from "@/utils/systemInfo.js"; import { boxHeight } from "@/utils/systemInfo.js";
import { getLabelFromValue, formatDate } from "@/utils/tools";
// //
import senderInfo from "../components/senderInfo.vue"; import senderInfo from "../components/senderInfo.vue";
// //
@ -60,20 +96,52 @@ onLoad((query) => {
if (query.from == "sampleList") { if (query.from == "sampleList") {
// //
console.log("样本列表进入"); console.log("样本列表进入");
formData.value.sendStartTm =
proxy.$store.user.useUserStore().fillInAddressInfo.sendStartTm; //
formData.value.upload_time = proxy.$store.user.useUserStore().sampleTime; //
fromType.value = 1;
} else { } else {
// //
console.log("从样本绑定进入"); console.log("从样本绑定进入");
fromType.value = 2;
//
formData.value.upload_time = formatDate(new Date());
} }
memberData.value = proxy.$store.user.useUserStore().fillInAddressMember; memberData.value = proxy.$store.user.useUserStore().bindPerson;
formData.value.sendStartTm = console.log("fromType.value", fromType.value);
proxy.$store.user.useUserStore().fillInAddressInfo.sendStartTm; //
}); });
onShow(() => { onShow(() => {
console.log( console.log(
"当前地址信息", "当前地址信息",
proxy.$store.user.useUserStore().fillInAddressAddress proxy.$store.user.useUserStore().fillInAddressAddress
); );
memberData.value = proxy.$store.user.useUserStore().bindPerson;
/* ('pending', '待寄样'), //都可以改
('waiting_pickup', '待上门取件'), //
('shipping', '运输中'), //
('testing', '检测中'),//
('completed', '已完成'), //
*/
if (proxy.$store.user.useUserStore().sampleStatus == "pending") {
sampleStatus.value = false;
} else {
sampleStatus.value = true; //退
}
if (
proxy.$store.user.useUserStore().sampleStatus !== "pending" &&
proxy.$store.user.useUserStore().sampleStatus !== "waiting_pickup"
) {
sampleStatus2.value = true; //
} else {
sampleStatus2.value = false; //
}
}); });
const fromType = ref(0); //1-2-
const sampleStatus = ref(false); //true/falseproxy.$store.user.useUserStore().sampleStatus
const sampleStatus2 = ref(false); //true/false
const formData = ref({ const formData = ref({
cargoDetails: [ cargoDetails: [
{ {
@ -102,78 +170,135 @@ const formData = ref({
}, },
], ],
remark: "", remark: "",
sendStartTm: null, sendStartTm: null, //
upload_time: null, //
}); });
/* 保存 */
const fillInAddressSampleId = ref("");
const fullAddress = ref("");
const sendConfirm = () => { const sendConfirm = () => {
// console.log("formData", formData.value); let data = {
cargoDetails: [
{
name: "医疗试管",
count: 1,
unit: "个",
currency: "CNY",
},
],
contactInfoList: [
{
address: fullAddress.value, //-
company: "", //-
contact: proxy.$store.user.useUserStore().bindPerson.name, //-
contactType: 1, //
country: "CN",
mobile: proxy.$store.user.useUserStore().bindPerson.mobile, //-
},
{
address: "广东省广州市白云区湖北大厦",
company: "顺丰速运",
contact: "顺小丰",
contactType: 2, //
country: "CN",
mobile: "13925211148",
},
],
remark: "",
sendStartTm: formData.value.sendStartTm,
};
console.log("data", data);
proxy.$api.user.sendSample(data, fillInAddressSampleId.value).then((res) => {
console.log("res", res);
if (res.code == 200) {
uni.showToast({
title: "寄件成功",
duration: 2000,
});
setTimeout(() => {
uni.redirectTo({
url: "/pages/index/index",
});
}, 2000);
}
});
};
//
const bindSample = () => {
console.log( console.log(
"fillInAddressMember", "proxy.$store.user.useUserStore().bindPerson",
proxy.$store.user.useUserStore().fillInAddressMember proxy.$store.user.useUserStore().bindPerson
); );
console.log(
"fillInAddressAddress",
proxy.$store.user.useUserStore().fillInAddressAddress
);
console.log(
"fillInAddressSample",
proxy.$store.user.useUserStore().fillInAddressSample
);
let fullAddress =
proxy.$store.user.useUserStore().fillInAddressAddress.address.province +
proxy.$store.user.useUserStore().fillInAddressAddress.address.city +
proxy.$store.user.useUserStore().fillInAddressAddress.address.district +
proxy.$store.user.useUserStore().fillInAddressAddress.address
.detail_address;
if ( if (
hasValue(fullAddress, "请选择寄件地址") && hasValue(
hasValue(formData.value.sendStartTm, "请选择时间") proxy.$store.user.useUserStore().fillInAddressAddress.address,
"请选择寄件地址"
) &&
hasValue(formData.value.sendStartTm, "请选择取件时间") &&
hasValue(formData.value.upload_time, "请选择采样时间")
) { ) {
fullAddress.value =
proxy.$store.user.useUserStore().fillInAddressAddress.address.province +
proxy.$store.user.useUserStore().fillInAddressAddress.address.city +
proxy.$store.user.useUserStore().fillInAddressAddress.address.district +
proxy.$store.user.useUserStore().fillInAddressAddress.address
.detail_address;
let data = { let data = {
cargoDetails: [ code: proxy.$store.user.useUserStore().fillInAddressSample,
{ member: proxy.$store.user.useUserStore().bindPerson.id,
name: "医疗试管", upload_time: formData.value.upload_time,
count: 1, };
unit: "个", console.log("data", data);
currency: "CNY", proxy.$api.user.bingSample(data).then((res) => {
}, //
], console.log("绑定样本结果", res);
contactInfoList: [ if (res.code == 200) {
{ fillInAddressSampleId.value = res.data.id;
address: fullAddress, //- sendConfirm();
company: "", //- } else {
contact: proxy.$store.user.useUserStore().fillInAddressMember.name, //- uni.showToast({
contactType: 1, // title: res.msg,
country: "CN", icon: "none",
mobile: proxy.$store.user.useUserStore().fillInAddressMember.mobile, //- });
}, }
{ });
address: "广东省广州市白云区湖北大厦", }
company: "顺丰速运", };
contact: "顺小丰", const editSample = () => {
contactType: 2, // console.log("编辑样本");
country: "CN", //sampleEdit
mobile: "13925211148", if (hasValue(formData.value.upload_time, "请选择采样时间")) {
}, let data = {
], member: proxy.$store.user.useUserStore().bindPerson.id,
remark: "", upload_time: formData.value.upload_time,
sendStartTm: formData.value.sendStartTm,
}; };
console.log("data", data); console.log("data", data);
proxy.$api.user proxy.$api.user
.sendSample(data, proxy.$store.user.useUserStore().fillInAddressSampleId) .sampleEdit(data, proxy.$store.user.useUserStore().fillInAddressSampleId)
.then((res) => { .then((res) => {
console.log("res", res); //
console.log("绑定样本结果", res);
if (res.code == 200) { if (res.code == 200) {
// fillInAddressSampleId.value = res.data.id;
// sendConfirm();
uni.showToast({ uni.showToast({
title: "寄件成功", title: res.msg,
duration: 2000, icon: "none",
}); });
setTimeout(() => { setTimeout(() => {
uni.redirectTo({ uni.redirectTo({
url: "/pages/index/index", url: "pages/user/sampleManagement/sampleManagement",
}); });
}, 2000); });
uni.$emit("refreshSampleList");
} else {
uni.showToast({
title: res.msg,
icon: "none",
});
} }
}); });
} }
@ -209,14 +334,21 @@ const hasValue = (value, msg) => {
border-radius: $uni-card-radius; border-radius: $uni-card-radius;
padding: 15rpx 24rpx; padding: 15rpx 24rpx;
margin-top: 24rpx; margin-top: 24rpx;
margin-bottom: 24rpx;
.fill-address-left { .fill-address-left {
// display: in; width: 300rpx;
.image { .image {
width: 48rpx; width: 48rpx;
height: 48rpx; height: 48rpx;
margin-right: 24rpx; margin-right: 24rpx;
vertical-align: middle; vertical-align: middle;
} }
.fill-address-left-text {
display: inline-flex;
}
}
.fill-address-right {
text-align: right;
} }
} }
} }
@ -230,5 +362,8 @@ const hasValue = (value, msg) => {
.icon-calendar { .icon-calendar {
display: none; display: none;
} }
.uni-date__x-input {
color: $uni-primary;
}
} }
</style> </style>

View File

@ -77,18 +77,22 @@ const sampleClick = (id) => {
let memberInfo = { let memberInfo = {
...props.sampleInfo.member, ...props.sampleInfo.member,
}; };
proxy.$store.user.useUserStore().fillInAddressMember = memberInfo; proxy.$store.user.useUserStore().bindPerson = memberInfo;
} else if (Object.keys(props.sampleInfo.member).length === 0) { } else if (Object.keys(props.sampleInfo.member).length === 0) {
let memberInfo = { let memberInfo = {
...uni.getStorageSync("userInfo"), ...uni.getStorageSync("userInfo"),
relation: "自己", relation: "自己",
}; };
proxy.$store.user.useUserStore().fillInAddressMember = memberInfo; proxy.$store.user.useUserStore().bindPerson = memberInfo;
} }
proxy.$store.user.useUserStore().fillInAddressSample = props.sampleInfo.code; proxy.$store.user.useUserStore().fillInAddressSample =
proxy.$store.user.useUserStore().fillInAddressSampleId = id; props.sampleInfo.code || "";
proxy.$store.user.useUserStore().fillInAddressSampleId = id || "";
proxy.$store.user.useUserStore().fillInAddressInfo = proxy.$store.user.useUserStore().fillInAddressInfo =
props.sampleInfo.express.data; props.sampleInfo.express.data || "";
proxy.$store.user.useUserStore().sampleTime =
props.sampleInfo.upload_time || "";
proxy.$store.user.useUserStore().sampleStatus = props.sampleInfo.status || "";
}; };
const formatDateTime = (dateTimeString) => { const formatDateTime = (dateTimeString) => {
return dateTimeString.replace("T", " "); return dateTimeString.replace("T", " ");

View File

@ -5,14 +5,16 @@ export const useUserStore = defineStore("user", () => {
const memberList = ref([]); //成员管理列表 const memberList = ref([]); //成员管理列表
const editMember = ref({}); //要修改的成员信息 const editMember = ref({}); //要修改的成员信息
const editAddress = ref({}); //要修改的地址信 const editAddress = ref({}); //要修改的地址信
const bindSample = ref(""); //绑定样本页面,要绑定的样本id const bindSample = ref(""); //绑定样本页面,要绑定的样本
const bingPerson = ref({}); //绑定样本页面,要绑定的成员信息 const bindPerson = ref({}); //绑定样本页面,要绑定的成员信息,bindPerson就可以
const fillInAddressMember = ref({}); //填写取件地址,成员/用户 const fillInAddressMember = ref({}); //填写取件地址,成员/用户,
const fillInAddressSample = ref(""); //填写取件地址,样本码 const fillInAddressSample = ref(""); //填写取件地址,样本码
const fillInAddressSampleId = ref(""); //填写取件地址样本id const fillInAddressSampleId = ref(""); //填写取件地址样本id
const fillInAddressAddress = ref({}); //填写取件地址,地址信息 const fillInAddressAddress = ref({}); //填写取件地址,地址信息
const fillInAddressTime = ref({}); //填写取件地址,时间信息 const fillInAddressTime = ref({}); //填写取件地址,时间信息
const fillInAddressInfo = ref({}); //填写取件地址,寄件人信息,寄件之后再进入 const fillInAddressInfo = ref({}); //填写取件地址,寄件人信息,寄件之后再进入
const sampleTime = ref(""); //采样时间,从我的样本进入时回显
const sampleStatus = ref(""); //从样本列表进入取件地址,选取的样本的状态
//获取用户信息,并存储到本地,然后更新我的页面的数据 //获取用户信息,并存储到本地,然后更新我的页面的数据
const getUserInfo = async () => { const getUserInfo = async () => {
request({ request({
@ -31,13 +33,15 @@ export const useUserStore = defineStore("user", () => {
editMember, editMember,
editAddress, editAddress,
bindSample, bindSample,
bingPerson, bindPerson,
fillInAddressMember, fillInAddressMember,
fillInAddressAddress, fillInAddressAddress,
fillInAddressTime, fillInAddressTime,
fillInAddressSample, fillInAddressSample,
fillInAddressSampleId, fillInAddressSampleId,
fillInAddressInfo, fillInAddressInfo,
sampleTime,
sampleStatus,
getUserInfo, getUserInfo,
}; };
}); });

View File

@ -151,6 +151,20 @@ export const calculateAge = (birthDateString) => {
return age; return age;
}; };
//把new Date()的时间改为2023-5-31格式
export const formatDate = (date) => {
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, "0");
const day = date.getDate().toString().padStart(2, "0");
return `${year}-${month}-${day}`;
};
//把时间改为 2024年5月32号这样的格式
export const formatDate1 = (date) => {
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, "0");
const day = date.getDate().toString().padStart(2, "0");
return `${year}${month}${day}`;
};
/* 图片工具 */ /* 图片工具 */
//图片转base64 //图片转base64