111
|
@ -33,4 +33,18 @@ export function getList(){
|
|||
url: `/NuBizAdvisoryInfo/nuBizAdvisoryInfo/list`,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
}
|
||||
//微信code换openid
|
||||
export function getOpenid(code){
|
||||
return request({
|
||||
url: `/weixin/wechat/callback?code=${code}`,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
//微信openid换个人信息
|
||||
export function getMessage(openId){
|
||||
return request({
|
||||
url: `/h5Api/nuBizAdvisoryInfo/queryWeixinInfo?openId=${openId}`,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
|
16
api/main.js
|
@ -45,19 +45,3 @@ export const jsonp = function (url, data) {
|
|||
document.body.appendChild(scriptNode)
|
||||
})
|
||||
}
|
||||
//验证码是否正确
|
||||
// export function checkPhoneCode(data){
|
||||
// return request({
|
||||
// url: `/sys/checkPhoneCode`,
|
||||
// method: 'post',
|
||||
// data,
|
||||
// })
|
||||
// }
|
||||
|
||||
// //不知道干啥的
|
||||
// export function getList(){
|
||||
// return request({
|
||||
// url: `/NuBizAdvisoryInfo/nuBizAdvisoryInfo/list`,
|
||||
// method: 'get',
|
||||
// })
|
||||
// }
|
|
@ -1,295 +1,269 @@
|
|||
<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="{
|
||||
<view class="captcha-container" id="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 +50 ) + 'rpx',
|
||||
left: originX + 'rpx',
|
||||
width: pieceSize + 'rpx',
|
||||
height: pieceSize + 'rpx',
|
||||
clipPath: clipPath,
|
||||
transform: 'translate(-50%, -50%)',
|
||||
backgroundColor: 'rgba(0,0,0,0.6)'
|
||||
}"></view>
|
||||
}"
|
||||
></view>
|
||||
|
||||
<view class="piece" :style="{
|
||||
<view
|
||||
class="piece"
|
||||
:style="{
|
||||
top: originY + 'rpx',
|
||||
left: (offsetX +50 ) + 'rpx',
|
||||
left: offsetX + 'rpx',
|
||||
width: pieceSize + 'rpx',
|
||||
height: pieceSize + 'rpx',
|
||||
backgroundImage: `url(${bgImage})`,
|
||||
backgroundSize: containerWidth + 'rpx ' + containerHeight + 'rpx',
|
||||
backgroundPosition: `-${originX+10}rpx -${originY-20}rpx`,
|
||||
backgroundPosition: `-${originX+30}rpx -${originY+43}rpx`,
|
||||
clipPath: clipPath,
|
||||
transform: 'translate(-50%, -50%)'
|
||||
}"></view>
|
||||
</view>
|
||||
</view>
|
||||
}"
|
||||
></view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="slider-bar">
|
||||
<view class="slider-bar-font">
|
||||
向右滑动滑块填充拼图
|
||||
</view>
|
||||
<view class="slider-button" ref="btn" @touchstart.prevent="onStart" @mousedown.prevent="onStart"
|
||||
:style="{ left: offsetX + 'rpx', maxWidth: (containerWidth - pieceSize) + 'rpx' }">
|
||||
<image src="/static/login/right.png" style="width: 50rpx;height: 50rpx;" mode="widthFix" />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="slider-bar">
|
||||
<view class="slider-bar-font">向右滑动滑块填充拼图</view>
|
||||
<view
|
||||
class="slider-button"
|
||||
ref="btn"
|
||||
@touchstart="onStart"
|
||||
@touchmove="onMove"
|
||||
@touchend="onEnd"
|
||||
:style="{ left: offsetX + 'rpx', maxWidth: (containerWidth - pieceSize) + 'rpx' }"
|
||||
>
|
||||
<image
|
||||
src="https://www.focusnu.com/media/directive/login/right.png"
|
||||
style="width: 50rpx; height: 50rpx;"
|
||||
mode="widthFix"
|
||||
/>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {
|
||||
ref,
|
||||
onBeforeUnmount
|
||||
} from 'vue';
|
||||
import {
|
||||
onLoad
|
||||
} from '@dcloudio/uni-app';
|
||||
import { ref, onMounted, nextTick, getCurrentInstance } from 'vue'
|
||||
|
||||
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 emit = defineEmits(['success'])
|
||||
|
||||
const emit = defineEmits(['success'])
|
||||
const pieceSizePx = 50
|
||||
const pieceSize = pieceSizePx * 2
|
||||
const tolerance = 20
|
||||
|
||||
const pieceSizePx = 50;
|
||||
const pieceSize = pieceSizePx * 2;
|
||||
const tolerance = 20;
|
||||
const containerWidth = ref(400)
|
||||
const containerHeight = ref(400)
|
||||
|
||||
const container = ref(null);
|
||||
const btn = ref(null);
|
||||
const originX = ref(0)
|
||||
const originY = ref(0)
|
||||
const offsetX = ref(0)
|
||||
const dragging = ref(false)
|
||||
const startX = ref(0)
|
||||
|
||||
const containerWidthPx = 200;
|
||||
const containerHeightPx = 300;
|
||||
const bgImage = ref('')
|
||||
|
||||
const containerWidth = ref(containerWidthPx * 2);
|
||||
const containerHeight = ref(containerHeightPx * 2);
|
||||
const instance = getCurrentInstance()
|
||||
|
||||
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}
|
||||
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
|
||||
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}
|
||||
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}
|
||||
a${10 * 2} ${10 * 2} 0 0 0 0 ${20 * 2}
|
||||
h-${s / 3 - 10 * 2}
|
||||
z
|
||||
`;
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
const clipPath = `path('${getPuzzlePiecePath(pieceSize)}')`;
|
||||
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); // 加这个调试!
|
||||
function init() {
|
||||
nextTick(() => {
|
||||
if (!instance) {
|
||||
console.error('无法获取组件实例')
|
||||
return
|
||||
}
|
||||
uni.createSelectorQuery()
|
||||
.in(instance.proxy)
|
||||
.select('.bg-image')
|
||||
.boundingClientRect(data => {
|
||||
if (!data) {
|
||||
console.error('无法获取图片尺寸')
|
||||
return
|
||||
}
|
||||
containerWidth.value = data.width * 2
|
||||
containerHeight.value = data.height * 2
|
||||
|
||||
containerWidth.value = data.width * 2;
|
||||
containerHeight.value = data.height * 2;
|
||||
originX.value = Math.random() * (containerWidth.value - pieceSize * 2) + pieceSize
|
||||
if (originX.value < 100) originX.value = 100
|
||||
if (originX.value > 400) originX.value = 400
|
||||
originY.value = containerHeight.value / 2
|
||||
offsetX.value = 0
|
||||
})
|
||||
.exec()
|
||||
})
|
||||
}
|
||||
|
||||
originX.value = Math.random() * (containerWidth.value - pieceSize * 2) + pieceSize;
|
||||
// console.log("!!!!!",originX.value)
|
||||
if (originX.value < 100) {
|
||||
originX.value = 100;
|
||||
}
|
||||
originY.value = containerHeight.value / 2;
|
||||
offsetX.value = 0;
|
||||
function onStart(e) {
|
||||
dragging.value = true
|
||||
startX.value = e.touches[0].clientX * 2
|
||||
}
|
||||
|
||||
console.log('originX:', originX.value, 'originY:', originY.value);
|
||||
})
|
||||
.exec();
|
||||
}
|
||||
function onMove(e) {
|
||||
if (!dragging.value) return
|
||||
const clientX = e.touches[0].clientX * 2
|
||||
let dx = clientX - startX.value
|
||||
dx = Math.max(0, Math.min(dx, containerWidth.value - pieceSize))
|
||||
offsetX.value = dx
|
||||
}
|
||||
|
||||
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 onEnd() {
|
||||
dragging.value = false
|
||||
if (Math.abs(offsetX.value - originX.value) < tolerance) {
|
||||
uni.showToast({
|
||||
title: '验证成功',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
// console.log("????", originX.value)
|
||||
emit('success')
|
||||
} else {
|
||||
offsetX.value = 0
|
||||
uni.showToast({
|
||||
title: '验证失败',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
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('验证成功');
|
||||
|
||||
uni.showToast({
|
||||
title: '验证成功',
|
||||
icon: 'none', // 不显示图标(提示信息)
|
||||
duration: 2000 // 显示时长(毫秒)
|
||||
})
|
||||
emit('success')
|
||||
} 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);
|
||||
});
|
||||
onMounted(() => {
|
||||
const images = [
|
||||
'https://www.focusnu.com/media/directive/login/0.png',
|
||||
'https://www.focusnu.com/media/directive/login/1.png',
|
||||
'https://www.focusnu.com/media/directive/login/2.png',
|
||||
// 'https://www.focusnu.com/media/directive/login/3.png'
|
||||
]
|
||||
bgImage.value = images[Math.floor(Math.random() * images.length)]
|
||||
console.log('加载图片:', bgImage.value)
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<style scoped lang="scss">
|
||||
.captcha-container {
|
||||
/* margin: 20rpx auto; */
|
||||
user-select: none;
|
||||
background-color: #fff;
|
||||
width: 600rpx;
|
||||
height: 700rpx;
|
||||
margin: 0 auto;
|
||||
z-index: 999;
|
||||
border-radius: 30rpx;
|
||||
overflow: hidden;
|
||||
padding: 0 30rpx;
|
||||
}
|
||||
.captcha-container {
|
||||
user-select: none;
|
||||
background-color: #fff;
|
||||
width: 600rpx;
|
||||
height: 700rpx;
|
||||
margin: 0 auto;
|
||||
border-radius: 30rpx;
|
||||
overflow: hidden;
|
||||
padding: 0 30rpx;
|
||||
}
|
||||
|
||||
.captcha-image {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.captcha-image {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.bg-image {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
display: block;
|
||||
/* margin-top: 30rpx; */
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.bg-image {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.overlay {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 100;
|
||||
pointer-events: none;
|
||||
}
|
||||
.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,
|
||||
.piece {
|
||||
position: absolute;
|
||||
z-index: 101;
|
||||
box-shadow: 0 0 6rpx rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
.hole {
|
||||
background-color: rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
.hole {
|
||||
background-color: rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.piece {
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
cursor: grab;
|
||||
}
|
||||
.piece {
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
cursor: grab;
|
||||
}
|
||||
|
||||
.slider-bar {
|
||||
position: relative;
|
||||
height: 100rpx;
|
||||
margin-top: 0rpx;
|
||||
background: rgb(245, 246, 252);
|
||||
/* border-radius: 80rpx; */
|
||||
width: 540rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
.slider-bar {
|
||||
position: relative;
|
||||
height: 100rpx;
|
||||
margin-top: 0rpx;
|
||||
background: rgb(245, 246, 252);
|
||||
width: 540rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
.slider-bar-font {
|
||||
// z-index: -1;
|
||||
color: rgb(169, 169, 171);
|
||||
font-size: 28rpx;
|
||||
}
|
||||
}
|
||||
.slider-bar-font {
|
||||
color: rgb(169, 169, 171);
|
||||
font-size: 28rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.slider-button {
|
||||
position: absolute;
|
||||
top: 0rpx;
|
||||
left: 0;
|
||||
width: 100rpx;
|
||||
height: 100rpx;
|
||||
background: #fff;
|
||||
/* border-radius: 60rpx; */
|
||||
box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.2);
|
||||
transition: background 0.3s;
|
||||
user-select: none;
|
||||
border-radius: 10rpx;
|
||||
border: 3rpx solid rgb(139, 218, 202);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.slider-button {
|
||||
position: absolute;
|
||||
top: 0rpx;
|
||||
left: 0;
|
||||
width: 100rpx;
|
||||
height: 100rpx;
|
||||
background: #fff;
|
||||
box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.2);
|
||||
user-select: none;
|
||||
border-radius: 10rpx;
|
||||
border: 3rpx solid rgb(139, 218, 202);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.slider-button.success {
|
||||
background: #4caf50;
|
||||
}
|
||||
|
||||
.font-title {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100rpx;
|
||||
font-size: 35rpx;
|
||||
font-weight: 700;
|
||||
}
|
||||
</style>
|
||||
.font-title {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100rpx;
|
||||
font-size: 35rpx;
|
||||
font-weight: 700;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -41,9 +41,9 @@ const emit = defineEmits(['updateCenterIndex'])
|
|||
|
||||
|
||||
const images = ref([
|
||||
'/static/index/three/0.png',
|
||||
'/static/index/three/1.png',
|
||||
'/static/index/three/2.png',
|
||||
'https://www.focusnu.com/media/directive/index/three/0.png',
|
||||
'https://www.focusnu.com/media/directive/index/three/1.png',
|
||||
'https://www.focusnu.com/media/directive/index/three/2.png',
|
||||
])
|
||||
const imageName = ref([
|
||||
"长者入住",
|
||||
|
|
|
@ -1,28 +0,0 @@
|
|||
// src/composables/useWeChatAuth.js
|
||||
import { ref } from 'vue';
|
||||
import request from '@/request/index.js';
|
||||
|
||||
const APPID = 'wx8fc3e4305d2fbf0b';
|
||||
const REDIRECT_URI = encodeURIComponent('https://www.focusnu.com/wechat/thd/#/pages/login/callback');
|
||||
|
||||
export function useWeChatAuth() {
|
||||
const code = ref('');
|
||||
const openid = ref('');
|
||||
const userInfo = ref(null);
|
||||
|
||||
function login(scope = 'snsapi_userinfo', state = '') {
|
||||
const url =
|
||||
`https://open.weixin.qq.com/connect/oauth2/authorize` +
|
||||
`?appid=${APPID}` +
|
||||
`&redirect_uri=${REDIRECT_URI}` +
|
||||
`&response_type=code` +
|
||||
`&scope=${scope}` +
|
||||
`&state=${state}` +
|
||||
`#wechat_redirect`;
|
||||
|
||||
window.location.href = url;
|
||||
}
|
||||
|
||||
|
||||
return { login };
|
||||
}
|
|
@ -9,10 +9,10 @@
|
|||
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
|
||||
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
|
||||
</script>
|
||||
<script
|
||||
<!-- <script
|
||||
src="https://map.qq.com/api/js?v=2.exp&key=LOLBZ-Z2PKW-JJ6RO-3Y7Z7-BSKWT-DLFNC"
|
||||
crossorigin="anonymous">
|
||||
</script>
|
||||
</script> -->
|
||||
|
||||
<title></title>
|
||||
<!--preload-links-->
|
||||
|
|
|
@ -50,9 +50,12 @@
|
|||
"quickapp" : {},
|
||||
/* 小程序特有相关 */
|
||||
"mp-weixin" : {
|
||||
"appid" : "",
|
||||
"appid" : "wx53bc8a44e780d26a",
|
||||
"setting" : {
|
||||
"urlCheck" : false
|
||||
"urlCheck" : false,
|
||||
"minified" : true,
|
||||
"es6" : false,
|
||||
"postcss" : false
|
||||
},
|
||||
"usingComponents" : true
|
||||
},
|
||||
|
|
|
@ -103,9 +103,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/map/index",
|
||||
"path": "pages/addoldman/camera",
|
||||
"style": {
|
||||
"navigationBarTitleText": "选择位置"
|
||||
"navigationBarTitleText": "照相机"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<u-modal v-model="show" :content="content"></u-modal>
|
||||
<view class="title-back">
|
||||
<view class="left-father" @click="goBack">
|
||||
<image class="back-img" src="@/static/index/left.png" />
|
||||
<image class="back-img" src="https://www.focusnu.com/media/directive/index/left.png" />
|
||||
<view style="font-size: 30rpx;">返回</view>
|
||||
</view>
|
||||
<view :class="statesTarget<2 ? `rightStautes`:statesTarget==2? `rightStautesred`:`rightStautesblue`">
|
||||
|
@ -13,7 +13,7 @@
|
|||
<view class="white-content">
|
||||
<view class="content-title">
|
||||
<view class="content-weight">身份证上传</view>
|
||||
<image class="content-img" src="@/static/index/bian.png" />
|
||||
<image class="content-img" src="https://www.focusnu.com/media/directive/index/bian.png" />
|
||||
</view>
|
||||
<view class="white-photo" @click="getMessage(headImge)">
|
||||
<view class="photo-left">
|
||||
|
@ -21,10 +21,10 @@
|
|||
<view class="photo-font">请上传身份证人像面</view>
|
||||
</view>
|
||||
<view style="position: relative;">
|
||||
<image class="photo" :src="headImge ? headImge : `/static/index/IDcard.png`" />
|
||||
<image v-show="!headImge"
|
||||
<image class="photo" :src="headImge ? headImge : `https://www.focusnu.com/media/directive/index/IDcard.png`" />
|
||||
<image v-if="!headImge"
|
||||
style="position: absolute;top: 50%;left: 50%;width: 70rpx;height: 60rpx;transform: translate(-50%,-50%);"
|
||||
src="@/static/index/takephoto.png" />
|
||||
src="https://www.focusnu.com/media/directive/index/takephoto.png" />
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
@ -34,10 +34,10 @@
|
|||
<view class="photo-font">请上传身份证国徽面</view>
|
||||
</view>
|
||||
<view style="position: relative;">
|
||||
<image class="photo" :src="backImge ? backImge : `/static/index/backIDcard.png`" />
|
||||
<image v-show="!backImge"
|
||||
<image class="photo" :src="backImge ? backImge : `https://www.focusnu.com/media/directive/index/backIDcard.png`" />
|
||||
<image v-if="!backImge"
|
||||
style="position: absolute;top: 50%;left: 50%;width: 70rpx;height: 60rpx;transform: translate(-50%,-50%);"
|
||||
src="@/static/index/takephoto.png" />
|
||||
src="https://www.focusnu.com/media/directive/index/takephoto.png" />
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
@ -61,7 +61,7 @@
|
|||
<view class="white-content" style="margin-top: 40rpx;">
|
||||
<view class="content-title">
|
||||
<view class="content-weight">营业执照上传</view>
|
||||
<image class="content-img" src="@/static/index/bian.png" />
|
||||
<image class="content-img" src="https://www.focusnu.com/media/directive/index/bian.png" />
|
||||
</view>
|
||||
<view class="white-photo" @click="getMessage(headImge0)">
|
||||
<view class="photo-left">
|
||||
|
@ -69,10 +69,10 @@
|
|||
<view class="photo-font">请上传营业执照</view>
|
||||
</view>
|
||||
<view style="position: relative;">
|
||||
<image class="photo" :src="headImge0 ? headImge0 : `/static/index/zhizhao.png`" />
|
||||
<image v-show="!headImge0"
|
||||
<image class="photo" :src="headImge0 ? headImge0 : `https://www.focusnu.com/media/directive/index/zhizhao.png`" />
|
||||
<image v-if="!headImge0"
|
||||
style="position: absolute;top: 50%;left: 50%;width: 70rpx;height: 60rpx;transform: translate(-50%,-50%);"
|
||||
src="@/static/index/takephoto.png" />
|
||||
src="https://www.focusnu.com/media/directive/index/takephoto.png" />
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<view class="white-content">
|
||||
<view class="content-title">
|
||||
<view class="content-weight">营业执照上传</view>
|
||||
<image class="content-img" src="@/static/index/bian.png" />
|
||||
<image class="content-img" src="https://www.focusnu.com/media/directive/index/bian.png" />
|
||||
</view>
|
||||
<view class="white-photo" @click="getMessage">
|
||||
<view class="photo-left">
|
||||
|
@ -13,10 +13,10 @@
|
|||
<view class="photo-font">请上传营业执照</view>
|
||||
</view>
|
||||
<view style="position: relative;">
|
||||
<image class="photo" :src="headImge ? headImge : `/static/index/zhizhao.png`" />
|
||||
<image v-show="!headImge"
|
||||
<image class="photo" :src="headImge ? headImge : `https://www.focusnu.com/media/directive/index/zhizhao.png`" />
|
||||
<image v-if="!headImge"
|
||||
style="position: absolute;top: 50%;left: 50%;width: 70rpx;height: 60rpx;transform: translate(-50%,-50%);"
|
||||
src="@/static/index/takephoto.png" />
|
||||
src="https://www.focusnu.com/media/directive/index/takephoto.png" />
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<u-modal v-model="show" :content="content"></u-modal>
|
||||
<view class="title-back">
|
||||
<view class="left-father" @click="goBack">
|
||||
<image class="back-img" src="@/static/index/left.png" />
|
||||
<image class="back-img" src="https://www.focusnu.com/media/directive/index/left.png" />
|
||||
<view style="font-size: 30rpx;">返回</view>
|
||||
</view>
|
||||
<!-- <view :class="!statesTarget? `rightStautes`:statesTarget==1? `rightStautesred`:`rightStautesblue`" @click="shenhe">
|
||||
|
@ -13,7 +13,7 @@
|
|||
<view class="white-content">
|
||||
<view class="content-title">
|
||||
<view class="content-weight">身份证上传</view>
|
||||
<image class="content-img" src="@/static/index/bian.png" />
|
||||
<image class="content-img" src="https://www.focusnu.com/media/directive/index/bian.png" />
|
||||
</view>
|
||||
<view class="white-photo" @click="getMessage">
|
||||
<view class="photo-left">
|
||||
|
@ -21,10 +21,10 @@
|
|||
<view class="photo-font">请上传身份证人像面</view>
|
||||
</view>
|
||||
<view style="position: relative;">
|
||||
<image class="photo" :src="headImge ? headImge : `/static/index/IDcard.png`" />
|
||||
<image v-show="!headImge"
|
||||
<image class="photo" :src="headImge ? headImge : `https://www.focusnu.com/media/directive/index/IDcard.png`" />
|
||||
<image v-if="!headImge"
|
||||
style="position: absolute;top: 50%;left: 50%;width: 70rpx;height: 60rpx;transform: translate(-50%,-50%);"
|
||||
src="@/static/index/takephoto.png" />
|
||||
src="https://www.focusnu.com/media/directive/index/takephoto.png" />
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
@ -34,10 +34,10 @@
|
|||
<view class="photo-font">请上传身份证国徽面</view>
|
||||
</view>
|
||||
<view style="position: relative;">
|
||||
<image class="photo" :src="backImge ? backImge : `/static/index/backIDcard.png`" />
|
||||
<image v-show="!backImge"
|
||||
<image class="photo" :src="backImge ? backImge : `https://www.focusnu.com/media/directive/index/backIDcard.png`" />
|
||||
<image v-if="!backImge"
|
||||
style="position: absolute;top: 50%;left: 50%;width: 70rpx;height: 60rpx;transform: translate(-50%,-50%);"
|
||||
src="@/static/index/takephoto.png" />
|
||||
src="https://www.focusnu.com/media/directive/index/takephoto.png" />
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
|
|
@ -9,13 +9,13 @@
|
|||
<view class="title-font">
|
||||
请选择所在地区
|
||||
</view>
|
||||
<image class="title-imge" src="@/static/index/workjoin/x.png" @click="popupshow=false" />
|
||||
<image class="title-imge" src="https://www.focusnu.com/media/directive/index/workjoin/x.png" @click="popupshow=false" />
|
||||
</view>
|
||||
<view style="height: 80rpx;width: 100%;display: flex; align-items: center;justify-content: space-between;position: relative;" v-for="(item,index) in address">
|
||||
<view style="margin-left: 60rpx;">
|
||||
{{item.name}}
|
||||
</view>
|
||||
<image class="title-imge" style="width: 25rpx;height: 25rpx;" src="@/static/index/workjoin/x.png" @click="deleteUP(index)" />
|
||||
<image class="title-imge" style="width: 25rpx;height: 25rpx;" src="https://www.focusnu.com/media/directive/index/workjoin/x.png" @click="deleteUP(index)" />
|
||||
</view>
|
||||
</view>
|
||||
<view style="height: 100rpx;width: 100%;">
|
||||
|
@ -54,7 +54,7 @@
|
|||
{{ jigouweizhi ? jigouweizhi : `请选择机构位置` }}
|
||||
</view>
|
||||
<u-select v-model="showselect" mode="mutil-column-auto" :list="list" label-name="name" value-name="id" child-name="children" @confirm="confirm" @cancel-text="showselect=false"></u-select> -->
|
||||
<!-- <image class="one-img" src="@/static/index/norelmap.png" @click="jumpToMap" /> -->
|
||||
<!-- <image class="one-img" src="https://www.focusnu.com/media/directive/index/norelmap.png" @click="jumpToMap" /> -->
|
||||
</view>
|
||||
</view>
|
||||
<view>
|
||||
|
@ -236,7 +236,7 @@
|
|||
|
||||
keys.forEach((key, idx) => {
|
||||
// 如果 address.value[idx] 存在就取它的 id,否则用空字符串
|
||||
form[key] = address.value[idx]?.id ?? '';
|
||||
form[key] = address.value[idx]?.id ? address.value[idx]?.id : "";
|
||||
});
|
||||
address.value = [];
|
||||
list.value = [];
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<view class="white-content">
|
||||
<view class="content-title">
|
||||
<view class="content-weight">身份证上传</view>
|
||||
<image class="content-img" src="@/static/index/bian.png" />
|
||||
<image class="content-img" src="https://www.focusnu.com/media/directive/index/bian.png" />
|
||||
</view>
|
||||
<view class="white-photo" @click="getMessage">
|
||||
<view class="photo-left">
|
||||
|
@ -12,8 +12,8 @@
|
|||
<view class="photo-font">请上传身份证人像面</view>
|
||||
</view>
|
||||
<view style="position: relative;">
|
||||
<image class="photo" :src="headImge ? headImge : `/static/index/IDcard.png`" />
|
||||
<image v-show="!headImge" style="position: absolute;top: 50%;left: 50%;width: 70rpx;height: 60rpx;transform: translate(-50%,-50%);" src="@/static/index/takephoto.png" />
|
||||
<image class="photo" :src="headImge ? headImge : `https://www.focusnu.com/media/directive/index/IDcard.png`" />
|
||||
<image v-if="!headImge" style="position: absolute;top: 50%;left: 50%;width: 70rpx;height: 60rpx;transform: translate(-50%,-50%);" src="https://www.focusnu.com/media/directive/index/takephoto.png" />
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
@ -23,8 +23,8 @@
|
|||
<view class="photo-font">请上传身份证国徽面</view>
|
||||
</view>
|
||||
<view style="position: relative;">
|
||||
<image class="photo" :src="backImge ? backImge : `/static/index/backIDcard.png`" />
|
||||
<image v-show="!backImge" style="position: absolute;top: 50%;left: 50%;width: 70rpx;height: 60rpx;transform: translate(-50%,-50%);" src="@/static/index/takephoto.png" />
|
||||
<image class="photo" :src="backImge ? backImge : `https://www.focusnu.com/media/directive/index/backIDcard.png`" />
|
||||
<image v-if="!backImge" style="position: absolute;top: 50%;left: 50%;width: 70rpx;height: 60rpx;transform: translate(-50%,-50%);" src="https://www.focusnu.com/media/directive/index/takephoto.png" />
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
@ -73,20 +73,20 @@
|
|||
|
||||
// 拍照并上传
|
||||
function getMessage() {
|
||||
|
||||
uni.navigateTo({ url: '/pages/addoldman/camera' });
|
||||
// 使用 UniApp 的 API 调用摄像头
|
||||
uni.chooseImage({
|
||||
count: 1,
|
||||
sourceType: ['camera'],
|
||||
success: chooseRes => {
|
||||
tempImagePath.value = chooseRes.tempFilePaths[0]
|
||||
// 拍照成功后,调用上传函数
|
||||
uploadImage(tempImagePath.value)
|
||||
},
|
||||
fail: err => {
|
||||
console.error('拍照失败:', err)
|
||||
}
|
||||
})
|
||||
// uni.chooseImage({
|
||||
// count: 1,
|
||||
// sourceType: ['camera'],
|
||||
// success: chooseRes => {
|
||||
// tempImagePath.value = chooseRes.tempFilePaths[0]
|
||||
// // 拍照成功后,调用上传函数
|
||||
// uploadImage(tempImagePath.value)
|
||||
// },
|
||||
// fail: err => {
|
||||
// console.error('拍照失败:', err)
|
||||
// }
|
||||
// })
|
||||
}
|
||||
|
||||
const headImge = ref("");
|
||||
|
|
|
@ -0,0 +1,195 @@
|
|||
<template>
|
||||
<view class="container">
|
||||
<!-- 原生相机预览 -->
|
||||
<camera id="idCamera" class="camera-preview" device-position="back" flash="off" binderror="onCameraError" />
|
||||
<!-- 隐藏的裁剪 Canvas -->
|
||||
<canvas canvas-id="cropCanvas"
|
||||
style="width:100%;height:100%;position:absolute;top:0;left:0;display:none;"></canvas>
|
||||
<!-- 遮罩层 -->
|
||||
<view class="mask">
|
||||
<view class="mask-block top" />
|
||||
<view class="mask-block middle">
|
||||
<view class="side" />
|
||||
<view class="cutout">
|
||||
<text class="hint">请将身份证放入此框内</text>
|
||||
</view>
|
||||
<view class="side" />
|
||||
</view>
|
||||
<view class="mask-block bottom" />
|
||||
</view>
|
||||
|
||||
<!-- 底部拍照按钮 -->
|
||||
<view class="controls">
|
||||
<button class="shutter" @tap="takePhoto">拍 照</button>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {
|
||||
onMounted,
|
||||
ref
|
||||
} from 'vue';
|
||||
|
||||
let cameraContext;
|
||||
const sysInfo = uni.getSystemInfoSync(); // 获取屏幕宽高
|
||||
|
||||
onMounted(() => {
|
||||
cameraContext = uni.createCameraContext();
|
||||
});
|
||||
|
||||
function onCameraError(e) {
|
||||
console.error('Camera Error:', e);
|
||||
}
|
||||
|
||||
function takePhoto() {
|
||||
cameraContext.takePhoto({
|
||||
quality: 'high',
|
||||
success: async (res) => {
|
||||
const src = res.tempImagePath;
|
||||
|
||||
// 2.1 计算屏幕上 cutout 区域(px)
|
||||
const screenW = sysInfo.windowWidth;
|
||||
const screenH = sysInfo.windowHeight;
|
||||
const topMaskH = screenH * 0.25; // mask-block.top 高度
|
||||
const middleH = screenH * 0.50; // mask-block.middle 高度
|
||||
const cutoutH = middleH * 0.60; // cutout 高度
|
||||
const cutoutW = cutoutH * 1.586; // 按 aspect-ratio:1.586 计算宽度
|
||||
const cutoutX = (screenW - cutoutW) / 2; // 居中
|
||||
const cutoutY = topMaskH + (middleH - cutoutH) / 2;
|
||||
|
||||
// 2.2 拿到原图真实尺寸,用于映射
|
||||
const info = await uni.getImageInfo({
|
||||
src
|
||||
});
|
||||
const origW = info.width;
|
||||
const origH = info.height;
|
||||
|
||||
// 2.3 计算裁剪在原图上的参数
|
||||
const ratioW = origW / screenW;
|
||||
const ratioH = origH / screenH;
|
||||
const sx = cutoutX * ratioW;
|
||||
const sy = cutoutY * ratioH;
|
||||
const sWidth = cutoutW * ratioW;
|
||||
const sHeight = cutoutH * ratioH;
|
||||
// uni.authorize({
|
||||
// scope: 'scope.camera',
|
||||
// success: () => console.log('已授权相机'),
|
||||
// fail: () => uni.showModal({ title: '权限不足', content: '请在设置里打开相机权限' })
|
||||
// });
|
||||
// 3. 在 Canvas 上裁切
|
||||
const ctx = uni.createCanvasContext('cropCanvas', {
|
||||
enableScroll: false
|
||||
});
|
||||
// 设置画布尺寸为裁剪区域的像素大小
|
||||
ctx.drawImage(src, sx, sy, sWidth, sHeight, 0, 0, sWidth, sHeight);
|
||||
ctx.draw(false, () => {
|
||||
uni.canvasToTempFilePath({
|
||||
canvasId: 'cropCanvas',
|
||||
x: 0,
|
||||
y: 0,
|
||||
width: sWidth,
|
||||
height: sHeight,
|
||||
destWidth: sWidth,
|
||||
destHeight: sHeight,
|
||||
success: (cropRes) => {
|
||||
// 裁切完成,存入缓存并返回
|
||||
uni.setStorageSync('idcardPhoto', cropRes.tempFilePath);
|
||||
uni.navigateBack({
|
||||
delta: 1
|
||||
});
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('Canvas to TempFile Fail:', err);
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('Take Photo Fail:', err);
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.container {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
background: #000;
|
||||
}
|
||||
|
||||
.camera-preview {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.mask {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.mask-block {
|
||||
width: 100%;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.mask-block.top,
|
||||
.mask-block.bottom {
|
||||
height: 25%;
|
||||
}
|
||||
|
||||
.mask-block.middle {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
height: 50%;
|
||||
}
|
||||
|
||||
.side {
|
||||
flex: 1;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.cutout {
|
||||
width: 100%;
|
||||
height: 60%;
|
||||
aspect-ratio: 1.586;
|
||||
border: 2rpx dashed #fff;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.hint {
|
||||
position: absolute;
|
||||
bottom: 20rpx;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
|
||||
.controls {
|
||||
position: absolute;
|
||||
bottom: 50rpx;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.shutter {
|
||||
width: 300rpx;
|
||||
height: 120rpx;
|
||||
border-radius: 60rpx;
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
|
@ -3,14 +3,14 @@
|
|||
<view class="white-content">
|
||||
<view class="content-title">
|
||||
<view class="content-weight">上传户口本本人页</view>
|
||||
<image class="content-img" src="@/static/index/bian.png" />
|
||||
<image class="content-img" src="https://www.focusnu.com/media/directive/index/bian.png" />
|
||||
</view>
|
||||
<view class="white-photo" @click="getMessage">
|
||||
<view class="photo-left">
|
||||
<view class="photo-weight">户口本本人页</view>
|
||||
<view class="photo-font">请上传户口本本人页</view>
|
||||
</view>
|
||||
<image class="photo" src="@/static/index/photoID.png" />
|
||||
<image class="photo" src="https://www.focusnu.com/media/directive/index/photoID.png" />
|
||||
</view>
|
||||
<view class="white-message">
|
||||
<view class="message-title">
|
||||
|
|
|
@ -3,21 +3,21 @@
|
|||
<view class="white-content">
|
||||
<view class="content-title">
|
||||
<view class="content-weight">医保卡上传</view>
|
||||
<image class="content-img" src="@/static/index/bian.png" />
|
||||
<image class="content-img" src="https://www.focusnu.com/media/directive/index/bian.png" />
|
||||
</view>
|
||||
<view class="white-photo" @click="getMessage">
|
||||
<view class="photo-left">
|
||||
<view class="photo-weight">医保卡正面</view>
|
||||
<view class="photo-font">请上传身份证医保卡正面</view>
|
||||
</view>
|
||||
<image class="photo" src="@/static/index/yibaocard.png" />
|
||||
<image class="photo" src="https://www.focusnu.com/media/directive/index/yibaocard.png" />
|
||||
</view>
|
||||
<view class="white-photo" style="margin-top: 30rpx;" @click="getMessage">
|
||||
<view class="photo-left">
|
||||
<view class="photo-weight">医保卡背面</view>
|
||||
<view class="photo-font">请上传身份证医保卡背面</view>
|
||||
</view>
|
||||
<image class="photo" src="@/static/index/backyibaocard.png" />
|
||||
<image class="photo" src="https://www.focusnu.com/media/directive/index/backyibaocard.png" />
|
||||
</view>
|
||||
<view class="white-message">
|
||||
<view class="message-title">
|
||||
|
|
|
@ -7,16 +7,16 @@
|
|||
class="video"
|
||||
playsinline webkit-playsinline x5-playsinline
|
||||
muted
|
||||
v-show="started"
|
||||
v-if="started"
|
||||
/>
|
||||
|
||||
<!-- ② Canvas:实时把 video 画上来,同时用于拍照 -->
|
||||
<canvas ref="canvas" class="canvas" v-show="started"></canvas>
|
||||
<canvas ref="canvas" class="canvas" v-if="started"></canvas>
|
||||
|
||||
<!-- ③ 中间遮罩 -->
|
||||
<image
|
||||
class="overlay"
|
||||
src="@/static/index/nu.png"
|
||||
src="https://www.focusnu.com/media/directive/index/nu.png"
|
||||
:style="{ opacity: started ? 1 : 0 }"
|
||||
/>
|
||||
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
<template>
|
||||
<view class="login-container">
|
||||
<image class="back-imge" src="https://www.focusnu.com/media/directive/login/back.png" @click="goback" />
|
||||
<!-- 扫码遮罩层 -->
|
||||
<view v-show="scanning" class="scan-mask">
|
||||
<view v-if="scanning" class="scan-mask">
|
||||
<!-- 半透明背景自动铺满 -->
|
||||
<view class="mask-bg" @click="cancelScan"></view>
|
||||
<!-- 扫描框容器,绝对居中 -->
|
||||
|
@ -11,33 +12,33 @@
|
|||
</view>
|
||||
</view>
|
||||
<view class="index-up">
|
||||
<image class="index-up-img" src="@/static/index/indexgif.gif" mode="widthFix" lazy-load="false" />
|
||||
<image class="index-up-img" src="https://www.focusnu.com/media/directive/index/indexgif.gif" mode="widthFix" lazy-load="false" />
|
||||
</view>
|
||||
|
||||
<view class="index-ball-father">
|
||||
<view class="white-ball">
|
||||
<image class="small-img" @click="gotoPay" src="@/static/index/button/money.png" mode="widthFix"
|
||||
<image class="small-img" @click="gotoPay" src="https://www.focusnu.com/media/directive/index/button/money.png" mode="widthFix"
|
||||
lazy-load="false" />
|
||||
</view>
|
||||
<view class="white-ball">
|
||||
<image class="small-img" src="@/static/index/button/scan.png" mode="widthFix" lazy-load="false" />
|
||||
<image class="small-img" src="https://www.focusnu.com/media/directive/index/button/scan.png" mode="widthFix" lazy-load="false" />
|
||||
</view>
|
||||
<view class="white-ball">
|
||||
<image class="small-img" src="@/static/index/button/watch.png" mode="widthFix" lazy-load="false" />
|
||||
<image class="small-img" src="https://www.focusnu.com/media/directive/index/button/watch.png" mode="widthFix" lazy-load="false" />
|
||||
</view>
|
||||
<view class="super-white-ball" @click="jumpTo">
|
||||
<image class="small-img" src="@/static/index/button/more.png" mode="widthFix" lazy-load="false" />
|
||||
<image class="small-img" src="https://www.focusnu.com/media/directive/index/button/more.png" mode="widthFix" lazy-load="false" />
|
||||
</view>
|
||||
</view>
|
||||
<view class="index-smallPhoto">
|
||||
<view class="photo-box" @click="preview()">
|
||||
<image class="photo-box-img" src="@/static/index/kuai.png" mode="widthFix" lazy-load="false" />
|
||||
<image class="photo-box-img" src="https://www.focusnu.com/media/directive/index/kuai.png" mode="widthFix" lazy-load="false" />
|
||||
<image class="photo-box-img" :src="tu" mode="widthFix" lazy-load="false" />
|
||||
</view>
|
||||
</view>
|
||||
<view class="white-scan" v-show="scaning">
|
||||
<view class="white-scan" v-if="scaning">
|
||||
<view class="scan-title">
|
||||
<image class="scan-img" src="@/static/index/badscan.png" />
|
||||
<image class="scan-img" src="https://www.focusnu.com/media/directive/index/badscan.png" />
|
||||
<view class="scan-font">
|
||||
<view class="weight">
|
||||
扫描机构二维码
|
||||
|
@ -49,7 +50,7 @@
|
|||
<view class="scan-back" @click="scaning = false;">
|
||||
返回
|
||||
</view>
|
||||
<!-- <image class="scan-back" src="@/static/index/index/back.png" @click="scaning = false;" /> -->
|
||||
<!-- <image class="scan-back" src="https://www.focusnu.com/media/directive/index/index/back.png" @click="scaning = false;" /> -->
|
||||
</view>
|
||||
|
||||
<view v-if="qrResult" class="result">
|
||||
|
@ -58,7 +59,7 @@
|
|||
<view class="other-scan">
|
||||
<view class="scan-circle" @click="scanQrCode">
|
||||
<view class="small-circle"></view>
|
||||
<image class="scan-img" src="@/static/index/goodscan.png" />
|
||||
<image class="scan-img" src="https://www.focusnu.com/media/directive/index/goodscan.png" />
|
||||
</view>
|
||||
<view class="scan-text">
|
||||
扫描二维码
|
||||
|
@ -66,7 +67,7 @@
|
|||
</view>
|
||||
|
||||
</view>
|
||||
<view class="white-content-father-time" v-show="!scaning">
|
||||
<view class="white-content-father-time" v-if="!scaning">
|
||||
<view class="white-content">
|
||||
<view class="time-father">
|
||||
<view class="font-weight">
|
||||
|
@ -78,12 +79,12 @@
|
|||
</view>
|
||||
<view class="white-shu"></view>
|
||||
<view class="wendu-content">
|
||||
<image class="wendu-img" src="@/static/index/index/wendu.png" lazy-load="false" />
|
||||
<image class="wendu-img" src="https://www.focusnu.com/media/directive/index/index/wendu.png" lazy-load="false" />
|
||||
<view class="wendu-font">
|
||||
<view>温度</view>
|
||||
<view style="font-weight: 600;">16℃</view>
|
||||
</view>
|
||||
<image class="wendu-img" src="@/static/index/index/shidu.png" lazy-load="false" />
|
||||
<image class="wendu-img" src="https://www.focusnu.com/media/directive/index/index/shidu.png" lazy-load="false" />
|
||||
<view class="wendu-font">
|
||||
<view>湿度</view>
|
||||
<view style="font-weight: 600;">49%</view>
|
||||
|
@ -91,19 +92,19 @@
|
|||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="white-content-father" v-show="!scaning">
|
||||
<view class="white-content-father" v-if="!scaning">
|
||||
<swiper style="width: 100%;" :duration="500" :style="{height: `600rpx`}" :current="which"
|
||||
@change="swiperchange">
|
||||
<swiper-item style="width: 100%;">
|
||||
<view class="white-content">
|
||||
<image class="white-content-img" src="@/static/index/index/nobang.png" lazy-load="false" />
|
||||
<image class="white-content-img" src="https://www.focusnu.com/media/directive/index/index/nobang.png" lazy-load="false" />
|
||||
<view class="white-font">
|
||||
请绑定护理单元~
|
||||
</view>
|
||||
<view class="botton-button">
|
||||
<view class="botton-button-father">
|
||||
<view class="botton-button-bgc" @click="gotoWindy">
|
||||
<image class="botton-button-img" src="@/static/index/index/cloudbang.png" />
|
||||
<image class="botton-button-img" src="https://www.focusnu.com/media/directive/index/index/cloudbang.png" />
|
||||
</view>
|
||||
<view class="botton-button-font">
|
||||
云绑定
|
||||
|
@ -111,7 +112,7 @@
|
|||
</view>
|
||||
<view class="botton-button-father">
|
||||
<view class="botton-button-bgc" @click="scaning = true">
|
||||
<image class="botton-button-img" src="@/static/index/index/scan.png" />
|
||||
<image class="botton-button-img" src="https://www.focusnu.com/media/directive/index/index/scan.png" />
|
||||
</view>
|
||||
<view class="botton-button-font" @click="scaning = true">
|
||||
扫码绑定
|
||||
|
@ -123,7 +124,7 @@
|
|||
<swiper-item>
|
||||
<view class="white-content">
|
||||
<image style="top: 10rpx;width: 600rpx;height: 400rpx;" class="white-content-img"
|
||||
src="@/static/index/badold.png" />
|
||||
src="https://www.focusnu.com/media/directive/index/badold.png" />
|
||||
<view style="margin-top: 350rpx;" class="white-font">
|
||||
请添加长者信息
|
||||
</view>
|
||||
|
@ -139,11 +140,11 @@
|
|||
<view class="">
|
||||
单元清洁服务指令已执行完毕,点击查看
|
||||
</view>
|
||||
<image class="zhiling-img" src="@/static/index/index/back.png" />
|
||||
<image class="zhiling-img" src="https://www.focusnu.com/media/directive/index/index/back.png" />
|
||||
</view>
|
||||
<view class="white-box-father">
|
||||
<view v-for="(item,index) in buttonArray" :key="index" class="white-box">
|
||||
<image class="box-img" :src="`/static/index/jumpbutton/${index}.png`" />
|
||||
<image class="box-img" :src="`https://www.focusnu.com/media/directive/index/jumpbutton/${index}.png`" />
|
||||
<view class="box-font">{{item}}</view>
|
||||
|
||||
</view>
|
||||
|
@ -158,7 +159,7 @@
|
|||
<!-- 底部的栏,为啥这样写,是因为要做左右拉动 -->
|
||||
<view class="botton-view">
|
||||
<view class="jia-box">
|
||||
<view class="gray-box" v-show="whichMenu===2"></view>
|
||||
<view class="gray-box" v-if="whichMenu===2"></view>
|
||||
<view class="jia">
|
||||
+
|
||||
</view>
|
||||
|
@ -166,12 +167,12 @@
|
|||
<view v-for="(item,index) in itemArray" class="array-father">
|
||||
<view :class="itemTarget===index ? `bottom-button-target` : `bottom-button`" @click="itemTarget=index">
|
||||
<image class="botton-img"
|
||||
:src="`/static/index/itemsbutton/${index}${itemTarget===index?1:0}.png`" />
|
||||
:src="`https://www.focusnu.com/media/directive/index/itemsbutton/${index}${itemTarget===index?1:0}.png`" />
|
||||
<view class="bottom-text" :style="!index ?{fontWeight:600}:{}">
|
||||
{{item}}
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view v-show="itemTarget===index" class="blue-heng"></view> -->
|
||||
<!-- <view v-if="itemTarget===index" class="blue-heng"></view> -->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
@ -184,10 +185,10 @@
|
|||
onMounted,
|
||||
onUnmounted
|
||||
} from 'vue';
|
||||
import tu from '@/static/index/tu.png'
|
||||
// import tu from 'https://www.focusnu.com/media/directive/index/tu.png'
|
||||
import request from '@/request/index.js' // 你封装的 uni.request
|
||||
|
||||
|
||||
const tu = 'https://www.focusnu.com/media/directive/index/tu.png'
|
||||
const itemArray = ["NU", "动态", "我的"];
|
||||
const buttonArray = ref(["护理流程", "服务指令", "实时监控", "客户信息", "缴费账单", "充值缴费", "退住管理"])
|
||||
const itemTarget = ref(0);
|
||||
|
@ -307,7 +308,11 @@
|
|||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
const goback = () => {
|
||||
uni.navigateBack()
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
updateTime() // 立刻执行一次,保证页面一加载就有值
|
||||
timer = setInterval(updateTime, 1000) // 每秒更新
|
||||
|
@ -405,6 +410,7 @@
|
|||
top: 35rpx;
|
||||
left: 0;
|
||||
z-index: 999;
|
||||
margin-top: 120rpx;
|
||||
|
||||
.white-ball {
|
||||
width: 60rpx;
|
||||
|
@ -588,7 +594,7 @@
|
|||
background-color: #fff;
|
||||
background-image:
|
||||
linear-gradient(rgba(255, 255, 255, 0.5), rgba(255, 255, 255, 0.5)),
|
||||
url("@/static/index/bluebgc.png");
|
||||
url("https://www.focusnu.com/media/directive/index/bluebgc.png");
|
||||
background-repeat: no-repeat;
|
||||
background-position: center top;
|
||||
|
||||
|
@ -859,4 +865,13 @@
|
|||
.result {
|
||||
margin: 0 auto;
|
||||
}
|
||||
.back-imge{
|
||||
position: absolute;
|
||||
top: 100rpx;
|
||||
left: 30rpx;
|
||||
width: 50rpx;
|
||||
height: 50rpx;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
</style>
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<view class="login-container">
|
||||
<image class="imge" src="/static/index/nu.png" />
|
||||
<image class="imge" src="https://www.focusnu.com/media/directive/index/nu.png" />
|
||||
<view class="font">
|
||||
页面跳转中,请稍后...
|
||||
</view>
|
||||
|
@ -13,7 +13,7 @@
|
|||
{{item}}
|
||||
</view>
|
||||
</view>
|
||||
<view v-show="itemTarget===index" class="blue-heng"></view>
|
||||
<view v-if="itemTarget===index" class="blue-heng"></view>
|
||||
</view>
|
||||
</view> -->
|
||||
|
||||
|
|
|
@ -1,52 +1,59 @@
|
|||
<template>
|
||||
<view class="login-container">
|
||||
<view class="title">
|
||||
<image class="title-imge" src="/static/index/nu.png" />
|
||||
<!-- <view class="title">
|
||||
<image class="title-imge" src="https://www.focusnu.com/media/directive/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">
|
||||
验证码已发送至{{ mobile }}
|
||||
</view>
|
||||
<image class="photo-imge" src="https://www.focusnu.com/media/directive/index/bgc.png" />
|
||||
<image class="old-imge" src="https://www.focusnu.com/media/directive/index/old.png" /> -->
|
||||
<image class="photo-imge" src="https://www.focusnu.com/media/directive/login/bgc.png" />
|
||||
<image class="back-imge" src="https://www.focusnu.com/media/directive/login/back.png" @click="goback" />
|
||||
<!-- <view class="under-container"> -->
|
||||
<view class="under-container-title">
|
||||
<view class="code-title">
|
||||
请输入验证码
|
||||
</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="4"
|
||||
:placeholder="index < 3 ? '' : ' '" @input="handleInput(index, $event)"
|
||||
@keydown="handleKeydown(index, $event)" :focus="focusedIndex === index" />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="under-view">
|
||||
|
||||
<view class="right-blue" v-show="!countdown" @click="getcode">
|
||||
重新发送
|
||||
</view>
|
||||
<view class="right-white" v-show="countdown">
|
||||
{{countdown}}S后重新发送
|
||||
</view>
|
||||
<view class="right-black" @click="isFadingOut=true">
|
||||
收不到验证码
|
||||
</view>
|
||||
<view class="code-number">
|
||||
验证码已发送到
|
||||
<view class="code-font">
|
||||
{{ mobile }}
|
||||
</view>
|
||||
<!-- <text class="code-font"></text> -->
|
||||
</view>
|
||||
</view>
|
||||
<view class="captcha-container">
|
||||
<u-message-input active-color="#333333" inactive-color="rgb(175,179,189)" width="150" :focus="true" mode="bottomLine" @finish="finshinput" ></u-message-input>
|
||||
<!-- <view class="captcha-box">
|
||||
<view v-for="(digit, index) in captcha" :key="index" class="captcha-item">
|
||||
<input :value="captcha[index]" class="captcha-input" type="number" maxlength="4"
|
||||
@input="handleInput(index, $event)" :focus="focusedIndex === index" />
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
<view class="under-view" style="z-index: 1;">
|
||||
|
||||
<view class="right-blue" v-if="!countdown" @click="getcode">
|
||||
重新发送
|
||||
</view>
|
||||
|
||||
<view class="right-white" v-if="countdown">
|
||||
<text style="color: #0096FF;">{{countdown}}秒</text>后重新发送
|
||||
</view>
|
||||
<view class="right-black" @click="isFadingOut=true">
|
||||
收不到验证码?
|
||||
</view>
|
||||
</view>
|
||||
<!-- </view> -->
|
||||
<!-- 遮罩 -->
|
||||
<transition name="fade">
|
||||
<!-- <transition name="fade"> -->
|
||||
<view v-if="isFadingOut" class="overlay" @click="closeModal" :style="{ backgroundColor: maskColor }" />
|
||||
</transition>
|
||||
<!-- </transition>
|
||||
|
||||
<!-- 底部弹窗 -->
|
||||
<transition name="slide-up">
|
||||
<!-- <transition name="slide-up"> -->
|
||||
<view v-if="isFadingOut" class="modal">
|
||||
<view class="modal-title">收不到验证码</view>
|
||||
<view class="model-p">
|
||||
|
@ -57,7 +64,7 @@
|
|||
<view class="text-view">4 手机卡是否为物联卡,而非SIM卡</view>
|
||||
</view>
|
||||
</view>
|
||||
</transition>
|
||||
<!-- </transition> -->
|
||||
</view>
|
||||
</template>
|
||||
|
||||
|
@ -74,7 +81,8 @@
|
|||
|
||||
import {
|
||||
smsCode,
|
||||
checkPhoneCode
|
||||
checkPhoneCode,
|
||||
getMessage
|
||||
} from "@/api/loginApi.js"
|
||||
|
||||
const mobile = ref("")
|
||||
|
@ -88,17 +96,25 @@
|
|||
function closeModal() {
|
||||
isFadingOut.value = false
|
||||
}
|
||||
|
||||
const aaaa = () =>{
|
||||
console.log("?????")
|
||||
}
|
||||
function filterToSingleDigit(number) {
|
||||
if (typeof number === 'number') {
|
||||
return number % 10; // 只保留个位数
|
||||
}
|
||||
return number; // 如果不是 number,原样返回
|
||||
}
|
||||
|
||||
const finshinput = (res) => {
|
||||
// console.log("res",res)
|
||||
submitCaptcha(res);
|
||||
}
|
||||
|
||||
// 输入框输入时的处理函数
|
||||
const handleInput = (index, event) => {
|
||||
const val = event.detail.value || ''
|
||||
console.log("??????", event)
|
||||
const val = event.detail.value || '';
|
||||
captcha.value[index] = val
|
||||
if (val.length == 4) {
|
||||
// 1. 转成字符串,并补足前导 0 到 4 位
|
||||
const codeStr = event.detail.value.toString().padStart(4, '0') // "0123"
|
||||
|
@ -112,6 +128,7 @@
|
|||
if (captcha.value[index]) {
|
||||
if (index < 3) {
|
||||
focusedIndex.value = index + 1; // 输入后自动聚焦到下一个小方块
|
||||
console.log("cccccccccc")
|
||||
}
|
||||
}
|
||||
let isFour = true;
|
||||
|
@ -157,21 +174,26 @@
|
|||
};
|
||||
const rightCode = ref("")
|
||||
// 提交验证码
|
||||
const submitCaptcha = () => {
|
||||
const code = captcha.value.join('');
|
||||
const submitCaptcha = (res0) => {
|
||||
const code = res0
|
||||
if (code.length === 4) {
|
||||
console.log('提交验证码:', code);
|
||||
let openid = uni.getStorageSync('openid')
|
||||
if (rightCode.value != code) {
|
||||
rightCode.value = code;
|
||||
checkPhoneCode({
|
||||
mobile: mobile.value,
|
||||
openId : uni.getStorageSync('openid').openid,
|
||||
openId: openid,
|
||||
smscode: code
|
||||
}).then(res => {
|
||||
if (res.success) {
|
||||
uni.redirectTo({
|
||||
url: `/pages/login/callback`
|
||||
});
|
||||
getMessage(openid).then(res => {
|
||||
uni.setStorageSync('tel', res.result.tel);
|
||||
uni.setStorageSync('token', res.result.token);
|
||||
uni.setStorageSync('serverUrl', res.result.serverUrl);
|
||||
uni.redirectTo({
|
||||
url: `/pages/login/threeselectone`
|
||||
});
|
||||
})
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '验证码错误',
|
||||
|
@ -192,7 +214,7 @@
|
|||
smsCode({
|
||||
mobile: mobile.value,
|
||||
hkcode: hkcode.value,
|
||||
smsmode:1
|
||||
smsmode: 1
|
||||
}).then(res => {
|
||||
if (res.success) {
|
||||
uni.showToast({
|
||||
|
@ -221,7 +243,9 @@
|
|||
})
|
||||
|
||||
}
|
||||
|
||||
const goback = () => {
|
||||
uni.navigateBack()
|
||||
}
|
||||
// 新增:倒计时相关
|
||||
const countdown = ref(0);
|
||||
let timerId = null;
|
||||
|
@ -236,8 +260,6 @@
|
|||
mobile.value = options.mobile;
|
||||
hkcode.value = options.hkcode;
|
||||
getcode()
|
||||
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
|
@ -251,7 +273,7 @@
|
|||
position: relative;
|
||||
|
||||
.title {
|
||||
margin-top: 70rpx;
|
||||
margin-top: 180rpx;
|
||||
align-items: center;
|
||||
|
||||
.title-imge {
|
||||
|
@ -270,10 +292,10 @@
|
|||
|
||||
.photo-imge {
|
||||
position: absolute;
|
||||
top: 120rpx;
|
||||
top: 200rpx;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 1100rpx;
|
||||
height: 1300rpx;
|
||||
}
|
||||
|
||||
.old-imge {
|
||||
|
@ -333,7 +355,7 @@
|
|||
}
|
||||
|
||||
.under-container-title {
|
||||
margin-top: 50rpx;
|
||||
margin-top: 270rpx;
|
||||
margin-bottom: 20rpx;
|
||||
font-size: 25rpx;
|
||||
font-weight: 500;
|
||||
|
@ -341,16 +363,18 @@
|
|||
|
||||
.code-title {
|
||||
margin-left: 80rpx;
|
||||
font-size: 35rpx;
|
||||
color: black;
|
||||
font-weight: 500;
|
||||
font-size: 40rpx;
|
||||
color: #333333;
|
||||
font-weight: 600;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.code-number {
|
||||
margin-left: 80rpx;
|
||||
font-size: 28rpx;
|
||||
font-size: 25rpx;
|
||||
margin-bottom: 20rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -359,6 +383,7 @@
|
|||
flex-direction: column;
|
||||
align-items: center;
|
||||
margin-top: 20rpx;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.captcha-box {
|
||||
|
@ -376,8 +401,8 @@
|
|||
.captcha-input {
|
||||
width: 110rpx;
|
||||
height: 110rpx;
|
||||
border: 3rpx solid #C0C5D9;
|
||||
border-radius: 30rpx;
|
||||
border-bottom: 5rpx solid #333333;
|
||||
// border-radius: 30rpx;
|
||||
font-size: 50rpx;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
|
@ -390,21 +415,21 @@
|
|||
}
|
||||
|
||||
.right-blue {
|
||||
// float: right;
|
||||
|
||||
color: #0083FF;
|
||||
margin-left: 60rpx;
|
||||
margin-left: 70rpx;
|
||||
}
|
||||
|
||||
.right-white {
|
||||
color: rgb(194, 198, 211);
|
||||
margin-left: 60rpx;
|
||||
margin-left: 70rpx;
|
||||
}
|
||||
|
||||
.right-black {
|
||||
// float: right;
|
||||
// color: #0083FF;
|
||||
margin-right: 80rpx;
|
||||
color: black;
|
||||
|
||||
margin-right: 110rpx;
|
||||
color: #00A2FF;
|
||||
}
|
||||
|
||||
.under-view {
|
||||
|
@ -521,4 +546,19 @@
|
|||
.text-view {
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.back-imge {
|
||||
position: absolute;
|
||||
top: 100rpx;
|
||||
left: 30rpx;
|
||||
width: 50rpx;
|
||||
height: 50rpx;
|
||||
}
|
||||
|
||||
.code-font {
|
||||
font-weight: 600;
|
||||
font-size: 30rpx;
|
||||
margin-left: 15rpx;
|
||||
|
||||
}
|
||||
</style>
|
|
@ -1,26 +1,20 @@
|
|||
<template>
|
||||
<view class="login-container">
|
||||
<view class="title">
|
||||
<image class="title-imge" src="/static/index/nu.png" @click="ceshi" />
|
||||
<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" @click="ceshiscan" />
|
||||
<image class="title-imge" src="https://www.focusnu.com/media/directive/login/icon.png" />
|
||||
<image class="photo-imge" src="https://www.focusnu.com/media/directive/login/bgc.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 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>
|
||||
<!-- 遮罩 -->
|
||||
|
@ -34,7 +28,7 @@
|
|||
<view class="modal-title">服务协议及隐私保护</view>
|
||||
<view class="model-p">
|
||||
<text>  为了更好地保障您的合法权益,请阅读并同意以下协议</text>
|
||||
<text style="color: rgb(0,141,255);" @click="jumpToPro" >《护理单元使用条款》</text>
|
||||
<text style="color: rgb(0,141,255);" @click="jumpToPro">《护理单元使用条款》</text>
|
||||
<text>,同意后将自动登录。</text>
|
||||
</view>
|
||||
<view class="model-down">
|
||||
|
@ -56,14 +50,15 @@
|
|||
ref
|
||||
} from 'vue';
|
||||
import {
|
||||
useWeChatAuth
|
||||
} from '@/compontent/useWeChatAuth.js';
|
||||
getOpenid,
|
||||
getMessage
|
||||
} from '@/api/loginApi.js'
|
||||
import {
|
||||
onLoad
|
||||
} from '@dcloudio/uni-app';
|
||||
|
||||
const isTarget = ref(false);
|
||||
const isFadingOut = ref(false);
|
||||
const {
|
||||
login
|
||||
} = useWeChatAuth();
|
||||
|
||||
// 遮罩色,rgba 可调透明度
|
||||
const maskColor = ref('rgba(0, 0, 0, 0.5)')
|
||||
|
@ -71,30 +66,85 @@
|
|||
function closeModal() {
|
||||
isFadingOut.value = false
|
||||
}
|
||||
|
||||
const superLogin = () => {
|
||||
uni.login({
|
||||
provider: 'weixin',
|
||||
success(res) {
|
||||
getOpenid(res.code).then(res => {
|
||||
let openid = res.data.openid
|
||||
uni.setStorageSync("openid", openid)
|
||||
getMessage(openid).then(res => {
|
||||
// uni.navigateTo({
|
||||
// url: `/pages/login/phonebumber`
|
||||
// });
|
||||
if(!res.result.tel){
|
||||
|
||||
}else{
|
||||
uni.setStorageSync('tel', res.result.tel);
|
||||
uni.setStorageSync('token', res.result.token);
|
||||
uni.setStorageSync('serverUrl', res.result.serverUrl);
|
||||
uni.redirectTo({
|
||||
url: `/pages/login/threeselectone`
|
||||
});
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
fail(err) {
|
||||
console.error('获取 code 失败:', err);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
const getCode = () => {
|
||||
uni.login({
|
||||
provider: 'weixin',
|
||||
success(res) {
|
||||
getOpenid(res.code).then(res => {
|
||||
let openid = res.data.openid
|
||||
uni.setStorageSync("openid", openid)
|
||||
getMessage(openid).then(res => {
|
||||
// uni.navigateTo({
|
||||
// url: `/pages/login/phonebumber`
|
||||
// });
|
||||
if(!res.result.tel){
|
||||
uni.redirectTo({
|
||||
url: `/pages/login/phonebumber`
|
||||
});
|
||||
}else{
|
||||
uni.setStorageSync('tel', res.result.tel);
|
||||
uni.setStorageSync('token', res.result.token);
|
||||
uni.setStorageSync('serverUrl', res.result.serverUrl);
|
||||
uni.redirectTo({
|
||||
url: `/pages/login/threeselectone`
|
||||
});
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
fail(err) {
|
||||
console.error('获取 code 失败:', err);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const loginIt = () => {
|
||||
if (!isTarget.value) {
|
||||
isFadingOut.value = true;
|
||||
} else {
|
||||
login();
|
||||
getCode()
|
||||
}
|
||||
};
|
||||
const jumpToPro = () =>{
|
||||
const jumpToPro = () => {
|
||||
uni.navigateTo({
|
||||
url: "/pages/login/protocol"
|
||||
});
|
||||
}
|
||||
const ceshi = () =>{
|
||||
uni.navigateTo({
|
||||
url: "/pages/addjigou/where"
|
||||
});
|
||||
|
||||
}
|
||||
const ceshiscan = () =>{
|
||||
uni.navigateTo({
|
||||
url: "/pages/selectunit/map"
|
||||
});
|
||||
}
|
||||
onLoad(()=>{
|
||||
superLogin()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
@ -106,38 +156,19 @@
|
|||
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;
|
||||
}
|
||||
.title-imge {
|
||||
width: 150rpx;
|
||||
height: 210rpx;
|
||||
margin: 0 auto;
|
||||
margin-top: 500rpx;
|
||||
}
|
||||
|
||||
.photo-imge {
|
||||
position: absolute;
|
||||
top: 120rpx;
|
||||
top: 200rpx;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 1100rpx;
|
||||
}
|
||||
|
||||
.old-imge {
|
||||
position: absolute;
|
||||
right: 30rpx;
|
||||
top: 400rpx;
|
||||
width: 400rpx;
|
||||
height: 400rpx;
|
||||
height: 1300rpx;
|
||||
}
|
||||
|
||||
.under-container {
|
||||
|
@ -145,11 +176,7 @@
|
|||
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);
|
||||
height: 20vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
|
@ -190,10 +217,10 @@
|
|||
|
||||
.under-container-title {
|
||||
display: flex;
|
||||
margin-top: 60rpx;
|
||||
// margin-top: 10rpx;
|
||||
margin-bottom: 40rpx;
|
||||
align-items: center;
|
||||
font-size: 25rpx;
|
||||
font-size: 23rpx;
|
||||
font-weight: 500;
|
||||
|
||||
.radio-circle-blue {
|
||||
|
@ -213,27 +240,14 @@
|
|||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100rpx;
|
||||
height: 90rpx;
|
||||
border-radius: 43rpx;
|
||||
background: linear-gradient(to right, #00C9FF, #0076FF);
|
||||
background: linear-gradient(to left, #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;
|
||||
|
|
|
@ -1,26 +1,20 @@
|
|||
<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" />
|
||||
<image class="back-imge" src="https://www.focusnu.com/media/directive/login/back.png" @click="goback" />
|
||||
<image class="title-imge" src="https://www.focusnu.com/media/directive/login/icon.png" />
|
||||
<image class="photo-imge" src="https://www.focusnu.com/media/directive/login/bgc.png" />
|
||||
<view class="under-container">
|
||||
<view class="under-container-title">
|
||||
<view class="under-container-input">
|
||||
<view class="input-left">+86</view>
|
||||
<input type="number" style="width: 600rpx;font-size: 33rpx;" maxlength="11" placeholder="请输入绑定手机号"
|
||||
<input type="number" style="width: 600rpx;font-size: 33rpx;" maxlength="11" placeholder="请输入手机号"
|
||||
@input="isRight" />
|
||||
</view>
|
||||
</view>
|
||||
<view class="button-blue" v-show="canClick" @click="jumpto">
|
||||
<view class="button-blue" v-if="canClick" @click="jumpto">
|
||||
获得验证码
|
||||
</view>
|
||||
<view class="button-gray" v-show="!canClick">
|
||||
<view class="button-gray" v-if="!canClick">
|
||||
获得验证码
|
||||
</view>
|
||||
</view>
|
||||
|
@ -49,7 +43,9 @@
|
|||
const codeIsOk = () =>{
|
||||
huakuaiOpen.value = false;
|
||||
getHkCode({mobile:phonenumber.value}).then(res=>{
|
||||
// console.log("????????????//",res.success)
|
||||
// uni.navigateTo({
|
||||
// url: `/pages/login/code?mobile=${phonenumber.value}&hkcode=${res.message}`
|
||||
// });
|
||||
if(res.success){
|
||||
uni.navigateTo({
|
||||
url: `/pages/login/code?mobile=${phonenumber.value}&hkcode=${res.message}`
|
||||
|
@ -79,6 +75,9 @@
|
|||
}
|
||||
|
||||
}
|
||||
const goback = () => {
|
||||
uni.navigateBack()
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
@ -90,38 +89,19 @@
|
|||
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;
|
||||
}
|
||||
.title-imge {
|
||||
width: 150rpx;
|
||||
height: 210rpx;
|
||||
margin: 0 auto;
|
||||
margin-top: 500rpx;
|
||||
}
|
||||
|
||||
.photo-imge {
|
||||
position: absolute;
|
||||
top: 120rpx;
|
||||
top: 200rpx;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 1100rpx;
|
||||
}
|
||||
|
||||
.old-imge {
|
||||
position: absolute;
|
||||
right: 30rpx;
|
||||
top: 400rpx;
|
||||
width: 400rpx;
|
||||
height: 400rpx;
|
||||
height: 1300rpx;
|
||||
}
|
||||
|
||||
.under-container {
|
||||
|
@ -129,11 +109,7 @@
|
|||
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);
|
||||
height: 27vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
|
@ -175,7 +151,7 @@
|
|||
.under-container-title {
|
||||
display: flex;
|
||||
margin-top: 60rpx;
|
||||
margin-bottom: 60rpx;
|
||||
margin-bottom: 55rpx;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 25rpx;
|
||||
|
@ -197,7 +173,7 @@
|
|||
width: 80%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 100rpx;
|
||||
height: 90rpx;
|
||||
border-radius: 43rpx;
|
||||
color: #5A607F;
|
||||
font-size: 33rpx;
|
||||
|
@ -214,25 +190,13 @@
|
|||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100rpx;
|
||||
height: 90rpx;
|
||||
border-radius: 43rpx;
|
||||
background-color: rgb(188, 188, 188);
|
||||
background: linear-gradient(to right, #00C9FF, #0076FF);
|
||||
opacity: 0.4;
|
||||
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;
|
||||
margin-bottom: 50rpx;
|
||||
}
|
||||
|
||||
.button-blue {
|
||||
|
@ -240,45 +204,12 @@
|
|||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100rpx;
|
||||
height: 90rpx;
|
||||
border-radius: 43rpx;
|
||||
background: linear-gradient(to right, #00C9FF, #0076FF);
|
||||
color: #fff;
|
||||
font-size: 33rpx;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
.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;
|
||||
margin-bottom: 50rpx;
|
||||
}
|
||||
|
||||
.bg-mask {
|
||||
|
@ -294,4 +225,11 @@
|
|||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.back-imge{
|
||||
position: absolute;
|
||||
top: 100rpx;
|
||||
left: 30rpx;
|
||||
width: 50rpx;
|
||||
height: 50rpx;
|
||||
}
|
||||
</style>
|
|
@ -1,10 +1,15 @@
|
|||
<template>
|
||||
<view class="font-father">
|
||||
<view style="width: 100%;">
|
||||
<image class="back-imge" src="https://www.focusnu.com/media/directive/login/back.png" @click="goback" />
|
||||
</view>
|
||||
|
||||
<view class="font-title">
|
||||
护理单元隐私条款
|
||||
</view>
|
||||
<view class="">
|
||||
<p>  本《护理单元隐私条款》(以下简称“本条款”)为用户在登录并使用本护理单元(包括网站、App及相关服务)时必须共同遵守的法律协议。请您在使用本护理单元前,认真阅读并充分理解本条款全部内容,如您不同意本条款任何内容,请勿登录或使用本护理单元。</p>
|
||||
<view style="margin-bottom: 50rpx;">
|
||||
<p>  本《护理单元隐私条款》(以下简称“本条款”)为用户在登录并使用本护理单元(包括网站、App及相关服务)时必须共同遵守的法律协议。请您在使用本护理单元前,认真阅读并充分理解本条款全部内容,如您不同意本条款任何内容,请勿登录或使用本护理单元。
|
||||
</p>
|
||||
<br />
|
||||
<p>一、总则</p>
|
||||
<p>1.1 本护理单元由[公司名称](以下简称“本平台”)提供维护,具有独立运营权。</p>
|
||||
|
@ -67,10 +72,13 @@
|
|||
</template>
|
||||
|
||||
<script setup>
|
||||
const goback = () => {
|
||||
uni.navigateBack()
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.font-father{
|
||||
.font-father {
|
||||
width: 100%;
|
||||
// height: 100vh;
|
||||
padding: 0 50rpx;
|
||||
|
@ -78,10 +86,20 @@
|
|||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
.font-title{
|
||||
|
||||
.font-title {
|
||||
font-size: 35rpx;
|
||||
font-weight: 700;
|
||||
margin: 20rpx 0;
|
||||
}
|
||||
}
|
||||
|
||||
.back-imge {
|
||||
// position: absolute;
|
||||
// top: 100rpx;
|
||||
// left: 30rpx;
|
||||
margin: 100rpx 0 50rpx 0rpx;
|
||||
width: 50rpx;
|
||||
height: 50rpx;
|
||||
}
|
||||
</style>
|
|
@ -1,27 +1,29 @@
|
|||
<template>
|
||||
<view class="login-container">
|
||||
<view class="title">
|
||||
<image class="title-imge" src="/static/index/nu.png" @click="ceshi" />
|
||||
<!-- <view class="title">
|
||||
<image class="title-imge" src="https://www.focusnu.com/media/directive/index/nu.png" @click="ceshi" />
|
||||
<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">
|
||||
<three @updateCenterIndex="changePhoto" />
|
||||
</view> -->
|
||||
<image class="photo-imge" src="https://www.focusnu.com/media/directive/index/indexgif.gif" mode="widthFix"
|
||||
lazy-load="false" />
|
||||
<!-- <image class="photo-imge" src="https://www.focusnu.com/media/directive/index/bgc.png" /> -->
|
||||
<!-- <image class="old-imge" src="https://www.focusnu.com/media/directive/index/old.png" /> -->
|
||||
<!-- <view class="under-container">
|
||||
<three style="width: 90%;margin-left: 5%;" @updateCenterIndex="changePhoto" />
|
||||
<view class="font-father">
|
||||
<view class="font">
|
||||
{{fontArray[itemTarget]}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="button-father" v-show="itemTarget==0">
|
||||
<view class="button-father" v-if="itemTarget==0">
|
||||
<view class="button-blue" @click="jumpToindex">
|
||||
绑定单元
|
||||
</view>
|
||||
</view>
|
||||
<view class="button-father" v-show="itemTarget==2">
|
||||
<view class="button-father" v-if="itemTarget==2">
|
||||
<view class="button-blue" style="margin-right: 30rpx;" @click="gotowork(0)">
|
||||
审核详情
|
||||
</view>
|
||||
|
@ -29,7 +31,7 @@
|
|||
申请入驻
|
||||
</view>
|
||||
</view>
|
||||
<view class="button-father" v-show="itemTarget==1">
|
||||
<view class="button-father" v-if="itemTarget==1">
|
||||
<view class="button-blue" style="margin-right: 30rpx;" @click="gotowork(1)">
|
||||
审核详情
|
||||
</view>
|
||||
|
@ -37,6 +39,71 @@
|
|||
申请加盟
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
<view class="card-title">
|
||||
恭喜您已成功绑定手机 <text style="color: #01A9FF ;">{{phone}}</text>,现在您可以:
|
||||
</view>
|
||||
<view class="card">
|
||||
<view class="card-left">
|
||||
<view class="card-weight">
|
||||
长者入住
|
||||
</view>
|
||||
<view class="card-text">
|
||||
护理单元日常护理涵盖生活照料、健康监测、康复护理及心理关怀,为老人提供贴心照护服务。
|
||||
</view>
|
||||
<view class="white-button" @click="jumpToindex">
|
||||
申请入住
|
||||
</view>
|
||||
</view>
|
||||
<view class="card-right">
|
||||
<image class="right-imge" src="https://www.focusnu.com/media/directive/login/old.png" />
|
||||
</view>
|
||||
</view>
|
||||
<view class="card">
|
||||
<view class="card-left">
|
||||
<view class="card-weight">
|
||||
员工入驻
|
||||
</view>
|
||||
<view class="card-text">
|
||||
护理员严格按标准流程,定时为失能老人开展床旁照护,用专业与温情守护老人生活与健康。
|
||||
</view>
|
||||
<view style="display: flex;">
|
||||
<!-- <view class="white-button" style="margin-right: 30rpx;">
|
||||
审核列表
|
||||
</view> -->
|
||||
<view class="white-button">
|
||||
申请入驻
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="card-right">
|
||||
<image class="right-imge" src="https://www.focusnu.com/media/directive/login/yuangong.png" />
|
||||
</view>
|
||||
</view>
|
||||
<view class="card" style="height: 330rpx;">
|
||||
<view class="card-left">
|
||||
<view class="card-weight">
|
||||
机构加盟
|
||||
</view>
|
||||
<view class="card-text">
|
||||
加盟我们,共享银发经济红利!依托成熟运营体系,标准化服务流程降低人力成本及管理开支,背靠品牌资源,助力企业快速实现营收增长。
|
||||
</view>
|
||||
<view style="display: flex;">
|
||||
<!-- <view class="white-button" style="margin-right: 30rpx;" @click="gotowork(1)">
|
||||
审核列表
|
||||
</view> -->
|
||||
<view class="white-button" @click="gotoadd">
|
||||
申请加盟
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
<view class="card-right">
|
||||
<image class="right-imge" src="https://www.focusnu.com/media/directive/login/gongsi.png" />
|
||||
</view>
|
||||
</view>
|
||||
<view class="blue-button" @click="close">
|
||||
关闭
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
@ -46,7 +113,10 @@
|
|||
reactive,
|
||||
ref
|
||||
} from 'vue';
|
||||
import three from "@/compontent/public/photohuadong.vue";
|
||||
import {
|
||||
onLoad
|
||||
} from '@dcloudio/uni-app';
|
||||
// import three from "@/compontent/public/photohuadong.vue";
|
||||
|
||||
const itemTarget = ref(0);
|
||||
const fontArray = ["护理院日常护理涵盖生活照料、健康监测、康复护理及心理关怀,为老人提供贴心照护。", "护理员日常为老人提供饮食起居照料、协助康复训练监测健康状况,陪伴交流并做好环境清洁。",
|
||||
|
@ -64,19 +134,26 @@
|
|||
}
|
||||
const gotowork = (number) => {
|
||||
uni.navigateTo({
|
||||
url: `/pages/login/workjoin?type=${number}`
|
||||
url: `/pages/login/workjoin?type=${number}`
|
||||
});
|
||||
}
|
||||
const gotoadd = () => {
|
||||
uni.setStorageSync('specicalid', "");
|
||||
uni.setStorageSync("baddata","")
|
||||
uni.setStorageSync("baddata", "")
|
||||
uni.navigateTo({
|
||||
url: `/pages/addjigou/name`
|
||||
url: `/pages/addjigou/name`
|
||||
});
|
||||
// uni.navigateTo({
|
||||
// url: `/pages/addjigou/where`
|
||||
// });
|
||||
}
|
||||
const close = () => {
|
||||
uni.exitMiniProgram({});
|
||||
}
|
||||
const phone = ref("")
|
||||
onLoad(() => {
|
||||
phone.value = uni.getStorageSync('tel');
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
@ -89,7 +166,7 @@
|
|||
position: relative;
|
||||
|
||||
.title {
|
||||
margin-top: 70rpx;
|
||||
margin-top: 180rpx;
|
||||
align-items: center;
|
||||
|
||||
.title-imge {
|
||||
|
@ -108,10 +185,11 @@
|
|||
|
||||
.photo-imge {
|
||||
position: absolute;
|
||||
top: 120rpx;
|
||||
top: 40rpx;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 1100rpx;
|
||||
|
||||
}
|
||||
|
||||
.old-imge {
|
||||
|
@ -127,11 +205,11 @@
|
|||
left: 0;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
height: 75%;
|
||||
height: 63vh;
|
||||
background-color: #fff;
|
||||
border-top-left-radius: 50rpx;
|
||||
border-top-right-radius: 50rpx;
|
||||
box-shadow: 10rpx 10rpx 20rpx rgba(0, 0, 0, 0.1);
|
||||
// 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;
|
||||
|
@ -169,4 +247,90 @@
|
|||
margin-bottom: 30rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.card-title {
|
||||
z-index: 1;
|
||||
margin-top: 600rpx;
|
||||
width: 92%;
|
||||
margin-left: 4%;
|
||||
height: 100rpx;
|
||||
border-radius: 35rpx;
|
||||
background-color: #fff;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
|
||||
.card {
|
||||
z-index: 1;
|
||||
margin-top: 30rpx;
|
||||
width: 92%;
|
||||
margin-left: 4%;
|
||||
height: 300rpx;
|
||||
border-radius: 30rpx;
|
||||
background-color: #fff;
|
||||
display: flex;
|
||||
|
||||
.card-left {
|
||||
height: 100%;
|
||||
width: 80%;
|
||||
padding-left: 50rpx;
|
||||
padding-right: 20rpx;
|
||||
|
||||
.card-weight {
|
||||
font-size: 32rpx;
|
||||
font-weight: 600;
|
||||
margin-top: 35rpx;
|
||||
margin-bottom: 10rpx;
|
||||
}
|
||||
|
||||
.card-text {
|
||||
color: #999999;
|
||||
font-size: 25rpx;
|
||||
|
||||
}
|
||||
|
||||
.white-button {
|
||||
width: 180rpx;
|
||||
height: 65rpx;
|
||||
margin-top: 15rpx;
|
||||
background-color: #f6f6f6;
|
||||
border-radius: 30rpx;
|
||||
color: #333333;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
|
||||
.card-right {
|
||||
height: 100%;
|
||||
width: 20%;
|
||||
|
||||
.right-imge {
|
||||
width: 100rpx;
|
||||
height: 100rpx;
|
||||
margin-top: 50rpx;
|
||||
margin-left: 5rpx;
|
||||
}
|
||||
}
|
||||
|
||||
// .right-imge
|
||||
}
|
||||
|
||||
.blue-button {
|
||||
width: 92%;
|
||||
margin-left: 4%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 80rpx;
|
||||
border-radius: 30rpx;
|
||||
background: linear-gradient(to left, #00C9FF, #0076FF);
|
||||
color: #fff;
|
||||
font-size: 33rpx;
|
||||
margin-bottom: 60rpx;
|
||||
margin-top: 40rpx;
|
||||
}
|
||||
</style>
|
|
@ -1,12 +1,12 @@
|
|||
<template>
|
||||
<view class="login-container">
|
||||
|
||||
<image class="photo-imge" src="/static/index/workjoin/bgc.png" />
|
||||
<image class="old-imge" src="/static/index/workjoin/ren.png" />
|
||||
<image class="photo-imge" src="https://www.focusnu.com/media/directive/index/workjoin/bgc.png" />
|
||||
<image class="old-imge" src="https://www.focusnu.com/media/directive/index/workjoin/ren.png" />
|
||||
<view class="under-container" @touchstart.stop @touchmove.stop @touchend.stop>
|
||||
<view class="white-card">
|
||||
<image class="left-img"
|
||||
:src="type=== `1` ? `/static/index/workjoin/man.png` : `/static/index/workjoin/bgcren.png`" />
|
||||
:src="type=== `1` ? `https://www.focusnu.com/media/directive/index/workjoin/man.png` : `https://www.focusnu.com/media/directive/index/workjoin/bgcren.png`" />
|
||||
<view class="card-font">
|
||||
<view style="font-size: 30rpx;font-weight: 600;margin: 20rpx 0 30rpx 0;">
|
||||
{{type=== `1` ? `机构加盟`:`员工入驻`}}
|
||||
|
@ -17,7 +17,7 @@
|
|||
</view>
|
||||
</view>
|
||||
<view class="white-ball" @click="goback">
|
||||
<image class="ball-imge" src="/static/index/workjoin/x.png" />
|
||||
<image class="ball-imge" src="https://www.focusnu.com/media/directive/index/workjoin/x.png" />
|
||||
</view>
|
||||
<view class="shu-father">
|
||||
<view class="shu"></view>
|
||||
|
|
|
@ -1,252 +0,0 @@
|
|||
<template>
|
||||
<view class="container">
|
||||
<!-- 顶部搜索框 -->
|
||||
<view class="search-bar">
|
||||
<input type="text" v-model="keyword" placeholder="搜索地点" @confirm="onSearch" />
|
||||
<button @click="onSearch">搜索</button>
|
||||
</view>
|
||||
|
||||
<!-- 地图展示区 -->
|
||||
<view id="map" class="map"></view>
|
||||
|
||||
<!-- 搜索结果列表 -->
|
||||
<view class="result-list" v-if="pois.length">
|
||||
<view class="poi-item" v-for="(poi, idx) in pois" :key="idx" @click="selectPoi(poi)">
|
||||
<text class="poi-name">{{ poi.name }}</text>
|
||||
<text class="poi-address">{{ poi.address }}</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 默认提示区 -->
|
||||
<view class="info" v-else>
|
||||
<text>请选择或搜索地点</text>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {
|
||||
onMounted,
|
||||
ref
|
||||
} from 'vue';
|
||||
import {
|
||||
useRoute
|
||||
} from 'vue-router';
|
||||
|
||||
// 从路由获取备用默认坐标
|
||||
const route = useRoute();
|
||||
const defaultLat = Number(route.query.lat) || 39.9042;
|
||||
const defaultLng = Number(route.query.lng) || 116.4074;
|
||||
|
||||
const keyword = ref('');
|
||||
const pois = ref([]);
|
||||
let map = null;
|
||||
let marker = null;
|
||||
let searchService = null;
|
||||
|
||||
function initMap(lat, lng) {
|
||||
const center = new qq.maps.LatLng(lat, lng);
|
||||
map = new qq.maps.Map(document.getElementById('map'), {
|
||||
center,
|
||||
zoom: 15
|
||||
});
|
||||
marker = new qq.maps.Marker({
|
||||
position: center,
|
||||
map
|
||||
});
|
||||
searchService = new qq.maps.SearchService({
|
||||
map,
|
||||
pageCapacity: 10
|
||||
});
|
||||
}
|
||||
|
||||
// 1. 动态加载微信 JSSDK 脚本
|
||||
async function loadWxJSSDK() {
|
||||
if (window.wx) return
|
||||
await new Promise(resolve => {
|
||||
const script = document.createElement('script')
|
||||
script.src = 'https://res.wx.qq.com/open/js/jweixin-1.6.0.js'
|
||||
script.onload = resolve
|
||||
document.head.appendChild(script)
|
||||
getapi()
|
||||
})
|
||||
}
|
||||
|
||||
const getapi = () => {
|
||||
const post = `${uni.getStorageSync('serverUrl')}/weiXinPay/getJsApiInfo`;
|
||||
const pay = {
|
||||
url: location.href.split('#')[0],
|
||||
};
|
||||
console.log("????", pay)
|
||||
fetch(post, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(pay)
|
||||
})
|
||||
.then(res => res.json())
|
||||
.then(data => {
|
||||
// secondArray.value = [...data.result];
|
||||
// console.log("???调取微信", data)
|
||||
wx.config({
|
||||
debug: false, // 开启调试会 alert 所有调用结果
|
||||
appId: `wx8fc3e4305d2fbf0b`, // 必填,公众号的唯一标识
|
||||
timestamp: data.timestamp, // 必填,生成签名的时间戳
|
||||
nonceStr: data.nonceStr, // 必填,生成签名的随机串
|
||||
signature: data.signature, // 必填,签名
|
||||
jsApiList: [ // 必填,需要使用的 JS 接口列表
|
||||
'chooseAddress',
|
||||
'getLocation',
|
||||
'openLocation',
|
||||
/* …根据实际业务增删 */
|
||||
]
|
||||
})
|
||||
|
||||
|
||||
})
|
||||
.catch(err => {
|
||||
console.error('请求失败:', err);
|
||||
});
|
||||
}
|
||||
// async function locate() {
|
||||
// // 优先使用 uni.getLocation(App+小程序)
|
||||
// try {
|
||||
// const res = await new Promise((resolve, reject) => {
|
||||
// uni.getLocation({
|
||||
// type: 'gcj02',
|
||||
// success: resolve,
|
||||
// fail: reject
|
||||
// });
|
||||
// });
|
||||
// return {
|
||||
// lat: res.latitude,
|
||||
// lng: res.longitude
|
||||
// };
|
||||
// } catch {
|
||||
// // H5 使用浏览器 Geolocation
|
||||
// if (navigator.geolocation) {
|
||||
// try {
|
||||
// const pos = await new Promise((resolve, reject) => {
|
||||
// navigator.geolocation.getCurrentPosition(resolve, reject, {
|
||||
// enableHighAccuracy: true
|
||||
// });
|
||||
// });
|
||||
// return {
|
||||
// lat: pos.coords.latitude,
|
||||
// lng: pos.coords.longitude
|
||||
// };
|
||||
// } catch {
|
||||
// return null;
|
||||
// }
|
||||
// }
|
||||
// return null;
|
||||
// }
|
||||
// }
|
||||
|
||||
onMounted(async () => {
|
||||
// loadWxJSSDK()
|
||||
// 后端接口要接受当前页面 URL(不能带 # 后面),用于计算 signature
|
||||
// const loc = await locate();
|
||||
// if (loc) {
|
||||
// initMap(loc.lat, loc.lng);
|
||||
// } else {
|
||||
// uni.showToast({
|
||||
// title: '定位失败,使用默认位置',
|
||||
// icon: 'none'
|
||||
// });
|
||||
// initMap(defaultLat, defaultLng);
|
||||
// }
|
||||
initMap(defaultLat, defaultLng)
|
||||
});
|
||||
|
||||
function onSearch() {
|
||||
const kw = keyword.value.trim();
|
||||
if (!kw) {
|
||||
uni.showToast({
|
||||
title: '请输入搜索内容',
|
||||
icon: 'none'
|
||||
});
|
||||
return;
|
||||
}
|
||||
pois.value = [];
|
||||
// 腾讯地图的 SearchService.search 回调只有一个参数
|
||||
searchService.search(kw, (results) => {
|
||||
if (results && results.length) {
|
||||
pois.value = results;
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '未搜索到结果',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function selectPoi(poi) {
|
||||
const pos = new qq.maps.LatLng(poi.lat, poi.lng);
|
||||
map.setCenter(pos);
|
||||
marker.setPosition(pos);
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
.search-bar {
|
||||
display: flex;
|
||||
padding: 8px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.search-bar input {
|
||||
flex: 1;
|
||||
padding: 6px;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.search-bar button {
|
||||
margin-left: 8px;
|
||||
padding: 6px 12px;
|
||||
background-color: #1aad19;
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.map {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.result-list {
|
||||
max-height: 200px;
|
||||
overflow-y: auto;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.poi-item {
|
||||
padding: 8px;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
.poi-name {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.poi-address {
|
||||
font-size: 12px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.info {
|
||||
padding: 16px;
|
||||
background: #fff;
|
||||
text-align: center;
|
||||
color: #999;
|
||||
}
|
||||
</style>
|
|
@ -1,593 +0,0 @@
|
|||
<template>
|
||||
<view class="container">
|
||||
<!-- 顶部搜索框 -->
|
||||
<view class="search-bar">
|
||||
<view class="search-bar-left">
|
||||
|
||||
<image class="left-imge" src="/static/index/chahao.png" />
|
||||
<view style="margin-left: 15rpx;" @click="jumpBack">
|
||||
取消
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="" @click="dingwei">复位</view> -->
|
||||
<view class="search-bar-right" @click="jumpBackValue" v-show="listTarget!=-1">完成</view>
|
||||
<view class="search-bar-right-bad" v-show="listTarget==-1">
|
||||
请选择
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
||||
|
||||
<!-- 地图展示区 -->
|
||||
<view id="map" class="map" @touchend.stop.prevent="onMapDragCancel">
|
||||
<image class="map-dian" src="/static/index/tuding.png" />
|
||||
</view>
|
||||
<view class="goback" @click="dingwei">
|
||||
<image class="goback-imge" src="/static/index/dingwei.png" />
|
||||
</view>
|
||||
<!-- 搜索结果列表 -->
|
||||
<view class="result-list">
|
||||
<view class="sousuo-bgc" @click="openinput = true;pois=[];listTarget=-1;" v-show="!openinput">
|
||||
<image class="sousuo-imge" src="/static/index/fangda.png" />
|
||||
<view class="">搜索地点</view>
|
||||
</view>
|
||||
<view class="input-father" v-show="openinput">
|
||||
<input ref="inputRef" class="input" type="text" v-model="keyword" placeholder="搜索地点" @input="onInput" />
|
||||
<uview class="input-button" @click="close">取消</uview>
|
||||
</view>
|
||||
<!-- <view class="search-bar">
|
||||
<input type="text" v-model="keyword" placeholder="搜索地点" @confirm="onSearch" />
|
||||
<button @click="onSearch">搜索</button>
|
||||
</view> -->
|
||||
<view class="poi-item">
|
||||
<view v-for="(poi, idx) in pois" :key="idx" @click="selectPoi(poi,idx)">
|
||||
<view class="poi-card">
|
||||
<view class="card-title">{{poi.name}}</view>
|
||||
<view class="card-text">
|
||||
{{ poi.juli }} | {{ poi.where }}
|
||||
</view>
|
||||
<view class="target" v-if="idx==listTarget">
|
||||
✓
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- <text class="poi-name">{{ poi.name }}</text>
|
||||
<text class="poi-address">{{ poi.address }}</text> -->
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
||||
<!-- 默认提示区 -->
|
||||
<!-- <view class="info" v-else>
|
||||
<text>请选择或搜索地点</text>
|
||||
</view> -->
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {
|
||||
onMounted,
|
||||
ref,
|
||||
reactive,
|
||||
onBeforeUnmount
|
||||
} from 'vue';
|
||||
import {
|
||||
base_url
|
||||
} from '@/request/index.js';
|
||||
import {
|
||||
proxy,
|
||||
jsonp
|
||||
} from '@/api/main.js'
|
||||
|
||||
// 腾讯地图默认中心
|
||||
const defaultLat = 39.9042;
|
||||
const defaultLng = 116.4074;
|
||||
const inputRef = ref(null)
|
||||
|
||||
const keyword = ref('');
|
||||
const pois = ref([]);
|
||||
const openinput = ref(false);
|
||||
let map = null;
|
||||
let marker = null;
|
||||
// 初始化地图
|
||||
function initMap(lat, lng) {
|
||||
const center = new qq.maps.LatLng(lat, lng);
|
||||
map = new qq.maps.Map(document.getElementById('map'), {
|
||||
center,
|
||||
zoom: 15,
|
||||
zoomControl: false, // 隐藏放大缩小按钮
|
||||
panControl: false, // 隐藏平移控件
|
||||
mapTypeControl: false // 隐藏右上角地图切换
|
||||
});
|
||||
marker = new qq.maps.Marker({
|
||||
position: center,
|
||||
map,
|
||||
});
|
||||
}
|
||||
|
||||
// 动态加载微信 JSSDK 脚本,加载完成后 resolve
|
||||
function loadWxJSSDK() {
|
||||
return new Promise(resolve => {
|
||||
if (window.wx && typeof wx.config === 'function') {
|
||||
return resolve();
|
||||
}
|
||||
const script = document.createElement('script');
|
||||
script.src = 'https://res.wx.qq.com/open/js/jweixin-1.6.0.js';
|
||||
script.onload = () => {
|
||||
// 确认 wx 对象已注入
|
||||
const checkWx = () => {
|
||||
if (window.wx && typeof wx.config === 'function') {
|
||||
resolve();
|
||||
} else {
|
||||
setTimeout(checkWx, 50);
|
||||
}
|
||||
};
|
||||
checkWx();
|
||||
};
|
||||
script.onerror = () => {
|
||||
console.error('加载微信 JSSDK 脚本失败');
|
||||
resolve();
|
||||
};
|
||||
document.head.appendChild(script);
|
||||
});
|
||||
}
|
||||
|
||||
// 使用微信 JSSDK 定位并初始化地图
|
||||
async function initLocation() {
|
||||
// 1. 等待 JSSDK 脚本加载完成
|
||||
await loadWxJSSDK();
|
||||
|
||||
// 2. 获取签名并配置
|
||||
try {
|
||||
const res = await fetch(`${base_url}/weixin/getJsApiInfo`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
url: location.href.split('#')[0]
|
||||
})
|
||||
});
|
||||
const data = await res.json();
|
||||
|
||||
if (window.wx && typeof wx.config === 'function') {
|
||||
wx.config({
|
||||
debug: false,
|
||||
appId: 'wx8fc3e4305d2fbf0b',
|
||||
timestamp: data.timestamp,
|
||||
nonceStr: data.nonceStr,
|
||||
signature: data.signature,
|
||||
jsApiList: ['getLocation', 'openLocation']
|
||||
});
|
||||
|
||||
wx.ready(() => {
|
||||
wx.getLocation({
|
||||
type: 'wgs84',
|
||||
success(ret) {
|
||||
initMap(ret.latitude, ret.longitude);
|
||||
fujinGet(ret.latitude, ret.longitude)
|
||||
},
|
||||
fail(err) {
|
||||
console.warn('微信定位失败,使用默认位置', err);
|
||||
uni.showToast({
|
||||
title: '定位失败,使用默认位置',
|
||||
icon: 'none'
|
||||
});
|
||||
initMap(defaultLat, defaultLng);
|
||||
fujinGet(defaultLat, defaultLng)
|
||||
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
wx.error(err => {
|
||||
console.error('wx.config 验证失败:', err);
|
||||
initMap(defaultLat, defaultLng);
|
||||
});
|
||||
} else {
|
||||
console.warn('wx.config 不可用,使用默认位置');
|
||||
initMap(defaultLat, defaultLng);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('获取 JSSDK 签名失败:', err);
|
||||
initMap(defaultLat, defaultLng);
|
||||
}
|
||||
}
|
||||
const dingwei = () => {
|
||||
// wx.ready(() => {
|
||||
wx.getLocation({
|
||||
type: 'wgs84',
|
||||
success(ret) {
|
||||
initMap(ret.latitude, ret.longitude);
|
||||
fujinGet(ret.latitude, ret.longitude)
|
||||
},
|
||||
fail(err) {
|
||||
console.warn('微信定位失败,使用默认位置', err);
|
||||
uni.showToast({
|
||||
title: err.errMsg,
|
||||
icon: 'none'
|
||||
});
|
||||
initMap(defaultLat, defaultLng);
|
||||
fujinGet(defaultLat, defaultLng);
|
||||
}
|
||||
});
|
||||
// });
|
||||
}
|
||||
const jumpBack = () => {
|
||||
uni.navigateBack()
|
||||
}
|
||||
const jumpBackValue = () => {
|
||||
const payload = {
|
||||
name: pois.value[listTarget.value].name,
|
||||
lat: pois.value[listTarget.value].lat,
|
||||
lng: pois.value[listTarget.value].lng,
|
||||
}
|
||||
uni.setStorageSync('dingwei', payload)
|
||||
uni.navigateBack()
|
||||
}
|
||||
// 搜索 POI
|
||||
async function onSearch() {
|
||||
const kw = keyword.value.trim();
|
||||
if (!kw) {
|
||||
uni.showToast({
|
||||
title: '请输入搜索内容',
|
||||
icon: 'none'
|
||||
});
|
||||
return;
|
||||
}
|
||||
pois.value = [];
|
||||
const center = map.getCenter();
|
||||
const lat = center.getLat();
|
||||
const lng = center.getLng();
|
||||
let inIt = {
|
||||
apiUrl: `https://apis.map.qq.com/ws/place/v1/search`,
|
||||
other: `keyword=${encodeURIComponent(kw)}%26boundary=nearby(${lat},${lng},1000)%26key=LOLBZ-Z2PKW-JJ6RO-3Y7Z7-BSKWT-DLFNC`
|
||||
}
|
||||
proxy(inIt).then(data => {
|
||||
if (data.status === 0 && data.data.length) {
|
||||
data.data.map(item => {
|
||||
let element = {
|
||||
name: item.title,
|
||||
juli: `${item._distance}km`,
|
||||
where: item.address,
|
||||
lat: item.location.lat,
|
||||
lng: item.location.lng,
|
||||
}
|
||||
pois.value.push(element)
|
||||
})
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '未搜索到结果',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
const fujinGet = (lat, lng) => {
|
||||
let inIt = {
|
||||
apiUrl: `https://apis.map.qq.com/ws/geocoder/v1`,
|
||||
other: `location=${lat},${lng}%26key=LOLBZ-Z2PKW-JJ6RO-3Y7Z7-BSKWT-DLFNC%26get_poi=1%26radius=1000%26poi_options=page_size=10;radius=1000;policy=distance;address_format=short`
|
||||
}
|
||||
proxy(inIt).then(data => {
|
||||
if (data.status === 0) {
|
||||
pois.value = [];
|
||||
|
||||
data.result.pois.map(item => {
|
||||
let element = {
|
||||
name: item.title,
|
||||
juli: `${item._distance}km`,
|
||||
where: item.address,
|
||||
lat: item.location.lat,
|
||||
lng: item.location.lng,
|
||||
}
|
||||
pois.value.push(element)
|
||||
})
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '未搜索到结果',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
function focusInput() {
|
||||
inputRef.value?.focus()
|
||||
}
|
||||
const listTarget = ref(0);
|
||||
// 点击 POI 定位
|
||||
function selectPoi(poi, ids) {
|
||||
listTarget.value = ids
|
||||
const pos = new qq.maps.LatLng(poi.lat, poi.lng);
|
||||
map.setCenter(pos);
|
||||
marker.setPosition(pos);
|
||||
}
|
||||
// 防抖函数,delay 毫秒
|
||||
function debounce(fn, delay = 500) {
|
||||
let timer;
|
||||
return function(...args) {
|
||||
clearTimeout(timer);
|
||||
timer = setTimeout(() => fn.apply(this, args), delay);
|
||||
};
|
||||
}
|
||||
const onMapDragCancel = () => {
|
||||
const center = map.getCenter();
|
||||
const lat = center.getLat();
|
||||
const lng = center.getLng();
|
||||
listTarget.value = 0
|
||||
fujinGet(lat, lng)
|
||||
}
|
||||
|
||||
// 绑定的搜索关键词
|
||||
const query = ref('')
|
||||
|
||||
// 防抖定时器 id
|
||||
let timerId = null
|
||||
// 防抖等待时长(毫秒)
|
||||
const DEBOUNCE_DELAY = 500
|
||||
|
||||
// 真正的搜索请求方法
|
||||
function doSearch(val) {
|
||||
// 这里写你的请求逻辑
|
||||
console.log('发起搜索请求:', val)
|
||||
// uni.request({ url: '...', data: { q: val }, ... })
|
||||
}
|
||||
|
||||
// 每次 input 都触发
|
||||
function onInput(e) {
|
||||
// uni-app H5 下取值
|
||||
query.value = e.detail?.value ?? e.target.value
|
||||
|
||||
// 清除上一次的定时器
|
||||
if (timerId) {
|
||||
clearTimeout(timerId)
|
||||
}
|
||||
|
||||
// 如果包含英文字母,则不再设置防抖,也不发请求
|
||||
if (/[A-Za-z]/.test(query.value)) {
|
||||
return
|
||||
}
|
||||
|
||||
// 设置防抖定时器:只有用户停止输入 500ms 后才执行 doSearch
|
||||
timerId = setTimeout(() => {
|
||||
const val = query.value.trim()
|
||||
if (val) {
|
||||
onSearch()
|
||||
}
|
||||
}, DEBOUNCE_DELAY)
|
||||
}
|
||||
|
||||
const close = () => {
|
||||
openinput.value = false;
|
||||
listTarget.value = -1;
|
||||
if (!pois.value.length) {
|
||||
onMapDragCancel()
|
||||
}
|
||||
}
|
||||
onMounted(async () => {
|
||||
await initLocation();
|
||||
});
|
||||
// 组件卸载时清理定时器
|
||||
onBeforeUnmount(() => {
|
||||
if (timerId) {
|
||||
clearTimeout(timerId)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100vh;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.search-bar {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
display: flex;
|
||||
width: 100%;
|
||||
height: 120rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
z-index: 3;
|
||||
/* background: #fff; */
|
||||
}
|
||||
|
||||
.search-bar input {
|
||||
flex: 1;
|
||||
padding: 6px;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.map {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
.map-dian {
|
||||
// background-color: black;
|
||||
width: 60rpx;
|
||||
height: 60rpx;
|
||||
border-radius: 50%;
|
||||
z-index: 2;
|
||||
margin-bottom: 65rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.goback {
|
||||
position: fixed;
|
||||
bottom: 43vh;
|
||||
right: 40rpx;
|
||||
width: 100rpx;
|
||||
height: 100rpx;
|
||||
background-color: #fff;
|
||||
border-radius: 20rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-shadow: 4rpx 4rpx 8rpx rgba(0, 0, 0, 0.1);
|
||||
|
||||
.goback-imge {
|
||||
width: 55rpx;
|
||||
height: 55rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.result-list {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
height: 40vh;
|
||||
width: 94%;
|
||||
margin-left: 3%;
|
||||
border-top-right-radius: 35rpx;
|
||||
border-top-left-radius: 35rpx;
|
||||
// overflow-y: auto;
|
||||
background: #fff;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.poi-item {
|
||||
margin-top: 30rpx;
|
||||
height: calc(40vh - 110rpx);
|
||||
width: 100%;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.poi-name {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.poi-address {
|
||||
font-size: 12px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.info {
|
||||
padding: 16px;
|
||||
background: #fff;
|
||||
text-align: center;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.search-bar-left {
|
||||
margin-left: 30rpx;
|
||||
font-size: 32rpx;
|
||||
font-weight: 600;
|
||||
display: flex;
|
||||
// margin-top: -10rpx;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.search-bar-right {
|
||||
margin-right: 30rpx;
|
||||
width: 120rpx;
|
||||
height: 60rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border-radius: 20rpx;
|
||||
color: #fff;
|
||||
background-color: rgb(1, 168, 255);
|
||||
}
|
||||
|
||||
.search-bar-right-bad {
|
||||
margin-right: 30rpx;
|
||||
width: 120rpx;
|
||||
height: 60rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border-radius: 20rpx;
|
||||
color: rgb(238, 238, 238);
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.sousuo-bgc {
|
||||
width: 90%;
|
||||
background-color: rgb(238, 238, 238);
|
||||
border-radius: 15rpx;
|
||||
height: 80rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin-top: 30rpx;
|
||||
color: rgb(153, 153, 153);
|
||||
|
||||
.sousuo-imge {
|
||||
width: 50rpx;
|
||||
height: 50rpx;
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.input-father {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 30rpx;
|
||||
|
||||
// justify-content: center;
|
||||
.input {
|
||||
margin: 0 5%;
|
||||
padding-left: 5%;
|
||||
width: 70%;
|
||||
background-color: rgb(238, 238, 238);
|
||||
border-radius: 15rpx;
|
||||
height: 75rpx;
|
||||
color: rgb(153, 153, 153);
|
||||
}
|
||||
|
||||
.input-button {
|
||||
font-size: 25rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.left-imge {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
}
|
||||
|
||||
.poi-card {
|
||||
width: 100%;
|
||||
height: 150rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
padding: 0 50rpx;
|
||||
position: relative;
|
||||
|
||||
.card-title {
|
||||
font-size: 28rpx;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.card-text {
|
||||
font-size: 25rpx;
|
||||
color: rgb(167, 167, 167);
|
||||
display: block;
|
||||
width: calc(100% - 10rpx);
|
||||
/* 视需要调整 */
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
}
|
||||
|
||||
.target {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
right: 80rpx;
|
||||
font-size: 40rpx;
|
||||
color: skyblue;
|
||||
}
|
||||
</style>
|
|
@ -61,7 +61,7 @@
|
|||
}
|
||||
const diaoqu = () =>{
|
||||
// const urlpost = `${saveurl.value}/weiXinPay/native`;
|
||||
const urlpost = `https://www.focusnu.com/nursing-unit_0010507/weiXinPay/native`
|
||||
const urlpost = `https://www.focusnu.com/nursingunit_0010507/weiXinPay/native`
|
||||
const payload = {
|
||||
title: "测试订单",
|
||||
openId: openid.value,
|
||||
|
|
|
@ -10,22 +10,22 @@
|
|||
</view>
|
||||
</view>
|
||||
<!-- <view style="height: 80rpx;background-color: #E0E2E9;"></view> -->
|
||||
<view class="title-map" v-show="!isRuler">
|
||||
<view class="title-map" v-if="!isRuler">
|
||||
<view class="right-bad">
|
||||
<view>北</view>
|
||||
<image class="right-bad-img" src="@/static/index/zhinan.png" />
|
||||
<image class="right-bad-img" src="https://www.focusnu.com/media/directive/index/zhinan.png" />
|
||||
<view>南</view>
|
||||
</view>
|
||||
<image class="title-img" src="@/static/index/map.png" />
|
||||
<image class="title-img" src="https://www.focusnu.com/media/directive/index/map.png" />
|
||||
</view>
|
||||
<view class="list-father">
|
||||
<view v-for="(item,index) in institution" :key="index" class="card-father" @click="targetIndex=index">
|
||||
<view :class="targetIndex==index ? `card-target` : `card`">
|
||||
<image class="card-img" :src="targetIndex==index ?`/static/index/jigou/bluewuzi.png`: `/static/index/jigou/wuzi.png`" />
|
||||
<view v-show="targetIndex==index" class="abs-father">
|
||||
<image class="abs-img" src="@/static/index/jigou/bar.png" />
|
||||
<image class="card-img" :src="targetIndex==index ?`https://www.focusnu.com/media/directive/index/jigou/bluewuzi.png`: `https://www.focusnu.com/media/directive/index/jigou/wuzi.png`" />
|
||||
<view v-if="targetIndex==index" class="abs-father">
|
||||
<image class="abs-img" src="https://www.focusnu.com/media/directive/index/jigou/bar.png" />
|
||||
<!-- <view class="abs-dui"></view> -->
|
||||
<image class="abs-dui" src="@/static/index/jigou/dui.png" />
|
||||
<image class="abs-dui" src="https://www.focusnu.com/media/directive/index/jigou/dui.png" />
|
||||
</view>
|
||||
</view>
|
||||
<view class="card-name">
|
||||
|
@ -372,8 +372,8 @@
|
|||
.bgc-height{
|
||||
height: 150rpx;
|
||||
width: 100%;
|
||||
// background: url(`@/static/index/jigou/bgc.png`);
|
||||
background-image: url('/static/index/jigou/bgc.png');
|
||||
// background: url(`https://www.focusnu.com/media/directive/index/jigou/bgc.png`);
|
||||
background-image: url('https://www.focusnu.com/media/directive/index/jigou/bgc.png');
|
||||
background-size: 100% auto; /* 宽度占满,高度自动 */
|
||||
background-position: top center;
|
||||
background-repeat: no-repeat;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// 全局请求封装
|
||||
export const base_url = 'https://www.focusnu.com/nursing-unit'
|
||||
export const base_url = 'https://www.focusnu.com/nursingunit'
|
||||
// 请求超出时间
|
||||
const timeout = 5000
|
||||
|
||||
|
@ -79,8 +79,8 @@ export default (params) => {
|
|||
},
|
||||
complete() {
|
||||
// 不管成功还是失败都会执行
|
||||
uni.hideLoading();
|
||||
uni.hideToast();
|
||||
// uni.hideLoading();
|
||||
// uni.hideToast();
|
||||
}
|
||||
});
|
||||
}).catch(() => {});
|
||||
|
|
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.7 MiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 306 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 389 B |
Before Width: | Height: | Size: 633 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 257 B |
Before Width: | Height: | Size: 604 B |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 1013 B |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 849 B |
Before Width: | Height: | Size: 1.4 MiB |
Before Width: | Height: | Size: 845 B |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 873 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 639 B |
Before Width: | Height: | Size: 803 B |
Before Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 205 KiB |
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 995 B |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 905 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 229 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 636 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 609 KiB |
Before Width: | Height: | Size: 606 KiB |
Before Width: | Height: | Size: 626 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.6 MiB |
Before Width: | Height: | Size: 391 KiB |
Before Width: | Height: | Size: 393 KiB |
Before Width: | Height: | Size: 1.5 MiB |
Before Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 598 KiB |
Before Width: | Height: | Size: 592 KiB |
Before Width: | Height: | Size: 537 KiB |
Before Width: | Height: | Size: 796 KiB |
Before Width: | Height: | Size: 1.7 KiB |
1
unpackage/dist/dev/.sourcemap/mp-weixin-devtools/compontent/public/huakuai.js.map
vendored
Normal file
1
unpackage/dist/dev/.sourcemap/mp-weixin-devtools/compontent/public/photohuadong.js.map
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
{"version":3,"names":["wx","createPage","photohuadong","Component"],"sources":["Y29tcG9udGVudC9wdWJsaWMvcGhvdG9odWFkb25nLnZ1ZQ"],"sourcesContent":["import MiniProgramPage from 'D:/officialAccount/compontent/public/photohuadong.vue'\nwx.createPage(MiniProgramPage)"],"mappings":";;;;AACAA,EAAA,CAAGC,UAAA,CAAWC,YAAA,CAAeC,SAAA","ignoreList":[]}
|
|
@ -1 +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":[]}
|
||||
{"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/login/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":[]}
|