This commit is contained in:
Teng 2025-06-19 17:03:31 +08:00
parent 6f27070084
commit cd3970af23
274 changed files with 2112 additions and 3081 deletions

View File

@ -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',
})
}

View File

@ -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',
// })
// }

View File

@ -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>

View File

@ -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([
"长者入住",

View File

@ -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 };
}

View File

@ -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-->

View File

@ -50,9 +50,12 @@
"quickapp" : {},
/* */
"mp-weixin" : {
"appid" : "",
"appid" : "wx53bc8a44e780d26a",
"setting" : {
"urlCheck" : false
"urlCheck" : false,
"minified" : true,
"es6" : false,
"postcss" : false
},
"usingComponents" : true
},

View File

@ -103,9 +103,9 @@
}
},
{
"path": "pages/map/index",
"path": "pages/addoldman/camera",
"style": {
"navigationBarTitleText": "选择位置"
"navigationBarTitleText": "照相机"
}
},
{

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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 = [];

View File

@ -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("");

195
pages/addoldman/camera.vue Normal file
View File

@ -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>

View File

@ -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">

View File

@ -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">

View File

@ -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 }"
/>

View File

@ -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>

View File

@ -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> -->

View File

@ -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>

View File

@ -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>&#x3000;&#x3000;为了更好地保障您的合法权益请阅读并同意以下协议</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;

View File

@ -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>

View File

@ -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>&#x3000;&#x3000;护理单元隐私条款以下简称本条款为用户在登录并使用本护理单元包括网站App及相关服务时必须共同遵守的法律协议请您在使用本护理单元前认真阅读并充分理解本条款全部内容如您不同意本条款任何内容请勿登录或使用本护理单元</p>
<view style="margin-bottom: 50rpx;">
<p>&#x3000;&#x3000;护理单元隐私条款以下简称本条款为用户在登录并使用本护理单元包括网站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>

View File

@ -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>

View File

@ -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>

View File

@ -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.getLocationApp+
// 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>

View File

@ -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>

View File

@ -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,

View File

@ -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;

View File

@ -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(() => {});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 389 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 633 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 604 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1013 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 849 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 845 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 873 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 639 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 803 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 995 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 905 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 229 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 636 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 609 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 606 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 626 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 391 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 393 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 598 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 592 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 537 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 796 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

File diff suppressed because one or more lines are too long

View 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":[]}

View File

@ -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":[]}

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