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,
});
},
//寄件修改,从我的样本列表进入,
sampleEdit(data, sampleId) {
return request({
url: BASE_API + `/sample/bind/edit/${sampleId}/`,
method: "post",
data: data,
});
},
//上传文件
uploadFile(data) {
return request({

View File

@ -36,7 +36,14 @@
</view>
<view class="bind-samples-box-btns">
<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>
<modalCount :isShow="isShow" :content="content"></modalCount>
@ -69,13 +76,19 @@ import { sampleTypeList } from "@/common/js/data.js";
const sampleId = ref();
onLoad((query) => {
console.log("query", query);
console.log("样本绑定页面,要绑定的样本是", query.sampleId);
sampleId.value = query.sampleId;
getMemberList();
uni.$on("memberListRefresh", () => {
getMemberList();
});
if (query.from == "sampleList") {
//
fromType.value = query.from;
}
});
const fromType = ref("");
/* 获取成员列表 */
const memberList = ref([]);
@ -180,61 +193,45 @@ onMounted(() => {
isShow.value = false;
});
uni.$on("to-bind-sample", () => {
console.log("to-bind-sample");
//
uni.redirectTo({
uni.navigateTo({
url: "/pages/scan/bindSamples/bindSamples?sampleId=" + sampleCode.value,
});
});
});
//
//
const bingSample = () => {
console.log("要绑定的成员数据", memberList.value[selectedIndex.value]);
console.log("要绑定的样本id", sampleId.value);
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.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>

View File

@ -10,8 +10,9 @@
<text class="name">{{ sendInfo.name }}</text>
<text class="mobile">{{ sendInfo.mobile }}</text>
</view>
<view class="sender-info-right" @click="toPage">
<text>地址簿</text>
<view class="sender-info-right">
<text v-if="props.sampleStatus && props.fromType == 1">查看</text>
<text v-else="!props.sampleStatus" @click="toPage">地址簿</text>
</view>
</view>
<view class="sender-info-left-info-row2">
@ -34,6 +35,18 @@ import {
nextTick,
} from "vue";
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 toPage = () => {

View File

@ -9,27 +9,62 @@
<view class="content-nopadding-box">
<personInfoSample
:memberInfo="memberData"
:click="false"
:click="true"
:toPage="`/pages/scan/bindSamples/bindSamples?sampleId=${
proxy.$store.user.useUserStore().fillInAddressSample
}&from=sampleList`"
:showSample="true"
:sampleCode="
proxy.$store.user.useUserStore().fillInAddressSample
"></personInfoSample>
<senderInfo></senderInfo>
<view 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="date"
v-model="formData.upload_time"
:disabled="sampleStatus2 && fromType == 1"
placeholder="选择采样时间"
@change="changeSampleTime" />
</view>
<uni-datetime-picker
type="datetime"
v-model="formData.sendStartTm"
placeholder="选择取件时间"
@change="changeLog" />
</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>
</view>
</view>
@ -48,6 +83,7 @@ import {
} from "vue";
import { onShow, onHide, onReady, onLoad, onLaunch } from "@dcloudio/uni-app";
import { boxHeight } from "@/utils/systemInfo.js";
import { getLabelFromValue, formatDate } from "@/utils/tools";
//
import senderInfo from "../components/senderInfo.vue";
//
@ -60,20 +96,52 @@ onLoad((query) => {
if (query.from == "sampleList") {
//
console.log("样本列表进入");
formData.value.sendStartTm =
proxy.$store.user.useUserStore().fillInAddressInfo.sendStartTm; //
formData.value.upload_time = proxy.$store.user.useUserStore().sampleTime; //
fromType.value = 1;
} else {
//
console.log("从样本绑定进入");
fromType.value = 2;
//
formData.value.upload_time = formatDate(new Date());
}
memberData.value = proxy.$store.user.useUserStore().fillInAddressMember;
formData.value.sendStartTm =
proxy.$store.user.useUserStore().fillInAddressInfo.sendStartTm; //
memberData.value = proxy.$store.user.useUserStore().bindPerson;
console.log("fromType.value", fromType.value);
});
onShow(() => {
console.log(
"当前地址信息",
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({
cargoDetails: [
{
@ -102,78 +170,135 @@ const formData = ref({
},
],
remark: "",
sendStartTm: null,
sendStartTm: null, //
upload_time: null, //
});
/* 保存 */
const fillInAddressSampleId = ref("");
const fullAddress = ref("");
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(
"fillInAddressMember",
proxy.$store.user.useUserStore().fillInAddressMember
"proxy.$store.user.useUserStore().bindPerson",
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 (
hasValue(fullAddress, "请选择寄件地址") &&
hasValue(formData.value.sendStartTm, "请选择时间")
hasValue(
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 = {
cargoDetails: [
{
name: "医疗试管",
count: 1,
unit: "个",
currency: "CNY",
},
],
contactInfoList: [
{
address: fullAddress, //-
company: "", //-
contact: proxy.$store.user.useUserStore().fillInAddressMember.name, //-
contactType: 1, //
country: "CN",
mobile: proxy.$store.user.useUserStore().fillInAddressMember.mobile, //-
},
{
address: "广东省广州市白云区湖北大厦",
company: "顺丰速运",
contact: "顺小丰",
contactType: 2, //
country: "CN",
mobile: "13925211148",
},
],
remark: "",
sendStartTm: formData.value.sendStartTm,
code: proxy.$store.user.useUserStore().fillInAddressSample,
member: proxy.$store.user.useUserStore().bindPerson.id,
upload_time: formData.value.upload_time,
};
console.log("data", data);
proxy.$api.user.bingSample(data).then((res) => {
//
console.log("绑定样本结果", res);
if (res.code == 200) {
fillInAddressSampleId.value = res.data.id;
sendConfirm();
} else {
uni.showToast({
title: res.msg,
icon: "none",
});
}
});
}
};
const editSample = () => {
console.log("编辑样本");
//sampleEdit
if (hasValue(formData.value.upload_time, "请选择采样时间")) {
let data = {
member: proxy.$store.user.useUserStore().bindPerson.id,
upload_time: formData.value.upload_time,
};
console.log("data", data);
proxy.$api.user
.sendSample(data, proxy.$store.user.useUserStore().fillInAddressSampleId)
.sampleEdit(data, proxy.$store.user.useUserStore().fillInAddressSampleId)
.then((res) => {
console.log("res", res);
//
console.log("绑定样本结果", res);
if (res.code == 200) {
// fillInAddressSampleId.value = res.data.id;
// sendConfirm();
uni.showToast({
title: "寄件成功",
duration: 2000,
title: res.msg,
icon: "none",
});
setTimeout(() => {
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;
padding: 15rpx 24rpx;
margin-top: 24rpx;
margin-bottom: 24rpx;
.fill-address-left {
// display: in;
width: 300rpx;
.image {
width: 48rpx;
height: 48rpx;
margin-right: 24rpx;
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 {
display: none;
}
.uni-date__x-input {
color: $uni-primary;
}
}
</style>

View File

@ -77,18 +77,22 @@ const sampleClick = (id) => {
let memberInfo = {
...props.sampleInfo.member,
};
proxy.$store.user.useUserStore().fillInAddressMember = memberInfo;
proxy.$store.user.useUserStore().bindPerson = memberInfo;
} else if (Object.keys(props.sampleInfo.member).length === 0) {
let memberInfo = {
...uni.getStorageSync("userInfo"),
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().fillInAddressSampleId = id;
proxy.$store.user.useUserStore().fillInAddressSample =
props.sampleInfo.code || "";
proxy.$store.user.useUserStore().fillInAddressSampleId = id || "";
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) => {
return dateTimeString.replace("T", " ");

View File

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

View File

@ -151,6 +151,20 @@ export const calculateAge = (birthDateString) => {
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