From 97836fd44abb0d0374f1b0124b57ad70476593f7 Mon Sep 17 00:00:00 2001
From: chenyc <501753378@qq.com>
Date: 星期四, 20 十月 2022 15:35:55 +0800
Subject: [PATCH] longin
---
src/assets/logo.png | 0
src/stores/userInfo.ts | 18 ++
src/views/home/index.vue | 72 +++------
src/assets/pswdLogin.png | 0
src/views/login/index.vue | 281 ++++++++++++++++++++++++++++++++++++++++
src/assets/yijianLogin.png | 0
src/router/index.ts | 1
src/App.vue | 6
src/main.ts | 17 +-
9 files changed, 338 insertions(+), 57 deletions(-)
diff --git a/src/App.vue b/src/App.vue
index 92e5641..1f8ec05 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -13,10 +13,6 @@
display: grid;
background-color:#F6FAFF;
}
-.fanhui{
- padding-top: 20px;
- width: 100%;
- background: red;
-}
+
</style>
diff --git a/src/assets/logo.png b/src/assets/logo.png
index f3d2503..7e585df 100644
--- a/src/assets/logo.png
+++ b/src/assets/logo.png
Binary files differ
diff --git a/src/assets/pswdLogin.png b/src/assets/pswdLogin.png
new file mode 100644
index 0000000..bdb030a
--- /dev/null
+++ b/src/assets/pswdLogin.png
Binary files differ
diff --git a/src/assets/yijianLogin.png b/src/assets/yijianLogin.png
new file mode 100644
index 0000000..cb48607
--- /dev/null
+++ b/src/assets/yijianLogin.png
Binary files differ
diff --git a/src/main.ts b/src/main.ts
index b1fede2..b15de63 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -5,18 +5,21 @@
// import 'vant/es/toast/style'
// 引入全局样式
import 'vant/lib/index.css'
-import { Col, Row,Icon,Button,Field,NavBar } from 'vant'
+
+import { Button,Form,DatetimePicker,TreeSelect, Field, CellGroup,Tab, Tabs,Popup ,Col, Row ,Icon,Tabbar,RadioGroup, Radio,Dialog,List,
+ Switch,Calendar,Collapse,CollapseItem
+ ,TabbarItem,Picker,DropdownMenu,Loading, DropdownItem,Image as VanImage,Tag,Rate,NavBar, Divider,Search, DatetimePicker, Checkbox, CheckboxGroup, Uploader,Sidebar,SidebarItem,Stepper,Toast, Step, Steps, Cell } from 'vant'
import { createPinia } from 'pinia'
// mock数据
// import './utils/mock'
const app = createApp(App as any)
-app.use(Col)
-app.use(Row)
-app.use(Icon)
-app.use(Button)
-app.use(Field)
-app.use(NavBar)
app.use(router)
app.use(createPinia())
+app.use(Button).use(Form).use(Field).use(CellGroup).use(Tab).use(Tabs).use(Popup).use(Col).use(Row).use(Loading).use(List ).use(Switch)
+ .use(TreeSelect).use(CollapseItem).use(Collapse).use(Calendar).use(Icon).use(Tabbar).use(TabbarItem).use(Picker).use(DropdownMenu).use(DropdownItem).use(Tag).use(DatetimePicker).use(Dialog).
+ use(VanImage).use(Rate ).use(NavBar).use(Search).use(DatetimePicker).use(RadioGroup).use(Radio).use(Checkbox).use(CheckboxGroup).use(Uploader).use(Sidebar).use(SidebarItem).use(Stepper).use(Toast)
+ .use(CollapseItem).use(Collapse).use(Calendar).use(Icon).use(Tabbar).use(TabbarItem).use(Picker).use(DropdownMenu).use(DropdownItem).use(Tag).use(DatetimePicker).use(Dialog).use(Divider).
+ use(VanImage).use(Rate ).use(NavBar).use(Search).use(DatetimePicker).use(RadioGroup).use(Radio).use(Checkbox).use(CheckboxGroup).use(Uploader).use(Sidebar).use(SidebarItem).use(Stepper).use(Toast).use(Step).use(Steps).use(Cell)
+
app.mount('#app')
diff --git a/src/router/index.ts b/src/router/index.ts
index ae0f7ba..354c883 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -4,6 +4,7 @@
import { cancelRequest } from '@/utils/axios'
const routes: Array<RouteRecordRaw> = [
+ { path: '/login', name: 'login', component: () => import('views/login/index.vue'),meta:{title:'登录'}},
{ path: '/', name: 'Home', component: () => import('views/home/index.vue'),meta:{title:'首页'}},
{ path: '/my', name: 'myMine', component: () => import('views/myMine/index.vue'),meta:{title:'我的'}},
{ path: '/paiban', name: 'paiban', component: () => import('views/paiban/index.vue'),meta:{title:'透析排班'}},
diff --git a/src/stores/userInfo.ts b/src/stores/userInfo.ts
new file mode 100644
index 0000000..1e043bc
--- /dev/null
+++ b/src/stores/userInfo.ts
@@ -0,0 +1,18 @@
+
+import { defineStore } from 'pinia'
+import { ref } from 'vue'
+// 使用示例一:函数式定义【个人推荐】
+export const userInfoStore = defineStore('userInfo', () => {
+ const info = ref({
+ openid:'',
+ headimgurl:'',
+ nickname:''
+ })
+ function setUserInfo(userInfo:{openud:string, headimgurl:string,nickname:string}) {
+ info.value.openid=userInfo.openud
+ info.value.headimgurl=userInfo.headimgurl
+ info.value.nickname=userInfo.nickname
+ }
+
+ return { info, setUserInfo }
+})
diff --git a/src/views/home/index.vue b/src/views/home/index.vue
index cba1bf2..c9fa6b1 100644
--- a/src/views/home/index.vue
+++ b/src/views/home/index.vue
@@ -136,43 +136,6 @@
const route = useRoute()
const router=useRouter()
// const counter = useCounterStore()
- const loopData0= [
- {
- lanhuBg2:
- 'url(https://lanhu.oss-cn-beijing.aliyuncs.com/SketchPng10c918ad8f5eb3b228828f57732dad7ecd28335754916c4012147796e36591d6) 0px 0px no-repeat',
- lanhutext0: '健康趋势',
- lanhutext1: 'Health trends'
- },
- {
- lanhuBg2:
- 'url(https://lanhu.oss-cn-beijing.aliyuncs.com/SketchPng9dd5bfd8bce302227d8c0ccb89144c1b70b47c2b07da1fcbb144c9347d69e72a) 0px 0px no-repeat',
- lanhutext0: '健康宣教',
- lanhutext1: 'Health Education'
- }
- ]
-
- const loopData1= [
- {
- lanhuBg1:
- 'url(https://lanhu.oss-cn-beijing.aliyuncs.com/SketchPng042226982f8d895d90cdcfefb4ea4846696567d8a40a8e0a1dd0073e7f899480) 100% no-repeat',
- lanhutext0: '检验报告'
- },
- {
- lanhuBg1:
- 'url(https://lanhu.oss-cn-beijing.aliyuncs.com/SketchPng43a5d2681858b5057217f32705ac557e7fac69348980e05950c034793715775c) 100% no-repeat',
- lanhutext0: '透析排班'
- },
- {
- lanhuBg1:
- 'url(https://lanhu.oss-cn-beijing.aliyuncs.com/SketchPng5658c304c4e0841738fddace6a4bbb55d801d98a5e769632b0b71ffe48d56937) 100% no-repeat',
- lanhutext0: '透析医嘱'
- },
- {
- lanhuBg1:
- 'url(https://lanhu.oss-cn-beijing.aliyuncs.com/SketchPngd56bf49c9455a5e530aa3cb0e45df98f9ee00edae6eb83220b2a0d76f6e9b487) 100% no-repeat',
- lanhutext0: '透析记录'
- }
- ]
const active=ref('home')
const tabChang=(index:any)=>{
if (index==='home'){
@@ -185,16 +148,35 @@
console.log('sss')
router.push(url)
}
+ const isWechat = () => {
+ return String(navigator.userAgent.toLowerCase().match(/MicroMessenger/i)) === 'micromessenger'
+ }
onMounted(() => {
- console.log('初始化',route)
- const queryInfo=route.query
- const {code}=queryInfo
- console.log(code)
- if (code){
- ajaxGet('wechat/code',{code}).then((re:any)=>{
- console.log(re)
- })
+ if (isWechat()){
+ console.log('初始化',route)
+ const queryInfo=route.query
+ const {code}=queryInfo
+ console.log(code)
+ if (code){
+ ajaxGet('wechat/code',{code}).then((re:any)=>{
+ console.log(re)
+ })
+ }
+ else {
+ const appid = 'wx790bd67db6206070' // 微信APPid
+ const local = window.location.href
+ window.location.href =
+ 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' +
+ appid +
+ '&redirect_uri=' +
+ encodeURIComponent(local) +
+ '&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect'
+
+ }
+ } else {
+ console.log('不是微信浏览器')
}
+
})
</script>
<style scoped lang="css" src="./assets/index.scss" />
\ No newline at end of file
diff --git a/src/views/login/index.vue b/src/views/login/index.vue
new file mode 100644
index 0000000..59c258e
--- /dev/null
+++ b/src/views/login/index.vue
@@ -0,0 +1,281 @@
+<script lang="ts" setup>
+ import { Dialog } from 'vant'
+ import { useRouter } from 'vue-router'
+ import { ref } from 'vue'
+ // import { Session } from '@/utils/storage'
+ import { Toast } from 'vant'
+ import logo from 'assets/logo.png'
+ import shoujiLogin from 'assets/yijianLogin.png'
+ import pswdLogin from 'assets/pswdLogin.png'
+ const username = ref('')
+ const password = ref('')
+ const visible=ref(1)
+ const seconds=ref(60)
+ const loadingBUt=ref(false)
+ const router = useRouter()
+ const ruleForm2=ref({
+ newPassword:'',
+ pass:'',
+ validateCode:'',
+ userPhone:''
+ })
+ const ruleForm3=ref({
+ validateCode:'',
+ userPhone:''
+ })
+ const asyncValidator = (val:any) =>{
+ return val===ruleForm2.value.pass
+ }
+ const onSubmit = (values:any) => {
+ console.log('submit', values)
+ router.push('/')
+ // const str=`user_no=${username.value}&user_password=${password.value}`
+ loadingBUt.value=true
+ // signIn(str).then((res:any)=>{
+ // Session.set('token', res.data)
+ // router.push('/')
+ // })
+ // }).catch(()=>{
+ // loadingBUt.value=false
+ // })
+ }
+ const onSubmit2=(values:any)=>{
+ console.log('提交表单',ruleForm2.value)
+ console.log(values)
+ visible.value=1
+ Dialog.alert({
+ title: '提示',
+ message: '密码重置成功请重新登录',
+ }).then(() => {
+ // on close
+ })
+ }
+ const onSubmit3=(values:any)=>{
+ console.log('提交表单',ruleForm3.value)
+ console.log(values)
+ }
+ const sendCode=()=>{
+ if (ruleForm2.value.userPhone===''){
+ Toast('手机号码不能为空')
+ return
+ }
+ // sendValidateCode('mobileNo='+ruleForm2.value.userPhone).then(re=>{
+ // console.log(re)
+ // const timer= setInterval(() => {
+ // if (seconds.value > 0) {
+ // seconds.value--
+ // } else {
+ // seconds.value = 60
+ // clearInterval(timer)
+ // }
+ // }, 1000)
+ // })
+ }
+ const wjmm=()=>{
+ visible.value=2
+ ruleForm2.value.newPassword=''
+ ruleForm2.value.pass=''
+ ruleForm2.value.userPhone=''
+ ruleForm2.value.validateCode=''
+ }
+ const shoujiLoginfun=()=>{
+ visible.value=3
+ ruleForm3.value.userPhone=''
+ ruleForm3.value.validateCode=''
+ }
+</script>
+
+<template>
+ <div class="login">
+ <div class="titlebiaoti">
+ <van-image
+ fit="cover"
+ width="95px"
+ height="84px"
+ :src="logo"
+ />
+ </div>
+ <div>
+ <van-form ref="form1" v-show="visible === 1" @submit="onSubmit" label-width="4em">
+ <van-cell-group inset>
+ <van-field
+ v-model="username"
+ name="登录名"
+ label="登录名"
+ placeholder="请输入登录名"
+ :rules="[{ required: true, message: '请输入登录名' }]"
+ />
+ <van-field
+ v-model="password"
+ type="password"
+ name="密 码"
+ label="密  码"
+ placeholder="6-16位数字或者字母组合"
+ :rules="[{ required: true, message: '请填写密码' }]"
+ >
+ <template #button>
+ <van-button size="small" type="default" @click="wjmm">忘记密码</van-button>
+ </template>
+ </van-field>
+ </van-cell-group>
+ <div style="margin: 16px;text-align:center;">
+ <div class="tss"><van-icon name="circle" /> 登录即视为已经阅读并同意<b style="color: #769AFF;">网站服务条款、法律声明及隐私权政策</b></div>
+ <van-button :loading="loadingBUt" round block type="primary" native-type="submit">
+ 登 录
+ </van-button>
+ </div>
+ </van-form>
+ <van-form ref="form2" v-show="visible === 3" @submit="onSubmit3" label-width="80px">
+ <van-cell-group inset>
+ <van-field
+ v-model="ruleForm3.userPhone"
+ label="手机号码"
+ placeholder="请输入手机号码"
+ :rules="[{ required: true, message: '请输入手机号码' }]"
+ />
+ <van-field
+ v-model="ruleForm3.validateCode"
+ center
+ clearable
+ label="短信验证码"
+ placeholder="请输入短信验证码"
+ :rules="[{ required: true, message: '请输入短信验证码' }]"
+ >
+ <template #button>
+ <van-button size="small" :disabled="seconds < 60" @click="sendCode" type="primary">{{seconds}}发送验证码</van-button>
+ </template>
+ </van-field>
+ </van-cell-group>
+ <div style="margin: 16px;text-align:center;">
+ <div class="tss"><van-icon name="circle" /> 登录即视为已经阅读并同意<b style="color: #769AFF;">网站服务条款、法律声明及隐私权政策</b></div>
+ <van-button :loading="loadingBUt" round block type="primary" native-type="submit">
+ 登 录
+ </van-button>
+ </div>
+ </van-form>
+ <van-row class="loginType">
+ <div class="toptype">
+ <van-divider
+ :style="{ color: '#1989fa', borderColor: '#1989fa', padding: '0 16px' }"
+ >
+ 登录方式
+ </van-divider>
+ </div>
+ </van-row>
+ <van-row>
+ <van-col span="12" @click="shoujiLoginfun" class="logintt">
+ <van-image
+ fit="cover"
+ width="42px"
+ height="42px"
+ :src="shoujiLogin"
+ />
+ <div class="loginwenz">
+ 手机登录
+ </div>
+ </van-col>
+ <van-col span="12" @click="visible = 1" class="logintt">
+ <van-image
+ fit="cover"
+ width="42px"
+ height="42px"
+ :src="pswdLogin"
+ />
+ <div class="loginwenz">密码登录</div>
+ </van-col>
+ </van-row>
+ </div>
+ <transition name="van-slide-up">
+ <div v-show="visible === 2">
+ <van-form @submit="onSubmit2" label-width="80px">
+ <van-cell-group inset>
+ <van-field
+ v-model="ruleForm2.userPhone"
+ label="手机号码"
+ placeholder="请输入手机号码"
+ :rules="[{ required: true, message: '请输入手机号码' }]"
+ />
+ <van-field
+ v-model="ruleForm2.validateCode"
+ center
+ clearable
+ label="短信验证码"
+ placeholder="请输入短信验证码"
+ :rules="[{ required: true, message: '请输入短信验证码' }]"
+ >
+ <template #button>
+ <van-button size="small" :disabled="seconds < 60" @click="sendCode" type="primary">{{seconds}}发送验证码</van-button>
+ </template>
+ </van-field>
+ <van-field
+ v-model="ruleForm2.pass"
+ type="password"
+ label="密  码"
+ placeholder="6-16位数字或者字母组合"
+ :rules="[{ required: true, message: '请填写密码' }]"
+ />
+ <van-field
+ v-model="ruleForm2.newPassword"
+ type="password"
+ label="确认密码"
+ placeholder="6-16位数字或者字母组合"
+ :rules="[{ validator: asyncValidator, message: '密码输入不一致' }]"
+ />
+ </van-cell-group>
+ <div style="margin: 16px;">
+ <van-button :loading="loadingBUt" round block type="primary" native-type="submit">
+ 确认
+ </van-button>
+ </div>
+ <div style="text-align: right; padding-right: 20px;">
+ <span type="primary" @click="visible = 1" native-type="submit">
+ 返回到登录
+ </span>
+ </div>
+ </van-form>
+ </div>
+ </transition>
+
+ </div>
+</template>
+<style lang="scss">
+.login{
+ width: 100%;
+ min-height: 900px;
+}
+.logintt{
+ text-align: center;
+}
+.loginwenz{
+ font-size: 12px;
+ font-weight: 400;
+ color: #AAAAAA;
+}
+.loginType{
+ width: 100%;
+ margin-top: 120px;
+ text-align: center;
+ font-size: 11px;
+ font-weight: 400;
+ color: #AAAAAA;
+ // background: black;
+ .toptype{
+ width: 100%;
+ }
+}
+.titlebiaoti{
+ padding-top: 70px;
+ text-align:center;
+ padding-left: 30px;
+ // border: 1px solid black;
+ font-size: 15px;
+ padding-bottom: 70px;
+}
+.tss{
+ font-size: 10px;
+ font-weight: 400;
+ color: #AAAAAA;
+ height: 50px;
+ // line-height: 50px;
+}
+</style>
\ No newline at end of file
--
Gitblit v1.8.0