store-management-app/src/pages/login/index.vue

306 lines
7.9 KiB
Vue
Raw Normal View History

2024-09-09 07:35:17 +00:00
<template>
<view class="content">
2024-10-21 02:44:55 +00:00
<!-- <navBar> 登录 </navBar> -->
2024-09-09 07:35:17 +00:00
<view class="container-box">
<view class="title">
<span>登录</span>
2024-10-10 02:58:44 +00:00
<span style="color: #efc54e">仓库管理</span>
2024-09-09 07:35:17 +00:00
</view>
<view>使用你的手机号登录</view>
2024-09-14 03:31:59 +00:00
<view class="login">
2024-09-12 06:53:48 +00:00
<view class="login-input" v-if="!haveCode">
<up-input placeholder="请输入手机号" v-model="state.TelNum" clearable>
2024-09-09 07:35:17 +00:00
<template #prefix>
<up-text
text="手机号"
margin="0 3px 0 0"
color="#000000"
style="width: 100rpx"
></up-text>
</template>
</up-input>
</view>
2024-09-12 06:53:48 +00:00
<span
2024-09-14 03:31:59 +00:00
style="text-align: right; color: #e3af1c"
@click="goToPassword"
v-if="isCode && !haveCode"
>密码登录</span
>
2024-09-12 06:53:48 +00:00
<view class="login-input" v-if="!isCode">
2024-09-14 03:31:59 +00:00
<up-input
placeholder="请输入密码"
:password="true"
v-model="state.Password"
>
2024-09-09 07:35:17 +00:00
<template #prefix>
<up-text
text="密码"
margin="0 3px 0 0"
color="#000000"
style="width: 100rpx"
></up-text>
</template>
</up-input>
</view>
</view>
2024-09-12 06:53:48 +00:00
<view v-if="haveCode">
2024-09-09 07:35:17 +00:00
<view class="code-box">
<span style="color: #888888">已发送验证码至 </span>
2024-09-14 03:31:59 +00:00
<span style="font-weight: bold">{{ state.TelNum }}</span>
2024-09-09 07:35:17 +00:00
</view>
2024-09-19 07:40:39 +00:00
<up-code-input v-model="state.code" :maxlength="6"></up-code-input>
2024-09-14 03:31:59 +00:00
<view
style="
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 20rpx;
"
>
2024-09-24 02:46:51 +00:00
<span style="text-align: left; color: #e3af1c" @click="obtainCode"
2024-09-14 03:31:59 +00:00
>重新发送</span
>
2024-09-11 06:57:03 +00:00
<span
2024-09-14 03:31:59 +00:00
style="text-align: right; color: #e3af1c"
@click.stop="goToPassword"
>密码登录</span
>
2024-09-11 06:57:03 +00:00
</view>
2024-09-09 07:35:17 +00:00
</view>
2024-10-09 07:57:35 +00:00
2024-09-14 03:31:59 +00:00
<text
2024-09-09 07:35:17 +00:00
style="text-align: right; color: #e3af1c; margin-top: 20rpx"
2024-09-14 03:31:59 +00:00
@click="toCode"
v-if="!isCode"
>验证码登录</text
2024-09-09 07:35:17 +00:00
>
<up-button
2024-09-14 03:31:59 +00:00
style="width: 626rpx; margin: auto; height: 96rpx; margin-top: 90rpx"
2024-09-09 07:35:17 +00:00
color="#EFC54E"
throttleTime="5"
:loading="loading"
2024-09-11 06:57:03 +00:00
@click="logining"
2024-09-14 03:31:59 +00:00
v-if="!isCode || haveCode"
2024-09-09 07:35:17 +00:00
>登录</up-button
>
2024-09-12 06:53:48 +00:00
<up-button
2024-10-08 07:34:23 +00:00
style="width: 626rpx; margin: auto; height: 96rpx; margin-top: 160rpx"
2024-09-12 06:53:48 +00:00
color="#EFC54E"
throttleTime="5"
:loading="loading"
@click="obtainCode"
2024-09-14 03:31:59 +00:00
v-if="isCode && !haveCode"
2024-09-12 06:53:48 +00:00
>获取验证码</up-button
>
2024-10-08 07:34:23 +00:00
<!-- <view >
2024-09-26 02:58:40 +00:00
<up-image src="../../static/icon.png" width="40px" height="40px" ></up-image>
2024-10-08 07:34:23 +00:00
</view> -->
2024-09-09 07:35:17 +00:00
</view>
</view>
</template>
<script setup>
2024-09-14 03:31:59 +00:00
import { ref, reactive } from "vue";
2024-09-09 07:35:17 +00:00
import useToast from "@/hooks/toast/useToast.js";
2024-09-14 03:31:59 +00:00
import { onLoad } from "@dcloudio/uni-app";
2024-10-17 09:46:46 +00:00
import { userLogin, userSend, pbDetail, getRules } from "@/api/login.js";
2024-09-12 06:53:48 +00:00
const state = reactive({
2024-09-24 08:18:42 +00:00
TelNum: "",
2024-09-19 07:40:39 +00:00
Password: "",
2024-09-14 03:31:59 +00:00
id: "",
pid: "",
2024-10-09 07:57:35 +00:00
code: "",
2024-09-14 03:31:59 +00:00
});
2024-09-09 07:35:17 +00:00
const { showMessage } = useToast();
const loading = ref(false);
const isCode = ref(false);
2024-09-12 06:53:48 +00:00
const haveCode = ref(false);
2024-09-14 03:31:59 +00:00
onLoad((options) => {
2024-09-14 03:44:44 +00:00
if (options.id && options.pid) {
state.id = options.id;
state.pid = options.pid;
// 已经登录了
2024-10-22 08:25:34 +00:00
setTimeout(() => {
2024-10-22 11:30:24 +00:00
if (
window?.plus?.webview.getWebviewById("wv").tokenScan ||
uni.getStorageSync("store-token")
) {
2024-10-22 08:25:34 +00:00
paintingDetail();
getBtngetRules();
}
}, 200);
2024-09-14 03:31:59 +00:00
}
2024-10-17 09:46:46 +00:00
/*
2024-09-14 03:31:59 +00:00
1.先调用options的对应接口
2.判断是是否有没有登录
3如果登录了判断状态去相应页面
4.没有登录让他登录然后根据状态判断去相应页面
2024-10-17 09:46:46 +00:00
2024-09-14 03:31:59 +00:00
**/
});
const paintingDetail = async () => {
loading.value = true;
const res = await pbDetail({
id: state.id,
pid: state.pid,
});
if (res.status === 0) {
2024-09-14 03:44:44 +00:00
state.boxRelBucketStatus = res.data.boxRelBucketStatus;
console.log("boxRelBucketStatus", state.boxRelBucketStatus);
if (res.data.pbStatus == 1) {
2024-10-24 06:36:27 +00:00
uni.redirectTo({
2024-09-14 03:44:44 +00:00
url: "/pages/index/index?id=" + state.id + "&pid=" + state.pid,
2024-09-14 03:31:59 +00:00
success: () => {
loading.value = false;
},
fail: () => {
loading.value = false;
showMessage({ type: "default", message: "跳转失败" });
},
});
} else {
2024-10-09 07:57:35 +00:00
if (
res.data.boxRelBucketStatus == 3 &&
res.data.locateAddress == "公司内"
) {
2024-10-24 06:36:27 +00:00
uni.redirectTo({
2024-09-14 03:44:44 +00:00
url: "/pages/painting/index?id=" + state.id + "&pid=" + state.pid,
2024-09-14 03:31:59 +00:00
success: () => {
loading.value = false;
},
fail: () => {
loading.value = false;
showMessage({ type: "default", message: "跳转失败" });
},
});
2024-09-14 03:44:44 +00:00
} else {
2024-10-24 06:36:27 +00:00
uni.setStorageSync("data", res.data);
uni.redirectTo({
2024-09-14 03:44:44 +00:00
url:
2024-10-24 06:36:27 +00:00
"/pages/detail/index?id=" +
state.id +
"&pid=" +
state.pid +
"&boxRelBucketStatus=" +
state.boxRelBucketStatus,
2024-09-14 03:31:59 +00:00
success: () => {
loading.value = false;
},
fail: () => {
loading.value = false;
showMessage({ type: "default", message: "跳转失败" });
},
});
}
}
}
};
2024-09-09 07:35:17 +00:00
// const show = () => {
// showMessage({ type: "default", message: "验证码已发送" });
// };
const toCode = () => {
isCode.value = true;
2024-10-17 09:46:46 +00:00
state.Password = "";
2024-09-09 07:35:17 +00:00
};
2024-09-19 07:40:39 +00:00
//获取验证码
2024-09-12 06:53:48 +00:00
const obtainCode = async () => {
2024-09-14 03:31:59 +00:00
console.log("获取验证码");
2024-09-12 06:53:48 +00:00
loading.value = true;
2024-09-14 03:31:59 +00:00
const res = await userSend({
TelNum: state.TelNum ?? "",
});
if (res.status === 0) {
haveCode.value = true;
showMessage({ type: "default", message: "验证码已发送" });
} else {
2024-10-09 07:57:35 +00:00
if (res.msg == "已经发送过,验证码尚可用") {
2024-09-19 07:40:39 +00:00
haveCode.value = true;
2024-10-09 07:57:35 +00:00
} else {
showMessage({ type: "error", message: res.msg });
}
2024-09-14 03:31:59 +00:00
}
loading.value = false;
2024-09-12 06:53:48 +00:00
};
2024-09-14 03:31:59 +00:00
const goToPassword = () => {
isCode.value = false;
2024-09-12 06:53:48 +00:00
haveCode.value = false;
2024-09-14 03:31:59 +00:00
};
2024-09-11 06:57:03 +00:00
// 登录方法
2024-09-12 06:53:48 +00:00
const logining = async () => {
2024-09-11 06:57:03 +00:00
loading.value = true;
2024-09-12 06:53:48 +00:00
const res = await userLogin({
2024-09-14 03:31:59 +00:00
TelNum: state.TelNum ?? "",
Password: state.Password ?? "",
2024-10-09 07:57:35 +00:00
code: state.code ?? "",
2024-09-12 06:53:48 +00:00
});
2024-09-14 03:31:59 +00:00
if (res.status === 0) {
2024-10-21 07:11:52 +00:00
uni.setStorageSync("store-token", res.data.Token);
2024-09-14 03:31:59 +00:00
uni.setStorageSync("userInfo", res.data.AccountInfo);
2024-09-14 03:44:44 +00:00
await paintingDetail();
2024-10-17 09:46:46 +00:00
await getBtngetRules();
2024-09-14 03:31:59 +00:00
}
2024-10-08 05:32:08 +00:00
loading.value = false;
2024-09-11 06:57:03 +00:00
};
2024-10-17 09:46:46 +00:00
const getBtngetRules = async () => {
2024-10-18 02:19:37 +00:00
const res = await getRules({});
2024-10-17 09:46:46 +00:00
if (res.status === 0) {
2024-10-18 02:19:37 +00:00
const ruleBtn = res.data.MyButtonAuths?.map((button) => button.Url) || [];
2024-10-17 09:46:46 +00:00
uni.setStorageSync("ruleBtn", ruleBtn);
} else {
showMessage({ type: "error", message: res.msg });
}
};
2024-09-09 07:35:17 +00:00
</script>
<style lang="scss" scoped>
page {
background: url("@/static/bg.png") no-repeat;
background-size: 100% 100%;
background-attachment: fixed;
height: 100vh;
box-sizing: border-box;
}
:deep(.u-code-input) {
margin-top: 10rpx;
gap: 20rpx;
}
.content {
display: flex;
flex-direction: column;
height: 100%;
.container-box {
height: 100%;
width: 100%;
display: flex;
flex-direction: column;
padding: 62rpx;
box-sizing: border-box;
.title {
margin-top: 124rpx;
font-size: 64rpx;
font-weight: bold;
}
.login {
display: flex;
flex-direction: column;
margin-top: 140rpx;
gap: 20rpx;
.login-input {
width: 100%;
display: flex;
background-color: #f9f9f9;
padding: 32rpx 24rpx;
box-sizing: border-box;
height: 96rpx;
}
}
}
}
2024-10-22 02:40:32 +00:00
uni-button:after {
border: none;
}
2024-09-09 07:35:17 +00:00
</style>