This commit is contained in:
Teng 2025-05-28 17:36:42 +08:00
parent 49cbe995fe
commit db34d51dd1
109 changed files with 3370 additions and 1070 deletions

View File

@ -0,0 +1,263 @@
<template>
<view class="captcha-container" ref="container">
<view class="font-title">请通过滑块验证</view>
<view class="captcha-image" style="position: relative; width: 100%; height: 400rpx; overflow: hidden;">
<image :src="bgImage" class="bg-image" mode="widthFix" @load="init" />
<view class="overlay" :style="{width: containerWidth + 'rpx', height: containerHeight + 'rpx'}">
<view class="hole" :style="{
top: originY + 'rpx',
left: originX + 'rpx',
width: pieceSize + 'rpx',
height: pieceSize + 'rpx',
clipPath: clipPath,
transform: 'translate(-50%, -50%)',
backgroundColor: 'rgba(0,0,0,0.3)'
}"></view>
<view class="piece" :style="{
top: originY + 'rpx',
left: offsetX + 'rpx',
width: pieceSize + 'rpx',
height: pieceSize + 'rpx',
backgroundImage: `url(${bgImage})`,
backgroundSize: containerWidth + 'rpx ' + containerHeight + 'rpx',
backgroundPosition: `-${originX-30}rpx -${originY-45}rpx`,
clipPath: clipPath,
transform: 'translate(-50%, -50%)'
}"></view>
</view>
</view>
<view class="slider-bar">
<view class="slider-button" ref="btn" @touchstart.prevent="onStart" @mousedown.prevent="onStart"
:style="{ left: offsetX + 'rpx', maxWidth: (containerWidth - pieceSize) + 'rpx' }"></view>
</view>
</view>
</template>
<script setup>
import {
ref,
onBeforeUnmount
} from 'vue';
import {
onLoad
} from '@dcloudio/uni-app';
import img0 from '@/static/login/0.png'
import img1 from '@/static/login/1.png'
import img2 from '@/static/login/2.png'
import img3 from '@/static/login/3.png'
const pieceSizePx = 50;
const pieceSize = pieceSizePx * 2;
const tolerance = 20;
const container = ref(null);
const btn = ref(null);
const containerWidthPx = 200;
const containerHeightPx = 300;
const containerWidth = ref(containerWidthPx * 2);
const containerHeight = ref(containerHeightPx * 2);
const originX = ref(0);
const originY = ref(0);
const offsetX = ref(0);
const dragging = ref(false);
const startX = ref(0);
function getPuzzlePiecePath(size) {
const s = size;
return `
M${10*2} 0
h${s / 3 - 10*2}
a${10*2} ${10*2} 0 0 1 0 ${20*2}
h${s / 3}
a${10*2} ${10*2} 0 0 0 0 -${20*2}
h${s / 3 - 10*2}
v${s / 3 - 10*2}
a${10*2} ${10*2} 0 0 1 -${20*2} 0
v${s / 3}
a${10*2} ${10*2} 0 0 0 ${20*2} 0
v${s / 3 - 10*2}
h-${s / 3 - 10*2}
a${10*2} ${10*2} 0 0 1 0 -${20*2}
h-${s / 3}
a${10*2} ${10*2} 0 0 0 0 ${20*2}
h-${s / 3 - 10*2}
z
`;
}
const clipPath = `path('${getPuzzlePiecePath(pieceSize)}')`;
function init() {
uni.createSelectorQuery()
.in(container.value)
.select('.bg-image')
.boundingClientRect(data => {
if (!data) {
console.error('无法获取.bg-image尺寸');
return;
}
console.log('图片宽高:', data.width, data.height); //
containerWidth.value = data.width * 2;
containerHeight.value = data.height * 2;
originX.value = Math.random() * (containerWidth.value - pieceSize * 2) + pieceSize;
originY.value = containerHeight.value / 2;
offsetX.value = 0;
console.log('originX:', originX.value, 'originY:', originY.value);
})
.exec();
}
function onStart(e) {
dragging.value = true;
startX.value = e.touches ? e.touches[0].clientX * 2 : e.clientX * 2;
window.addEventListener('mousemove', onMove);
window.addEventListener('mouseup', onEnd);
window.addEventListener('touchmove', onMove);
window.addEventListener('touchend', onEnd);
}
function onMove(e) {
if (!dragging.value) return;
const clientX = e.touches ? e.touches[0].clientX * 2 : e.clientX * 2;
let dx = clientX - startX.value;
dx = Math.max(0, Math.min(dx, containerWidth.value - pieceSize));
offsetX.value = dx;
}
const uToast = ref(null)
function onEnd() {
dragging.value = false;
window.removeEventListener('mousemove', onMove);
window.removeEventListener('mouseup', onEnd);
window.removeEventListener('touchmove', onMove);
window.removeEventListener('touchend', onEnd);
if (Math.abs(offsetX.value - originX.value) < tolerance) {
console.log('验证成功');
} else {
offsetX.value = 0;
uni.showToast({
title: '验证失败',
icon: 'none', //
duration: 2000 //
})
}
}
const bgImage = ref("");
onLoad(() => {
let randomInt = Math.floor(Math.random() * 4);
const bgImageMap = [img0, img1, img2, img3];
bgImage.value = bgImageMap[randomInt];
})
onBeforeUnmount(() => {
window.removeEventListener('mousemove', onMove);
window.removeEventListener('mouseup', onEnd);
window.removeEventListener('touchmove', onMove);
window.removeEventListener('touchend', onEnd);
});
</script>
<style scoped>
.captcha-container {
/* margin: 20rpx auto; */
user-select: none;
background-color: #fff;
width: 600rpx;
height: 800rpx;
margin: 0 auto;
z-index: 999;
border-radius: 30rpx;
overflow: hidden;
padding: 0 30rpx;
}
.captcha-image {
position: relative;
overflow: hidden;
}
.bg-image {
position: relative;
z-index: 1;
display: block;
/* margin-top: 30rpx; */
width: 100%;
height: 100%;
}
.overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 100;
pointer-events: none;
}
.hole,
.piece {
position: absolute;
z-index: 101;
border-radius: 5rpx;
box-shadow: 0 0 6rpx rgba(0, 0, 0, 0.4);
}
.hole {
background-color: rgba(0, 0, 0, 0.3);
}
.piece {
background-repeat: no-repeat;
background-size: cover;
cursor: grab;
}
.slider-bar {
position: relative;
height: 160rpx;
margin-top: 0rpx;
background: #eee;
border-radius: 80rpx;
width: 600rpx;
}
.slider-button {
position: absolute;
top: 20rpx;
width: 120rpx;
height: 120rpx;
background: #fff;
border-radius: 60rpx;
box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.2);
transition: background 0.3s;
user-select: none;
}
.slider-button.success {
background: #4caf50;
}
.font-title {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
height: 80rpx;
font-size: 30rpx;
font-weight: 700;
}
</style>

View File

@ -19,7 +19,6 @@ export function useWeChatAuth() {
`&scope=${scope}` +
`&state=${state}` +
`#wechat_redirect`;
// console.log("????",scope)
window.location.href = url;
}

View File

@ -3,6 +3,8 @@ import uView from './uni_modules/vk-uview-ui';
// #ifndef VUE3
import Vue from 'vue'
import './uni.promisify.adaptor'
import uView from './uni_modules/vk-uview-ui';
Vue.use(uView);
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({

View File

@ -1,29 +1,41 @@
{
"pages": [
{
"path": "pages/index/index",
"path": "pages/login/index",
"style": {
"navigationBarTitleText": "登录"
}
},
{
"path": "pages/index/phonebumber",
"path": "pages/login/phonebumber",
"style": {
"navigationBarTitleText": "登录"
}
},
{
"path": "pages/index/code",
"path": "pages/login/code",
"style": {
"navigationBarTitleText": "登录"
}
},
{
"path": "pages/index/callback",
"path": "pages/login/callback",
"style": {
"navigationBarTitleText": "登录"
}
},
{
"path": "pages/login/protocol",
"style": {
"navigationBarTitleText": "护理单元使用条款"
}
},
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "首页"
}
},
{
"path": "pages/map/index",
"style": {

View File

@ -1,151 +0,0 @@
<template>
<view class="callback-container">
回调成功{{ceshi.name}}{{ceshi.openid}}
<!-- <text v-if="!userInfo">授权中...</text>
<view v-else>
<text>OpenID: {{ openid }}</text>
<text v-if="userInfo.nickname">昵称: {{ userInfo.nickname }}</text>
<image v-if="userInfo.headimgurl" :src="userInfo.headimgurl" class="avatar" />
</view> -->
<view v-for="(item,index) in jigouArray" :key="index">
<view style="font-size: 30rpx;margin-top: 10rpx;font-weight: 700;" @click="jigouClick(item)">
{{item.departName}}
</view>
<image style="width: 60rpx;height: 60rpx;" :src="`https://www.focusnu.com/nursing-unit/sys/common/static/${item.picUrl}`" />
</view>
<view v-for="(item,index) in secondArray" :key="index" @click="jumpto">
<view style="font-size: 30rpx;margin-top: 10rpx;font-weight: 700;">
{{item.nuName}}
</view>
</view>
</view>
</template>
<script setup>
import { onLoad } from '@dcloudio/uni-app';
import { useWeChatAuth } from '@/compontent/useWeChatAuth.js';
import request from '@/request/index.js';
import { reactive,ref } from 'vue';
const { fetchUserInfo, openid, userInfo } = useWeChatAuth();
const ceshi = reactive({
name:"",
openid:"",
})
const jumpto = () =>{
console.log("???")
uni.navigateTo({
url: "/pages/pay/index"
});
}
const getOpenId = (code) =>{
const url = `https://www.focusnu.com/nursing-unit/weixin/wechat/callback?code=${encodeURIComponent(code)}`;
fetch(url)
.then(res => res.json())
.then(data => {
console.log("✅ 获取用户信息成功:", data);
ceshi.name = data.nickname
ceshi.openid = data.openid
uni.setStorage({
key: 'openid',
data: {
openid: data.openid,
}
});
getUserMessage()
})
.catch(err => {
console.error("❌ 获取用户信息失败:", err);
});
}
const getUserMessage = () =>{
const url = `https://www.focusnu.com/nursing-unit/h5Api/nuBizAdvisoryInfo/queryWeixinInfo?openId=${encodeURIComponent(ceshi.openid)}&wechatName=${encodeURIComponent(ceshi.name)}`;
fetch(url)
.then(res => res.json())
.then(data => {
console.log("个人信息打印",data)
getjigou()
} )
}
const jigouArray = ref([]);
const getjigou = () =>{
const url = `https://www.focusnu.com/nursing-unit/sys/sysDepart/queryInstitutionsList`;
fetch(url)
.then(res => res.json())
.then(data => {
jigouArray.value = [...data]
console.log("机构打印",jigouArray.value)
} )
}
const secondArray = ref([]);
const jigouClick = (element) =>{
const url = `${element.serverUrl}/h5Api/nuBaseInfo/list`;
fetch(url)
.then(res => res.json())
.then(data => {
secondArray.value = [...data.result]
} )
uni.setStorage({
key: 'serverUrl',
data: {
url: element.serverUrl,
}
});
const urlpost = `https://www.focusnu.com/nursing-unit/h5Api/nuBizAdvisoryInfo/editNuBizAdvisoryInfo`;
const payload = {
openId: ceshi.openid,
serverUrl: element.serverUrl
};
console.log("???/",payload)
fetch(urlpost, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
})
.then(res => res.json())
.then(data => {
// secondArray.value = [...data.result];
console.log("???",data)
})
.catch(err => {
console.error('请求失败:', err);
});
}
onLoad(() => {
const href = window.location.href;
const queryString = href.split('?')[1]?.split('#')[0]; // ? #
const query = {};
if (queryString) {
queryString.split('&').forEach(pair => {
const [key, value] = pair.split('=');
query[key] = decodeURIComponent(value);
});
}
console.log('解析到的 query 参数:', query);
if (query.code) {
getOpenId(query.code)
// fetchUserInfo(query.code)
}
});
</script>
<style scoped>
.callback-container {
padding: 24px;
}
.avatar {
width: 80px;
height: 80px;
border-radius: 40px;
margin-top: 12px;
}
</style>

View File

@ -1,282 +0,0 @@
<template>
<view class="login-container">
<view class="title">
<image class="title-imge" src="/static/index/nu.png" />
<view class="title-font">
<view class="">您好</view>
<view class="">欢迎使用nu护理单元~</view>
</view>
</view>
<image class="photo-imge" src="/static/index/bgc.png" />
<image class="old-imge" src="/static/index/old.png" />
<view class="under-container">
<view class="under-container-title">
<view class="code-title">
请输入验证码
</view>
<view class="code-number">
验证码已发送至{{ phonenumber }}
</view>
<!-- <view class="under-container-input">
<view class="input-left">+86</view>
<input type="number" style="width: 600rpx;" maxlength="11" placeholder="请输入手机号" @input="isRight" />
</view> -->
</view>
<view class="captcha-container">
<view class="captcha-box">
<view v-for="(digit, index) in captcha" :key="index" class="captcha-item">
<input v-model="captcha[index]" class="captcha-input" type="number" maxlength="1"
:placeholder="index < 3 ? '' : ' '" @input="handleInput(index)"
@keydown="handleKeydown(index, $event)" :focus="focusedIndex === index" />
</view>
</view>
<!-- 触发钩子 -->
<!-- <button class="submit-btn" @click="submitCaptcha">提交验证码</button> -->
</view>
<view style="width: 100%;">
<view class="right-blue">
重新发送
</view>
</view>
<!-- <view class="under-container-title">
请输入验证码
</view>
<view class="button-blue" v-show="canClick" @click="loginIt">
获得验证码
</view>
<view class="button-gray" v-show="!canClick">
获得验证码
</view> -->
</view>
</view>
</template>
<script setup>
import {
nextTick,
reactive,
ref
} from 'vue';
import {
onLoad
} from '@dcloudio/uni-app';
const phonenumber = ref("")
const captcha = ref(['', '', '', '']); // 4
const focusedIndex = ref(0); //
//
const handleInput = (index) => {
if (captcha.value[index]) {
if (index < 3) {
focusedIndex.value = index + 1; //
}
}
let isFour = true;
captcha.value.forEach(number=>{
if(!number){
isFour = false;
}
})
nextTick(()=>{
if(isFour){
submitCaptcha()
}
})
};
//
const handleKeydown = (index, event) => {
if (event.key === 'Backspace' && !captcha.value[index]) {
if (index > 0) {
focusedIndex.value = index - 1; //
}
}
};
//
const submitCaptcha = () => {
const code = captcha.value.join('');
if (code.length === 4) {
console.log('提交验证码:', code);
//
} else {
console.log('验证码未输入完整');
}
};
onLoad((options) => {
// console.log(options.phonenumber); //
phonenumber.value = options.phonenumber
});
</script>
<style lang="scss" scoped>
.login-container {
display: flex;
flex-direction: column;
align-items: center;
height: 100vh;
width: 100%;
background-color: rgb(239, 241, 252);
position: relative;
.title {
display: flex;
margin-top: 120rpx;
align-items: center;
.title-imge {
width: 110rpx;
height: 110rpx;
margin-right: 30rpx;
}
.title-font {
font-size: 35rpx;
font-weight: 500;
}
}
.photo-imge {
position: absolute;
top: 120rpx;
left: 0;
width: 100%;
height: 1100rpx;
}
.old-imge {
position: absolute;
left: 50%;
transform: translate(-50%, -50%);
top: 550rpx;
width: 400rpx;
height: 400rpx;
}
.under-container {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
height: 680rpx;
background-color: #fff;
border-top-left-radius: 50rpx;
border-top-right-radius: 50rpx;
box-shadow: 10rpx 10rpx 20rpx rgba(0, 0, 0, 0.1);
display: flex;
flex-direction: column;
// align-items: center;
color: #5A607F;
.radio-circle {
position: relative;
margin-top: 2rpx;
width: 40rpx;
height: 40rpx;
border-radius: 50%;
border: 2rpx solid #C0C5D9;
background-color: transparent;
}
.radio-circle-target {
position: relative;
margin-top: 2rpx;
width: 40rpx;
height: 40rpx;
border-radius: 50%;
border: 2rpx solid #C0C5D9;
background-color: transparent;
}
.radio-circle-target::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 30rpx;
height: 30rpx;
background-color: #00C9FF;
border-radius: 50%;
}
}
}
.under-container-title {
// display: flex;
margin-top: 50rpx;
margin-bottom: 20rpx;
font-size: 25rpx;
font-weight: 500;
width: 100%;
.code-title {
margin-left: 80rpx;
font-size: 33rpx;
color: black;
font-weight: 500;
margin-bottom: 20rpx;
}
.code-number {
margin-left: 80rpx;
font-size: 28rpx;
// color: black;
// font-weight: 500;
margin-bottom: 20rpx;
}
}
.captcha-container {
display: flex;
flex-direction: column;
align-items: center;
}
.captcha-box {
display: flex;
justify-content: space-between;
margin-bottom: 20rpx;
}
.captcha-item {
display: flex;
justify-content: center;
align-items: center;
}
.captcha-input {
width: 110rpx;
height: 110rpx;
border: 2rpx solid #C0C5D9;
border-radius: 20rpx;
font-size: 28rpx;
text-align: center;
margin-right: 40rpx;
outline: none;
}
.captcha-input:focus {
border-color: #00C9FF;
}
.submit-btn {
padding: 10rpx 20rpx;
background-color: #00C9FF;
color: white;
border-radius: 43rpx;
font-size: 28rpx;
margin-top: 20rpx;
width: 80%;
text-align: center;
}
.right-blue{
float: right;
color: #0083FF;
margin-right: 80rpx;
}
</style>

View File

@ -1,30 +1,14 @@
<template>
<view class="login-container">
<view class="title">
<image class="title-imge" src="/static/index/nu.png" />
<view class="title-font">
<view class="">您好</view>
<view class="">欢迎使用nu护理单元~</view>
</view>
</view>
<image class="photo-imge" src="/static/index/bgc.png" />
<image class="old-imge" src="/static/index/old.png" />
<view class="under-container">
<view class="under-container-title">
<div v-show="isFadingOut" class="bubble">
请勾选同意该协议
</div>
<view :class="isTarget ? 'radio-circle-target' : 'radio-circle'" @click="isTarget = !isTarget"></view>
<view class="radio-circle-font" @click="isTarget = !isTarget">登录代表您已同意</view>
<view class="radio-circle-blue">
法律条款与隐私政策
<!-- 底部的栏为啥这样写是因为要做左右拉动 -->
<view class="botton-view">
<view v-for="(item,index) in itemArray" class="array-father">
<view :class="itemTarget===index ? `bottom-button-target` : `bottom-button`" @click="itemTarget=index">
<view class="">
{{item}}
</view>
</view>
</view>
<view class="button-blue" @click="loginIt">
一键登录
</view>
<view class="button-white" @click="yanzhengma">
手机登录/注册
<view v-show="itemTarget===index" class="blue-heng"></view>
</view>
</view>
</view>
@ -35,220 +19,62 @@
reactive,
ref
} from 'vue';
import {
useWeChatAuth
} from '@/compontent/useWeChatAuth.js';
const isTarget = ref(false);
const isFadingOut = ref(false);
const {
login
} = useWeChatAuth();
let timerId = null; // ID
const loginIt = () => {
//
if (timerId) {
clearTimeout(timerId);
}
if (!isTarget.value) {
isFadingOut.value = true;
timerId = setTimeout(() => {
isFadingOut.value = false;
}, 1000); // 500ms
} else {
login();
}
};
const yanzhengma = () => {
if (timerId) {
clearTimeout(timerId);
}
if (!isTarget.value) {
isFadingOut.value = true;
timerId = setTimeout(() => {
isFadingOut.value = false;
}, 1000); // 500ms
} else {
uni.navigateTo({
url: "/pages/index/phonebumber"
});
}
}
const itemArray = ["NU", "动态", "我的"];
const itemTarget = ref(0);
</script>
<style lang="scss" scoped>
.login-container {
display: flex;
flex-direction: column;
align-items: center;
height: 100vh;
min-height: 100vh;
width: 100%;
background-color: rgb(239, 241, 252);
position: relative;
.title {
display: flex;
margin-top: 120rpx;
align-items: center;
.title-imge {
width: 110rpx;
height: 110rpx;
margin-right: 30rpx;
}
.title-font {
font-size: 35rpx;
font-weight: 500;
}
}
.photo-imge {
position: absolute;
top: 120rpx;
left: 0;
width: 100%;
height: 1100rpx;
}
.old-imge {
position: absolute;
left: 50%;
transform: translate(-50%, -50%);
top: 550rpx;
width: 400rpx;
height: 400rpx;
}
.under-container {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
height: 680rpx;
background-color: #fff;
border-top-left-radius: 50rpx;
border-top-right-radius: 50rpx;
box-shadow: 10rpx 10rpx 20rpx rgba(0, 0, 0, 0.1);
display: flex;
flex-direction: column;
align-items: center;
.radio-circle {
position: relative;
margin-top: 2rpx;
width: 40rpx;
height: 40rpx;
border-radius: 50%;
border: 2rpx solid #C0C5D9;
background-color: transparent;
}
.radio-circle-target {
position: relative;
margin-top: 2rpx;
width: 40rpx;
height: 40rpx;
border-radius: 50%;
border: 2rpx solid #C0C5D9;
background-color: transparent;
}
.radio-circle-target::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 30rpx;
height: 30rpx;
background-color: #00C9FF;
border-radius: 50%;
}
}
}
.under-container-title {
.array-father {
width: 33%;
position: relative;
}
.botton-view {
position: fixed;
bottom: 0;
left: 0;
height: 200rpx;
width: 100%;
// background-color: greenyellow;
display: flex;
margin-top: 60rpx;
margin-bottom: 30rpx;
align-items: center;
font-size: 25rpx;
justify-content: space-between;
font-weight: 500;
.radio-circle-blue {
color: #0083FF;
margin-top: 3rpx;
.bottom-button {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.radio-circle-font {
color: #5A607F;
margin-left: 18rpx;
margin-top: 3rpx;
.bottom-button-target {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
color: rgb(42, 133, 235);
}
}
.button-blue {
width: 80%;
display: flex;
justify-content: center;
align-items: center;
height: 100rpx;
border-radius: 43rpx;
background: linear-gradient(to right, #00C9FF, #0076FF);
color: #fff;
font-size: 33rpx;
margin-bottom: 30rpx;
}
.button-white {
width: 80%;
display: flex;
justify-content: center;
align-items: center;
height: 100rpx;
border-radius: 43rpx;
color: #5A607F;
font-size: 33rpx;
margin-bottom: 30rpx;
border: 2rpx solid #C0C5D9;
}
.bubble {
transition: opacity 1s ease-out;
position: absolute;
left: 25rpx;
top: -5rpx;
background-color: black;
color: white;
padding: 10rpx;
border-radius: 10rpx;
font-size: 23rpx;
box-shadow: 2rpx 2rpx 5rpx rgba(0, 0, 0, 0.2);
pointer-events: none;
opacity: 1;
/* 初始为可见 */
}
.bubble::after {
transition: opacity 1s ease-out;
content: '';
position: absolute;
left: 50%;
bottom: -8rpx;
border-left: 10rpx solid transparent;
border-right: 10rpx solid transparent;
border-top: 10rpx solid black;
transform: translateX(-50%);
}
/* 隐藏气泡 */
.bubble.hidden {
opacity: 0;
.blue-heng {
height: 6rpx;
width: 150rpx;
background-color: rgb(42, 133, 235);
position: absolute;
bottom: 55rpx;
left: 50%;
/* 左边缘到父容器左边的距离占父宽度 50% */
transform: translateX(-50%);
}
}
</style>

199
pages/login/callback.vue Normal file
View File

@ -0,0 +1,199 @@
<template>
<view class="callback-container">
回调成功{{ceshi.name}}{{ceshi.openid}}
<!-- {{look}} -->
<!-- <text v-if="!userInfo">授权中...</text>
<view v-else>
<text>OpenID: {{ openid }}</text>
<text v-if="userInfo.nickname">昵称: {{ userInfo.nickname }}</text>
<image v-if="userInfo.headimgurl" :src="userInfo.headimgurl" class="avatar" />
</view> -->
<view v-for="(item,index) in jigouArray" :key="index">
<view style="font-size: 30rpx;margin-top: 10rpx;font-weight: 700;" @click="jigouClick(item)">
{{item.departName}}
</view>
<image style="width: 60rpx;height: 60rpx;"
:src="`https://www.focusnu.com/nursing-unit/sys/common/static/${item.picUrl}`" />
</view>
<view v-for="(item,index) in secondArray" :key="index" @click="jumpto">
<view style="font-size: 30rpx;margin-top: 10rpx;font-weight: 700;">
{{item.nuName}}
</view>
</view>
</view>
</template>
<script setup>
import {
onLoad
} from '@dcloudio/uni-app';
import {
useWeChatAuth
} from '@/compontent/useWeChatAuth.js';
import request from '@/request/index.js';
import {
reactive,
ref
} from 'vue';
const {
fetchUserInfo,
openid,
userInfo
} = useWeChatAuth();
const ceshi = reactive({
name: "",
openid: "",
accessToken: ""
})
const jumpto = () => {
console.log("???")
uni.navigateTo({
url: "/pages/pay/index"
});
}
const getOpenId = (code) => {
const url = `https://www.focusnu.com/nursing-unit/weixin/wechat/callback?code=${encodeURIComponent(code)}`;
fetch(url)
.then(res => res.json())
.then(data => {
console.log("✅ 获取用户信息成功:", data);
ceshi.name = data.data.nickname
ceshi.openid = data.data.openid
ceshi.accessToken = data.accessToken
uni.setStorage({
key: 'openid',
data: {
openid: data.data.openid,
accessToken: data.accessToken,
}
});
getUserMessage()
})
.catch(err => {
console.error("❌ 获取用户信息失败:", err);
});
}
// const serve = ref("")
const look = ref("")
const getUserMessage = () => {
const url =
`https://www.focusnu.com/nursing-unit/h5Api/nuBizAdvisoryInfo/queryWeixinInfo?openId=${encodeURIComponent(ceshi.openid)}&wechatName=${encodeURIComponent(ceshi.name)}`;
fetch(url)
.then(res => res.json())
.then(data => {
console.log("个人信息打印", data)
// serve.value = data.result.serverUrl
const urlpost = `${data.result.serverUrl}/weiXinPay/getUserInfo`;
const payload = {
openid: ceshi.openid,
access_token: ceshi.accessToken,
// serverUrl: serve.value
};
console.log("???/", payload)
fetch(urlpost, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
})
.then(res => res.json())
.then(data => {
// secondArray.value = [...data.result];
look.value = data
console.log("", data)
})
.catch(err => {
console.error('请求失败:', err);
});
getjigou()
})
}
const jigouArray = ref([]);
const getjigou = () => {
const url = `https://www.focusnu.com/nursing-unit/sys/sysDepart/queryInstitutionsList`;
fetch(url)
.then(res => res.json())
.then(data => {
jigouArray.value = [...data]
console.log("机构打印", jigouArray.value)
})
}
const secondArray = ref([]);
const jigouClick = (element) => {
const url = `${element.serverUrl}/h5Api/nuBaseInfo/list`;
fetch(url)
.then(res => res.json())
.then(data => {
secondArray.value = [...data.result]
})
uni.setStorage({
key: 'serverUrl',
data: {
url: element.serverUrl,
}
});
const urlpost = `https://www.focusnu.com/nursing-unit/h5Api/nuBizAdvisoryInfo/editNuBizAdvisoryInfo`;
const payload = {
openId: ceshi.openid,
serverUrl: element.serverUrl
};
console.log("???/", payload)
fetch(urlpost, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
})
.then(res => res.json())
.then(data => {
// secondArray.value = [...data.result];
console.log("???", data)
})
.catch(err => {
console.error('请求失败:', err);
});
}
onLoad(() => {
const href = window.location.href;
const queryString = href.split('?')[1]?.split('#')[0]; // ? #
const query = {};
if (queryString) {
queryString.split('&').forEach(pair => {
const [key, value] = pair.split('=');
query[key] = decodeURIComponent(value);
});
}
console.log('解析到的 query 参数:', query);
if (query.code) {
getOpenId(query.code)
// fetchUserInfo(query.code)
}
});
</script>
<style scoped>
.callback-container {
padding: 24px;
}
.avatar {
width: 80px;
height: 80px;
border-radius: 40px;
margin-top: 12px;
}
</style>

459
pages/login/code.vue Normal file
View File

@ -0,0 +1,459 @@
<template>
<view class="login-container">
<view class="title">
<image class="title-imge" src="/static/index/nu.png" />
<view class="title-font">
<view class="">您好</view>
<view class="">欢迎使用护理单元~</view>
</view>
</view>
<image class="photo-imge" src="/static/index/bgc.png" />
<image class="old-imge" src="/static/index/old.png" />
<view class="under-container">
<view class="under-container-title">
<view class="code-title">
请输入验证码
</view>
<view class="code-number">
验证码已发送至{{ phonenumber }}
</view>
</view>
<view class="captcha-container">
<view class="captcha-box">
<view v-for="(digit, index) in captcha" :key="index" class="captcha-item">
<input v-model="captcha[index]" class="captcha-input" type="number" maxlength="1"
:placeholder="index < 3 ? '' : ' '" @input="handleInput(index)"
@keydown="handleKeydown(index, $event)" :focus="focusedIndex === index" />
</view>
</view>
</view>
<view class="under-view">
<view class="right-blue" v-show="!countdown">
重新发送
</view>
<view class="right-white" v-show="countdown">
{{countdown}}S后重新发送
</view>
<view class="right-black" @click="isFadingOut=true">
收不到验证码
</view>
</view>
</view>
<!-- 遮罩 -->
<transition name="fade">
<view v-if="isFadingOut" class="overlay" @click="closeModal" :style="{ backgroundColor: maskColor }" />
</transition>
<!-- 底部弹窗 -->
<transition name="slide-up">
<view v-if="isFadingOut" class="modal">
<view class="modal-title">收不到验证码</view>
<view class="model-p">
<view class="text-view" style="font-weight: 600;">手机号可正常使用:</view>
<view class="text-view">1 是否输错手机号</view>
<view class="text-view">2 手机是否设置短信拦截/欠费/信号不好</view>
<view class="text-view">3 手机内存是否满了</view>
<view class="text-view">4 手机卡是否为物联卡而非SIM卡</view>
</view>
</view>
</transition>
</view>
</template>
<script setup>
import {
nextTick,
reactive,
ref,
onUnmounted
} from 'vue';
import {
onLoad
} from '@dcloudio/uni-app';
const phonenumber = ref("")
const captcha = ref(['', '', '', '']); // 4
const focusedIndex = ref(0); //
const isFadingOut = ref(false);
// rgba
const maskColor = ref('rgba(0, 0, 0, 0.5)')
function closeModal() {
isFadingOut.value = false
}
//
const handleInput = (index) => {
if (captcha.value[index]) {
if (index < 3) {
focusedIndex.value = index + 1; //
}
}
let isFour = true;
captcha.value.forEach(number=>{
if(!number){
isFour = false;
}
})
nextTick(()=>{
if(isFour){
submitCaptcha()
}
})
};
//
const handleKeydown = (index, event) => {
if (event.key === 'Backspace' && !captcha.value[index]) {
if (index > 0) {
focusedIndex.value = index - 1; //
}
}
};
//
const submitCaptcha = () => {
const code = captcha.value.join('');
if (code.length === 4) {
console.log('提交验证码:', code);
uni.reLaunch({
url: `/pages/index/index`
});
//
} else {
console.log('验证码未输入完整');
}
};
const getcode = () =>{
// uni.getStorage({
// key: 'serverUrl',
// success: (res) => {
// // res.data { url: '...' }
// const { url } = res.data;
// console.log(' serverUrl', url);
// const url = `${url}/h5Api/nuBaseInfo/list`;
// fetch(url)
// .then(res => res.json())
// .then(data => {
// secondArray.value = [...data.result]
// })
// //
// },
// fail: (err) => {
// console.error(' serverUrl ', err);
// }
// });
const url = `https://www.focusnu.com/nursing-unit/sys/randomImage/${Date.now()}`;
fetch(url)
.then(res => res.json())
.then(data => {
console.log("code测试",data)
})
}
//
const countdown = ref(60);
let timerId = null;
//
onUnmounted(() => {
if (timerId) {
clearInterval(timerId);
}
});
onLoad((options) => {
phonenumber.value = options.phonenumber;
getcode()
//
countdown.value = 60;
timerId = setInterval(() => {
if (countdown.value > 0) {
countdown.value--;
} else {
clearInterval(timerId);
timerId = null;
}
}, 1000);
});
</script>
<style lang="scss" scoped>
.login-container {
display: flex;
flex-direction: column;
min-height: 100vh;
width: 100%;
background-color: rgb(239, 241, 252);
position: relative;
.title {
margin-top: 70rpx;
align-items: center;
.title-imge {
width: 100rpx;
height: 105rpx;
margin-left: 100rpx;
}
.title-font {
font-size: 35rpx;
font-weight: 600;
margin-left: 105rpx;
margin-top: 10rpx;
}
}
.photo-imge {
position: absolute;
top: 120rpx;
left: 0;
width: 100%;
height: 1100rpx;
}
.old-imge {
position: absolute;
right: 30rpx;
top: 400rpx;
width: 400rpx;
height: 400rpx;
}
.under-container {
position: fixed;
left: 0;
bottom: 0;
width: 100%;
height: 45vh;
background-color: #fff;
border-top-left-radius: 50rpx;
border-top-right-radius: 50rpx;
box-shadow: 10rpx 10rpx 20rpx rgba(0, 0, 0, 0.1);
display: flex;
flex-direction: column;
color: #5A607F;
.radio-circle {
position: relative;
margin-top: 2rpx;
width: 40rpx;
height: 40rpx;
border-radius: 50%;
border: 2rpx solid #C0C5D9;
background-color: transparent;
}
.radio-circle-target {
position: relative;
margin-top: 2rpx;
width: 40rpx;
height: 40rpx;
border-radius: 50%;
border: 2rpx solid #C0C5D9;
background-color: transparent;
}
.radio-circle-target::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 30rpx;
height: 30rpx;
background-color: #00C9FF;
border-radius: 50%;
}
}
}
.under-container-title {
margin-top: 50rpx;
margin-bottom: 20rpx;
font-size: 25rpx;
font-weight: 500;
width: 100%;
.code-title {
margin-left: 80rpx;
font-size: 35rpx;
color: black;
font-weight: 500;
margin-bottom: 20rpx;
}
.code-number {
margin-left: 80rpx;
font-size: 28rpx;
margin-bottom: 20rpx;
}
}
.captcha-container {
display: flex;
flex-direction: column;
align-items: center;
margin-top: 20rpx;
}
.captcha-box {
display: flex;
justify-content: space-between;
margin-bottom: 20rpx;
}
.captcha-item {
display: flex;
justify-content: center;
align-items: center;
}
.captcha-input {
width: 110rpx;
height: 110rpx;
border: 3rpx solid #C0C5D9;
border-radius: 30rpx;
font-size: 50rpx;
font-weight: 700;
text-align: center;
margin-right: 40rpx;
outline: none;
}
.captcha-input:focus {
border-color: #00C9FF;
}
.right-blue{
// float: right;
color: #0083FF;
margin-left: 60rpx;
}
.right-white{
color: rgb(194,198,211);
margin-left: 60rpx;
}
.right-black{
// float: right;
// color: #0083FF;
margin-right: 80rpx;
color: black;
}
.under-view{
width: 100%;
margin-top: 10rpx;
display: flex;
justify-content: space-between;
}
/* 遮罩 */
.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 998;
}
/* 弹窗 */
.modal {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
background-color: #fff;
z-index: 999;
border-top-left-radius: 50rpx;
border-top-right-radius: 50rpx;
width: 100%;
height: 500rpx;
display: flex;
flex-direction: column;
align-items: center;
.modal-title {
font-size: 32rpx;
font-weight: 700;
margin: 50rpx 0;
margin-bottom: 30rpx;
}
.model-p {
padding: 0 50rpx;
width: 100%;
font-size: 30rpx;
}
.model-down {
display: flex;
width: 100%;
justify-content: space-between;
padding: 0 50rpx;
margin-top: 40rpx;
.model-white {
border-radius: 50rpx;
width: 300rpx;
height: 95rpx;
border: 5rpx solid rgb(0, 141, 255);
color: rgb(0, 141, 255);
font-size: 35rpx;
display: flex;
justify-content: center;
align-items: center;
}
.model-blue {
border-radius: 50rpx;
width: 300rpx;
height: 95rpx;
background: linear-gradient(to right, #00C9FF, #0076FF);
color: #fff;
font-size: 35rpx;
display: flex;
justify-content: center;
align-items: center;
}
}
}
/* 动画:遮罩淡入淡出 */
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.3s;
}
.fade-enter-from,
.fade-leave-to {
opacity: 0;
}
.fade-enter-to,
.fade-leave-from {
opacity: 1;
}
/* 动画:弹窗上滑 */
.slide-up-enter-active,
.slide-up-leave-active {
transition: transform 0.3s;
}
.slide-up-enter-from,
.slide-up-leave-to {
transform: translateY(100%);
}
.slide-up-enter-to,
.slide-up-leave-from {
transform: translateY(0);
}
.text-view{
margin-bottom: 20rpx;
}
</style>

333
pages/login/index.vue Normal file
View File

@ -0,0 +1,333 @@
<template>
<view class="login-container">
<view class="title">
<image class="title-imge" src="/static/index/nu.png" />
<view class="title-font">
<view class="">您好</view>
<view class="">欢迎使用护理单元~</view>
</view>
</view>
<image class="photo-imge" src="/static/index/bgc.png" />
<image class="old-imge" src="/static/index/old.png" />
<view class="under-container">
<view class="under-container-title">
<view :class="isTarget ? 'radio-circle-target' : 'radio-circle'" @click="isTarget = !isTarget"></view>
<view style="margin-left: 17rpx;" class="radio-circle-font" @click="isTarget = !isTarget">同意</view>
<view class="radio-circle-blue" @click="jumpToPro">
护理单元使用条款
</view>
<view class="radio-circle-font" @click="isTarget = !isTarget">并授权NU获取本机号码</view>
</view>
<view class="button-blue" @click="loginIt">
一键登录
</view>
</view>
<!-- 遮罩 -->
<transition name="fade">
<view v-if="isFadingOut" class="overlay" @click="closeModal" :style="{ backgroundColor: maskColor }" />
</transition>
<!-- 底部弹窗 -->
<transition name="slide-up">
<view v-if="isFadingOut" class="modal">
<view class="modal-title">服务协议及隐私保护</view>
<view class="model-p">
<text>&#x3000;&#x3000;为了更好地保障您的合法权益请阅读并同意以下协议</text>
<text style="color: rgb(0,141,255);" @click="jumpToPro" >护理单元使用条款</text>
<text>同意后将自动登录</text>
</view>
<view class="model-down">
<view class="model-white" @click="closeModal">
不同意
</view>
<view class="model-blue" @click="closeModal();isTarget=true">
同意
</view>
</view>
</view>
</transition>
</view>
</template>
<script setup>
import {
reactive,
ref
} from 'vue';
import {
useWeChatAuth
} from '@/compontent/useWeChatAuth.js';
const isTarget = ref(false);
const isFadingOut = ref(false);
const {
login
} = useWeChatAuth();
// rgba
const maskColor = ref('rgba(0, 0, 0, 0.5)')
function closeModal() {
isFadingOut.value = false
}
const loginIt = () => {
if (!isTarget.value) {
isFadingOut.value = true;
} else {
uni.navigateTo({
url: "/pages/login/phonebumber"
});
// login();
}
};
const jumpToPro = () =>{
console.log("????")
uni.navigateTo({
url: "/pages/login/protocol"
});
}
</script>
<style lang="scss" scoped>
.login-container {
display: flex;
flex-direction: column;
min-height: 100vh;
width: 100%;
background-color: rgb(239, 241, 252);
position: relative;
.title {
margin-top: 70rpx;
align-items: center;
.title-imge {
width: 100rpx;
height: 105rpx;
margin-left: 100rpx;
}
.title-font {
font-size: 35rpx;
font-weight: 600;
margin-left: 105rpx;
margin-top: 10rpx;
}
}
.photo-imge {
position: absolute;
top: 120rpx;
left: 0;
width: 100%;
height: 1100rpx;
}
.old-imge {
position: absolute;
right: 30rpx;
top: 400rpx;
width: 400rpx;
height: 400rpx;
}
.under-container {
position: fixed;
left: 0;
bottom: 0;
width: 100%;
height: 45vh;
background-color: #fff;
border-top-left-radius: 50rpx;
border-top-right-radius: 50rpx;
box-shadow: 10rpx 10rpx 20rpx rgba(0, 0, 0, 0.1);
display: flex;
flex-direction: column;
align-items: center;
.radio-circle {
position: relative;
margin-top: 2rpx;
width: 40rpx;
height: 40rpx;
border-radius: 50%;
border: 2rpx solid #C0C5D9;
background-color: transparent;
}
.radio-circle-target {
position: relative;
margin-top: 2rpx;
width: 40rpx;
height: 40rpx;
border-radius: 50%;
border: 2rpx solid #C0C5D9;
background-color: transparent;
}
.radio-circle-target::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 30rpx;
height: 30rpx;
background-color: #00C9FF;
border-radius: 50%;
}
}
}
.under-container-title {
display: flex;
margin-top: 60rpx;
margin-bottom: 40rpx;
align-items: center;
font-size: 25rpx;
font-weight: 500;
.radio-circle-blue {
color: #0083FF;
margin-top: 3rpx;
}
.radio-circle-font {
color: #5A607F;
// margin-left: 18rpx;
margin-top: 3rpx;
}
}
.button-blue {
width: 80%;
display: flex;
justify-content: center;
align-items: center;
height: 100rpx;
border-radius: 43rpx;
background: linear-gradient(to right, #00C9FF, #0076FF);
color: #fff;
font-size: 33rpx;
margin-bottom: 30rpx;
}
// .button-white {
// width: 80%;
// display: flex;
// justify-content: center;
// align-items: center;
// height: 100rpx;
// border-radius: 43rpx;
// color: #5A607F;
// font-size: 33rpx;
// margin-bottom: 30rpx;
// border: 2rpx solid #C0C5D9;
// }
/* 遮罩 */
.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 998;
}
/* 弹窗 */
.modal {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
background-color: #fff;
z-index: 999;
border-top-left-radius: 50rpx;
border-top-right-radius: 50rpx;
width: 100%;
height: 500rpx;
display: flex;
flex-direction: column;
align-items: center;
.modal-title {
font-size: 32rpx;
font-weight: 700;
margin: 50rpx 0;
}
.model-p {
padding: 0 50rpx;
width: 100%;
font-size: 30rpx;
}
.model-down {
display: flex;
width: 100%;
justify-content: space-between;
padding: 0 50rpx;
margin-top: 40rpx;
.model-white {
border-radius: 50rpx;
width: 300rpx;
height: 95rpx;
border: 5rpx solid rgb(0, 141, 255);
color: rgb(0, 141, 255);
font-size: 35rpx;
display: flex;
justify-content: center;
align-items: center;
}
.model-blue {
border-radius: 50rpx;
width: 300rpx;
height: 95rpx;
background: linear-gradient(to right, #00C9FF, #0076FF);
color: #fff;
font-size: 35rpx;
display: flex;
justify-content: center;
align-items: center;
}
}
}
/* 动画:遮罩淡入淡出 */
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.3s;
}
.fade-enter-from,
.fade-leave-to {
opacity: 0;
}
.fade-enter-to,
.fade-leave-from {
opacity: 1;
}
/* 动画:弹窗上滑 */
.slide-up-enter-active,
.slide-up-leave-active {
transition: transform 0.3s;
}
.slide-up-enter-from,
.slide-up-leave-to {
transform: translateY(100%);
}
.slide-up-enter-to,
.slide-up-leave-from {
transform: translateY(0);
}
</style>

View File

@ -4,7 +4,7 @@
<image class="title-imge" src="/static/index/nu.png" />
<view class="title-font">
<view class="">您好</view>
<view class="">欢迎使用nu护理单元~</view>
<view class="">欢迎使用护理单元~</view>
</view>
</view>
<image class="photo-imge" src="/static/index/bgc.png" />
@ -13,9 +13,13 @@
<view class="under-container-title">
<view class="under-container-input">
<view class="input-left">+86</view>
<input type="number" style="width: 600rpx;" maxlength="11" placeholder="请输入手机号" @input="isRight" />
<input type="number" style="width: 600rpx;font-size: 33rpx;" maxlength="11" placeholder="请输入绑定手机号"
@input="isRight" />
</view>
</view>
<view class="button-blue" @click="huakuaiOpen = true">
滑块校验
</view>
<view class="button-blue" v-show="canClick" @click="jumpto">
获得验证码
</view>
@ -23,6 +27,11 @@
获得验证码
</view>
</view>
<view class="bg-mask" v-if="huakuaiOpen" @click="huakuaiOpen=false" >
<huakuai @click.stop />
</view>
</view>
</template>
@ -32,27 +41,30 @@
ref
} from 'vue';
import huakuai from "@/compontent/public/huakuai.vue"
const jumpto = () =>{
const huakuaiOpen = ref(false);
const jumpto = () => {
uni.navigateTo({
url: `/pages/index/code?phonenumber=${phonenumber.value}`
url: `/pages/login/code?phonenumber=${phonenumber.value}`
});
}
//11
function is11DigitNumber(value) {
return /^\d{11}$/.test(value.toString());
return /^\d{11}$/.test(value.toString());
}
const phonenumber = ref("");
const canClick = ref(false);
const isRight = (res) =>{
console.log("????",res.detail.value)
if(is11DigitNumber(res.detail.value)){
const isRight = (res) => {
console.log("????", res.detail.value)
if (is11DigitNumber(res.detail.value)) {
phonenumber.value = res.detail.value
canClick.value = true;
}else{
} else {
canClick.value = false;
}
}
</script>
@ -60,26 +72,26 @@
.login-container {
display: flex;
flex-direction: column;
align-items: center;
height: 100vh;
min-height: 100vh;
width: 100%;
background-color: rgb(239, 241, 252);
position: relative;
.title {
display: flex;
margin-top: 120rpx;
margin-top: 70rpx;
align-items: center;
.title-imge {
width: 110rpx;
height: 110rpx;
margin-right: 30rpx;
width: 100rpx;
height: 105rpx;
margin-left: 100rpx;
}
.title-font {
font-size: 35rpx;
font-weight: 500;
font-weight: 600;
margin-left: 105rpx;
margin-top: 10rpx;
}
}
@ -93,19 +105,18 @@
.old-imge {
position: absolute;
left: 50%;
transform: translate(-50%, -50%);
top: 550rpx;
right: 30rpx;
top: 400rpx;
width: 400rpx;
height: 400rpx;
}
.under-container {
position: absolute;
position: fixed;
left: 0;
bottom: 0;
width: 100%;
height: 680rpx;
height: 45vh;
background-color: #fff;
border-top-left-radius: 50rpx;
border-top-right-radius: 50rpx;
@ -151,12 +162,13 @@
.under-container-title {
display: flex;
margin-top: 60rpx;
margin-bottom: 30rpx;
margin-bottom: 60rpx;
align-items: center;
justify-content: center;
font-size: 25rpx;
font-weight: 500;
width: 100%;
.radio-circle-blue {
color: #0083FF;
margin-top: 3rpx;
@ -167,7 +179,8 @@
margin-left: 18rpx;
margin-top: 3rpx;
}
.under-container-input{
.under-container-input {
width: 80%;
display: flex;
align-items: center;
@ -176,7 +189,8 @@
color: #5A607F;
font-size: 33rpx;
border: 2rpx solid #C0C5D9;
.input-left{
.input-left {
margin: 0 30rpx;
}
}
@ -189,7 +203,7 @@
align-items: center;
height: 100rpx;
border-radius: 43rpx;
background-color: rgb(188,188,188);
background-color: rgb(188, 188, 188);
color: #fff;
font-size: 33rpx;
margin-bottom: 30rpx;
@ -207,6 +221,7 @@
margin-bottom: 30rpx;
border: 2rpx solid #C0C5D9;
}
.button-blue {
width: 80%;
display: flex;
@ -219,6 +234,7 @@
font-size: 33rpx;
margin-bottom: 30rpx;
}
.bubble {
transition: opacity 1s ease-out;
position: absolute;
@ -252,4 +268,17 @@
opacity: 0;
}
.bg-mask {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(0, 0, 0, 0.3);
backdrop-filter: blur(5rpx);
z-index: 998;
display: flex;
justify-content: center;
align-items: center;
}
</style>

87
pages/login/protocol.vue Normal file
View File

@ -0,0 +1,87 @@
<template>
<view class="font-father">
<view class="font-title">
护理单元隐私条款
</view>
<view class="">
<p>&#x3000;&#x3000;护理单元隐私条款以下简称本条款为用户在登录并使用本护理单元包括网站App及相关服务时必须共同遵守的法律协议请您在使用本护理单元前认真阅读并充分理解本条款全部内容如您不同意本条款任何内容请勿登录或使用本护理单元</p>
<br />
<p>总则</p>
<p>1.1 本护理单元由[公司名称]以下简称本平台提供维护具有独立运营权</p>
<p>1.2 用户是指注册登录并使用本护理单元的机构医护人员及相关人员您在注册或登录时提交的信息应真实准确完整并对其真实性负责</p>
<p>1.3 本条款构成用户与本平台之间关于护理单元使用的完整协议除本条款外用户与本平台可能不另行签署其他协议</p>
<br />
<p>服务内容</p>
<p>2.1 本平台为用户提供以下主要服务</p>
<p>a) 护理计划制定与管理</p>
<p>b) 病人信息记录与查询</p>
<p>c) 护理任务分派与跟踪</p>
<p>d) 护理质量考核与评估</p>
<p>e) 其他相关护理支持服务</p>
<p>2.2 本平台可根据业务发展和技术需求不时调整本条款所描述的服务内容并在平台界面或其他适当位置予以公告</p>
<br />
<p>用户权利与义务</p>
<p>3.1 用户有权按照本条款平台规则及法律法规的相关规定使用本平台提供的各项服务</p>
<p>3.2 用户应按照本平台要求妥善保管登录账户及密码不得将账户转借转让或泄露给他人如因账户外泄导致的任何损失由用户自行承担</p>
<p>3.3 用户在使用本平台时应遵守国家法律法规及行业规范不得利用本平台从事下列行为</p>
<p>a) 侵犯他人合法权益的行为</p>
<p>b) 发布或传播违法淫秽暴力或其他不良信息</p>
<p>c) 非法获取使用或披露他人隐私信息</p>
<p>d) 利用本平台实施任何违法或不当行为</p>
<p>3.4 用户保证对上传发布至本平台的所有资料及信息拥有合法权利如因用户发布的信息引发任何纠纷或法律责任与本平台无关概由用户自行承担</p>
<br />
<p>隐私与数据保护</p>
<p>4.1 本平台依法收集使用存储和保护用户的个人信息与病人健康信息并采取合理的技术和管理措施防止信息泄露损毁或被非法访问</p>
<p>4.2 未经用户同意本平台不会向任何第三方披露用户个人信息但法律法规另有规定或司法机关行政机关依职权要求的除外</p>
<p>4.3 用户同意本平台在执行业务过程中对用户及病人信息进行处理与统计并用于优化服务产品研发及内部管理等用途</p>
<br />
<p>使用规范</p>
<p>5.1 用户应在具备相应资格或授权的前提下使用本平台的专业护理模块</p>
<p>5.2 平台仅为辅助工具用户在实际护理过程中应结合临床实际情况及专业判断不得完全依赖平台数据而忽视专业判断</p>
<p>5.3 用户应合理使用系统资源不得恶意攻击干扰或破坏本平台的正常运行</p>
<br />
<p>免责声明</p>
<p>6.1 本平台对因本款项原因导致的服务中断延迟或数据丢失不承担责任但将尽最大努力恢复服务并减少损失</p>
<p>6.2 本平台对因技术故障停电通讯线路中断第三方服务故障不可抗力等原因导致的服务中断或其他问题不承担责任</p>
<p>6.3 本平台对用户因使用本平台服务而产生的任何间接附带特殊或惩罚性损害赔偿不承担责任</p>
<br />
<p>知识产权</p>
<p>7.1 本平台及其所提供服务中的所有内容包括文字图片图表界面设计程序等的著作权专利权 商标权益及其他知识产权均归本平台或相关权利人所有</p>
<p>7.2 未经本平台事先书面许可用户不得擅自复制改编发布传播或以其他方式使用上述内容</p>
<br />
<p>协议变更与终止</p>
<p>8.1 本平台有权根据业务发展需要不时修订本条款并在平台界面或其他适当位置予以公告修订后的条款自公告之日起生效</p>
<p>8.2 如用户不接受修订后的条款应停止使用本平台如继续使用视为接受修订后的条款</p>
<p>8.3 本平台有权在用户严重违反本条款或法律法规的情况下暂停或终止向该用户提供服务并保留追究其法律责任的权利</p>
<br />
<p>争议解决</p>
<p>9.1 本条款的解释效力及纠纷解决适用中华人民共和国法律</p>
<p>9.2 因本条款或因使用本平台服务产生的任何争议双方应友好协商解决协商不成时任一方可向本平台所在地有管辖权的人民法院提起诉讼</p>
<br />
<p>其他</p>
<p>10.1 如本条款某一条款被有权机关认定为无效或不可执行不影响其他条款的有效性</p>
<p>10.2 本条款自用户在登录界面点击同意并登录成功之日起生效</p>
<br />
</view>
</view>
</template>
<script setup>
</script>
<style lang="scss" scoped>
.font-father{
width: 100%;
// height: 100vh;
padding: 0 50rpx;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
.font-title{
font-size: 35rpx;
font-weight: 700;
margin: 20rpx 0;
}
}
</style>

BIN
static/login/0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 598 KiB

BIN
static/login/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 KiB

BIN
static/login/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 537 KiB

BIN
static/login/3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 796 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 940 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 KiB

View File

@ -0,0 +1 @@
.callback-container[data-v-4644647c]{padding:24px}.avatar[data-v-4644647c]{width:80px;height:80px;border-radius:40px;margin-top:12px}

View File

@ -1 +0,0 @@
.callback-container[data-v-0b73e663]{padding:24px}.avatar[data-v-0b73e663]{width:80px;height:80px;border-radius:40px;margin-top:12px}

View File

@ -1 +0,0 @@
.login-container[data-v-b906b8c8]{display:flex;flex-direction:column;align-items:center;height:100vh;width:100%;background-color:#eff1fc;position:relative}.login-container .title[data-v-b906b8c8]{display:flex;margin-top:3.75rem;align-items:center}.login-container .title .title-imge[data-v-b906b8c8]{width:3.4375rem;height:3.4375rem;margin-right:.9375rem}.login-container .title .title-font[data-v-b906b8c8]{font-size:1.09375rem;font-weight:500}.login-container .photo-imge[data-v-b906b8c8]{position:absolute;top:3.75rem;left:0;width:100%;height:34.375rem}.login-container .old-imge[data-v-b906b8c8]{position:absolute;left:50%;transform:translate(-50%,-50%);top:17.1875rem;width:12.5rem;height:12.5rem}.login-container .under-container[data-v-b906b8c8]{position:absolute;left:0;bottom:0;width:100%;height:21.25rem;background-color:#fff;border-top-left-radius:1.5625rem;border-top-right-radius:1.5625rem;box-shadow:.3125rem .3125rem .625rem rgba(0,0,0,.1);display:flex;flex-direction:column;color:#5a607f}.login-container .under-container .radio-circle[data-v-b906b8c8],.login-container .under-container .radio-circle-target[data-v-b906b8c8]{position:relative;margin-top:.0625rem;width:1.25rem;height:1.25rem;border-radius:50%;border:.0625rem solid #C0C5D9;background-color:transparent}.login-container .under-container .radio-circle-target[data-v-b906b8c8]:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:.9375rem;height:.9375rem;background-color:#00c9ff;border-radius:50%}.under-container-title[data-v-b906b8c8]{margin-top:1.5625rem;margin-bottom:.625rem;font-size:.78125rem;font-weight:500;width:100%}.under-container-title .code-title[data-v-b906b8c8]{margin-left:2.5rem;font-size:1.03125rem;color:#000;font-weight:500;margin-bottom:.625rem}.under-container-title .code-number[data-v-b906b8c8]{margin-left:2.5rem;font-size:.875rem;margin-bottom:.625rem}.captcha-container[data-v-b906b8c8]{display:flex;flex-direction:column;align-items:center}.captcha-box[data-v-b906b8c8]{display:flex;justify-content:space-between;margin-bottom:.625rem}.captcha-item[data-v-b906b8c8]{display:flex;justify-content:center;align-items:center}.captcha-input[data-v-b906b8c8]{width:3.4375rem;height:3.4375rem;border:.0625rem solid #C0C5D9;border-radius:.625rem;font-size:.875rem;text-align:center;margin-right:1.25rem;outline:none}.captcha-input[data-v-b906b8c8]:focus{border-color:#00c9ff}.submit-btn[data-v-b906b8c8]{padding:.3125rem .625rem;background-color:#00c9ff;color:#fff;border-radius:1.34375rem;font-size:.875rem;margin-top:.625rem;width:80%;text-align:center}.right-blue[data-v-b906b8c8]{float:right;color:#0083ff;margin-right:2.5rem}

View File

@ -0,0 +1 @@
.login-container[data-v-edc97756]{display:flex;flex-direction:column;min-height:100vh;width:100%;background-color:#eff1fc;position:relative}.login-container .title[data-v-edc97756]{margin-top:2.1875rem;align-items:center}.login-container .title .title-imge[data-v-edc97756]{width:3.125rem;height:3.28125rem;margin-left:3.125rem}.login-container .title .title-font[data-v-edc97756]{font-size:1.09375rem;font-weight:600;margin-left:3.28125rem;margin-top:.3125rem}.login-container .photo-imge[data-v-edc97756]{position:absolute;top:3.75rem;left:0;width:100%;height:34.375rem}.login-container .old-imge[data-v-edc97756]{position:absolute;right:.9375rem;top:12.5rem;width:12.5rem;height:12.5rem}.login-container .under-container[data-v-edc97756]{position:fixed;left:0;bottom:0;width:100%;height:45vh;background-color:#fff;border-top-left-radius:1.5625rem;border-top-right-radius:1.5625rem;box-shadow:.3125rem .3125rem .625rem rgba(0,0,0,.1);display:flex;flex-direction:column;color:#5a607f}.login-container .under-container .radio-circle[data-v-edc97756],.login-container .under-container .radio-circle-target[data-v-edc97756]{position:relative;margin-top:.0625rem;width:1.25rem;height:1.25rem;border-radius:50%;border:.0625rem solid #C0C5D9;background-color:transparent}.login-container .under-container .radio-circle-target[data-v-edc97756]:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:.9375rem;height:.9375rem;background-color:#00c9ff;border-radius:50%}.under-container-title[data-v-edc97756]{margin-top:1.5625rem;margin-bottom:.625rem;font-size:.78125rem;font-weight:500;width:100%}.under-container-title .code-title[data-v-edc97756]{margin-left:2.5rem;font-size:1.09375rem;color:#000;font-weight:500;margin-bottom:.625rem}.under-container-title .code-number[data-v-edc97756]{margin-left:2.5rem;font-size:.875rem;margin-bottom:.625rem}.captcha-container[data-v-edc97756]{display:flex;flex-direction:column;align-items:center;margin-top:.625rem}.captcha-box[data-v-edc97756]{display:flex;justify-content:space-between;margin-bottom:.625rem}.captcha-item[data-v-edc97756]{display:flex;justify-content:center;align-items:center}.captcha-input[data-v-edc97756]{width:3.4375rem;height:3.4375rem;border:.09375rem solid #C0C5D9;border-radius:.9375rem;font-size:1.5625rem;font-weight:700;text-align:center;margin-right:1.25rem;outline:none}.captcha-input[data-v-edc97756]:focus{border-color:#00c9ff}.right-blue[data-v-edc97756]{color:#0083ff;margin-left:1.875rem}.right-white[data-v-edc97756]{color:#c2c6d3;margin-left:1.875rem}.right-black[data-v-edc97756]{margin-right:2.5rem;color:#000}.under-view[data-v-edc97756]{width:100%;margin-top:.3125rem;display:flex;justify-content:space-between}.overlay[data-v-edc97756]{position:fixed;top:0;left:0;width:100%;height:100%;z-index:998}.modal[data-v-edc97756]{position:fixed;bottom:0;left:0;background-color:#fff;z-index:999;border-top-left-radius:1.5625rem;border-top-right-radius:1.5625rem;width:100%;height:15.625rem;display:flex;flex-direction:column;align-items:center}.modal .modal-title[data-v-edc97756]{font-size:1rem;font-weight:700;margin:1.5625rem 0 .9375rem}.modal .model-p[data-v-edc97756]{padding:0 1.5625rem;width:100%;font-size:.9375rem}.modal .model-down[data-v-edc97756]{display:flex;width:100%;justify-content:space-between;padding:0 1.5625rem;margin-top:1.25rem}.modal .model-down .model-white[data-v-edc97756]{border-radius:1.5625rem;width:9.375rem;height:2.96875rem;border:.15625rem solid #008dff;color:#008dff;font-size:1.09375rem;display:flex;justify-content:center;align-items:center}.modal .model-down .model-blue[data-v-edc97756]{border-radius:1.5625rem;width:9.375rem;height:2.96875rem;background:linear-gradient(to right,#00c9ff,#0076ff);color:#fff;font-size:1.09375rem;display:flex;justify-content:center;align-items:center}.fade-enter-active[data-v-edc97756],.fade-leave-active[data-v-edc97756]{transition:opacity .3s}.fade-enter-from[data-v-edc97756],.fade-leave-to[data-v-edc97756]{opacity:0}.fade-enter-to[data-v-edc97756],.fade-leave-from[data-v-edc97756]{opacity:1}.slide-up-enter-active[data-v-edc97756],.slide-up-leave-active[data-v-edc97756]{transition:transform .3s}.slide-up-enter-from[data-v-edc97756],.slide-up-leave-to[data-v-edc97756]{transform:translateY(100%)}.slide-up-enter-to[data-v-edc97756],.slide-up-leave-from[data-v-edc97756]{transform:translateY(0)}.text-view[data-v-edc97756]{margin-bottom:.625rem}

View File

@ -1 +0,0 @@
.login-container[data-v-00b697a2]{display:flex;flex-direction:column;align-items:center;height:100vh;width:100%;background-color:#eff1fc;position:relative}.login-container .title[data-v-00b697a2]{display:flex;margin-top:3.75rem;align-items:center}.login-container .title .title-imge[data-v-00b697a2]{width:3.4375rem;height:3.4375rem;margin-right:.9375rem}.login-container .title .title-font[data-v-00b697a2]{font-size:1.09375rem;font-weight:500}.login-container .photo-imge[data-v-00b697a2]{position:absolute;top:3.75rem;left:0;width:100%;height:34.375rem}.login-container .old-imge[data-v-00b697a2]{position:absolute;left:50%;transform:translate(-50%,-50%);top:17.1875rem;width:12.5rem;height:12.5rem}.login-container .under-container[data-v-00b697a2]{position:absolute;left:0;bottom:0;width:100%;height:21.25rem;background-color:#fff;border-top-left-radius:1.5625rem;border-top-right-radius:1.5625rem;box-shadow:.3125rem .3125rem .625rem rgba(0,0,0,.1);display:flex;flex-direction:column;align-items:center}.login-container .under-container .radio-circle[data-v-00b697a2],.login-container .under-container .radio-circle-target[data-v-00b697a2]{position:relative;margin-top:.0625rem;width:1.25rem;height:1.25rem;border-radius:50%;border:.0625rem solid #C0C5D9;background-color:transparent}.login-container .under-container .radio-circle-target[data-v-00b697a2]:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:.9375rem;height:.9375rem;background-color:#00c9ff;border-radius:50%}.under-container-title[data-v-00b697a2]{display:flex;margin-top:1.875rem;margin-bottom:.9375rem;align-items:center;font-size:.78125rem;font-weight:500}.under-container-title .radio-circle-blue[data-v-00b697a2]{color:#0083ff;margin-top:.09375rem}.under-container-title .radio-circle-font[data-v-00b697a2]{color:#5a607f;margin-left:.5625rem;margin-top:.09375rem}.button-blue[data-v-00b697a2]{width:80%;display:flex;justify-content:center;align-items:center;height:3.125rem;border-radius:1.34375rem;background:linear-gradient(to right,#00c9ff,#0076ff);color:#fff;font-size:1.03125rem;margin-bottom:.9375rem}.button-white[data-v-00b697a2]{width:80%;display:flex;justify-content:center;align-items:center;height:3.125rem;border-radius:1.34375rem;color:#5a607f;font-size:1.03125rem;margin-bottom:.9375rem;border:.0625rem solid #C0C5D9}.bubble[data-v-00b697a2]{transition:opacity 1s ease-out;position:absolute;left:.78125rem;top:-.15625rem;background-color:#000;color:#fff;padding:.3125rem;border-radius:.3125rem;font-size:.71875rem;box-shadow:.0625rem .0625rem .15625rem rgba(0,0,0,.2);pointer-events:none;opacity:1}.bubble[data-v-00b697a2]:after{transition:opacity 1s ease-out;content:"";position:absolute;left:50%;bottom:-.25rem;border-left:.3125rem solid transparent;border-right:.3125rem solid transparent;border-top:.3125rem solid black;transform:translate(-50%)}.bubble.hidden[data-v-00b697a2]{opacity:0}

View File

@ -0,0 +1 @@
.login-container[data-v-8017333f]{display:flex;flex-direction:column;min-height:100vh;width:100%;background-color:#eff1fc;position:relative}.login-container .title[data-v-8017333f]{margin-top:2.1875rem;align-items:center}.login-container .title .title-imge[data-v-8017333f]{width:3.125rem;height:3.28125rem;margin-left:3.125rem}.login-container .title .title-font[data-v-8017333f]{font-size:1.09375rem;font-weight:600;margin-left:3.28125rem;margin-top:.3125rem}.login-container .photo-imge[data-v-8017333f]{position:absolute;top:3.75rem;left:0;width:100%;height:34.375rem}.login-container .old-imge[data-v-8017333f]{position:absolute;right:.9375rem;top:12.5rem;width:12.5rem;height:12.5rem}.login-container .under-container[data-v-8017333f]{position:fixed;left:0;bottom:0;width:100%;height:45vh;background-color:#fff;border-top-left-radius:1.5625rem;border-top-right-radius:1.5625rem;box-shadow:.3125rem .3125rem .625rem rgba(0,0,0,.1);display:flex;flex-direction:column;align-items:center}.login-container .under-container .radio-circle[data-v-8017333f],.login-container .under-container .radio-circle-target[data-v-8017333f]{position:relative;margin-top:.0625rem;width:1.25rem;height:1.25rem;border-radius:50%;border:.0625rem solid #C0C5D9;background-color:transparent}.login-container .under-container .radio-circle-target[data-v-8017333f]:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:.9375rem;height:.9375rem;background-color:#00c9ff;border-radius:50%}.under-container-title[data-v-8017333f]{display:flex;margin-top:1.875rem;margin-bottom:1.25rem;align-items:center;font-size:.78125rem;font-weight:500}.under-container-title .radio-circle-blue[data-v-8017333f]{color:#0083ff;margin-top:.09375rem}.under-container-title .radio-circle-font[data-v-8017333f]{color:#5a607f;margin-top:.09375rem}.button-blue[data-v-8017333f]{width:80%;display:flex;justify-content:center;align-items:center;height:3.125rem;border-radius:1.34375rem;background:linear-gradient(to right,#00c9ff,#0076ff);color:#fff;font-size:1.03125rem;margin-bottom:.9375rem}.overlay[data-v-8017333f]{position:fixed;top:0;left:0;width:100%;height:100%;z-index:998}.modal[data-v-8017333f]{position:fixed;bottom:0;left:0;background-color:#fff;z-index:999;border-top-left-radius:1.5625rem;border-top-right-radius:1.5625rem;width:100%;height:15.625rem;display:flex;flex-direction:column;align-items:center}.modal .modal-title[data-v-8017333f]{font-size:1rem;font-weight:700;margin:1.5625rem 0}.modal .model-p[data-v-8017333f]{padding:0 1.5625rem;width:100%;font-size:.9375rem}.modal .model-down[data-v-8017333f]{display:flex;width:100%;justify-content:space-between;padding:0 1.5625rem;margin-top:1.25rem}.modal .model-down .model-white[data-v-8017333f]{border-radius:1.5625rem;width:9.375rem;height:2.96875rem;border:.15625rem solid #008dff;color:#008dff;font-size:1.09375rem;display:flex;justify-content:center;align-items:center}.modal .model-down .model-blue[data-v-8017333f]{border-radius:1.5625rem;width:9.375rem;height:2.96875rem;background:linear-gradient(to right,#00c9ff,#0076ff);color:#fff;font-size:1.09375rem;display:flex;justify-content:center;align-items:center}.fade-enter-active[data-v-8017333f],.fade-leave-active[data-v-8017333f]{transition:opacity .3s}.fade-enter-from[data-v-8017333f],.fade-leave-to[data-v-8017333f]{opacity:0}.fade-enter-to[data-v-8017333f],.fade-leave-from[data-v-8017333f]{opacity:1}.slide-up-enter-active[data-v-8017333f],.slide-up-leave-active[data-v-8017333f]{transition:transform .3s}.slide-up-enter-from[data-v-8017333f],.slide-up-leave-to[data-v-8017333f]{transform:translateY(100%)}.slide-up-enter-to[data-v-8017333f],.slide-up-leave-from[data-v-8017333f]{transform:translateY(0)}

View File

@ -0,0 +1 @@
.login-container[data-v-0ae6d08b]{display:flex;flex-direction:column;min-height:100vh;width:100%;background-color:#eff1fc;position:relative}.array-father[data-v-0ae6d08b]{width:33%;position:relative}.botton-view[data-v-0ae6d08b]{position:fixed;bottom:0;left:0;height:6.25rem;width:100%;display:flex;justify-content:space-between;font-weight:500}.botton-view .bottom-button[data-v-0ae6d08b]{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.botton-view .bottom-button-target[data-v-0ae6d08b]{width:100%;height:100%;display:flex;justify-content:center;align-items:center;color:#2a85eb}.botton-view .blue-heng[data-v-0ae6d08b]{height:.1875rem;width:4.6875rem;background-color:#2a85eb;position:absolute;bottom:1.71875rem;left:50%;transform:translate(-50%)}

View File

@ -1 +0,0 @@
import{l as e,r as n,c as o,w as s,s as t,i as a,o as i,b as r,t as c,h as l,j as u,F as p,a as d,f as h,g as f}from"./index-BwwWwpov.js";import{o as m}from"./uni-app.es.CdisLe7k.js";import{u as w}from"./useWeChatAuth.BbPcLRMD.js";import{_ as g}from"./_plugin-vue_export-helper.BCo6x5W8.js";const y=g({__name:"callback",setup(g){w();const y=e({name:"",openid:""}),v=()=>{console.log("???"),h({url:"/pages/pay/index"})},I=()=>{const e=`https://www.focusnu.com/nursing-unit/h5Api/nuBizAdvisoryInfo/queryWeixinInfo?openId=${encodeURIComponent(y.openid)}&wechatName=${encodeURIComponent(y.name)}`;fetch(e).then((e=>e.json())).then((e=>{console.log("个人信息打印",e),_()}))},x=n([]),_=()=>{fetch("https://www.focusnu.com/nursing-unit/sys/sysDepart/queryInstitutionsList").then((e=>e.json())).then((e=>{x.value=[...e],console.log("机构打印",x.value)}))},j=n([]);return m((()=>{var e;const n=null==(e=window.location.href.split("?")[1])?void 0:e.split("#")[0],o={};n&&n.split("&").forEach((e=>{const[n,s]=e.split("=");o[n]=decodeURIComponent(s)})),console.log("解析到的 query 参数:",o),o.code&&(e=>{const n=`https://www.focusnu.com/nursing-unit/weixin/wechat/callback?code=${encodeURIComponent(e)}`;fetch(n).then((e=>e.json())).then((e=>{console.log("✅ 获取用户信息成功:",e),y.name=e.nickname,y.openid=e.openid,t({key:"openid",data:{openid:e.openid}}),I()})).catch((e=>{console.error("❌ 获取用户信息失败:",e)}))})(o.code)})),(e,n)=>{const h=a,m=f;return i(),o(h,{class:"callback-container"},{default:s((()=>[r(" 回调成功"+c(y.name)+c(y.openid)+" ",1),(i(!0),l(p,null,u(x.value,((e,n)=>(i(),o(h,{key:n},{default:s((()=>[d(h,{style:{"font-size":"30rpx","margin-top":"10rpx","font-weight":"700"},onClick:n=>(e=>{const n=`${e.serverUrl}/h5Api/nuBaseInfo/list`;fetch(n).then((e=>e.json())).then((e=>{j.value=[...e.result]})),t({key:"serverUrl",data:{url:e.serverUrl}});const o={openId:y.openid,serverUrl:e.serverUrl};console.log("???/",o),fetch("https://www.focusnu.com/nursing-unit/h5Api/nuBizAdvisoryInfo/editNuBizAdvisoryInfo",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)}).then((e=>e.json())).then((e=>{console.log("???",e)})).catch((e=>{console.error("请求失败:",e)}))})(e)},{default:s((()=>[r(c(e.departName),1)])),_:2},1032,["onClick"]),d(m,{style:{width:"60rpx",height:"60rpx"},src:`https://www.focusnu.com/nursing-unit/sys/common/static/${e.picUrl}`},null,8,["src"])])),_:2},1024)))),128)),(i(!0),l(p,null,u(j.value,((e,n)=>(i(),o(h,{key:n,onClick:v},{default:s((()=>[d(h,{style:{"font-size":"30rpx","margin-top":"10rpx","font-weight":"700"}},{default:s((()=>[r(c(e.nuName),1)])),_:2},1024)])),_:2},1024)))),128))])),_:1})}}},[["__scopeId","data-v-0b73e663"]]);export{y as default};

View File

@ -1 +0,0 @@
import{r as a,c as e,w as l,i as s,o as t,a as o,b as c,t as u,h as n,j as d,F as r,g as p,k as i,I as f}from"./index-BwwWwpov.js";import{_,a as m,b as h}from"./old.CKixGO1Z.js";import{o as v}from"./uni-app.es.CdisLe7k.js";import{_ as g}from"./_plugin-vue_export-helper.BCo6x5W8.js";const b=g({__name:"code",setup(g){const b=a(""),j=a(["","","",""]),y=a(0),x=()=>{const a=j.value.join("");4===a.length?console.log("提交验证码:",a):console.log("验证码未输入完整")};return v((a=>{b.value=a.phonenumber})),(a,v)=>{const g=p,k=s,w=f;return t(),e(k,{class:"login-container"},{default:l((()=>[o(k,{class:"title"},{default:l((()=>[o(g,{class:"title-imge",src:_}),o(k,{class:"title-font"},{default:l((()=>[o(k,{class:""},{default:l((()=>[c("您好,")])),_:1}),o(k,{class:""},{default:l((()=>[c("欢迎使用nu护理单元~")])),_:1})])),_:1})])),_:1}),o(g,{class:"photo-imge",src:m}),o(g,{class:"old-imge",src:h}),o(k,{class:"under-container"},{default:l((()=>[o(k,{class:"under-container-title"},{default:l((()=>[o(k,{class:"code-title"},{default:l((()=>[c(" 请输入验证码 ")])),_:1}),o(k,{class:"code-number"},{default:l((()=>[c(" 验证码已发送至"+u(b.value),1)])),_:1})])),_:1}),o(k,{class:"captcha-container"},{default:l((()=>[o(k,{class:"captcha-box"},{default:l((()=>[(t(!0),n(r,null,d(j.value,((a,s)=>(t(),e(k,{key:s,class:"captcha-item"},{default:l((()=>[o(w,{modelValue:j.value[s],"onUpdate:modelValue":a=>j.value[s]=a,class:"captcha-input",type:"number",maxlength:"1",placeholder:s<3?"":" ",onInput:a=>(a=>{j.value[a]&&a<3&&(y.value=a+1);let e=!0;j.value.forEach((a=>{a||(e=!1)})),i((()=>{e&&x()}))})(s),onKeydown:a=>((a,e)=>{"Backspace"!==e.key||j.value[a]||a>0&&(y.value=a-1)})(s,a),focus:y.value===s},null,8,["modelValue","onUpdate:modelValue","placeholder","onInput","onKeydown","focus"])])),_:2},1024)))),128))])),_:1})])),_:1}),o(k,{style:{width:"100%"}},{default:l((()=>[o(k,{class:"right-blue"},{default:l((()=>[c(" 重新发送 ")])),_:1})])),_:1})])),_:1})])),_:1})}}},[["__scopeId","data-v-b906b8c8"]]);export{b as default};

View File

@ -0,0 +1 @@
import{r as a,c as s,w as t,i as e,o as l,a as o,q as n,s as u,F as r,n as c,b as _,t as d,m as i,v as f}from"./index-DVIfOFfO.js";import{_ as b}from"./_plugin-vue_export-helper.BCo6x5W8.js";const m=b({__name:"index",setup(b){const m=["NU","动态","我的"],p=a(0);return(a,b)=>{const v=e;return l(),s(v,{class:"login-container"},{default:t((()=>[o(v,{class:"botton-view"},{default:t((()=>[(l(),n(r,null,u(m,((a,s)=>o(v,{class:"array-father"},{default:t((()=>[o(v,{class:c(p.value===s?"bottom-button-target":"bottom-button"),onClick:a=>p.value=s},{default:t((()=>[o(v,{class:""},{default:t((()=>[_(d(a),1)])),_:2},1024)])),_:2},1032,["class","onClick"]),i(o(v,{class:"blue-heng"},null,512),[[f,p.value===s]])])),_:2},1024))),64))])),_:1})])),_:1})}}},[["__scopeId","data-v-0ae6d08b"]]);export{m as default};

View File

@ -1 +0,0 @@
import{r as a,c as e,w as l,i as s,o as t,a as u,b as c,d as o,v as i,e as r,n,f as d,g as f}from"./index-BwwWwpov.js";import{_,a as m,b as v}from"./old.CKixGO1Z.js";import{u as p}from"./useWeChatAuth.BbPcLRMD.js";import{_ as b}from"./_plugin-vue_export-helper.BCo6x5W8.js";const g=b({__name:"index",setup(b){const g=a(!1),h=a(!1),{login:x}=p();let C=null;const j=()=>{C&&clearTimeout(C),g.value?x():(h.value=!0,C=setTimeout((()=>{h.value=!1}),1e3))},k=()=>{C&&clearTimeout(C),g.value?d({url:"/pages/index/phonebumber"}):(h.value=!0,C=setTimeout((()=>{h.value=!1}),1e3))};return(a,d)=>{const p=f,b=s;return t(),e(b,{class:"login-container"},{default:l((()=>[u(b,{class:"title"},{default:l((()=>[u(p,{class:"title-imge",src:_}),u(b,{class:"title-font"},{default:l((()=>[u(b,{class:""},{default:l((()=>[c("您好,")])),_:1}),u(b,{class:""},{default:l((()=>[c("欢迎使用nu护理单元~")])),_:1})])),_:1})])),_:1}),u(p,{class:"photo-imge",src:m}),u(p,{class:"old-imge",src:v}),u(b,{class:"under-container"},{default:l((()=>[u(b,{class:"under-container-title"},{default:l((()=>[o(r("div",{class:"bubble"}," 请勾选同意该协议 ",512),[[i,h.value]]),u(b,{class:n(g.value?"radio-circle-target":"radio-circle"),onClick:d[0]||(d[0]=a=>g.value=!g.value)},null,8,["class"]),u(b,{class:"radio-circle-font",onClick:d[1]||(d[1]=a=>g.value=!g.value)},{default:l((()=>[c("登录代表您已同意")])),_:1}),u(b,{class:"radio-circle-blue"},{default:l((()=>[c(" 《法律条款与隐私政策》 ")])),_:1})])),_:1}),u(b,{class:"button-blue",onClick:j},{default:l((()=>[c(" 一键登录 ")])),_:1}),u(b,{class:"button-white",onClick:k},{default:l((()=>[c(" 手机登录/注册 ")])),_:1})])),_:1})])),_:1})}}},[["__scopeId","data-v-00b697a2"]]);export{g as default};

View File

@ -1 +0,0 @@
import{r as a,c as e,w as s,i as t,o as l,a as u,b as n,d as o,v as r,f as c,g as d,I as i}from"./index-BwwWwpov.js";import{_ as p,a as _,b as f}from"./old.CKixGO1Z.js";import{_ as m}from"./_plugin-vue_export-helper.BCo6x5W8.js";const v=m({__name:"phonebumber",setup(m){const v=()=>{c({url:`/pages/index/code?phonenumber=${g.value}`})};const g=a(""),b=a(!1),h=a=>{var e;console.log("????",a.detail.value),e=a.detail.value,/^\d{11}$/.test(e.toString())?(g.value=a.detail.value,b.value=!0):b.value=!1};return(a,c)=>{const m=d,g=t,x=i;return l(),e(g,{class:"login-container"},{default:s((()=>[u(g,{class:"title"},{default:s((()=>[u(m,{class:"title-imge",src:p}),u(g,{class:"title-font"},{default:s((()=>[u(g,{class:""},{default:s((()=>[n("您好,")])),_:1}),u(g,{class:""},{default:s((()=>[n("欢迎使用nu护理单元~")])),_:1})])),_:1})])),_:1}),u(m,{class:"photo-imge",src:_}),u(m,{class:"old-imge",src:f}),u(g,{class:"under-container"},{default:s((()=>[u(g,{class:"under-container-title"},{default:s((()=>[u(g,{class:"under-container-input"},{default:s((()=>[u(g,{class:"input-left"},{default:s((()=>[n("+86")])),_:1}),u(x,{type:"number",style:{width:"600rpx"},maxlength:"11",placeholder:"请输入手机号",onInput:h})])),_:1})])),_:1}),o(u(g,{class:"button-blue",onClick:v},{default:s((()=>[n(" 获得验证码 ")])),_:1},512),[[r,b.value]]),o(u(g,{class:"button-gray"},{default:s((()=>[n(" 获得验证码 ")])),_:1},512),[[r,!b.value]])])),_:1})])),_:1})}}},[["__scopeId","data-v-506393aa"]]);export{v as default};

View File

@ -0,0 +1 @@
import{y as e,r as n,c as o,w as s,z as t,i as a,o as c,b as i,t as r,q as l,s as p,F as u,a as d,f as h,g as f}from"./index-DVIfOFfO.js";import{o as m}from"./uni-app.es.DNqITeUz.js";import{u as g}from"./useWeChatAuth.s7uh5--2.js";import{_ as w}from"./_plugin-vue_export-helper.BCo6x5W8.js";const y=w({__name:"callback",setup(w){g();const y=e({name:"",openid:"",accessToken:""}),v=()=>{console.log("???"),h({url:"/pages/pay/index"})},k=n(""),I=()=>{const e=`https://www.focusnu.com/nursing-unit/h5Api/nuBizAdvisoryInfo/queryWeixinInfo?openId=${encodeURIComponent(y.openid)}&wechatName=${encodeURIComponent(y.name)}`;fetch(e).then((e=>e.json())).then((e=>{console.log("个人信息打印",e);const n=`${e.result.serverUrl}/weiXinPay/getUserInfo`,o={openid:y.openid,access_token:y.accessToken};console.log("???/",o),fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)}).then((e=>e.json())).then((e=>{k.value=e,console.log("",e)})).catch((e=>{console.error("请求失败:",e)})),j()}))},_=n([]),j=()=>{fetch("https://www.focusnu.com/nursing-unit/sys/sysDepart/queryInstitutionsList").then((e=>e.json())).then((e=>{_.value=[...e],console.log("机构打印",_.value)}))},x=n([]);return m((()=>{var e;const n=null==(e=window.location.href.split("?")[1])?void 0:e.split("#")[0],o={};n&&n.split("&").forEach((e=>{const[n,s]=e.split("=");o[n]=decodeURIComponent(s)})),console.log("解析到的 query 参数:",o),o.code&&(e=>{const n=`https://www.focusnu.com/nursing-unit/weixin/wechat/callback?code=${encodeURIComponent(e)}`;fetch(n).then((e=>e.json())).then((e=>{console.log("✅ 获取用户信息成功:",e),y.name=e.data.nickname,y.openid=e.data.openid,y.accessToken=e.accessToken,t({key:"openid",data:{openid:e.data.openid,accessToken:e.accessToken}}),I()})).catch((e=>{console.error("❌ 获取用户信息失败:",e)}))})(o.code)})),(e,n)=>{const h=a,m=f;return c(),o(h,{class:"callback-container"},{default:s((()=>[i(" 回调成功"+r(y.name)+r(y.openid)+" ",1),(c(!0),l(u,null,p(_.value,((e,n)=>(c(),o(h,{key:n},{default:s((()=>[d(h,{style:{"font-size":"30rpx","margin-top":"10rpx","font-weight":"700"},onClick:n=>(e=>{const n=`${e.serverUrl}/h5Api/nuBaseInfo/list`;fetch(n).then((e=>e.json())).then((e=>{x.value=[...e.result]})),t({key:"serverUrl",data:{url:e.serverUrl}});const o={openId:y.openid,serverUrl:e.serverUrl};console.log("???/",o),fetch("https://www.focusnu.com/nursing-unit/h5Api/nuBizAdvisoryInfo/editNuBizAdvisoryInfo",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)}).then((e=>e.json())).then((e=>{console.log("???",e)})).catch((e=>{console.error("请求失败:",e)}))})(e)},{default:s((()=>[i(r(e.departName),1)])),_:2},1032,["onClick"]),d(m,{style:{width:"60rpx",height:"60rpx"},src:`https://www.focusnu.com/nursing-unit/sys/common/static/${e.picUrl}`},null,8,["src"])])),_:2},1024)))),128)),(c(!0),l(u,null,p(x.value,((e,n)=>(c(),o(h,{key:n,onClick:v},{default:s((()=>[d(h,{style:{"font-size":"30rpx","margin-top":"10rpx","font-weight":"700"}},{default:s((()=>[i(r(e.nuName),1)])),_:2},1024)])),_:2},1024)))),128))])),_:1})}}},[["__scopeId","data-v-4644647c"]]);export{y as default};

View File

@ -0,0 +1 @@
import{r as e,p as a,c as l,w as s,i as t,o as u,a as c,b as o,t as n,q as d,s as r,F as i,m as f,v,d as _,e as p,T as m,g as h,u as g,I as w,x}from"./index-DVIfOFfO.js";import{_ as y,a as b,b as k}from"./old.CKixGO1Z.js";import{o as I}from"./uni-app.es.DNqITeUz.js";import{_ as j}from"./_plugin-vue_export-helper.BCo6x5W8.js";const V=j({__name:"code",setup(j){const V=e(""),C=e(["","","",""]),K=e(0),S=e(!1),U=e("rgba(0, 0, 0, 0.5)");function q(){S.value=!1}const B=()=>{const e=C.value.join("");4===e.length?(console.log("提交验证码:",e),x({url:"/pages/index/index"})):console.log("验证码未输入完整")},D=e(60);let E=null;return a((()=>{E&&clearInterval(E)})),I((e=>{V.value=e.phonenumber,(()=>{const e=`https://www.focusnu.com/nursing-unit/sys/randomImage/${Date.now()}`;fetch(e).then((e=>e.json())).then((e=>{console.log("code测试",e)}))})(),D.value=60,E=setInterval((()=>{D.value>0?D.value--:(clearInterval(E),E=null)}),1e3)})),(e,a)=>{const x=h,I=t,j=w;return u(),l(I,{class:"login-container"},{default:s((()=>[c(I,{class:"title"},{default:s((()=>[c(x,{class:"title-imge",src:y}),c(I,{class:"title-font"},{default:s((()=>[c(I,{class:""},{default:s((()=>[o("您好,")])),_:1}),c(I,{class:""},{default:s((()=>[o("欢迎使用护理单元~")])),_:1})])),_:1})])),_:1}),c(x,{class:"photo-imge",src:b}),c(x,{class:"old-imge",src:k}),c(I,{class:"under-container"},{default:s((()=>[c(I,{class:"under-container-title"},{default:s((()=>[c(I,{class:"code-title"},{default:s((()=>[o(" 请输入验证码 ")])),_:1}),c(I,{class:"code-number"},{default:s((()=>[o(" 验证码已发送至"+n(V.value),1)])),_:1})])),_:1}),c(I,{class:"captcha-container"},{default:s((()=>[c(I,{class:"captcha-box"},{default:s((()=>[(u(!0),d(i,null,r(C.value,((e,a)=>(u(),l(I,{key:a,class:"captcha-item"},{default:s((()=>[c(j,{modelValue:C.value[a],"onUpdate:modelValue":e=>C.value[a]=e,class:"captcha-input",type:"number",maxlength:"1",placeholder:a<3?"":" ",onInput:e=>(e=>{C.value[e]&&e<3&&(K.value=e+1);let a=!0;C.value.forEach((e=>{e||(a=!1)})),g((()=>{a&&B()}))})(a),onKeydown:e=>((e,a)=>{"Backspace"!==a.key||C.value[e]||e>0&&(K.value=e-1)})(a,e),focus:K.value===a},null,8,["modelValue","onUpdate:modelValue","placeholder","onInput","onKeydown","focus"])])),_:2},1024)))),128))])),_:1})])),_:1}),c(I,{class:"under-view"},{default:s((()=>[f(c(I,{class:"right-blue"},{default:s((()=>[o(" 重新发送 ")])),_:1},512),[[v,!D.value]]),f(c(I,{class:"right-white"},{default:s((()=>[o(n(D.value)+"S后重新发送 ",1)])),_:1},512),[[v,D.value]]),c(I,{class:"right-black",onClick:a[0]||(a[0]=e=>S.value=!0)},{default:s((()=>[o(" 收不到验证码 ")])),_:1})])),_:1})])),_:1}),c(m,{name:"fade"},{default:s((()=>[S.value?(u(),l(I,{key:0,class:"overlay",onClick:q,style:_({backgroundColor:U.value})},null,8,["style"])):p("",!0)])),_:1}),c(m,{name:"slide-up"},{default:s((()=>[S.value?(u(),l(I,{key:0,class:"modal"},{default:s((()=>[c(I,{class:"modal-title"},{default:s((()=>[o("收不到验证码")])),_:1}),c(I,{class:"model-p"},{default:s((()=>[c(I,{class:"text-view",style:{"font-weight":"600"}},{default:s((()=>[o("手机号可正常使用:")])),_:1}),c(I,{class:"text-view"},{default:s((()=>[o("1 是否输错手机号")])),_:1}),c(I,{class:"text-view"},{default:s((()=>[o("2 手机是否设置短信拦截/欠费/信号不好")])),_:1}),c(I,{class:"text-view"},{default:s((()=>[o("3 手机内存是否满了")])),_:1}),c(I,{class:"text-view"},{default:s((()=>[o("4 手机卡是否为物联卡而非SIM卡")])),_:1})])),_:1})])),_:1})):p("",!0)])),_:1})])),_:1})}}},[["__scopeId","data-v-edc97756"]]);export{V as default};

View File

@ -0,0 +1 @@
import{r as l,c as a,w as e,i as s,o as t,a as o,b as c,n as u,d as n,e as d,T as r,f as i,g as f,h as _}from"./index-DVIfOFfO.js";import{_ as m,a as p,b as v}from"./old.CKixGO1Z.js";import{u as g}from"./useWeChatAuth.s7uh5--2.js";import{_ as b}from"./_plugin-vue_export-helper.BCo6x5W8.js";const k=b({__name:"index",setup(b){const k=l(!1),C=l(!1);g();const h=l("rgba(0, 0, 0, 0.5)");function y(){C.value=!1}const x=()=>{k.value?i({url:"/pages/login/phonebumber"}):C.value=!0},j=()=>{console.log("????"),i({url:"/pages/login/protocol"})};return(l,i)=>{const g=f,b=s,w=_;return t(),a(b,{class:"login-container"},{default:e((()=>[o(b,{class:"title"},{default:e((()=>[o(g,{class:"title-imge",src:m}),o(b,{class:"title-font"},{default:e((()=>[o(b,{class:""},{default:e((()=>[c("您好,")])),_:1}),o(b,{class:""},{default:e((()=>[c("欢迎使用护理单元~")])),_:1})])),_:1})])),_:1}),o(g,{class:"photo-imge",src:p}),o(g,{class:"old-imge",src:v}),o(b,{class:"under-container"},{default:e((()=>[o(b,{class:"under-container-title"},{default:e((()=>[o(b,{class:u(k.value?"radio-circle-target":"radio-circle"),onClick:i[0]||(i[0]=l=>k.value=!k.value)},null,8,["class"]),o(b,{style:{"margin-left":"17rpx"},class:"radio-circle-font",onClick:i[1]||(i[1]=l=>k.value=!k.value)},{default:e((()=>[c("同意")])),_:1}),o(b,{class:"radio-circle-blue",onClick:j},{default:e((()=>[c(" 《护理单元使用条款》 ")])),_:1}),o(b,{class:"radio-circle-font",onClick:i[2]||(i[2]=l=>k.value=!k.value)},{default:e((()=>[c("并授权NU获取本机号码")])),_:1})])),_:1}),o(b,{class:"button-blue",onClick:x},{default:e((()=>[c(" 一键登录 ")])),_:1})])),_:1}),o(r,{name:"fade"},{default:e((()=>[C.value?(t(),a(b,{key:0,class:"overlay",onClick:y,style:n({backgroundColor:h.value})},null,8,["style"])):d("",!0)])),_:1}),o(r,{name:"slide-up"},{default:e((()=>[C.value?(t(),a(b,{key:0,class:"modal"},{default:e((()=>[o(b,{class:"modal-title"},{default:e((()=>[c("服务协议及隐私保护")])),_:1}),o(b,{class:"model-p"},{default:e((()=>[o(w,null,{default:e((()=>[c("  为了更好地保障您的合法权益,请阅读并同意以下协议")])),_:1}),o(w,{style:{color:"rgb(0,141,255)"},onClick:j},{default:e((()=>[c("《护理单元使用条款》")])),_:1}),o(w,null,{default:e((()=>[c(",同意后将自动登录。")])),_:1})])),_:1}),o(b,{class:"model-down"},{default:e((()=>[o(b,{class:"model-white",onClick:y},{default:e((()=>[c(" 不同意 ")])),_:1}),o(b,{class:"model-blue",onClick:i[3]||(i[3]=l=>{y(),k.value=!0})},{default:e((()=>[c(" 同意 ")])),_:1})])),_:1})])),_:1})):d("",!0)])),_:1})])),_:1})}}},[["__scopeId","data-v-8017333f"]]);export{k as default};

View File

@ -0,0 +1 @@
import{r as e,j as a,o as t,c as l,w as n,a as s,d as o,k as u,l as r,g as i,i as c,b as v,m as d,v as h,e as p,f as m,I as f}from"./index-DVIfOFfO.js";import{_ as g,a as w,b as _}from"./old.CKixGO1Z.js";import{o as x}from"./uni-app.es.DNqITeUz.js";import{_ as b}from"./_plugin-vue_export-helper.BCo6x5W8.js";const y="/wechat/thd/assets/1-BjS2h1iy.png",$=b({__name:"huakuai",setup(v){const d=100,h=e(null),p=e(null),m=e(400),f=e(600),g=e(0),w=e(0),_=e(0),b=e(!1),$=e(0);const k=`path('${L=d,`\n M20 0\n h${L/3-20}\n a20 20 0 0 1 0 40\n h${L/3}\n a20 20 0 0 0 0 -40\n h${L/3-20}\n v${L/3-20}\n a20 20 0 0 1 -40 0\n v${L/3}\n a20 20 0 0 0 40 0\n v${L/3-20}\n h-${L/3-20}\n a20 20 0 0 1 0 -40\n h-${L/3}\n a20 20 0 0 0 0 40\n h-${L/3-20}\n z\n `}')`;var L;function E(){r().in(h.value).select(".bg-image").boundingClientRect((e=>{e?(console.log("图片宽高:",e.width,e.height),m.value=2*e.width,f.value=2*e.height,g.value=Math.random()*(m.value-200)+d,w.value=f.value/2,_.value=0,console.log("originX:",g.value,"originY:",w.value)):console.error("无法获取.bg-image尺寸")})).exec()}function C(e){b.value=!0,$.value=e.touches?2*e.touches[0].clientX:2*e.clientX,window.addEventListener("mousemove",M),window.addEventListener("mouseup",j),window.addEventListener("touchmove",M),window.addEventListener("touchend",j)}function M(e){if(!b.value)return;let a=(e.touches?2*e.touches[0].clientX:2*e.clientX)-$.value;a=Math.max(0,Math.min(a,m.value-d)),_.value=a}function j(){b.value=!1,window.removeEventListener("mousemove",M),window.removeEventListener("mouseup",j),window.removeEventListener("touchmove",M),window.removeEventListener("touchend",j),Math.abs(_.value-g.value)<20?console.log("验证成功"):_.value=0}const I=e("");return x((()=>{let e=Math.floor(4*Math.random());const a=["/wechat/thd/assets/0-DC0meffC.png",y,y,y];I.value=a[e]})),a((()=>{window.removeEventListener("mousemove",M),window.removeEventListener("mouseup",j),window.removeEventListener("touchmove",M),window.removeEventListener("touchend",j)})),(e,a)=>{const r=i,v=c;return t(),l(v,{class:"captcha-container",ref_key:"container",ref:h},{default:n((()=>[s(v,{class:"captcha-image",style:{position:"relative",width:"100%",height:"400rpx",overflow:"hidden"}},{default:n((()=>[s(r,{src:I.value,class:"bg-image",mode:"widthFix",onLoad:E},null,8,["src"]),s(v,{class:"overlay",style:o({width:m.value+"rpx",height:f.value+"rpx"})},{default:n((()=>[s(v,{class:"hole",style:o({top:w.value+"rpx",left:g.value+"rpx",width:"100rpx",height:"100rpx",clipPath:k,transform:"translate(-50%, -50%)",backgroundColor:"rgba(0,0,0,0.3)"})},null,8,["style"]),s(v,{class:"piece",style:o({top:w.value+"rpx",left:_.value+"rpx",width:"100rpx",height:"100rpx",backgroundImage:`url(${I.value})`,backgroundSize:m.value+"rpx "+f.value+"rpx",backgroundPosition:`-${g.value}rpx -${w.value}rpx`,clipPath:k,transform:"translate(-50%, -50%)"})},null,8,["style"])])),_:1},8,["style"])])),_:1}),s(v,{class:"slider-bar"},{default:n((()=>[s(v,{class:"slider-button",ref_key:"btn",ref:p,onTouchstart:u(C,["prevent"]),onMousedown:u(C,["prevent"]),style:o({left:_.value+"rpx",maxWidth:m.value-d+"rpx"})},null,8,["style"])])),_:1})])),_:1},512)}}},[["__scopeId","data-v-9fb232f4"]]),k=b({__name:"phonebumber",setup(a){const o=e(!1),r=()=>{m({url:`/pages/login/code?phonenumber=${x.value}`})};const x=e(""),b=e(!1),y=e=>{var a;console.log("????",e.detail.value),a=e.detail.value,/^\d{11}$/.test(a.toString())?(x.value=e.detail.value,b.value=!0):b.value=!1};return(e,a)=>{const m=i,x=c,k=f;return t(),l(x,{class:"login-container"},{default:n((()=>[s(x,{class:"title"},{default:n((()=>[s(m,{class:"title-imge",src:g}),s(x,{class:"title-font"},{default:n((()=>[s(x,{class:""},{default:n((()=>[v("您好,")])),_:1}),s(x,{class:""},{default:n((()=>[v("欢迎使用护理单元~")])),_:1})])),_:1})])),_:1}),s(m,{class:"photo-imge",src:w}),s(m,{class:"old-imge",src:_}),s(x,{class:"under-container"},{default:n((()=>[s(x,{class:"under-container-title"},{default:n((()=>[s(x,{class:"under-container-input"},{default:n((()=>[s(x,{class:"input-left"},{default:n((()=>[v("+86")])),_:1}),s(k,{type:"number",style:{width:"600rpx","font-size":"33rpx"},maxlength:"11",placeholder:"请输入绑定手机号",onInput:y})])),_:1})])),_:1}),s(x,{class:"button-blue",onClick:a[0]||(a[0]=e=>o.value=!0)},{default:n((()=>[v(" 滑块校验 ")])),_:1}),d(s(x,{class:"button-blue",onClick:r},{default:n((()=>[v(" 获得验证码 ")])),_:1},512),[[h,b.value]]),d(s(x,{class:"button-gray"},{default:n((()=>[v(" 获得验证码 ")])),_:1},512),[[h,!b.value]])])),_:1}),o.value?(t(),l(x,{key:0,class:"bg-mask",onClick:a[2]||(a[2]=e=>o.value=!1)},{default:n((()=>[s($,{onClick:a[1]||(a[1]=u((()=>{}),["stop"]))})])),_:1})):p("",!0)])),_:1})}}},[["__scopeId","data-v-a00813dc"]]);export{k as default};

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
import{r as t,u as e,h as n,e as i,o as r}from"./index-BwwWwpov.js";import{_ as a}from"./_plugin-vue_export-helper.BCo6x5W8.js";
import{r as t,E as e,q as n,D as i,o as r}from"./index-DVIfOFfO.js";import{_ as a}from"./_plugin-vue_export-helper.BCo6x5W8.js";
/**
* @license
* Copyright 2010-2025 Three.js Authors

View File

@ -1 +1 @@
import{r as e,h as a,e as n,a as t,w as o,t as s,x as l,y as i,I as d,z as p,o as u,b as c}from"./index-BwwWwpov.js";import{_ as r}from"./_plugin-vue_export-helper.BCo6x5W8.js";const v=r({__name:"index",setup(r){const v=e(""),g=e(!1),y=e("");e({timeStamp:"1747983532",package:"prepay_id=wx23145806465232c82870c59d2d41cf0000",paySign:"0pUqj2JZ77BYchyJuthQyP4yRfqhjvwag78Q4IMnIyQ3/OQP6OyJreZfmj0GFSEMrRsKAHIdBBM7tVnot0aaRhI5qwSOWpzyvJCkYa4eqPgqlV4XYVMqE3zeB/Cx4C9bv4poMXnaGlfFPdkhMYbUcdtsw4gBXXhqUx//9x7eu9cOERRzLquM8Z8rewRpar/kkVKSCV6h8pX19kRj+KEkK5LZB8IUIG995g1lsVFOqdO4mVFBJ1wZCkwJczgVI+jdNGgnR2lpdjwIpJFm+5Hm0y9SwR0UFvgkm95NrmY+Sruty/Zf8ekQwF4+atubW8CE6i8wm2zZpMEnnfS4WFwAwg==",appId:"wx8fc3e4305d2fbf0b",signType:"RSA",nonceStr:"DxpF2uIMl0VM7vPOG7pWnPHk2Dvi3V7K"});const m=()=>{const e=`${w.value}/weiXinPay/native`,a={title:"测试",openId:S.value,amountPrice:v.value};console.log("???/",a),fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}).then((e=>e.json())).then((e=>{!function(e){const a=()=>{window.WeixinJSBridge.invoke("getBrandWCPayRequest",{appId:e.appId,timeStamp:e.timeStamp,nonceStr:e.nonceStr,package:e.package,signType:e.signType,paySign:e.paySign},(function(e){g.value=!1,"get_brand_wcpay_request:ok"===e.err_msg?y.value="支付成功":y.value="支付失败或取消"}))};void 0===window.WeixinJSBridge?document.addEventListener("WeixinJSBridgeReady",a,!1):a()}(e)})).catch((e=>{console.error("请求失败:",e)}))},w=e(""),S=e("");function f(){v.value&&(g.value=!0,y.value="拉起微信支付...",i({key:"serverUrl",success:function(e){console.log("读取缓存:",e.data.url),w.value=e.data.url}}),i({key:"openid",success:function(e){console.log("读取缓存:",e.data.openid),S.value=e.data.openid}}),m())}return(e,i)=>{const r=d,m=p;return u(),a("div",{class:"container"},[n("div",{class:"input-group"},[t(r,{type:"number",modelValue:v.value,"onUpdate:modelValue":i[0]||(i[0]=e=>v.value=e),placeholder:"请输入金额",class:"amount-input"},null,8,["modelValue"]),t(m,{onClick:f,disabled:g.value||!v.value,class:"pay-btn"},{default:o((()=>[c(" 支付 ")])),_:1},8,["disabled"])]),y.value?(u(),a("div",{key:0,class:"status-group"},[n("p",null,s(y.value),1)])):l("",!0)])}}},[["__scopeId","data-v-8d52c10e"]]);export{v as default};
import{r as e,q as a,D as n,a as t,w as o,t as s,e as l,G as i,I as d,H as p,o as u,b as c}from"./index-DVIfOFfO.js";import{_ as r}from"./_plugin-vue_export-helper.BCo6x5W8.js";const v=r({__name:"index",setup(r){const v=e(""),g=e(!1),m=e("");e({timeStamp:"1747983532",package:"prepay_id=wx23145806465232c82870c59d2d41cf0000",paySign:"0pUqj2JZ77BYchyJuthQyP4yRfqhjvwag78Q4IMnIyQ3/OQP6OyJreZfmj0GFSEMrRsKAHIdBBM7tVnot0aaRhI5qwSOWpzyvJCkYa4eqPgqlV4XYVMqE3zeB/Cx4C9bv4poMXnaGlfFPdkhMYbUcdtsw4gBXXhqUx//9x7eu9cOERRzLquM8Z8rewRpar/kkVKSCV6h8pX19kRj+KEkK5LZB8IUIG995g1lsVFOqdO4mVFBJ1wZCkwJczgVI+jdNGgnR2lpdjwIpJFm+5Hm0y9SwR0UFvgkm95NrmY+Sruty/Zf8ekQwF4+atubW8CE6i8wm2zZpMEnnfS4WFwAwg==",appId:"wx8fc3e4305d2fbf0b",signType:"RSA",nonceStr:"DxpF2uIMl0VM7vPOG7pWnPHk2Dvi3V7K"});const y=()=>{const e=`${w.value}/weiXinPay/native`,a={title:"测试",openId:S.value,amountPrice:v.value};console.log("???/",a),fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}).then((e=>e.json())).then((e=>{!function(e){const a=()=>{window.WeixinJSBridge.invoke("getBrandWCPayRequest",{appId:e.appId,timeStamp:e.timeStamp,nonceStr:e.nonceStr,package:e.package,signType:e.signType,paySign:e.paySign},(function(e){g.value=!1,"get_brand_wcpay_request:ok"===e.err_msg?m.value="支付成功":m.value="支付失败或取消"}))};void 0===window.WeixinJSBridge?document.addEventListener("WeixinJSBridgeReady",a,!1):a()}(e)})).catch((e=>{console.error("请求失败:",e)}))},w=e(""),S=e("");function f(){v.value&&(g.value=!0,m.value="拉起微信支付...",i({key:"serverUrl",success:function(e){console.log("读取缓存:",e.data.url),w.value=e.data.url}}),i({key:"openid",success:function(e){console.log("读取缓存:",e.data.openid),S.value=e.data.openid}}),y())}return(e,i)=>{const r=d,y=p;return u(),a("div",{class:"container"},[n("div",{class:"input-group"},[t(r,{type:"number",modelValue:v.value,"onUpdate:modelValue":i[0]||(i[0]=e=>v.value=e),placeholder:"请输入金额",class:"amount-input"},null,8,["modelValue"]),t(y,{onClick:f,disabled:g.value||!v.value,class:"pay-btn"},{default:o((()=>[c(" 支付 ")])),_:1},8,["disabled"])]),m.value?(u(),a("div",{key:0,class:"status-group"},[n("p",null,s(m.value),1)])):l("",!0)])}}},[["__scopeId","data-v-8d52c10e"]]);export{v as default};

View File

@ -0,0 +1 @@
.captcha-container[data-v-9fb232f4]{-webkit-user-select:none;user-select:none;background-color:#fff;width:18.75rem;height:18.75rem;margin:0 auto;z-index:999;border-radius:.9375rem;overflow:hidden}.captcha-image[data-v-9fb232f4]{position:relative;overflow:hidden}.bg-image[data-v-9fb232f4]{position:relative;z-index:1;display:block;width:100%;height:100%}.overlay[data-v-9fb232f4]{position:absolute;top:0;left:0;width:100%;height:100%;z-index:100;pointer-events:none}.hole[data-v-9fb232f4],.piece[data-v-9fb232f4]{position:absolute;z-index:101;border-radius:.15625rem;box-shadow:0 0 .1875rem rgba(0,0,0,.4)}.hole[data-v-9fb232f4]{background-color:rgba(0,0,0,.3)}.piece[data-v-9fb232f4]{background-repeat:no-repeat;background-size:cover;cursor:grab}.slider-bar[data-v-9fb232f4]{position:relative;height:5rem;margin-top:0;background:#eee;border-radius:2.5rem;width:18.75rem}.slider-button[data-v-9fb232f4]{position:absolute;top:.625rem;width:3.75rem;height:3.75rem;background:#fff;border-radius:1.875rem;box-shadow:0 0 .625rem rgba(0,0,0,.2);transition:background .3s;-webkit-user-select:none;user-select:none}.slider-button.success[data-v-9fb232f4]{background:#4caf50}.login-container[data-v-a00813dc]{display:flex;flex-direction:column;min-height:100vh;width:100%;background-color:#eff1fc;position:relative}.login-container .title[data-v-a00813dc]{margin-top:2.1875rem;align-items:center}.login-container .title .title-imge[data-v-a00813dc]{width:3.125rem;height:3.28125rem;margin-left:3.125rem}.login-container .title .title-font[data-v-a00813dc]{font-size:1.09375rem;font-weight:600;margin-left:3.28125rem;margin-top:.3125rem}.login-container .photo-imge[data-v-a00813dc]{position:absolute;top:3.75rem;left:0;width:100%;height:34.375rem}.login-container .old-imge[data-v-a00813dc]{position:absolute;right:.9375rem;top:12.5rem;width:12.5rem;height:12.5rem}.login-container .under-container[data-v-a00813dc]{position:fixed;left:0;bottom:0;width:100%;height:45vh;background-color:#fff;border-top-left-radius:1.5625rem;border-top-right-radius:1.5625rem;box-shadow:.3125rem .3125rem .625rem rgba(0,0,0,.1);display:flex;flex-direction:column;align-items:center}.login-container .under-container .radio-circle[data-v-a00813dc],.login-container .under-container .radio-circle-target[data-v-a00813dc]{position:relative;margin-top:.0625rem;width:1.25rem;height:1.25rem;border-radius:50%;border:.0625rem solid #C0C5D9;background-color:transparent}.login-container .under-container .radio-circle-target[data-v-a00813dc]:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:.9375rem;height:.9375rem;background-color:#00c9ff;border-radius:50%}.under-container-title[data-v-a00813dc]{display:flex;margin-top:1.875rem;margin-bottom:1.875rem;align-items:center;justify-content:center;font-size:.78125rem;font-weight:500;width:100%}.under-container-title .radio-circle-blue[data-v-a00813dc]{color:#0083ff;margin-top:.09375rem}.under-container-title .radio-circle-font[data-v-a00813dc]{color:#5a607f;margin-left:.5625rem;margin-top:.09375rem}.under-container-title .under-container-input[data-v-a00813dc]{width:80%;display:flex;align-items:center;height:3.125rem;border-radius:1.34375rem;color:#5a607f;font-size:1.03125rem;border:.0625rem solid #C0C5D9}.under-container-title .under-container-input .input-left[data-v-a00813dc]{margin:0 .9375rem}.button-gray[data-v-a00813dc]{width:80%;display:flex;justify-content:center;align-items:center;height:3.125rem;border-radius:1.34375rem;background-color:#bcbcbc;color:#fff;font-size:1.03125rem;margin-bottom:.9375rem}.button-white[data-v-a00813dc]{width:80%;display:flex;justify-content:center;align-items:center;height:3.125rem;border-radius:1.34375rem;color:#5a607f;font-size:1.03125rem;margin-bottom:.9375rem;border:.0625rem solid #C0C5D9}.button-blue[data-v-a00813dc]{width:80%;display:flex;justify-content:center;align-items:center;height:3.125rem;border-radius:1.34375rem;background:linear-gradient(to right,#00c9ff,#0076ff);color:#fff;font-size:1.03125rem;margin-bottom:.9375rem}.bubble[data-v-a00813dc]{transition:opacity 1s ease-out;position:absolute;left:.78125rem;top:-.15625rem;background-color:#000;color:#fff;padding:.3125rem;border-radius:.3125rem;font-size:.71875rem;box-shadow:.0625rem .0625rem .15625rem rgba(0,0,0,.2);pointer-events:none;opacity:1}.bubble[data-v-a00813dc]:after{transition:opacity 1s ease-out;content:"";position:absolute;left:50%;bottom:-.25rem;border-left:.3125rem solid transparent;border-right:.3125rem solid transparent;border-top:.3125rem solid black;transform:translate(-50%)}.bubble.hidden[data-v-a00813dc]{opacity:0}.bg-mask[data-v-a00813dc]{position:fixed;top:0;left:0;width:100vw;height:100vh;background:rgba(0,0,0,.3);-webkit-backdrop-filter:blur(.15625rem);backdrop-filter:blur(.15625rem);z-index:998;display:flex;justify-content:center;align-items:center}

View File

@ -1 +0,0 @@
.login-container[data-v-506393aa]{display:flex;flex-direction:column;align-items:center;height:100vh;width:100%;background-color:#eff1fc;position:relative}.login-container .title[data-v-506393aa]{display:flex;margin-top:3.75rem;align-items:center}.login-container .title .title-imge[data-v-506393aa]{width:3.4375rem;height:3.4375rem;margin-right:.9375rem}.login-container .title .title-font[data-v-506393aa]{font-size:1.09375rem;font-weight:500}.login-container .photo-imge[data-v-506393aa]{position:absolute;top:3.75rem;left:0;width:100%;height:34.375rem}.login-container .old-imge[data-v-506393aa]{position:absolute;left:50%;transform:translate(-50%,-50%);top:17.1875rem;width:12.5rem;height:12.5rem}.login-container .under-container[data-v-506393aa]{position:absolute;left:0;bottom:0;width:100%;height:21.25rem;background-color:#fff;border-top-left-radius:1.5625rem;border-top-right-radius:1.5625rem;box-shadow:.3125rem .3125rem .625rem rgba(0,0,0,.1);display:flex;flex-direction:column;align-items:center}.login-container .under-container .radio-circle[data-v-506393aa],.login-container .under-container .radio-circle-target[data-v-506393aa]{position:relative;margin-top:.0625rem;width:1.25rem;height:1.25rem;border-radius:50%;border:.0625rem solid #C0C5D9;background-color:transparent}.login-container .under-container .radio-circle-target[data-v-506393aa]:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:.9375rem;height:.9375rem;background-color:#00c9ff;border-radius:50%}.under-container-title[data-v-506393aa]{display:flex;margin-top:1.875rem;margin-bottom:.9375rem;align-items:center;justify-content:center;font-size:.78125rem;font-weight:500;width:100%}.under-container-title .radio-circle-blue[data-v-506393aa]{color:#0083ff;margin-top:.09375rem}.under-container-title .radio-circle-font[data-v-506393aa]{color:#5a607f;margin-left:.5625rem;margin-top:.09375rem}.under-container-title .under-container-input[data-v-506393aa]{width:80%;display:flex;align-items:center;height:3.125rem;border-radius:1.34375rem;color:#5a607f;font-size:1.03125rem;border:.0625rem solid #C0C5D9}.under-container-title .under-container-input .input-left[data-v-506393aa]{margin:0 .9375rem}.button-gray[data-v-506393aa]{width:80%;display:flex;justify-content:center;align-items:center;height:3.125rem;border-radius:1.34375rem;background-color:#bcbcbc;color:#fff;font-size:1.03125rem;margin-bottom:.9375rem}.button-white[data-v-506393aa]{width:80%;display:flex;justify-content:center;align-items:center;height:3.125rem;border-radius:1.34375rem;color:#5a607f;font-size:1.03125rem;margin-bottom:.9375rem;border:.0625rem solid #C0C5D9}.button-blue[data-v-506393aa]{width:80%;display:flex;justify-content:center;align-items:center;height:3.125rem;border-radius:1.34375rem;background:linear-gradient(to right,#00c9ff,#0076ff);color:#fff;font-size:1.03125rem;margin-bottom:.9375rem}.bubble[data-v-506393aa]{transition:opacity 1s ease-out;position:absolute;left:.78125rem;top:-.15625rem;background-color:#000;color:#fff;padding:.3125rem;border-radius:.3125rem;font-size:.71875rem;box-shadow:.0625rem .0625rem .15625rem rgba(0,0,0,.2);pointer-events:none;opacity:1}.bubble[data-v-506393aa]:after{transition:opacity 1s ease-out;content:"";position:absolute;left:50%;bottom:-.25rem;border-left:.3125rem solid transparent;border-right:.3125rem solid transparent;border-top:.3125rem solid black;transform:translate(-50%)}.bubble.hidden[data-v-506393aa]{opacity:0}

View File

@ -0,0 +1 @@
.font-father[data-v-c417cc79]{width:100%;padding:0 1.5625rem;display:flex;justify-content:center;align-items:center;flex-direction:column}.font-father .font-title[data-v-c417cc79]{font-size:1.09375rem;font-weight:700;margin:.625rem 0}

View File

@ -1 +0,0 @@
import{m as s,p as a,q as o,O as m}from"./index-BwwWwpov.js";const p=(m=>(p,r=o())=>{!s&&a(m,p,r)})(m);export{p as o};

View File

@ -0,0 +1 @@
import{A as s,B as a,C as o,O as r}from"./index-DVIfOFfO.js";const t=(r=>(t,e=o())=>{!s&&a(r,t,e)})(r);export{t as o};

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{r as e}from"./index-BwwWwpov.js";const o=encodeURIComponent("https://www.focusnu.com/wechat/thd/#/pages/index/callback");function n(){return e(""),e(""),e(null),{login:function(e="snsapi_userinfo",n=""){const t=`https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8fc3e4305d2fbf0b&redirect_uri=${o}&response_type=code&scope=${e}&state=${n}#wechat_redirect`;window.location.href=t}}}export{n as u};
import{r as e}from"./index-DVIfOFfO.js";const o=encodeURIComponent("https://www.focusnu.com/wechat/thd/#/pages/index/callback");function n(){return e(""),e(""),e(null),{login:function(e="snsapi_userinfo",n=""){const t=`https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8fc3e4305d2fbf0b&redirect_uri=${o}&response_type=code&scope=${e}&state=${n}#wechat_redirect`;window.location.href=t}}}export{n as u};

View File

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="/wechat/thd/assets/uni.1d16bcf0.css">
<link rel="stylesheet" href="/wechat/thd/assets/uni.60c8949f.css">
<meta charset="UTF-8" />
<script>
@ -14,7 +14,7 @@
<title>测试</title>
<!--preload-links-->
<!--app-context-->
<script type="module" crossorigin src="/wechat/thd/assets/index-BwwWwpov.js"></script>
<script type="module" crossorigin src="/wechat/thd/assets/index-DVIfOFfO.js"></script>
<link rel="stylesheet" crossorigin href="/wechat/thd/assets/index-S414rAV1.css">
</head>
<body>

Binary file not shown.

After

Width:  |  Height:  |  Size: 940 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 730 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

View File

@ -0,0 +1 @@
{"version":3,"names":["APPID","REDIRECT_URI","encodeURIComponent","useWeChatAuth","common_vendor","ref","login","scope","arguments","length","undefined","state","url","concat","window","location","href"],"sources":["useWeChatAuth.js"],"sourcesContent":["// src/composables/useWeChatAuth.js\nimport { ref } from 'vue';\nimport request from '@/request/index.js';\n\nconst APPID = 'wx8fc3e4305d2fbf0b';\nconst REDIRECT_URI = encodeURIComponent('https://www.focusnu.com/wechat/thd/#/pages/index/callback');\n\nexport function useWeChatAuth() {\n const code = ref('');\n const openid = ref('');\n const userInfo = ref(null);\n\n function login(scope = 'snsapi_userinfo', state = '') {\n const url =\n `https://open.weixin.qq.com/connect/oauth2/authorize` +\n `?appid=${APPID}` +\n `&redirect_uri=${REDIRECT_URI}` +\n `&response_type=code` +\n `&scope=${scope}` +\n `&state=${state}` +\n `#wechat_redirect`;\r\n\t\n window.location.href = url;\n }\n\n\n return { login };\n}"],"mappings":";;;;AAIA,IAAMA,KAAA,GAAQ;AACd,IAAMC,YAAA,GAAeC,kBAAA,CAAmB,2DAA2D;AAE5F,SAASC,cAAA,EAAgB;EACjBC,aAAA,CAAAC,GAAA,CAAI,EAAE;EACJD,aAAA,CAAAC,GAAA,CAAI,EAAE;EACJD,aAAA,CAAAC,GAAA,CAAI,IAAI;EAEzB,SAASC,MAAA,EAA6C;IAAA,IAAvCC,KAAA,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAQ;IAAA,IAAmBG,KAAA,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAQ;IAChD,IAAMI,GAAA,gEAAAC,MAAA,CAEMb,KAAK,oBAAAa,MAAA,CACEZ,YAAY,gCAAAY,MAAA,CAEnBN,KAAK,aAAAM,MAAA,CACLF,KAAK;IAGjBG,MAAA,CAAOC,QAAA,CAASC,IAAA,GAAOJ,GAAA;EACxB;EAGD,OAAO;IAAEN,KAAA,EAAAA;EAAK;AAChB","ignoreList":[]}

View File

@ -1 +1 @@
{"version":3,"file":"app.js","sources":["App.vue","main.js"],"sourcesContent":["<script>\r\n\texport default {\r\n\t\tonLaunch: function() {\r\n\t\t\tconsole.log('App Launch')\r\n\t\t},\r\n\t\tonShow: function() {\r\n\t\t\tconsole.log('App Show')\r\n\t\t},\r\n\t\tonHide: function() {\r\n\t\t\tconsole.log('App Hide')\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n\t/*每个页面公共css */\r\n\t@import \"./uni_modules/vk-uview-ui/index.scss\";\r\n</style>\n","import App from './App'\r\nimport uView from './uni_modules/vk-uview-ui';\r\n// #ifndef VUE3\r\nimport Vue from 'vue'\r\nimport './uni.promisify.adaptor'\r\nVue.config.productionTip = false\r\nApp.mpType = 'app'\r\nconst app = new Vue({\r\n\t...App\r\n})\r\napp.$mount()\r\n// #endif\r\n\r\n// #ifdef VUE3\r\nimport {\r\n\tcreateSSRApp\r\n} from 'vue'\r\nexport function createApp() {\r\n\tconst app = createSSRApp(App)\r\n\t// 使用 uView UI\r\n\tapp.use(uView)\r\n\treturn {\r\n\t\tapp\r\n\t}\r\n}\r\n// #endif"],"names":["uni","createSSRApp","App","uView"],"mappings":";;;;;;;;;;;;AACC,MAAK,YAAU;AAAA,EACd,UAAU,WAAW;AACpBA,kBAAAA,MAAA,MAAA,OAAA,gBAAY,YAAY;AAAA,EACxB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,gBAAA,UAAU;AAAA,EACtB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,iBAAA,UAAU;AAAA,EACvB;AACD;ACMM,SAAS,YAAY;AAC3B,QAAM,MAAMC,cAAY,aAACC,SAAG;AAE5B,MAAI,IAAIC,iCAAK;AACb,SAAO;AAAA,IACN;AAAA,EACA;AACF;;;"}
{"version":3,"file":"app.js","sources":["App.vue","main.js"],"sourcesContent":["<script>\r\n\texport default {\r\n\t\tonLaunch: function() {\r\n\t\t\tconsole.log('App Launch')\r\n\t\t},\r\n\t\tonShow: function() {\r\n\t\t\tconsole.log('App Show')\r\n\t\t},\r\n\t\tonHide: function() {\r\n\t\t\tconsole.log('App Hide')\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n\t/*每个页面公共css */\r\n\t@import \"./uni_modules/vk-uview-ui/index.scss\";\r\n</style>\n","import App from './App'\r\nimport uView from './uni_modules/vk-uview-ui';\r\n// #ifndef VUE3\r\nimport Vue from 'vue'\r\nimport './uni.promisify.adaptor'\r\nimport uView from './uni_modules/vk-uview-ui';\nVue.use(uView);\r\nVue.config.productionTip = false\r\nApp.mpType = 'app'\r\nconst app = new Vue({\r\n\t...App\r\n})\r\napp.$mount()\r\n// #endif\r\n\r\n// #ifdef VUE3\r\nimport {\r\n\tcreateSSRApp\r\n} from 'vue'\r\nexport function createApp() {\r\n\tconst app = createSSRApp(App)\r\n\t// 使用 uView UI\r\n\tapp.use(uView)\r\n\treturn {\r\n\t\tapp\r\n\t}\r\n}\r\n// #endif"],"names":["uni","createSSRApp","App","uView"],"mappings":";;;;;;;;;;;;;;AACC,MAAK,YAAU;AAAA,EACd,UAAU,WAAW;AACpBA,kBAAAA,MAAA,MAAA,OAAA,gBAAY,YAAY;AAAA,EACxB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,gBAAA,UAAU;AAAA,EACtB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,iBAAA,UAAU;AAAA,EACvB;AACD;ACQM,SAAS,YAAY;AAC3B,QAAM,MAAMC,cAAY,aAACC,SAAG;AAE5B,MAAI,IAAIC,iCAAK;AACb,SAAO;AAAA,IACN;AAAA,EACA;AACF;;;"}

View File

@ -1 +1 @@
{"version":3,"file":"assets.js","sources":["static/index/nu.png","static/index/bgc.png","static/index/old.png"],"sourcesContent":["export default \"__VITE_ASSET__e7faca07__\"","export default \"__VITE_ASSET__12a7a67c__\"","export default \"__VITE_ASSET__a6c3231b__\""],"names":[],"mappings":";AAAA,MAAe,aAAA;ACAf,MAAe,aAAA;ACAf,MAAe,aAAA;;;;"}
{"version":3,"file":"assets.js","sources":["static/index/nu.png","static/index/bgc.png","static/index/old.png","static/login/0.png","static/login/1.png","static/login/2.png","static/login/3.png"],"sourcesContent":["export default \"__VITE_ASSET__e7faca07__\"","export default \"__VITE_ASSET__12a7a67c__\"","export default \"__VITE_ASSET__a6c3231b__\"","export default \"__VITE_ASSET__40aa7e44__\"","export default \"__VITE_ASSET__ae8e3dba__\"","export default \"__VITE_ASSET__75e1826f__\"","export default \"__VITE_ASSET__0c2bc10b__\""],"names":[],"mappings":";AAAA,MAAe,aAAA;ACAf,MAAe,aAAA;ACAf,MAAe,aAAA;ACAf,MAAe,OAAA;ACAf,MAAe,OAAA;ACAf,MAAe,OAAA;ACAf,MAAe,OAAA;;;;;;;;"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"version":3,"file":"useWeChatAuth.js","sources":["compontent/useWeChatAuth.js"],"sourcesContent":["// src/composables/useWeChatAuth.js\nimport { ref } from 'vue';\nimport request from '@/request/index.js';\n\nconst APPID = 'wx8fc3e4305d2fbf0b';\nconst REDIRECT_URI = encodeURIComponent('https://www.focusnu.com/wechat/thd/#/pages/index/callback');\n\nexport function useWeChatAuth() {\n const code = ref('');\n const openid = ref('');\n const userInfo = ref(null);\n\n function login(scope = 'snsapi_userinfo', state = '') {\n const url =\n `https://open.weixin.qq.com/connect/oauth2/authorize` +\n `?appid=${APPID}` +\n `&redirect_uri=${REDIRECT_URI}` +\n `&response_type=code` +\n `&scope=${scope}` +\n `&state=${state}` +\n `#wechat_redirect`;\r\n\t// console.log(\"????\",scope)\r\n\t\n window.location.href = url;\n }\n\n\n return { login };\n}"],"names":["ref"],"mappings":";;AAIA,MAAM,QAAQ;AACd,MAAM,eAAe,mBAAmB,2DAA2D;AAE5F,SAAS,gBAAgB;AACjBA,gBAAAA,IAAI,EAAE;AACJA,gBAAAA,IAAI,EAAE;AACJA,gBAAAA,IAAI,IAAI;AAEzB,WAAS,MAAM,QAAQ,mBAAmB,QAAQ,IAAI;AACpD,UAAM,MACJ,6DACU,KAAK,iBACE,YAAY,6BAEnB,KAAK,UACL,KAAK;AAIjB,WAAO,SAAS,OAAO;AAAA,EACxB;AAGD,SAAO,EAAE,MAAK;AAChB;;"}
{"version":3,"file":"useWeChatAuth.js","sources":["compontent/useWeChatAuth.js"],"sourcesContent":["// src/composables/useWeChatAuth.js\nimport { ref } from 'vue';\nimport request from '@/request/index.js';\n\nconst APPID = 'wx8fc3e4305d2fbf0b';\nconst REDIRECT_URI = encodeURIComponent('https://www.focusnu.com/wechat/thd/#/pages/index/callback');\n\nexport function useWeChatAuth() {\n const code = ref('');\n const openid = ref('');\n const userInfo = ref(null);\n\n function login(scope = 'snsapi_userinfo', state = '') {\n const url =\n `https://open.weixin.qq.com/connect/oauth2/authorize` +\n `?appid=${APPID}` +\n `&redirect_uri=${REDIRECT_URI}` +\n `&response_type=code` +\n `&scope=${scope}` +\n `&state=${state}` +\n `#wechat_redirect`;\r\n\t\n window.location.href = url;\n }\n\n\n return { login };\n}"],"names":["ref"],"mappings":";;AAIA,MAAM,QAAQ;AACd,MAAM,eAAe,mBAAmB,2DAA2D;AAE5F,SAAS,gBAAgB;AACjBA,gBAAAA,IAAI,EAAE;AACJA,gBAAAA,IAAI,EAAE;AACJA,gBAAAA,IAAI,IAAI;AAEzB,WAAS,MAAM,QAAQ,mBAAmB,QAAQ,IAAI;AACpD,UAAM,MACJ,6DACU,KAAK,iBACE,YAAY,6BAEnB,KAAK,UACL,KAAK;AAGjB,WAAO,SAAS,OAAO;AAAA,EACxB;AAGD,SAAO,EAAE,MAAK;AAChB;;"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"version":3,"file":"protocol.js","sources":["../Hbuilder/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvbG9naW4vcHJvdG9jb2wudnVl"],"sourcesContent":["import MiniProgramPage from 'D:/officialAccount/pages/login/protocol.vue'\nwx.createPage(MiniProgramPage)"],"names":[],"mappings":";;;;;;;AACA,GAAG,WAAW,eAAe;"}

View File

@ -3,10 +3,12 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const common_vendor = require("./common/vendor.js");
const uni_modules_vkUviewUi_index = require("./uni_modules/vk-uview-ui/index.js");
if (!Math) {
"./pages/login/index.js";
"./pages/login/phonebumber.js";
"./pages/login/code.js";
"./pages/login/callback.js";
"./pages/login/protocol.js";
"./pages/index/index.js";
"./pages/index/phonebumber.js";
"./pages/index/code.js";
"./pages/index/callback.js";
"./pages/map/index.js";
"./pages/pay/index.js";
}

View File

@ -1,9 +1,11 @@
{
"pages": [
"pages/login/index",
"pages/login/phonebumber",
"pages/login/code",
"pages/login/callback",
"pages/login/protocol",
"pages/index/index",
"pages/index/phonebumber",
"pages/index/code",
"pages/index/callback",
"pages/map/index",
"pages/pay/index"
],

View File

@ -2,7 +2,15 @@
const _imports_0 = "/static/index/nu.png";
const _imports_1 = "/static/index/bgc.png";
const _imports_2 = "/static/index/old.png";
const img0 = "/static/login/0.png";
const img1 = "/static/login/1.png";
const img2 = "/static/login/2.png";
const img3 = "/static/login/3.png";
exports._imports_0 = _imports_0;
exports._imports_1 = _imports_1;
exports._imports_2 = _imports_2;
exports.img0 = img0;
exports.img1 = img1;
exports.img2 = img2;
exports.img3 = img3;
//# sourceMappingURL=../../.sourcemap/mp-weixin/common/assets.js.map

View File

@ -1303,6 +1303,9 @@ function isReadonly(value) {
function isShallow(value) {
return !!(value && value["__v_isShallow"]);
}
function isProxy(value) {
return isReactive(value) || isReadonly(value);
}
function toRaw(observed) {
const raw = observed && observed["__v_raw"];
return raw ? toRaw(raw) : observed;
@ -2094,6 +2097,47 @@ function setCurrentRenderingInstance(instance) {
instance && instance.type.__scopeId || null;
return prev;
}
const COMPONENTS = "components";
function resolveComponent(name, maybeSelfReference) {
return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;
}
function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {
const instance = currentRenderingInstance || currentInstance;
if (instance) {
const Component2 = instance.type;
if (type === COMPONENTS) {
const selfName = getComponentName(
Component2,
false
);
if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {
return Component2;
}
}
const res = (
// local registration
// check instance[type] first which is resolved for options API
resolve(instance[type] || Component2[type], name) || // global registration
resolve(instance.appContext[type], name)
);
if (!res && maybeSelfReference) {
return Component2;
}
if (warnMissing && !res) {
const extra = type === COMPONENTS ? `
If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``;
warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);
}
return res;
} else {
warn$1(
`resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`
);
}
}
function resolve(registry, name) {
return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);
}
const INITIAL_WATCHER_VALUE = {};
function watch(source, cb, options) {
if (!isFunction(cb)) {
@ -3704,6 +3748,12 @@ const Static = Symbol.for("v-stc");
function isVNode(value) {
return value ? value.__v_isVNode === true : false;
}
const InternalObjectKey = `__vInternal`;
function guardReactiveProps(props) {
if (!props)
return null;
return isProxy(props) || InternalObjectKey in props ? extend({}, props) : props;
}
const emptyAppContext = createAppContext();
let uid = 0;
function createComponentInstance(vnode, parent, suspense) {
@ -4942,6 +4992,11 @@ function initApp(app) {
}
}
const propsCaches = /* @__PURE__ */ Object.create(null);
function renderProps(props) {
const { uid: uid2, __counter } = getCurrentInstance();
const propsId = (propsCaches[uid2] || (propsCaches[uid2] = [])).push(guardReactiveProps(props)) - 1;
return uid2 + "," + propsId + "," + __counter;
}
function pruneComponentPropsCache(uid2) {
delete propsCaches[uid2];
}
@ -5113,6 +5168,7 @@ const f = (source, renderItem) => vFor(source, renderItem);
const e = (target, ...sources) => extend(target, ...sources);
const n = (value) => normalizeClass(value);
const t = (val) => toDisplayString(val);
const p = (props) => renderProps(props);
function createApp$1(rootComponent, rootProps = null) {
rootComponent && (rootComponent.mpType = "app");
return createVueApp(rootComponent, rootProps).use(plugin);
@ -5434,8 +5490,8 @@ function promisify$1(name, fn) {
if (hasCallback(args)) {
return wrapperReturnValue(name, invokeApi(name, fn, args, rest));
}
return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => {
invokeApi(name, fn, extend(args, { success: resolve, fail: reject }), rest);
return wrapperReturnValue(name, handlePromise(new Promise((resolve2, reject) => {
invokeApi(name, fn, extend(args, { success: resolve2, fail: reject }), rest);
})));
};
}
@ -5756,7 +5812,7 @@ function invokeGetPushCidCallbacks(cid2, errMsg) {
getPushCidCallbacks.length = 0;
}
const API_GET_PUSH_CLIENT_ID = "getPushClientId";
const getPushClientId = defineAsyncApi(API_GET_PUSH_CLIENT_ID, (_, { resolve, reject }) => {
const getPushClientId = defineAsyncApi(API_GET_PUSH_CLIENT_ID, (_, { resolve: resolve2, reject }) => {
Promise.resolve().then(() => {
if (typeof enabled === "undefined") {
enabled = false;
@ -5765,7 +5821,7 @@ const getPushClientId = defineAsyncApi(API_GET_PUSH_CLIENT_ID, (_, { resolve, re
}
getPushCidCallbacks.push((cid2, errMsg) => {
if (cid2) {
resolve({ cid: cid2 });
resolve2({ cid: cid2 });
} else {
reject(errMsg);
}
@ -5834,9 +5890,9 @@ function promisify(name, api) {
if (isFunction(options.success) || isFunction(options.fail) || isFunction(options.complete)) {
return wrapperReturnValue(name, invokeApi(name, api, options, rest));
}
return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => {
return wrapperReturnValue(name, handlePromise(new Promise((resolve2, reject) => {
invokeApi(name, api, extend({}, options, {
success: resolve,
success: resolve2,
fail: reject
}), rest);
})));
@ -6443,13 +6499,13 @@ function initRuntimeSocket(hosts, port, id) {
}
const SOCKET_TIMEOUT = 500;
function tryConnectSocket(host2, port, id) {
return new Promise((resolve, reject) => {
return new Promise((resolve2, reject) => {
const socket = index.connectSocket({
url: `ws://${host2}:${port}/${id}`,
multiple: true,
// 支付宝小程序 是否开启多实例
fail() {
resolve(null);
resolve2(null);
}
});
const timer = setTimeout(() => {
@ -6457,19 +6513,19 @@ function tryConnectSocket(host2, port, id) {
code: 1006,
reason: "connect timeout"
});
resolve(null);
resolve2(null);
}, SOCKET_TIMEOUT);
socket.onOpen((e2) => {
clearTimeout(timer);
resolve(socket);
resolve2(socket);
});
socket.onClose((e2) => {
clearTimeout(timer);
resolve(null);
resolve2(null);
});
socket.onError((e2) => {
clearTimeout(timer);
resolve(null);
resolve2(null);
});
});
}
@ -6934,7 +6990,7 @@ function isConsoleWritable() {
function initRuntimeSocketService() {
const hosts = "192.168.2.24,127.0.0.1";
const port = "8090";
const id = "mp-weixin_JkT_v2";
const id = "mp-weixin_c0fjQb";
const lazy = typeof swan !== "undefined";
let restoreError = lazy ? () => {
} : initOnError();
@ -9622,7 +9678,7 @@ function warnOnce(message) {
index.__f__("warn", "at node_modules/three/build/three.core.js:4054", message);
}
function probeAsync(gl, sync, interval) {
return new Promise(function(resolve, reject) {
return new Promise(function(resolve2, reject) {
function probe() {
switch (gl.clientWaitSync(sync, gl.SYNC_FLUSH_COMMANDS_BIT, 0)) {
case gl.WAIT_FAILED:
@ -9632,7 +9688,7 @@ function probeAsync(gl, sync, interval) {
setTimeout(probe, interval);
break;
default:
resolve();
resolve2();
}
}
setTimeout(probe, interval);
@ -14885,16 +14941,16 @@ class Matrix4 {
const te = this.elements;
const w = 1 / (right - left);
const h = 1 / (top - bottom);
const p = 1 / (far - near);
const p2 = 1 / (far - near);
const x = (right + left) * w;
const y = (top + bottom) * h;
let z, zInv;
if (coordinateSystem === WebGLCoordinateSystem) {
z = (far + near) * p;
zInv = -2 * p;
z = (far + near) * p2;
zInv = -2 * p2;
} else if (coordinateSystem === WebGPUCoordinateSystem) {
z = near * p;
zInv = -1 * p;
z = near * p2;
zInv = -1 * p2;
} else {
throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: " + coordinateSystem);
}
@ -16614,18 +16670,18 @@ class Triangle {
* @param {Vector3} target - The target vector that is used to store the method's result.
* @return {Vector3} The closest point on the triangle.
*/
closestPointToPoint(p, target) {
closestPointToPoint(p2, target) {
const a = this.a, b = this.b, c = this.c;
let v, w;
_vab.subVectors(b, a);
_vac.subVectors(c, a);
_vap.subVectors(p, a);
_vap.subVectors(p2, a);
const d1 = _vab.dot(_vap);
const d2 = _vac.dot(_vap);
if (d1 <= 0 && d2 <= 0) {
return target.copy(a);
}
_vbp.subVectors(p, b);
_vbp.subVectors(p2, b);
const d3 = _vab.dot(_vbp);
const d4 = _vac.dot(_vbp);
if (d3 >= 0 && d4 <= d3) {
@ -16636,7 +16692,7 @@ class Triangle {
v = d1 / (d1 - d3);
return target.copy(a).addScaledVector(_vab, v);
}
_vcp.subVectors(p, c);
_vcp.subVectors(p2, c);
const d5 = _vab.dot(_vcp);
const d6 = _vac.dot(_vcp);
if (d6 >= 0 && d5 <= d6) {
@ -16820,18 +16876,18 @@ const _colorKeywords = {
};
const _hslA = { h: 0, s: 0, l: 0 };
const _hslB = { h: 0, s: 0, l: 0 };
function hue2rgb(p, q, t2) {
function hue2rgb(p2, q, t2) {
if (t2 < 0)
t2 += 1;
if (t2 > 1)
t2 -= 1;
if (t2 < 1 / 6)
return p + (q - p) * 6 * t2;
return p2 + (q - p2) * 6 * t2;
if (t2 < 1 / 2)
return q;
if (t2 < 2 / 3)
return p + (q - p) * 6 * (2 / 3 - t2);
return p;
return p2 + (q - p2) * 6 * (2 / 3 - t2);
return p2;
}
class Color {
/**
@ -16935,11 +16991,11 @@ class Color {
if (s === 0) {
this.r = this.g = this.b = l;
} else {
const p = l <= 0.5 ? l * (1 + s) : l + s - l * s;
const q = 2 * l - p;
this.r = hue2rgb(q, p, h + 1 / 3);
this.g = hue2rgb(q, p, h);
this.b = hue2rgb(q, p, h - 1 / 3);
const p2 = l <= 0.5 ? l * (1 + s) : l + s - l * s;
const q = 2 * l - p2;
this.r = hue2rgb(q, p2, h + 1 / 3);
this.g = hue2rgb(q, p2, h);
this.b = hue2rgb(q, p2, h - 1 / 3);
}
ColorManagement.toWorkingColorSpace(this, colorSpace);
return this;
@ -19589,19 +19645,19 @@ function cloneUniforms(src) {
const dst = {};
for (const u in src) {
dst[u] = {};
for (const p in src[u]) {
const property = src[u][p];
for (const p2 in src[u]) {
const property = src[u][p2];
if (property && (property.isColor || property.isMatrix3 || property.isMatrix4 || property.isVector2 || property.isVector3 || property.isVector4 || property.isTexture || property.isQuaternion)) {
if (property.isRenderTargetTexture) {
index.__f__("warn", "at node_modules/three/build/three.core.js:20645", "UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms().");
dst[u][p] = null;
dst[u][p2] = null;
} else {
dst[u][p] = property.clone();
dst[u][p2] = property.clone();
}
} else if (Array.isArray(property)) {
dst[u][p] = property.slice();
dst[u][p2] = property.slice();
} else {
dst[u][p] = property;
dst[u][p2] = property;
}
}
}
@ -19611,8 +19667,8 @@ function mergeUniforms(uniforms) {
const merged = {};
for (let u = 0; u < uniforms.length; u++) {
const tmp = cloneUniforms(uniforms[u]);
for (const p in tmp) {
merged[p] = tmp[p];
for (const p2 in tmp) {
merged[p2] = tmp[p2];
}
}
return merged;
@ -26613,8 +26669,8 @@ function WebGLPrograms(renderer, cubemaps, cubeuvmaps, extensions, capabilities,
}
function acquireProgram(parameters, cacheKey) {
let program;
for (let p = 0, pl = programs.length; p < pl; p++) {
const preexistingProgram = programs[p];
for (let p2 = 0, pl = programs.length; p2 < pl; p2++) {
const preexistingProgram = programs[p2];
if (preexistingProgram.cacheKey === cacheKey) {
program = preexistingProgram;
++program.usedTimes;
@ -29461,62 +29517,62 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils,
this.useMultisampledRTT = useMultisampledRTT;
}
function WebGLUtils(gl, extensions) {
function convert(p, colorSpace = NoColorSpace) {
function convert(p2, colorSpace = NoColorSpace) {
let extension;
const transfer = ColorManagement.getTransfer(colorSpace);
if (p === UnsignedByteType)
if (p2 === UnsignedByteType)
return gl.UNSIGNED_BYTE;
if (p === UnsignedShort4444Type)
if (p2 === UnsignedShort4444Type)
return gl.UNSIGNED_SHORT_4_4_4_4;
if (p === UnsignedShort5551Type)
if (p2 === UnsignedShort5551Type)
return gl.UNSIGNED_SHORT_5_5_5_1;
if (p === UnsignedInt5999Type)
if (p2 === UnsignedInt5999Type)
return gl.UNSIGNED_INT_5_9_9_9_REV;
if (p === ByteType)
if (p2 === ByteType)
return gl.BYTE;
if (p === ShortType)
if (p2 === ShortType)
return gl.SHORT;
if (p === UnsignedShortType)
if (p2 === UnsignedShortType)
return gl.UNSIGNED_SHORT;
if (p === IntType)
if (p2 === IntType)
return gl.INT;
if (p === UnsignedIntType)
if (p2 === UnsignedIntType)
return gl.UNSIGNED_INT;
if (p === FloatType)
if (p2 === FloatType)
return gl.FLOAT;
if (p === HalfFloatType)
if (p2 === HalfFloatType)
return gl.HALF_FLOAT;
if (p === AlphaFormat)
if (p2 === AlphaFormat)
return gl.ALPHA;
if (p === RGBFormat)
if (p2 === RGBFormat)
return gl.RGB;
if (p === RGBAFormat)
if (p2 === RGBAFormat)
return gl.RGBA;
if (p === DepthFormat)
if (p2 === DepthFormat)
return gl.DEPTH_COMPONENT;
if (p === DepthStencilFormat)
if (p2 === DepthStencilFormat)
return gl.DEPTH_STENCIL;
if (p === RedFormat)
if (p2 === RedFormat)
return gl.RED;
if (p === RedIntegerFormat)
if (p2 === RedIntegerFormat)
return gl.RED_INTEGER;
if (p === RGFormat)
if (p2 === RGFormat)
return gl.RG;
if (p === RGIntegerFormat)
if (p2 === RGIntegerFormat)
return gl.RG_INTEGER;
if (p === RGBAIntegerFormat)
if (p2 === RGBAIntegerFormat)
return gl.RGBA_INTEGER;
if (p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format) {
if (p2 === RGB_S3TC_DXT1_Format || p2 === RGBA_S3TC_DXT1_Format || p2 === RGBA_S3TC_DXT3_Format || p2 === RGBA_S3TC_DXT5_Format) {
if (transfer === SRGBTransfer) {
extension = extensions.get("WEBGL_compressed_texture_s3tc_srgb");
if (extension !== null) {
if (p === RGB_S3TC_DXT1_Format)
if (p2 === RGB_S3TC_DXT1_Format)
return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT;
if (p === RGBA_S3TC_DXT1_Format)
if (p2 === RGBA_S3TC_DXT1_Format)
return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;
if (p === RGBA_S3TC_DXT3_Format)
if (p2 === RGBA_S3TC_DXT3_Format)
return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;
if (p === RGBA_S3TC_DXT5_Format)
if (p2 === RGBA_S3TC_DXT5_Format)
return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;
} else {
return null;
@ -29524,111 +29580,111 @@ function WebGLUtils(gl, extensions) {
} else {
extension = extensions.get("WEBGL_compressed_texture_s3tc");
if (extension !== null) {
if (p === RGB_S3TC_DXT1_Format)
if (p2 === RGB_S3TC_DXT1_Format)
return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;
if (p === RGBA_S3TC_DXT1_Format)
if (p2 === RGBA_S3TC_DXT1_Format)
return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;
if (p === RGBA_S3TC_DXT3_Format)
if (p2 === RGBA_S3TC_DXT3_Format)
return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;
if (p === RGBA_S3TC_DXT5_Format)
if (p2 === RGBA_S3TC_DXT5_Format)
return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;
} else {
return null;
}
}
}
if (p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format) {
if (p2 === RGB_PVRTC_4BPPV1_Format || p2 === RGB_PVRTC_2BPPV1_Format || p2 === RGBA_PVRTC_4BPPV1_Format || p2 === RGBA_PVRTC_2BPPV1_Format) {
extension = extensions.get("WEBGL_compressed_texture_pvrtc");
if (extension !== null) {
if (p === RGB_PVRTC_4BPPV1_Format)
if (p2 === RGB_PVRTC_4BPPV1_Format)
return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;
if (p === RGB_PVRTC_2BPPV1_Format)
if (p2 === RGB_PVRTC_2BPPV1_Format)
return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;
if (p === RGBA_PVRTC_4BPPV1_Format)
if (p2 === RGBA_PVRTC_4BPPV1_Format)
return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;
if (p === RGBA_PVRTC_2BPPV1_Format)
if (p2 === RGBA_PVRTC_2BPPV1_Format)
return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;
} else {
return null;
}
}
if (p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format) {
if (p2 === RGB_ETC1_Format || p2 === RGB_ETC2_Format || p2 === RGBA_ETC2_EAC_Format) {
extension = extensions.get("WEBGL_compressed_texture_etc");
if (extension !== null) {
if (p === RGB_ETC1_Format || p === RGB_ETC2_Format)
if (p2 === RGB_ETC1_Format || p2 === RGB_ETC2_Format)
return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;
if (p === RGBA_ETC2_EAC_Format)
if (p2 === RGBA_ETC2_EAC_Format)
return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;
} else {
return null;
}
}
if (p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format || p === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format || p === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format || p === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format || p === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format) {
if (p2 === RGBA_ASTC_4x4_Format || p2 === RGBA_ASTC_5x4_Format || p2 === RGBA_ASTC_5x5_Format || p2 === RGBA_ASTC_6x5_Format || p2 === RGBA_ASTC_6x6_Format || p2 === RGBA_ASTC_8x5_Format || p2 === RGBA_ASTC_8x6_Format || p2 === RGBA_ASTC_8x8_Format || p2 === RGBA_ASTC_10x5_Format || p2 === RGBA_ASTC_10x6_Format || p2 === RGBA_ASTC_10x8_Format || p2 === RGBA_ASTC_10x10_Format || p2 === RGBA_ASTC_12x10_Format || p2 === RGBA_ASTC_12x12_Format) {
extension = extensions.get("WEBGL_compressed_texture_astc");
if (extension !== null) {
if (p === RGBA_ASTC_4x4_Format)
if (p2 === RGBA_ASTC_4x4_Format)
return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR;
if (p === RGBA_ASTC_5x4_Format)
if (p2 === RGBA_ASTC_5x4_Format)
return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR;
if (p === RGBA_ASTC_5x5_Format)
if (p2 === RGBA_ASTC_5x5_Format)
return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR;
if (p === RGBA_ASTC_6x5_Format)
if (p2 === RGBA_ASTC_6x5_Format)
return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR;
if (p === RGBA_ASTC_6x6_Format)
if (p2 === RGBA_ASTC_6x6_Format)
return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR;
if (p === RGBA_ASTC_8x5_Format)
if (p2 === RGBA_ASTC_8x5_Format)
return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR;
if (p === RGBA_ASTC_8x6_Format)
if (p2 === RGBA_ASTC_8x6_Format)
return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR;
if (p === RGBA_ASTC_8x8_Format)
if (p2 === RGBA_ASTC_8x8_Format)
return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR;
if (p === RGBA_ASTC_10x5_Format)
if (p2 === RGBA_ASTC_10x5_Format)
return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR;
if (p === RGBA_ASTC_10x6_Format)
if (p2 === RGBA_ASTC_10x6_Format)
return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR;
if (p === RGBA_ASTC_10x8_Format)
if (p2 === RGBA_ASTC_10x8_Format)
return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR;
if (p === RGBA_ASTC_10x10_Format)
if (p2 === RGBA_ASTC_10x10_Format)
return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR;
if (p === RGBA_ASTC_12x10_Format)
if (p2 === RGBA_ASTC_12x10_Format)
return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR;
if (p === RGBA_ASTC_12x12_Format)
if (p2 === RGBA_ASTC_12x12_Format)
return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR;
} else {
return null;
}
}
if (p === RGBA_BPTC_Format || p === RGB_BPTC_SIGNED_Format || p === RGB_BPTC_UNSIGNED_Format) {
if (p2 === RGBA_BPTC_Format || p2 === RGB_BPTC_SIGNED_Format || p2 === RGB_BPTC_UNSIGNED_Format) {
extension = extensions.get("EXT_texture_compression_bptc");
if (extension !== null) {
if (p === RGBA_BPTC_Format)
if (p2 === RGBA_BPTC_Format)
return transfer === SRGBTransfer ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT;
if (p === RGB_BPTC_SIGNED_Format)
if (p2 === RGB_BPTC_SIGNED_Format)
return extension.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;
if (p === RGB_BPTC_UNSIGNED_Format)
if (p2 === RGB_BPTC_UNSIGNED_Format)
return extension.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT;
} else {
return null;
}
}
if (p === RED_RGTC1_Format || p === SIGNED_RED_RGTC1_Format || p === RED_GREEN_RGTC2_Format || p === SIGNED_RED_GREEN_RGTC2_Format) {
if (p2 === RED_RGTC1_Format || p2 === SIGNED_RED_RGTC1_Format || p2 === RED_GREEN_RGTC2_Format || p2 === SIGNED_RED_GREEN_RGTC2_Format) {
extension = extensions.get("EXT_texture_compression_rgtc");
if (extension !== null) {
if (p === RGBA_BPTC_Format)
if (p2 === RGBA_BPTC_Format)
return extension.COMPRESSED_RED_RGTC1_EXT;
if (p === SIGNED_RED_RGTC1_Format)
if (p2 === SIGNED_RED_RGTC1_Format)
return extension.COMPRESSED_SIGNED_RED_RGTC1_EXT;
if (p === RED_GREEN_RGTC2_Format)
if (p2 === RED_GREEN_RGTC2_Format)
return extension.COMPRESSED_RED_GREEN_RGTC2_EXT;
if (p === SIGNED_RED_GREEN_RGTC2_Format)
if (p2 === SIGNED_RED_GREEN_RGTC2_Format)
return extension.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;
} else {
return null;
}
}
if (p === UnsignedInt248Type)
if (p2 === UnsignedInt248Type)
return gl.UNSIGNED_INT_24_8;
return gl[p] !== void 0 ? gl[p] : null;
return gl[p2] !== void 0 ? gl[p2] : null;
}
return { convert };
}
@ -31255,7 +31311,7 @@ class WebGLRenderer {
};
this.compileAsync = function(scene, camera, targetScene = null) {
const materials2 = this.compile(scene, camera, targetScene);
return new Promise((resolve) => {
return new Promise((resolve2) => {
function checkMaterialsReady() {
materials2.forEach(function(material) {
const materialProperties = properties.get(material);
@ -31265,7 +31321,7 @@ class WebGLRenderer {
}
});
if (materials2.size === 0) {
resolve(scene);
resolve2(scene);
return;
}
setTimeout(checkMaterialsReady, 10);
@ -33172,10 +33228,14 @@ exports.index = index;
exports.n = n;
exports.nextTick$1 = nextTick$1;
exports.o = o;
exports.onBeforeUnmount = onBeforeUnmount;
exports.onLoad = onLoad;
exports.onMounted = onMounted;
exports.onUnmounted = onUnmounted;
exports.p = p;
exports.reactive = reactive;
exports.ref = ref;
exports.resolveComponent = resolveComponent;
exports.t = t;
exports.wx$1 = wx$1;
//# sourceMappingURL=../../.sourcemap/mp-weixin/common/vendor.js.map

View File

@ -0,0 +1,136 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const common_assets = require("../../common/assets.js");
const pieceSizePx = 50;
const tolerance = 20;
const containerWidthPx = 200;
const containerHeightPx = 300;
const _sfc_main = {
__name: "huakuai",
setup(__props) {
const pieceSize = pieceSizePx * 2;
const container = common_vendor.ref(null);
common_vendor.ref(null);
const containerWidth = common_vendor.ref(containerWidthPx * 2);
const containerHeight = common_vendor.ref(containerHeightPx * 2);
const originX = common_vendor.ref(0);
const originY = common_vendor.ref(0);
const offsetX = common_vendor.ref(0);
const dragging = common_vendor.ref(false);
const startX = common_vendor.ref(0);
function getPuzzlePiecePath(size) {
const s = size;
return `
M${10 * 2} 0
h${s / 3 - 10 * 2}
a${10 * 2} ${10 * 2} 0 0 1 0 ${20 * 2}
h${s / 3}
a${10 * 2} ${10 * 2} 0 0 0 0 -${20 * 2}
h${s / 3 - 10 * 2}
v${s / 3 - 10 * 2}
a${10 * 2} ${10 * 2} 0 0 1 -${20 * 2} 0
v${s / 3}
a${10 * 2} ${10 * 2} 0 0 0 ${20 * 2} 0
v${s / 3 - 10 * 2}
h-${s / 3 - 10 * 2}
a${10 * 2} ${10 * 2} 0 0 1 0 -${20 * 2}
h-${s / 3}
a${10 * 2} ${10 * 2} 0 0 0 0 ${20 * 2}
h-${s / 3 - 10 * 2}
z
`;
}
const clipPath = `path('${getPuzzlePiecePath(pieceSize)}')`;
function init() {
common_vendor.index.createSelectorQuery().in(container.value).select(".bg-image").boundingClientRect((data) => {
if (!data) {
common_vendor.index.__f__("error", "at compontent/public/huakuai.vue:102", "无法获取.bg-image尺寸");
return;
}
common_vendor.index.__f__("log", "at compontent/public/huakuai.vue:105", "图片宽高:", data.width, data.height);
containerWidth.value = data.width * 2;
containerHeight.value = data.height * 2;
originX.value = Math.random() * (containerWidth.value - pieceSize * 2) + pieceSize;
originY.value = containerHeight.value / 2;
offsetX.value = 0;
common_vendor.index.__f__("log", "at compontent/public/huakuai.vue:114", "originX:", originX.value, "originY:", originY.value);
}).exec();
}
function onStart(e) {
dragging.value = true;
startX.value = e.touches ? e.touches[0].clientX * 2 : e.clientX * 2;
window.addEventListener("mousemove", onMove);
window.addEventListener("mouseup", onEnd);
window.addEventListener("touchmove", onMove);
window.addEventListener("touchend", onEnd);
}
function onMove(e) {
if (!dragging.value)
return;
const clientX = e.touches ? e.touches[0].clientX * 2 : e.clientX * 2;
let dx = clientX - startX.value;
dx = Math.max(0, Math.min(dx, containerWidth.value - pieceSize));
offsetX.value = dx;
}
common_vendor.ref(null);
function onEnd() {
dragging.value = false;
window.removeEventListener("mousemove", onMove);
window.removeEventListener("mouseup", onEnd);
window.removeEventListener("touchmove", onMove);
window.removeEventListener("touchend", onEnd);
if (Math.abs(offsetX.value - originX.value) < tolerance) {
common_vendor.index.__f__("log", "at compontent/public/huakuai.vue:146", "验证成功");
} else {
offsetX.value = 0;
common_vendor.index.showToast({
title: "验证失败",
icon: "none",
// 不显示图标(提示信息)
duration: 2e3
// 显示时长(毫秒)
});
}
}
const bgImage = common_vendor.ref("");
common_vendor.onLoad(() => {
let randomInt = Math.floor(Math.random() * 4);
const bgImageMap = [common_assets.img0, common_assets.img1, common_assets.img2, common_assets.img3];
bgImage.value = bgImageMap[randomInt];
});
common_vendor.onBeforeUnmount(() => {
window.removeEventListener("mousemove", onMove);
window.removeEventListener("mouseup", onEnd);
window.removeEventListener("touchmove", onMove);
window.removeEventListener("touchend", onEnd);
});
return (_ctx, _cache) => {
return {
a: bgImage.value,
b: common_vendor.o(init),
c: originY.value + "rpx",
d: originX.value + "rpx",
e: pieceSize + "rpx",
f: pieceSize + "rpx",
g: clipPath,
h: originY.value + "rpx",
i: offsetX.value + "rpx",
j: pieceSize + "rpx",
k: pieceSize + "rpx",
l: `url(${bgImage.value})`,
m: containerWidth.value + "rpx " + containerHeight.value + "rpx",
n: `-${originX.value - 30}rpx -${originY.value - 45}rpx`,
o: clipPath,
p: containerWidth.value + "rpx",
q: containerHeight.value + "rpx",
r: common_vendor.o(onStart),
s: common_vendor.o(onStart),
t: offsetX.value + "rpx",
v: containerWidth.value - pieceSize + "rpx"
};
};
}
};
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-2ca77e4c"]]);
wx.createComponent(Component);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/compontent/public/huakuai.js.map

View File

@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

View File

@ -0,0 +1 @@
<view class="captcha-container data-v-2ca77e4c" ref="container"><view class="font-title data-v-2ca77e4c">请通过滑块验证</view><view class="captcha-image data-v-2ca77e4c" style="position:relative;width:100%;height:400rpx;overflow:hidden"><image src="{{a}}" class="bg-image data-v-2ca77e4c" mode="widthFix" bindload="{{b}}"/><view class="overlay data-v-2ca77e4c" style="{{'width:' + p + ';' + ('height:' + q)}}"><view class="hole data-v-2ca77e4c" style="{{'top:' + c + ';' + ('left:' + d) + ';' + ('width:' + e) + ';' + ('height:' + f) + ';' + ('clip-path:' + g) + ';' + ('transform:' + 'translate(-50%, -50%)') + ';' + ('background-color:' + 'rgba(0,0,0,0.3)')}}"></view><view class="piece data-v-2ca77e4c" style="{{'top:' + h + ';' + ('left:' + i) + ';' + ('width:' + j) + ';' + ('height:' + k) + ';' + ('background-image:' + l) + ';' + ('background-size:' + m) + ';' + ('background-position:' + n) + ';' + ('clip-path:' + o) + ';' + ('transform:' + 'translate(-50%, -50%)')}}"></view></view></view><view class="slider-bar data-v-2ca77e4c"><view class="slider-button data-v-2ca77e4c" ref="btn" catchtouchstart="{{r}}" catchmousedown="{{s}}" style="{{'left:' + t + ';' + ('max-width:' + v)}}"></view></view></view>

View File

@ -0,0 +1,82 @@
.captcha-container.data-v-2ca77e4c {
/* margin: 20rpx auto; */
-webkit-user-select: none;
user-select: none;
background-color: #fff;
width: 600rpx;
height: 800rpx;
margin: 0 auto;
z-index: 999;
border-radius: 30rpx;
overflow: hidden;
padding: 0 30rpx;
}
.captcha-image.data-v-2ca77e4c {
position: relative;
overflow: hidden;
}
.bg-image.data-v-2ca77e4c {
position: relative;
z-index: 1;
display: block;
/* margin-top: 30rpx; */
width: 100%;
height: 100%;
}
.overlay.data-v-2ca77e4c {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 100;
pointer-events: none;
}
.hole.data-v-2ca77e4c,
.piece.data-v-2ca77e4c {
position: absolute;
z-index: 101;
border-radius: 5rpx;
box-shadow: 0 0 6rpx rgba(0, 0, 0, 0.4);
}
.hole.data-v-2ca77e4c {
background-color: rgba(0, 0, 0, 0.3);
}
.piece.data-v-2ca77e4c {
background-repeat: no-repeat;
background-size: cover;
cursor: grab;
}
.slider-bar.data-v-2ca77e4c {
position: relative;
height: 160rpx;
margin-top: 0rpx;
background: #eee;
border-radius: 80rpx;
width: 600rpx;
}
.slider-button.data-v-2ca77e4c {
position: absolute;
top: 20rpx;
width: 120rpx;
height: 120rpx;
background: #fff;
border-radius: 60rpx;
box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.2);
transition: background 0.3s;
-webkit-user-select: none;
user-select: none;
}
.slider-button.success.data-v-2ca77e4c {
background: #4caf50;
}
.font-title.data-v-2ca77e4c {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
height: 80rpx;
font-size: 30rpx;
font-weight: 700;
}

View File

@ -7,10 +7,11 @@ const _sfc_main = {
compontent_useWeChatAuth.useWeChatAuth();
const ceshi = common_vendor.reactive({
name: "",
openid: ""
openid: "",
accessToken: ""
});
const jumpto = () => {
common_vendor.index.__f__("log", "at pages/index/callback.vue:37", "???");
common_vendor.index.__f__("log", "at pages/index/callback.vue:51", "???");
common_vendor.index.navigateTo({
url: "/pages/pay/index"
});
@ -18,24 +19,46 @@ const _sfc_main = {
const getOpenId = (code) => {
const url = `https://www.focusnu.com/nursing-unit/weixin/wechat/callback?code=${encodeURIComponent(code)}`;
fetch(url).then((res) => res.json()).then((data) => {
common_vendor.index.__f__("log", "at pages/index/callback.vue:48", "✅ 获取用户信息成功:", data);
ceshi.name = data.nickname;
ceshi.openid = data.openid;
common_vendor.index.__f__("log", "at pages/index/callback.vue:62", "✅ 获取用户信息成功:", data);
ceshi.name = data.data.nickname;
ceshi.openid = data.data.openid;
ceshi.accessToken = data.accessToken;
common_vendor.index.setStorage({
key: "openid",
data: {
openid: data.openid
openid: data.data.openid,
accessToken: data.accessToken
}
});
getUserMessage();
}).catch((err) => {
common_vendor.index.__f__("error", "at pages/index/callback.vue:61", "❌ 获取用户信息失败:", err);
common_vendor.index.__f__("error", "at pages/index/callback.vue:77", "❌ 获取用户信息失败:", err);
});
};
const look = common_vendor.ref("");
const getUserMessage = () => {
const url = `https://www.focusnu.com/nursing-unit/h5Api/nuBizAdvisoryInfo/queryWeixinInfo?openId=${encodeURIComponent(ceshi.openid)}&wechatName=${encodeURIComponent(ceshi.name)}`;
fetch(url).then((res) => res.json()).then((data) => {
common_vendor.index.__f__("log", "at pages/index/callback.vue:69", "个人信息打印", data);
common_vendor.index.__f__("log", "at pages/index/callback.vue:88", "个人信息打印", data);
const urlpost = `${data.result.serverUrl}/weiXinPay/getUserInfo`;
const payload = {
openid: ceshi.openid,
access_token: ceshi.accessToken
// serverUrl: serve.value
};
common_vendor.index.__f__("log", "at pages/index/callback.vue:97", "???/", payload);
fetch(urlpost, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(payload)
}).then((res) => res.json()).then((data2) => {
look.value = data2;
common_vendor.index.__f__("log", "at pages/index/callback.vue:109", "", data2);
}).catch((err) => {
common_vendor.index.__f__("error", "at pages/index/callback.vue:112", "请求失败:", err);
});
getjigou();
});
};
@ -44,7 +67,7 @@ const _sfc_main = {
const url = `https://www.focusnu.com/nursing-unit/sys/sysDepart/queryInstitutionsList`;
fetch(url).then((res) => res.json()).then((data) => {
jigouArray.value = [...data];
common_vendor.index.__f__("log", "at pages/index/callback.vue:80", "机构打印", jigouArray.value);
common_vendor.index.__f__("log", "at pages/index/callback.vue:127", "机构打印", jigouArray.value);
});
};
const secondArray = common_vendor.ref([]);
@ -64,7 +87,7 @@ const _sfc_main = {
openId: ceshi.openid,
serverUrl: element.serverUrl
};
common_vendor.index.__f__("log", "at pages/index/callback.vue:102", "???/", payload);
common_vendor.index.__f__("log", "at pages/index/callback.vue:149", "???/", payload);
fetch(urlpost, {
method: "POST",
headers: {
@ -72,9 +95,9 @@ const _sfc_main = {
},
body: JSON.stringify(payload)
}).then((res) => res.json()).then((data) => {
common_vendor.index.__f__("log", "at pages/index/callback.vue:113", "???", data);
common_vendor.index.__f__("log", "at pages/index/callback.vue:160", "???", data);
}).catch((err) => {
common_vendor.index.__f__("error", "at pages/index/callback.vue:116", "请求失败:", err);
common_vendor.index.__f__("error", "at pages/index/callback.vue:163", "请求失败:", err);
});
};
common_vendor.onLoad(() => {
@ -88,7 +111,7 @@ const _sfc_main = {
query[key] = decodeURIComponent(value);
});
}
common_vendor.index.__f__("log", "at pages/index/callback.vue:131", "解析到的 query 参数:", query);
common_vendor.index.__f__("log", "at pages/index/callback.vue:178", "解析到的 query 参数:", query);
if (query.code) {
getOpenId(query.code);
}

View File

@ -1,10 +1,10 @@
.callback-container.data-v-dd49f168 {
padding: 24px;
padding: 24px;
}
.avatar.data-v-dd49f168 {
width: 80px;
height: 80px;
border-radius: 40px;
margin-top: 12px;
width: 80px;
height: 80px;
border-radius: 40px;
margin-top: 12px;
}

View File

@ -1,12 +1,21 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const common_assets = require("../../common/assets.js");
if (!Array) {
const _component_transition = common_vendor.resolveComponent("transition");
_component_transition();
}
const _sfc_main = {
__name: "code",
setup(__props) {
const phonenumber = common_vendor.ref("");
const captcha = common_vendor.ref(["", "", "", ""]);
const focusedIndex = common_vendor.ref(0);
const isFadingOut = common_vendor.ref(false);
const maskColor = common_vendor.ref("rgba(0, 0, 0, 0.5)");
function closeModal() {
isFadingOut.value = false;
}
const handleInput = (index) => {
if (captcha.value[index]) {
if (index < 3) {
@ -35,16 +44,39 @@ const _sfc_main = {
const submitCaptcha = () => {
const code = captcha.value.join("");
if (code.length === 4) {
common_vendor.index.__f__("log", "at pages/index/code.vue:103", "提交验证码:", code);
common_vendor.index.__f__("log", "at pages/index/code.vue:118", "提交验证码:", code);
} else {
common_vendor.index.__f__("log", "at pages/index/code.vue:106", "验证码未输入完整");
common_vendor.index.__f__("log", "at pages/index/code.vue:121", "验证码未输入完整");
}
};
const getcode = () => {
const url = `https://www.focusnu.com/nursing-unit/sys/randomImage/${Date.now()}`;
fetch(url).then((res) => res.json()).then((data) => {
common_vendor.index.__f__("log", "at pages/index/code.vue:148", "code测试", data);
});
};
const countdown = common_vendor.ref(60);
let timerId = null;
common_vendor.onUnmounted(() => {
if (timerId) {
clearInterval(timerId);
}
});
common_vendor.onLoad((options) => {
phonenumber.value = options.phonenumber;
getcode();
countdown.value = 60;
timerId = setInterval(() => {
if (countdown.value > 0) {
countdown.value--;
} else {
clearInterval(timerId);
timerId = null;
}
}, 1e3);
});
return (_ctx, _cache) => {
return {
return common_vendor.e({
a: common_assets._imports_0,
b: common_assets._imports_1,
c: common_assets._imports_2,
@ -58,8 +90,25 @@ const _sfc_main = {
e: captcha.value[index],
f: index
};
}),
f: !countdown.value,
g: common_vendor.t(countdown.value),
h: countdown.value,
i: common_vendor.o(($event) => isFadingOut.value = true),
j: isFadingOut.value
}, isFadingOut.value ? {
k: common_vendor.o(closeModal),
l: maskColor.value
} : {}, {
m: common_vendor.p({
name: "fade"
}),
n: isFadingOut.value
}, isFadingOut.value ? {} : {}, {
o: common_vendor.p({
name: "slide-up"
})
};
});
};
}
};

View File

@ -1 +1 @@
<view class="login-container data-v-7e06bee2"><view class="title data-v-7e06bee2"><image class="title-imge data-v-7e06bee2" src="{{a}}"/><view class="title-font data-v-7e06bee2"><view class=" data-v-7e06bee2">您好,</view><view class=" data-v-7e06bee2">欢迎使用nu护理单元~</view></view></view><image class="photo-imge data-v-7e06bee2" src="{{b}}"/><image class="old-imge data-v-7e06bee2" src="{{c}}"/><view class="under-container data-v-7e06bee2"><view class="under-container-title data-v-7e06bee2"><view class="code-title data-v-7e06bee2"> 请输入验证码 </view><view class="code-number data-v-7e06bee2"> 验证码已发送至{{d}}</view></view><view class="captcha-container data-v-7e06bee2"><view class="captcha-box data-v-7e06bee2"><view wx:for="{{e}}" wx:for-item="digit" wx:key="f" class="captcha-item data-v-7e06bee2"><input class="captcha-input data-v-7e06bee2" type="number" maxlength="1" placeholder="{{digit.a}}" bindinput="{{digit.b}}" bindkeydown="{{digit.c}}" focus="{{digit.d}}" value="{{digit.e}}"/></view></view></view><view class="data-v-7e06bee2" style="width:100%"><view class="right-blue data-v-7e06bee2"> 重新发送 </view></view></view></view>
<view class="login-container data-v-7e06bee2"><view class="title data-v-7e06bee2"><image class="title-imge data-v-7e06bee2" src="{{a}}"/><view class="title-font data-v-7e06bee2"><view class=" data-v-7e06bee2">您好,</view><view class=" data-v-7e06bee2">欢迎使用护理单元~</view></view></view><image class="photo-imge data-v-7e06bee2" src="{{b}}"/><image class="old-imge data-v-7e06bee2" src="{{c}}"/><view class="under-container data-v-7e06bee2"><view class="under-container-title data-v-7e06bee2"><view class="code-title data-v-7e06bee2"> 请输入验证码 </view><view class="code-number data-v-7e06bee2"> 验证码已发送至{{d}}</view></view><view class="captcha-container data-v-7e06bee2"><view class="captcha-box data-v-7e06bee2"><view wx:for="{{e}}" wx:for-item="digit" wx:key="f" class="captcha-item data-v-7e06bee2"><input class="captcha-input data-v-7e06bee2" type="number" maxlength="1" placeholder="{{digit.a}}" bindinput="{{digit.b}}" bindkeydown="{{digit.c}}" focus="{{digit.d}}" value="{{digit.e}}"/></view></view></view><view class="under-view data-v-7e06bee2"><view class="right-blue data-v-7e06bee2" hidden="{{!f}}"> 重新发送 </view><view class="right-white data-v-7e06bee2" hidden="{{!h}}">{{g}}S后重新发送 </view><view class="right-black data-v-7e06bee2" bindtap="{{i}}"> 收不到验证码 </view></view></view><transition wx:if="{{m}}" class="data-v-7e06bee2" u-s="{{['d']}}" u-i="7e06bee2-0" bind:__l="__l" u-p="{{m}}"><view wx:if="{{j}}" class="overlay data-v-7e06bee2" bindtap="{{k}}" style="{{'background-color:' + l}}"/></transition><transition wx:if="{{o}}" class="data-v-7e06bee2" u-s="{{['d']}}" u-i="7e06bee2-1" bind:__l="__l" u-p="{{o}}"><view wx:if="{{n}}" class="modal data-v-7e06bee2"><view class="modal-title data-v-7e06bee2">收不到验证码</view><view class="model-p data-v-7e06bee2"><view class="text-view data-v-7e06bee2" style="font-weight:600">手机号可正常使用:</view><view class="text-view data-v-7e06bee2">1 是否输错手机号</view><view class="text-view data-v-7e06bee2">2 手机是否设置短信拦截/欠费/信号不好</view><view class="text-view data-v-7e06bee2">3 手机内存是否满了</view><view class="text-view data-v-7e06bee2">4 手机卡是否为物联卡而非SIM卡</view></view></view></transition></view>

View File

@ -26,25 +26,25 @@
.login-container.data-v-7e06bee2 {
display: flex;
flex-direction: column;
align-items: center;
height: 100vh;
min-height: 100vh;
width: 100%;
background-color: #eff1fc;
position: relative;
}
.login-container .title.data-v-7e06bee2 {
display: flex;
margin-top: 120rpx;
margin-top: 70rpx;
align-items: center;
}
.login-container .title .title-imge.data-v-7e06bee2 {
width: 110rpx;
height: 110rpx;
margin-right: 30rpx;
width: 100rpx;
height: 105rpx;
margin-left: 100rpx;
}
.login-container .title .title-font.data-v-7e06bee2 {
font-size: 35rpx;
font-weight: 500;
font-weight: 600;
margin-left: 105rpx;
margin-top: 10rpx;
}
.login-container .photo-imge.data-v-7e06bee2 {
position: absolute;
@ -55,18 +55,17 @@
}
.login-container .old-imge.data-v-7e06bee2 {
position: absolute;
left: 50%;
transform: translate(-50%, -50%);
top: 550rpx;
right: 30rpx;
top: 400rpx;
width: 400rpx;
height: 400rpx;
}
.login-container .under-container.data-v-7e06bee2 {
position: absolute;
position: fixed;
left: 0;
bottom: 0;
width: 100%;
height: 680rpx;
height: 45vh;
background-color: #fff;
border-top-left-radius: 50rpx;
border-top-right-radius: 50rpx;
@ -113,7 +112,7 @@
}
.under-container-title .code-title.data-v-7e06bee2 {
margin-left: 80rpx;
font-size: 33rpx;
font-size: 35rpx;
color: black;
font-weight: 500;
margin-bottom: 20rpx;
@ -127,6 +126,7 @@
display: flex;
flex-direction: column;
align-items: center;
margin-top: 20rpx;
}
.captcha-box.data-v-7e06bee2 {
display: flex;
@ -141,9 +141,10 @@
.captcha-input.data-v-7e06bee2 {
width: 110rpx;
height: 110rpx;
border: 2rpx solid #C0C5D9;
border-radius: 20rpx;
font-size: 28rpx;
border: 3rpx solid #C0C5D9;
border-radius: 30rpx;
font-size: 50rpx;
font-weight: 700;
text-align: center;
margin-right: 40rpx;
outline: none;
@ -151,18 +152,119 @@
.captcha-input.data-v-7e06bee2:focus {
border-color: #00C9FF;
}
.submit-btn.data-v-7e06bee2 {
padding: 10rpx 20rpx;
background-color: #00C9FF;
color: white;
border-radius: 43rpx;
font-size: 28rpx;
margin-top: 20rpx;
width: 80%;
text-align: center;
}
.right-blue.data-v-7e06bee2 {
float: right;
color: #0083FF;
margin-left: 60rpx;
}
.right-white.data-v-7e06bee2 {
color: #c2c6d3;
margin-left: 60rpx;
}
.right-black.data-v-7e06bee2 {
margin-right: 80rpx;
color: black;
}
.under-view.data-v-7e06bee2 {
width: 100%;
margin-top: 10rpx;
display: flex;
justify-content: space-between;
}
/* 遮罩 */
.overlay.data-v-7e06bee2 {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 998;
}
/* 弹窗 */
.modal.data-v-7e06bee2 {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
background-color: #fff;
z-index: 999;
border-top-left-radius: 50rpx;
border-top-right-radius: 50rpx;
width: 100%;
height: 500rpx;
display: flex;
flex-direction: column;
align-items: center;
}
.modal .modal-title.data-v-7e06bee2 {
font-size: 32rpx;
font-weight: 700;
margin: 50rpx 0;
margin-bottom: 30rpx;
}
.modal .model-p.data-v-7e06bee2 {
padding: 0 50rpx;
width: 100%;
font-size: 30rpx;
}
.modal .model-down.data-v-7e06bee2 {
display: flex;
width: 100%;
justify-content: space-between;
padding: 0 50rpx;
margin-top: 40rpx;
}
.modal .model-down .model-white.data-v-7e06bee2 {
border-radius: 50rpx;
width: 300rpx;
height: 95rpx;
border: 5rpx solid #008dff;
color: #008dff;
font-size: 35rpx;
display: flex;
justify-content: center;
align-items: center;
}
.modal .model-down .model-blue.data-v-7e06bee2 {
border-radius: 50rpx;
width: 300rpx;
height: 95rpx;
background: linear-gradient(to right, #00C9FF, #0076FF);
color: #fff;
font-size: 35rpx;
display: flex;
justify-content: center;
align-items: center;
}
/* 动画:遮罩淡入淡出 */
.fade-enter-active.data-v-7e06bee2,
.fade-leave-active.data-v-7e06bee2 {
transition: opacity 0.3s;
}
.fade-enter-from.data-v-7e06bee2,
.fade-leave-to.data-v-7e06bee2 {
opacity: 0;
}
.fade-enter-to.data-v-7e06bee2,
.fade-leave-from.data-v-7e06bee2 {
opacity: 1;
}
/* 动画:弹窗上滑 */
.slide-up-enter-active.data-v-7e06bee2,
.slide-up-leave-active.data-v-7e06bee2 {
transition: transform 0.3s;
}
.slide-up-enter-from.data-v-7e06bee2,
.slide-up-leave-to.data-v-7e06bee2 {
transform: translateY(100%);
}
.slide-up-enter-to.data-v-7e06bee2,
.slide-up-leave-from.data-v-7e06bee2 {
transform: translateY(0);
}
.text-view.data-v-7e06bee2 {
margin-bottom: 20rpx;
}

View File

@ -1,55 +1,20 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const common_assets = require("../../common/assets.js");
const compontent_useWeChatAuth = require("../../compontent/useWeChatAuth.js");
const _sfc_main = {
__name: "index",
setup(__props) {
const isTarget = common_vendor.ref(false);
const isFadingOut = common_vendor.ref(false);
const {
login
} = compontent_useWeChatAuth.useWeChatAuth();
let timerId = null;
const loginIt = () => {
if (timerId) {
clearTimeout(timerId);
}
if (!isTarget.value) {
isFadingOut.value = true;
timerId = setTimeout(() => {
isFadingOut.value = false;
}, 1e3);
} else {
login();
}
};
const yanzhengma = () => {
if (timerId) {
clearTimeout(timerId);
}
if (!isTarget.value) {
isFadingOut.value = true;
timerId = setTimeout(() => {
isFadingOut.value = false;
}, 1e3);
} else {
common_vendor.index.navigateTo({
url: "/pages/index/phonebumber"
});
}
};
const itemArray = ["NU", "动态", "我的"];
const itemTarget = common_vendor.ref(0);
return (_ctx, _cache) => {
return {
a: common_assets._imports_0,
b: common_assets._imports_1,
c: common_assets._imports_2,
d: isFadingOut.value,
e: common_vendor.n(isTarget.value ? "radio-circle-target" : "radio-circle"),
f: common_vendor.o(($event) => isTarget.value = !isTarget.value),
g: common_vendor.o(($event) => isTarget.value = !isTarget.value),
h: common_vendor.o(loginIt),
i: common_vendor.o(yanzhengma)
a: common_vendor.f(itemArray, (item, index, i0) => {
return {
a: common_vendor.t(item),
b: common_vendor.n(itemTarget.value === index ? `bottom-button-target` : `bottom-button`),
c: common_vendor.o(($event) => itemTarget.value = index),
d: itemTarget.value === index
};
})
};
};
}

View File

@ -1,4 +1,4 @@
{
"navigationBarTitleText": "登录",
"navigationBarTitleText": "首页",
"usingComponents": {}
}

View File

@ -1 +1 @@
<view class="login-container data-v-1cf27b2a"><view class="title data-v-1cf27b2a"><image class="title-imge data-v-1cf27b2a" src="{{a}}"/><view class="title-font data-v-1cf27b2a"><view class=" data-v-1cf27b2a">您好,</view><view class=" data-v-1cf27b2a">欢迎使用nu护理单元~</view></view></view><image class="photo-imge data-v-1cf27b2a" src="{{b}}"/><image class="old-imge data-v-1cf27b2a" src="{{c}}"/><view class="under-container data-v-1cf27b2a"><view class="under-container-title data-v-1cf27b2a"><view hidden="{{!d}}" class="bubble data-v-1cf27b2a"> 请勾选同意该协议 </view><view class="{{['data-v-1cf27b2a', e]}}" bindtap="{{f}}"></view><view class="radio-circle-font data-v-1cf27b2a" bindtap="{{g}}">登录代表您已同意</view><view class="radio-circle-blue data-v-1cf27b2a"> 《法律条款与隐私政策》 </view></view><view class="button-blue data-v-1cf27b2a" bindtap="{{h}}"> 一键登录 </view><view class="button-white data-v-1cf27b2a" bindtap="{{i}}"> 手机登录/注册 </view></view></view>
<view class="login-container data-v-1cf27b2a"><view class="botton-view data-v-1cf27b2a"><view wx:for="{{a}}" wx:for-item="item" class="array-father data-v-1cf27b2a"><view class="{{['data-v-1cf27b2a', item.b]}}" bindtap="{{item.c}}"><view class=" data-v-1cf27b2a">{{item.a}}</view></view><view hidden="{{!item.d}}" class="blue-heng data-v-1cf27b2a"></view></view></view></view>

View File

@ -26,153 +26,47 @@
.login-container.data-v-1cf27b2a {
display: flex;
flex-direction: column;
align-items: center;
height: 100vh;
min-height: 100vh;
width: 100%;
background-color: #eff1fc;
position: relative;
}
.login-container .title.data-v-1cf27b2a {
display: flex;
margin-top: 120rpx;
align-items: center;
.array-father.data-v-1cf27b2a {
width: 33%;
position: relative;
}
.login-container .title .title-imge.data-v-1cf27b2a {
width: 110rpx;
height: 110rpx;
margin-right: 30rpx;
}
.login-container .title .title-font.data-v-1cf27b2a {
font-size: 35rpx;
font-weight: 500;
}
.login-container .photo-imge.data-v-1cf27b2a {
position: absolute;
top: 120rpx;
left: 0;
width: 100%;
height: 1100rpx;
}
.login-container .old-imge.data-v-1cf27b2a {
position: absolute;
left: 50%;
transform: translate(-50%, -50%);
top: 550rpx;
width: 400rpx;
height: 400rpx;
}
.login-container .under-container.data-v-1cf27b2a {
position: absolute;
left: 0;
.botton-view.data-v-1cf27b2a {
position: fixed;
bottom: 0;
left: 0;
height: 200rpx;
width: 100%;
height: 680rpx;
background-color: #fff;
border-top-left-radius: 50rpx;
border-top-right-radius: 50rpx;
box-shadow: 10rpx 10rpx 20rpx rgba(0, 0, 0, 0.1);
display: flex;
flex-direction: column;
align-items: center;
}
.login-container .under-container .radio-circle.data-v-1cf27b2a {
position: relative;
margin-top: 2rpx;
width: 40rpx;
height: 40rpx;
border-radius: 50%;
border: 2rpx solid #C0C5D9;
background-color: transparent;
}
.login-container .under-container .radio-circle-target.data-v-1cf27b2a {
position: relative;
margin-top: 2rpx;
width: 40rpx;
height: 40rpx;
border-radius: 50%;
border: 2rpx solid #C0C5D9;
background-color: transparent;
}
.login-container .under-container .radio-circle-target.data-v-1cf27b2a::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 30rpx;
height: 30rpx;
background-color: #00C9FF;
border-radius: 50%;
}
.under-container-title.data-v-1cf27b2a {
display: flex;
margin-top: 60rpx;
margin-bottom: 30rpx;
align-items: center;
font-size: 25rpx;
justify-content: space-between;
font-weight: 500;
}
.under-container-title .radio-circle-blue.data-v-1cf27b2a {
color: #0083FF;
margin-top: 3rpx;
}
.under-container-title .radio-circle-font.data-v-1cf27b2a {
color: #5A607F;
margin-left: 18rpx;
margin-top: 3rpx;
}
.button-blue.data-v-1cf27b2a {
width: 80%;
.botton-view .bottom-button.data-v-1cf27b2a {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
height: 100rpx;
border-radius: 43rpx;
background: linear-gradient(to right, #00C9FF, #0076FF);
color: #fff;
font-size: 33rpx;
margin-bottom: 30rpx;
}
.button-white.data-v-1cf27b2a {
width: 80%;
.botton-view .bottom-button-target.data-v-1cf27b2a {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
height: 100rpx;
border-radius: 43rpx;
color: #5A607F;
font-size: 33rpx;
margin-bottom: 30rpx;
border: 2rpx solid #C0C5D9;
color: #2a85eb;
}
.bubble.data-v-1cf27b2a {
transition: opacity 1s ease-out;
position: absolute;
left: 25rpx;
top: -5rpx;
background-color: black;
color: white;
padding: 10rpx;
border-radius: 10rpx;
font-size: 23rpx;
box-shadow: 2rpx 2rpx 5rpx rgba(0, 0, 0, 0.2);
pointer-events: none;
opacity: 1;
/* 初始为可见 */
}
.bubble.data-v-1cf27b2a::after {
transition: opacity 1s ease-out;
content: "";
.botton-view .blue-heng.data-v-1cf27b2a {
height: 6rpx;
width: 150rpx;
background-color: #2a85eb;
position: absolute;
bottom: 55rpx;
left: 50%;
bottom: -8rpx;
border-left: 10rpx solid transparent;
border-right: 10rpx solid transparent;
border-top: 10rpx solid black;
/* 左边缘到父容器左边的距离占父宽度 50% */
transform: translateX(-50%);
}
/* 隐藏气泡 */
.bubble.hidden.data-v-1cf27b2a {
opacity: 0;
}

View File

@ -15,7 +15,7 @@ const _sfc_main = {
const phonenumber = common_vendor.ref("");
const canClick = common_vendor.ref(false);
const isRight = (res) => {
common_vendor.index.__f__("log", "at pages/index/phonebumber.vue:48", "????", res.detail.value);
common_vendor.index.__f__("log", "at pages/index/phonebumber.vue:49", "????", res.detail.value);
if (is11DigitNumber(res.detail.value)) {
phonenumber.value = res.detail.value;
canClick.value = true;

View File

@ -1 +1 @@
<view class="login-container data-v-5d75f7c6"><view class="title data-v-5d75f7c6"><image class="title-imge data-v-5d75f7c6" src="{{a}}"/><view class="title-font data-v-5d75f7c6"><view class=" data-v-5d75f7c6">您好,</view><view class=" data-v-5d75f7c6">欢迎使用nu护理单元~</view></view></view><image class="photo-imge data-v-5d75f7c6" src="{{b}}"/><image class="old-imge data-v-5d75f7c6" src="{{c}}"/><view class="under-container data-v-5d75f7c6"><view class="under-container-title data-v-5d75f7c6"><view class="under-container-input data-v-5d75f7c6"><view class="input-left data-v-5d75f7c6">+86</view><input class="data-v-5d75f7c6" type="number" style="width:600rpx" maxlength="11" placeholder="请输入手机号" bindinput="{{d}}"/></view></view><view class="button-blue data-v-5d75f7c6" hidden="{{!e}}" bindtap="{{f}}"> 获得验证码 </view><view class="button-gray data-v-5d75f7c6" hidden="{{!g}}"> 获得验证码 </view></view></view>
<view class="login-container data-v-5d75f7c6"><view class="title data-v-5d75f7c6"><image class="title-imge data-v-5d75f7c6" src="{{a}}"/><view class="title-font data-v-5d75f7c6"><view class=" data-v-5d75f7c6">您好,</view><view class=" data-v-5d75f7c6">欢迎使用护理单元~</view></view></view><image class="photo-imge data-v-5d75f7c6" src="{{b}}"/><image class="old-imge data-v-5d75f7c6" src="{{c}}"/><view class="under-container data-v-5d75f7c6"><view class="under-container-title data-v-5d75f7c6"><view class="under-container-input data-v-5d75f7c6"><view class="input-left data-v-5d75f7c6">+86</view><input class="data-v-5d75f7c6" type="number" style="width:600rpx;font-size:33rpx" maxlength="11" placeholder="请输入绑定手机号" bindinput="{{d}}"/></view></view><view class="button-blue data-v-5d75f7c6" hidden="{{!e}}" bindtap="{{f}}"> 获得验证码 </view><view class="button-gray data-v-5d75f7c6" hidden="{{!g}}"> 获得验证码 </view></view></view>

View File

@ -26,25 +26,25 @@
.login-container.data-v-5d75f7c6 {
display: flex;
flex-direction: column;
align-items: center;
height: 100vh;
min-height: 100vh;
width: 100%;
background-color: #eff1fc;
position: relative;
}
.login-container .title.data-v-5d75f7c6 {
display: flex;
margin-top: 120rpx;
margin-top: 70rpx;
align-items: center;
}
.login-container .title .title-imge.data-v-5d75f7c6 {
width: 110rpx;
height: 110rpx;
margin-right: 30rpx;
width: 100rpx;
height: 105rpx;
margin-left: 100rpx;
}
.login-container .title .title-font.data-v-5d75f7c6 {
font-size: 35rpx;
font-weight: 500;
font-weight: 600;
margin-left: 105rpx;
margin-top: 10rpx;
}
.login-container .photo-imge.data-v-5d75f7c6 {
position: absolute;
@ -55,18 +55,17 @@
}
.login-container .old-imge.data-v-5d75f7c6 {
position: absolute;
left: 50%;
transform: translate(-50%, -50%);
top: 550rpx;
right: 30rpx;
top: 400rpx;
width: 400rpx;
height: 400rpx;
}
.login-container .under-container.data-v-5d75f7c6 {
position: absolute;
position: fixed;
left: 0;
bottom: 0;
width: 100%;
height: 680rpx;
height: 45vh;
background-color: #fff;
border-top-left-radius: 50rpx;
border-top-right-radius: 50rpx;
@ -107,7 +106,7 @@
.under-container-title.data-v-5d75f7c6 {
display: flex;
margin-top: 60rpx;
margin-bottom: 30rpx;
margin-bottom: 60rpx;
align-items: center;
justify-content: center;
font-size: 25rpx;

View File

@ -0,0 +1,144 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const compontent_useWeChatAuth = require("../../compontent/useWeChatAuth.js");
const _sfc_main = {
__name: "callback",
setup(__props) {
compontent_useWeChatAuth.useWeChatAuth();
const ceshi = common_vendor.reactive({
name: "",
openid: "",
accessToken: ""
});
const jumpto = () => {
common_vendor.index.__f__("log", "at pages/login/callback.vue:51", "???");
common_vendor.index.navigateTo({
url: "/pages/pay/index"
});
};
const getOpenId = (code) => {
const url = `https://www.focusnu.com/nursing-unit/weixin/wechat/callback?code=${encodeURIComponent(code)}`;
fetch(url).then((res) => res.json()).then((data) => {
common_vendor.index.__f__("log", "at pages/login/callback.vue:62", "✅ 获取用户信息成功:", data);
ceshi.name = data.data.nickname;
ceshi.openid = data.data.openid;
ceshi.accessToken = data.accessToken;
common_vendor.index.setStorage({
key: "openid",
data: {
openid: data.data.openid,
accessToken: data.accessToken
}
});
getUserMessage();
}).catch((err) => {
common_vendor.index.__f__("error", "at pages/login/callback.vue:77", "❌ 获取用户信息失败:", err);
});
};
const look = common_vendor.ref("");
const getUserMessage = () => {
const url = `https://www.focusnu.com/nursing-unit/h5Api/nuBizAdvisoryInfo/queryWeixinInfo?openId=${encodeURIComponent(ceshi.openid)}&wechatName=${encodeURIComponent(ceshi.name)}`;
fetch(url).then((res) => res.json()).then((data) => {
common_vendor.index.__f__("log", "at pages/login/callback.vue:88", "个人信息打印", data);
const urlpost = `${data.result.serverUrl}/weiXinPay/getUserInfo`;
const payload = {
openid: ceshi.openid,
access_token: ceshi.accessToken
// serverUrl: serve.value
};
common_vendor.index.__f__("log", "at pages/login/callback.vue:97", "???/", payload);
fetch(urlpost, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(payload)
}).then((res) => res.json()).then((data2) => {
look.value = data2;
common_vendor.index.__f__("log", "at pages/login/callback.vue:109", "", data2);
}).catch((err) => {
common_vendor.index.__f__("error", "at pages/login/callback.vue:112", "请求失败:", err);
});
getjigou();
});
};
const jigouArray = common_vendor.ref([]);
const getjigou = () => {
const url = `https://www.focusnu.com/nursing-unit/sys/sysDepart/queryInstitutionsList`;
fetch(url).then((res) => res.json()).then((data) => {
jigouArray.value = [...data];
common_vendor.index.__f__("log", "at pages/login/callback.vue:127", "机构打印", jigouArray.value);
});
};
const secondArray = common_vendor.ref([]);
const jigouClick = (element) => {
const url = `${element.serverUrl}/h5Api/nuBaseInfo/list`;
fetch(url).then((res) => res.json()).then((data) => {
secondArray.value = [...data.result];
});
common_vendor.index.setStorage({
key: "serverUrl",
data: {
url: element.serverUrl
}
});
const urlpost = `https://www.focusnu.com/nursing-unit/h5Api/nuBizAdvisoryInfo/editNuBizAdvisoryInfo`;
const payload = {
openId: ceshi.openid,
serverUrl: element.serverUrl
};
common_vendor.index.__f__("log", "at pages/login/callback.vue:149", "???/", payload);
fetch(urlpost, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(payload)
}).then((res) => res.json()).then((data) => {
common_vendor.index.__f__("log", "at pages/login/callback.vue:160", "???", data);
}).catch((err) => {
common_vendor.index.__f__("error", "at pages/login/callback.vue:163", "请求失败:", err);
});
};
common_vendor.onLoad(() => {
var _a;
const href = window.location.href;
const queryString = (_a = href.split("?")[1]) == null ? void 0 : _a.split("#")[0];
const query = {};
if (queryString) {
queryString.split("&").forEach((pair) => {
const [key, value] = pair.split("=");
query[key] = decodeURIComponent(value);
});
}
common_vendor.index.__f__("log", "at pages/login/callback.vue:178", "解析到的 query 参数:", query);
if (query.code) {
getOpenId(query.code);
}
});
return (_ctx, _cache) => {
return {
a: common_vendor.t(ceshi.name),
b: common_vendor.t(ceshi.openid),
c: common_vendor.f(jigouArray.value, (item, index, i0) => {
return {
a: common_vendor.t(item.departName),
b: common_vendor.o(($event) => jigouClick(item), index),
c: `https://www.focusnu.com/nursing-unit/sys/common/static/${item.picUrl}`,
d: index
};
}),
d: common_vendor.f(secondArray.value, (item, index, i0) => {
return {
a: common_vendor.t(item.nuName),
b: index,
c: common_vendor.o(jumpto, index)
};
})
};
};
}
};
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-47aa4dce"]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/login/callback.js.map

View File

@ -0,0 +1,4 @@
{
"navigationBarTitleText": "登录",
"usingComponents": {}
}

View File

@ -0,0 +1 @@
<view class="callback-container data-v-47aa4dce"> 回调成功{{a}}{{b}} <view wx:for="{{c}}" wx:for-item="item" wx:key="d" class="data-v-47aa4dce"><view class="data-v-47aa4dce" style="font-size:30rpx;margin-top:10rpx;font-weight:700" bindtap="{{item.b}}">{{item.a}}</view><image class="data-v-47aa4dce" style="width:60rpx;height:60rpx" src="{{item.c}}"/></view><view wx:for="{{d}}" wx:for-item="item" wx:key="b" class="data-v-47aa4dce" bindtap="{{item.c}}"><view class="data-v-47aa4dce" style="font-size:30rpx;margin-top:10rpx;font-weight:700">{{item.a}}</view></view></view>

View File

@ -0,0 +1,10 @@
.callback-container.data-v-47aa4dce {
padding: 24px;
}
.avatar.data-v-47aa4dce {
width: 80px;
height: 80px;
border-radius: 40px;
margin-top: 12px;
}

View File

@ -0,0 +1,120 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const common_assets = require("../../common/assets.js");
if (!Array) {
const _component_transition = common_vendor.resolveComponent("transition");
_component_transition();
}
const _sfc_main = {
__name: "code",
setup(__props) {
const phonenumber = common_vendor.ref("");
const captcha = common_vendor.ref(["", "", "", ""]);
const focusedIndex = common_vendor.ref(0);
const isFadingOut = common_vendor.ref(false);
const maskColor = common_vendor.ref("rgba(0, 0, 0, 0.5)");
function closeModal() {
isFadingOut.value = false;
}
const handleInput = (index) => {
if (captcha.value[index]) {
if (index < 3) {
focusedIndex.value = index + 1;
}
}
let isFour = true;
captcha.value.forEach((number) => {
if (!number) {
isFour = false;
}
});
common_vendor.nextTick$1(() => {
if (isFour) {
submitCaptcha();
}
});
};
const handleKeydown = (index, event) => {
if (event.key === "Backspace" && !captcha.value[index]) {
if (index > 0) {
focusedIndex.value = index - 1;
}
}
};
const submitCaptcha = () => {
const code = captcha.value.join("");
if (code.length === 4) {
common_vendor.index.__f__("log", "at pages/login/code.vue:118", "提交验证码:", code);
common_vendor.index.reLaunch({
url: `/pages/index/index`
});
} else {
common_vendor.index.__f__("log", "at pages/login/code.vue:125", "验证码未输入完整");
}
};
const getcode = () => {
const url = `https://www.focusnu.com/nursing-unit/sys/randomImage/${Date.now()}`;
fetch(url).then((res) => res.json()).then((data) => {
common_vendor.index.__f__("log", "at pages/login/code.vue:152", "code测试", data);
});
};
const countdown = common_vendor.ref(60);
let timerId = null;
common_vendor.onUnmounted(() => {
if (timerId) {
clearInterval(timerId);
}
});
common_vendor.onLoad((options) => {
phonenumber.value = options.phonenumber;
getcode();
countdown.value = 60;
timerId = setInterval(() => {
if (countdown.value > 0) {
countdown.value--;
} else {
clearInterval(timerId);
timerId = null;
}
}, 1e3);
});
return (_ctx, _cache) => {
return common_vendor.e({
a: common_assets._imports_0,
b: common_assets._imports_1,
c: common_assets._imports_2,
d: common_vendor.t(phonenumber.value),
e: common_vendor.f(captcha.value, (digit, index, i0) => {
return {
a: index < 3 ? "" : " ",
b: common_vendor.o([($event) => captcha.value[index] = $event.detail.value, index, ($event) => handleInput(index), index], index),
c: common_vendor.o(($event) => handleKeydown(index, $event), index),
d: focusedIndex.value === index,
e: captcha.value[index],
f: index
};
}),
f: !countdown.value,
g: common_vendor.t(countdown.value),
h: countdown.value,
i: common_vendor.o(($event) => isFadingOut.value = true),
j: isFadingOut.value
}, isFadingOut.value ? {
k: common_vendor.o(closeModal),
l: maskColor.value
} : {}, {
m: common_vendor.p({
name: "fade"
}),
n: isFadingOut.value
}, isFadingOut.value ? {} : {}, {
o: common_vendor.p({
name: "slide-up"
})
});
};
}
};
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-7f72106f"]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/login/code.js.map

View File

@ -0,0 +1,4 @@
{
"navigationBarTitleText": "登录",
"usingComponents": {}
}

View File

@ -0,0 +1 @@
<view class="login-container data-v-7f72106f"><view class="title data-v-7f72106f"><image class="title-imge data-v-7f72106f" src="{{a}}"/><view class="title-font data-v-7f72106f"><view class=" data-v-7f72106f">您好,</view><view class=" data-v-7f72106f">欢迎使用护理单元~</view></view></view><image class="photo-imge data-v-7f72106f" src="{{b}}"/><image class="old-imge data-v-7f72106f" src="{{c}}"/><view class="under-container data-v-7f72106f"><view class="under-container-title data-v-7f72106f"><view class="code-title data-v-7f72106f"> 请输入验证码 </view><view class="code-number data-v-7f72106f"> 验证码已发送至{{d}}</view></view><view class="captcha-container data-v-7f72106f"><view class="captcha-box data-v-7f72106f"><view wx:for="{{e}}" wx:for-item="digit" wx:key="f" class="captcha-item data-v-7f72106f"><input class="captcha-input data-v-7f72106f" type="number" maxlength="1" placeholder="{{digit.a}}" bindinput="{{digit.b}}" bindkeydown="{{digit.c}}" focus="{{digit.d}}" value="{{digit.e}}"/></view></view></view><view class="under-view data-v-7f72106f"><view class="right-blue data-v-7f72106f" hidden="{{!f}}"> 重新发送 </view><view class="right-white data-v-7f72106f" hidden="{{!h}}">{{g}}S后重新发送 </view><view class="right-black data-v-7f72106f" bindtap="{{i}}"> 收不到验证码 </view></view></view><transition wx:if="{{m}}" class="data-v-7f72106f" u-s="{{['d']}}" u-i="7f72106f-0" bind:__l="__l" u-p="{{m}}"><view wx:if="{{j}}" class="overlay data-v-7f72106f" bindtap="{{k}}" style="{{'background-color:' + l}}"/></transition><transition wx:if="{{o}}" class="data-v-7f72106f" u-s="{{['d']}}" u-i="7f72106f-1" bind:__l="__l" u-p="{{o}}"><view wx:if="{{n}}" class="modal data-v-7f72106f"><view class="modal-title data-v-7f72106f">收不到验证码</view><view class="model-p data-v-7f72106f"><view class="text-view data-v-7f72106f" style="font-weight:600">手机号可正常使用:</view><view class="text-view data-v-7f72106f">1 是否输错手机号</view><view class="text-view data-v-7f72106f">2 手机是否设置短信拦截/欠费/信号不好</view><view class="text-view data-v-7f72106f">3 手机内存是否满了</view><view class="text-view data-v-7f72106f">4 手机卡是否为物联卡而非SIM卡</view></view></view></transition></view>

View File

@ -0,0 +1,270 @@
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.login-container.data-v-7f72106f {
display: flex;
flex-direction: column;
min-height: 100vh;
width: 100%;
background-color: #eff1fc;
position: relative;
}
.login-container .title.data-v-7f72106f {
margin-top: 70rpx;
align-items: center;
}
.login-container .title .title-imge.data-v-7f72106f {
width: 100rpx;
height: 105rpx;
margin-left: 100rpx;
}
.login-container .title .title-font.data-v-7f72106f {
font-size: 35rpx;
font-weight: 600;
margin-left: 105rpx;
margin-top: 10rpx;
}
.login-container .photo-imge.data-v-7f72106f {
position: absolute;
top: 120rpx;
left: 0;
width: 100%;
height: 1100rpx;
}
.login-container .old-imge.data-v-7f72106f {
position: absolute;
right: 30rpx;
top: 400rpx;
width: 400rpx;
height: 400rpx;
}
.login-container .under-container.data-v-7f72106f {
position: fixed;
left: 0;
bottom: 0;
width: 100%;
height: 45vh;
background-color: #fff;
border-top-left-radius: 50rpx;
border-top-right-radius: 50rpx;
box-shadow: 10rpx 10rpx 20rpx rgba(0, 0, 0, 0.1);
display: flex;
flex-direction: column;
color: #5A607F;
}
.login-container .under-container .radio-circle.data-v-7f72106f {
position: relative;
margin-top: 2rpx;
width: 40rpx;
height: 40rpx;
border-radius: 50%;
border: 2rpx solid #C0C5D9;
background-color: transparent;
}
.login-container .under-container .radio-circle-target.data-v-7f72106f {
position: relative;
margin-top: 2rpx;
width: 40rpx;
height: 40rpx;
border-radius: 50%;
border: 2rpx solid #C0C5D9;
background-color: transparent;
}
.login-container .under-container .radio-circle-target.data-v-7f72106f::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 30rpx;
height: 30rpx;
background-color: #00C9FF;
border-radius: 50%;
}
.under-container-title.data-v-7f72106f {
margin-top: 50rpx;
margin-bottom: 20rpx;
font-size: 25rpx;
font-weight: 500;
width: 100%;
}
.under-container-title .code-title.data-v-7f72106f {
margin-left: 80rpx;
font-size: 35rpx;
color: black;
font-weight: 500;
margin-bottom: 20rpx;
}
.under-container-title .code-number.data-v-7f72106f {
margin-left: 80rpx;
font-size: 28rpx;
margin-bottom: 20rpx;
}
.captcha-container.data-v-7f72106f {
display: flex;
flex-direction: column;
align-items: center;
margin-top: 20rpx;
}
.captcha-box.data-v-7f72106f {
display: flex;
justify-content: space-between;
margin-bottom: 20rpx;
}
.captcha-item.data-v-7f72106f {
display: flex;
justify-content: center;
align-items: center;
}
.captcha-input.data-v-7f72106f {
width: 110rpx;
height: 110rpx;
border: 3rpx solid #C0C5D9;
border-radius: 30rpx;
font-size: 50rpx;
font-weight: 700;
text-align: center;
margin-right: 40rpx;
outline: none;
}
.captcha-input.data-v-7f72106f:focus {
border-color: #00C9FF;
}
.right-blue.data-v-7f72106f {
color: #0083FF;
margin-left: 60rpx;
}
.right-white.data-v-7f72106f {
color: #c2c6d3;
margin-left: 60rpx;
}
.right-black.data-v-7f72106f {
margin-right: 80rpx;
color: black;
}
.under-view.data-v-7f72106f {
width: 100%;
margin-top: 10rpx;
display: flex;
justify-content: space-between;
}
/* 遮罩 */
.overlay.data-v-7f72106f {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 998;
}
/* 弹窗 */
.modal.data-v-7f72106f {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
background-color: #fff;
z-index: 999;
border-top-left-radius: 50rpx;
border-top-right-radius: 50rpx;
width: 100%;
height: 500rpx;
display: flex;
flex-direction: column;
align-items: center;
}
.modal .modal-title.data-v-7f72106f {
font-size: 32rpx;
font-weight: 700;
margin: 50rpx 0;
margin-bottom: 30rpx;
}
.modal .model-p.data-v-7f72106f {
padding: 0 50rpx;
width: 100%;
font-size: 30rpx;
}
.modal .model-down.data-v-7f72106f {
display: flex;
width: 100%;
justify-content: space-between;
padding: 0 50rpx;
margin-top: 40rpx;
}
.modal .model-down .model-white.data-v-7f72106f {
border-radius: 50rpx;
width: 300rpx;
height: 95rpx;
border: 5rpx solid #008dff;
color: #008dff;
font-size: 35rpx;
display: flex;
justify-content: center;
align-items: center;
}
.modal .model-down .model-blue.data-v-7f72106f {
border-radius: 50rpx;
width: 300rpx;
height: 95rpx;
background: linear-gradient(to right, #00C9FF, #0076FF);
color: #fff;
font-size: 35rpx;
display: flex;
justify-content: center;
align-items: center;
}
/* 动画:遮罩淡入淡出 */
.fade-enter-active.data-v-7f72106f,
.fade-leave-active.data-v-7f72106f {
transition: opacity 0.3s;
}
.fade-enter-from.data-v-7f72106f,
.fade-leave-to.data-v-7f72106f {
opacity: 0;
}
.fade-enter-to.data-v-7f72106f,
.fade-leave-from.data-v-7f72106f {
opacity: 1;
}
/* 动画:弹窗上滑 */
.slide-up-enter-active.data-v-7f72106f,
.slide-up-leave-active.data-v-7f72106f {
transition: transform 0.3s;
}
.slide-up-enter-from.data-v-7f72106f,
.slide-up-leave-to.data-v-7f72106f {
transform: translateY(100%);
}
.slide-up-enter-to.data-v-7f72106f,
.slide-up-leave-from.data-v-7f72106f {
transform: translateY(0);
}
.text-view.data-v-7f72106f {
margin-bottom: 20rpx;
}

View File

@ -0,0 +1,71 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const common_assets = require("../../common/assets.js");
const compontent_useWeChatAuth = require("../../compontent/useWeChatAuth.js");
if (!Array) {
const _component_transition = common_vendor.resolveComponent("transition");
_component_transition();
}
const _sfc_main = {
__name: "index",
setup(__props) {
const isTarget = common_vendor.ref(false);
const isFadingOut = common_vendor.ref(false);
compontent_useWeChatAuth.useWeChatAuth();
const maskColor = common_vendor.ref("rgba(0, 0, 0, 0.5)");
function closeModal() {
isFadingOut.value = false;
}
const loginIt = () => {
if (!isTarget.value) {
isFadingOut.value = true;
} else {
common_vendor.index.navigateTo({
url: "/pages/login/phonebumber"
});
}
};
const jumpToPro = () => {
common_vendor.index.__f__("log", "at pages/login/index.vue:87", "????");
common_vendor.index.navigateTo({
url: "/pages/login/protocol"
});
};
return (_ctx, _cache) => {
return common_vendor.e({
a: common_assets._imports_0,
b: common_assets._imports_1,
c: common_assets._imports_2,
d: common_vendor.n(isTarget.value ? "radio-circle-target" : "radio-circle"),
e: common_vendor.o(($event) => isTarget.value = !isTarget.value),
f: common_vendor.o(($event) => isTarget.value = !isTarget.value),
g: common_vendor.o(jumpToPro),
h: common_vendor.o(($event) => isTarget.value = !isTarget.value),
i: common_vendor.o(loginIt),
j: isFadingOut.value
}, isFadingOut.value ? {
k: common_vendor.o(closeModal),
l: maskColor.value
} : {}, {
m: common_vendor.p({
name: "fade"
}),
n: isFadingOut.value
}, isFadingOut.value ? {
o: common_vendor.o(jumpToPro),
p: common_vendor.o(closeModal),
q: common_vendor.o(($event) => {
closeModal();
isTarget.value = true;
})
} : {}, {
r: common_vendor.p({
name: "slide-up"
})
});
};
}
};
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-d08ef7d4"]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/login/index.js.map

View File

@ -0,0 +1,4 @@
{
"navigationBarTitleText": "登录",
"usingComponents": {}
}

View File

@ -0,0 +1 @@
<view class="login-container data-v-d08ef7d4"><view class="title data-v-d08ef7d4"><image class="title-imge data-v-d08ef7d4" src="{{a}}"/><view class="title-font data-v-d08ef7d4"><view class=" data-v-d08ef7d4">您好,</view><view class=" data-v-d08ef7d4">欢迎使用护理单元~</view></view></view><image class="photo-imge data-v-d08ef7d4" src="{{b}}"/><image class="old-imge data-v-d08ef7d4" src="{{c}}"/><view class="under-container data-v-d08ef7d4"><view class="under-container-title data-v-d08ef7d4"><view class="{{['data-v-d08ef7d4', d]}}" bindtap="{{e}}"></view><view style="margin-left:17rpx" class="radio-circle-font data-v-d08ef7d4" bindtap="{{f}}">同意</view><view class="radio-circle-blue data-v-d08ef7d4" bindtap="{{g}}"> 《护理单元使用条款》 </view><view class="radio-circle-font data-v-d08ef7d4" bindtap="{{h}}">并授权NU获取本机号码</view></view><view class="button-blue data-v-d08ef7d4" bindtap="{{i}}"> 一键登录 </view></view><transition wx:if="{{m}}" class="data-v-d08ef7d4" u-s="{{['d']}}" u-i="d08ef7d4-0" bind:__l="__l" u-p="{{m}}"><view wx:if="{{j}}" class="overlay data-v-d08ef7d4" bindtap="{{k}}" style="{{'background-color:' + l}}"/></transition><transition wx:if="{{r}}" class="data-v-d08ef7d4" u-s="{{['d']}}" u-i="d08ef7d4-1" bind:__l="__l" u-p="{{r}}"><view wx:if="{{n}}" class="modal data-v-d08ef7d4"><view class="modal-title data-v-d08ef7d4">服务协议及隐私保护</view><view class="model-p data-v-d08ef7d4"><text class="data-v-d08ef7d4">  为了更好地保障您的合法权益,请阅读并同意以下协议</text><text class="data-v-d08ef7d4" style="color:rgb(0,141,255)" bindtap="{{o}}">《护理单元使用条款》</text><text class="data-v-d08ef7d4">,同意后将自动登录。</text></view><view class="model-down data-v-d08ef7d4"><view class="model-white data-v-d08ef7d4" bindtap="{{p}}"> 不同意 </view><view class="model-blue data-v-d08ef7d4" bindtap="{{q}}"> 同意 </view></view></view></transition></view>

View File

@ -0,0 +1,227 @@
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.login-container.data-v-d08ef7d4 {
display: flex;
flex-direction: column;
min-height: 100vh;
width: 100%;
background-color: #eff1fc;
position: relative;
}
.login-container .title.data-v-d08ef7d4 {
margin-top: 70rpx;
align-items: center;
}
.login-container .title .title-imge.data-v-d08ef7d4 {
width: 100rpx;
height: 105rpx;
margin-left: 100rpx;
}
.login-container .title .title-font.data-v-d08ef7d4 {
font-size: 35rpx;
font-weight: 600;
margin-left: 105rpx;
margin-top: 10rpx;
}
.login-container .photo-imge.data-v-d08ef7d4 {
position: absolute;
top: 120rpx;
left: 0;
width: 100%;
height: 1100rpx;
}
.login-container .old-imge.data-v-d08ef7d4 {
position: absolute;
right: 30rpx;
top: 400rpx;
width: 400rpx;
height: 400rpx;
}
.login-container .under-container.data-v-d08ef7d4 {
position: fixed;
left: 0;
bottom: 0;
width: 100%;
height: 45vh;
background-color: #fff;
border-top-left-radius: 50rpx;
border-top-right-radius: 50rpx;
box-shadow: 10rpx 10rpx 20rpx rgba(0, 0, 0, 0.1);
display: flex;
flex-direction: column;
align-items: center;
}
.login-container .under-container .radio-circle.data-v-d08ef7d4 {
position: relative;
margin-top: 2rpx;
width: 40rpx;
height: 40rpx;
border-radius: 50%;
border: 2rpx solid #C0C5D9;
background-color: transparent;
}
.login-container .under-container .radio-circle-target.data-v-d08ef7d4 {
position: relative;
margin-top: 2rpx;
width: 40rpx;
height: 40rpx;
border-radius: 50%;
border: 2rpx solid #C0C5D9;
background-color: transparent;
}
.login-container .under-container .radio-circle-target.data-v-d08ef7d4::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 30rpx;
height: 30rpx;
background-color: #00C9FF;
border-radius: 50%;
}
.under-container-title.data-v-d08ef7d4 {
display: flex;
margin-top: 60rpx;
margin-bottom: 40rpx;
align-items: center;
font-size: 25rpx;
font-weight: 500;
}
.under-container-title .radio-circle-blue.data-v-d08ef7d4 {
color: #0083FF;
margin-top: 3rpx;
}
.under-container-title .radio-circle-font.data-v-d08ef7d4 {
color: #5A607F;
margin-top: 3rpx;
}
.button-blue.data-v-d08ef7d4 {
width: 80%;
display: flex;
justify-content: center;
align-items: center;
height: 100rpx;
border-radius: 43rpx;
background: linear-gradient(to right, #00C9FF, #0076FF);
color: #fff;
font-size: 33rpx;
margin-bottom: 30rpx;
}
/* 遮罩 */
.overlay.data-v-d08ef7d4 {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 998;
}
/* 弹窗 */
.modal.data-v-d08ef7d4 {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
background-color: #fff;
z-index: 999;
border-top-left-radius: 50rpx;
border-top-right-radius: 50rpx;
width: 100%;
height: 500rpx;
display: flex;
flex-direction: column;
align-items: center;
}
.modal .modal-title.data-v-d08ef7d4 {
font-size: 32rpx;
font-weight: 700;
margin: 50rpx 0;
}
.modal .model-p.data-v-d08ef7d4 {
padding: 0 50rpx;
width: 100%;
font-size: 30rpx;
}
.modal .model-down.data-v-d08ef7d4 {
display: flex;
width: 100%;
justify-content: space-between;
padding: 0 50rpx;
margin-top: 40rpx;
}
.modal .model-down .model-white.data-v-d08ef7d4 {
border-radius: 50rpx;
width: 300rpx;
height: 95rpx;
border: 5rpx solid #008dff;
color: #008dff;
font-size: 35rpx;
display: flex;
justify-content: center;
align-items: center;
}
.modal .model-down .model-blue.data-v-d08ef7d4 {
border-radius: 50rpx;
width: 300rpx;
height: 95rpx;
background: linear-gradient(to right, #00C9FF, #0076FF);
color: #fff;
font-size: 35rpx;
display: flex;
justify-content: center;
align-items: center;
}
/* 动画:遮罩淡入淡出 */
.fade-enter-active.data-v-d08ef7d4,
.fade-leave-active.data-v-d08ef7d4 {
transition: opacity 0.3s;
}
.fade-enter-from.data-v-d08ef7d4,
.fade-leave-to.data-v-d08ef7d4 {
opacity: 0;
}
.fade-enter-to.data-v-d08ef7d4,
.fade-leave-from.data-v-d08ef7d4 {
opacity: 1;
}
/* 动画:弹窗上滑 */
.slide-up-enter-active.data-v-d08ef7d4,
.slide-up-leave-active.data-v-d08ef7d4 {
transition: transform 0.3s;
}
.slide-up-enter-from.data-v-d08ef7d4,
.slide-up-leave-to.data-v-d08ef7d4 {
transform: translateY(100%);
}
.slide-up-enter-to.data-v-d08ef7d4,
.slide-up-leave-from.data-v-d08ef7d4 {
transform: translateY(0);
}

View File

@ -0,0 +1,52 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const common_assets = require("../../common/assets.js");
if (!Math) {
huakuai();
}
const huakuai = () => "../../compontent/public/huakuai.js";
const _sfc_main = {
__name: "phonebumber",
setup(__props) {
const huakuaiOpen = common_vendor.ref(false);
const jumpto = () => {
common_vendor.index.navigateTo({
url: `/pages/login/code?phonenumber=${phonenumber.value}`
});
};
function is11DigitNumber(value) {
return /^\d{11}$/.test(value.toString());
}
const phonenumber = common_vendor.ref("");
const canClick = common_vendor.ref(false);
const isRight = (res) => {
common_vendor.index.__f__("log", "at pages/login/phonebumber.vue:60", "????", res.detail.value);
if (is11DigitNumber(res.detail.value)) {
phonenumber.value = res.detail.value;
canClick.value = true;
} else {
canClick.value = false;
}
};
return (_ctx, _cache) => {
return common_vendor.e({
a: common_assets._imports_0,
b: common_assets._imports_1,
c: common_assets._imports_2,
d: common_vendor.o(isRight),
e: common_vendor.o(($event) => huakuaiOpen.value = true),
f: canClick.value,
g: common_vendor.o(jumpto),
h: !canClick.value,
i: huakuaiOpen.value
}, huakuaiOpen.value ? {
j: common_vendor.o(() => {
}),
k: common_vendor.o(($event) => huakuaiOpen.value = false)
} : {});
};
}
};
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-94511ff7"]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/login/phonebumber.js.map

View File

@ -0,0 +1,6 @@
{
"navigationBarTitleText": "登录",
"usingComponents": {
"huakuai": "../../compontent/public/huakuai"
}
}

View File

@ -0,0 +1 @@
<view class="login-container data-v-94511ff7"><view class="title data-v-94511ff7"><image class="title-imge data-v-94511ff7" src="{{a}}"/><view class="title-font data-v-94511ff7"><view class=" data-v-94511ff7">您好,</view><view class=" data-v-94511ff7">欢迎使用护理单元~</view></view></view><image class="photo-imge data-v-94511ff7" src="{{b}}"/><image class="old-imge data-v-94511ff7" src="{{c}}"/><view class="under-container data-v-94511ff7"><view class="under-container-title data-v-94511ff7"><view class="under-container-input data-v-94511ff7"><view class="input-left data-v-94511ff7">+86</view><input class="data-v-94511ff7" type="number" style="width:600rpx;font-size:33rpx" maxlength="11" placeholder="请输入绑定手机号" bindinput="{{d}}"/></view></view><view class="button-blue data-v-94511ff7" bindtap="{{e}}"> 滑块校验 </view><view class="button-blue data-v-94511ff7" hidden="{{!f}}" bindtap="{{g}}"> 获得验证码 </view><view class="button-gray data-v-94511ff7" hidden="{{!h}}"> 获得验证码 </view></view><view wx:if="{{i}}" class="bg-mask data-v-94511ff7" bindtap="{{k}}"><huakuai class="data-v-94511ff7" catchclick="{{j}}" u-i="94511ff7-0" bind:__l="__l"/></view></view>

Some files were not shown because too many files have changed in this diff Show More