第一次

This commit is contained in:
闫晓茹 2022-11-03 18:16:30 +08:00
commit 6ab6654f1a
54 changed files with 2651 additions and 0 deletions

63
App.vue Normal file
View File

@ -0,0 +1,63 @@
<script>
export default {
onLaunch: function() {},
onShow: function() {},
onHide: function() {}
}
</script>
<style lang="scss">
/*每个页面公共css */
@import "uview-ui/index.scss";
.app {
background-color: #F4F5F7;
width: 100%;
height: 100vh;
// position: relative;
color: #000000;
padding: 30rpx 0 200rpx 0;
.cards {
width: 94%;
box-shadow: 0px 0px 30rpx 0px rgba(108, 99, 255, 0.16);
background-color: #fff;
position: absolute;
top: 3%;
left: 3%;
display: flex;
justify-content: space-evenly;
flex-wrap: wrap;
padding: 40rpx 0 200rpx 0;
border-radius: 25rpx;
.item {
width: 43%;
height: 300rpx;
margin-bottom: 40rpx;
border-radius: 25rpx;
position: relative;
.title {
width: 70%;
text-align: center;
font-size: 46rpx;
color: #FCFCFC;
position: absolute;
top: 58%;
left: 50%;
transform: translateX(-50%);
}
image {
width: 100rpx;
height: 100rpx;
position: absolute;
top: 20%;
left: 50%;
transform: translateX(-50%);
}
}
}
}
</style>

View File

@ -0,0 +1,24 @@
import request from "../request.js"
export function userPassWord(data) {
return request({
url: `/nurseApp/PersonLogin/userPassWord`,
method: 'POST',
data,
})
}
export function updateHeadAvatarHead(userId,File) {
return request({
url: `/nurseApp/PersonLogin/updateHeadAvatarHead?userId=${userId}&File=${File}`,
method: 'POST',
data,
})
}
export function nursePerson(phonenumber,password) {
return request({
url: `/nurseApp/PersonLogin/nursePerson?phonenumber=${phonenumber}&password=${password}`,
method: 'GET'
})
}

10
api/Mymission.js Normal file
View File

@ -0,0 +1,10 @@
import request from "./request.js"
export function selectMission(nursePersonId,orderStatus,pageNum,pageSize) {
return request({
url: `/nurseApp/personLogin/selectMission?nursePersonId=${nursePersonId}&orderStatus=${orderStatus}&pageNum=${pageNum}&pageSize=${pageSize}`,
method: 'GET'
})
}

4
api/baseurl.js Normal file
View File

@ -0,0 +1,4 @@
var baseurl = "http://192.168.16.30:8081";
// var baseurl = "http://192.168.16.48:8081";
// var baseurl = "http://192.168.16.76:8080";
export default baseurl

View File

@ -0,0 +1,9 @@
import request from "../request.js"
export function updatePassword(phonenumber, password,) {
return request({
url: `/nurseApp/PersonLogin/updatePassword?phonenumber=${phonenumber}&password=${password}`,
method: 'POST'
})
}

9
api/login/index.js Normal file
View File

@ -0,0 +1,9 @@
import request from "../request.js"
//密码
export function appLogin(phonenumber, password) {
return request({
url: `/nurseApp/PersonLogin/appLogin?phonenumber=${phonenumber}&password=${password}`,
method: 'POST'
})
}

View File

@ -0,0 +1,7 @@
import request from "../request.js"
export function nursePerson(phonenumber,password) {
return request({
url: `/nurseApp/PersonLogin/nursePerson?phonenumber=${phonenumber}&password=${password}`,
method: 'GET'
})
}

16
api/register/index.js Normal file
View File

@ -0,0 +1,16 @@
import request from "../request.js"
export function nurseAppLoginSysUser(data) {
return request({
url: `/nurseApp/PersonLogin/nurseAppLoginSysUser`,
method: 'POST',
data,
})
}
export function personNurseStationLists(pageNum,pageSize) {
return request({
url: `/nurseApp/PersonLogin/personNurseStationLists?pageNum=${pageNum}&pageSize=${pageSize}`,
method: 'get'
})
}

49
api/request.js Normal file
View File

@ -0,0 +1,49 @@
import baseurl from './baseurl.js'
var request = function(config) {
return new Promise((resolve, rejected) => {
uni.showLoading({
title: ''
});
uni.request({
url: baseurl + config.url,
data: config.data,
method: config.method,
timeout: 10000,
// header: {
// token: uni.getStorageSync('token')
// },
success(res) {
// if (res.data.code == 20002) {
// uni.showModal({
// title: "登录提示",
// content: res.data.message,
// success(res1) {
// if (res1.confirm) {
// uni.navigateTo({
// url: '/pages/user/login/login'
// })
// }
// }
// })
// } else {
// if (res.data.success) {
uni.hideLoading();
resolve(res.data)
// } else {
// uni.showToast({
// title: res.data.message,
// icon: "none"
// })
// }
// }
},
fail(err) {
uni.hideLoading();
rejected(err)
}
})
})
}
export default request

11
api/taskDetails.js Normal file
View File

@ -0,0 +1,11 @@
import request from "./request.js"
// 任务详情
export function taskDetails(orderDetailsId) {
return request({
url: `/nurseApp/personLogin/taskDetails?&orderDetailsId=${orderDetailsId}`,
method: 'GET'
})
}

20
index.html Normal file
View File

@ -0,0 +1,20 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<script>
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
CSS.supports('top: constant(a)'))
document.write(
'<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>
<title></title>
<!--preload-links-->
<!--app-context-->
</head>
<body>
<div id="app"><!--app-html--></div>
<script type="module" src="/main.js"></script>
</body>
</html>

23
main.js Normal file
View File

@ -0,0 +1,23 @@
import App from './App'
// #ifndef VUE3
import Vue from 'vue'
import uView from "uview-ui";
Vue.use(uView);
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
...App
})
app.$mount()
// #endif
// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
const app = createSSRApp(App)
return {
app
}
}
// #endif

72
manifest.json Normal file
View File

@ -0,0 +1,72 @@
{
"name" : "NursingrecipientAPP",
"appid" : "",
"description" : "",
"versionName" : "1.0.0",
"versionCode" : "100",
"transformPx" : false,
/* 5+App */
"app-plus" : {
"usingComponents" : true,
"nvueStyleCompiler" : "uni-app",
"compilerVersion" : 3,
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"autoclose" : true,
"delay" : 0
},
/* */
"modules" : {},
/* */
"distribute" : {
/* android */
"android" : {
"permissions" : [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
/* ios */
"ios" : {},
/* SDK */
"sdkConfigs" : {}
}
},
/* */
"quickapp" : {},
/* */
"mp-weixin" : {
"appid" : "",
"setting" : {
"urlCheck" : false
},
"usingComponents" : true
},
"mp-alipay" : {
"usingComponents" : true
},
"mp-baidu" : {
"usingComponents" : true
},
"mp-toutiao" : {
"usingComponents" : true
},
"uniStatistics" : {
"enable" : false
},
"vueVersion" : "2"
}

24
package-lock.json generated Normal file
View File

@ -0,0 +1,24 @@
{
"name": "Attendantapp",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"dependencies": {
"uview-ui": "^1.8.4"
}
},
"node_modules/uview-ui": {
"version": "1.8.4",
"resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-1.8.4.tgz",
"integrity": "sha512-Zr+D5dFdNy6CdHQLBEXeGq/w0LkjxzBtsgaaDwLl0P58g67H7fBBDvy6AzWK/k0c7dwPYMBiK7I4Tr9p92+0DA=="
}
},
"dependencies": {
"uview-ui": {
"version": "1.8.4",
"resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-1.8.4.tgz",
"integrity": "sha512-Zr+D5dFdNy6CdHQLBEXeGq/w0LkjxzBtsgaaDwLl0P58g67H7fBBDvy6AzWK/k0c7dwPYMBiK7I4Tr9p92+0DA=="
}
}
}

5
package.json Normal file
View File

@ -0,0 +1,5 @@
{
"dependencies": {
"uview-ui": "^1.8.4"
}
}

106
pages.json Normal file
View File

@ -0,0 +1,106 @@
{
"easycom": {
"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
},
"pages": [ //pageshttps://uniapp.dcloud.io/collocation/pages
{
"path": "pages/login/login",
"style": {
"navigationBarTitleText": "登录",
"navigationBarBackgroundColor": "#ffffff" //
}
},{
"path": "pages/personal/personal",
"style": {
"navigationBarTitleText": "个人信息",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#4C7BC9",
"navigationBarTextStyle": "white"
}
}, {
"path": "pages/forgotPassword/forgotPassword",
"style": {
"navigationBarTitleText": "忘记密码",
"navigationBarBackgroundColor": "#ffffff" //
}
},{
"path": "pages/register/register",
"style": {
"navigationBarTitleText": "注册账号",
"navigationBarBackgroundColor": "#ffffff" //
}
},{
"path": "pages/homepage/homepage",
"style": {
"navigationBarTitleText": "泉医到家",
"navigationBarBackgroundColor": "#ffffff" //
}
},
{
"path": "pages/confirmCompletion/confirmCompletion",
"style": {
"navigationBarTitleText": "完成确认",
"navigationBarBackgroundColor": "#ffffff" //
}
},{
"path" : "pages/taskReturn/taskReturn",
"style" :
{
"navigationBarTitleText": "任务退回",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff" //
}
},{
"path": "pages/Mymission/Mymission",
"style": {
"navigationBarTitleText": "我的任务",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff" //
}
},{
"path" : "pages/taskDetails/taskDetails",
"style" :
{
"navigationBarTitleText": "任务详情",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff" //
}
},
{
"path": "pages/Modifyinformation/Modifyinformation",
"style": {
"navigationBarTitleText": "修改信息",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#ffffff" //
// "navigationBarTextStyle": "white"
}
},
{
"path": "pages/startup/startup",
"style": {
"navigationBarTitleText": "启动页"
}
}
,{
"path" : "pages/confirmCompletion/confirmCompletion",
"style" :
{
"navigationBarTitleText": "",
"enablePullDownRefresh": false
}
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"uniIdRouter": {}
}

View File

@ -0,0 +1,218 @@
<template>
<view class="app">
<view class="centercontent">
<view class="Commodity" @tap="uploadImag()">
头像
<image class="picture" :src="baseurl+appPersonallist.avatar" mode=""></image>
<image class="pictureA" src="../../static/jiantou.png" mode=""></image>
</view>
<view class="content">
<view class="name">昵称
<input type="text" placeholder="请填写" v-model="appPersonallist.userName" />
</view>
<view class="name">姓名:
<input type="text" placeholder="请输入" v-model="appPersonallist.nickName" />
</view>
<view class="name">电话
<input type="text" placeholder="请输入" v-model="appPersonallist.phonenumber" />
</view>
<view class="nursetype name" style="border: none;" >
护理站:{{getNurseStationName(appPersonallist)}}
</view>
</view>
<view class="finish" @tap="gofinish()">完成
</view>
</view>
<u-toast ref="uToast" />
</view>
</template>
<script>
import {
userPassWord,
nursePerson
} from '@/api/Modifyinformation/Modifyinformation.js';
import baseurl from '@/api/baseurl.js'
export default {
data() {
return {
baseurl: '', //url
appPersonallist: {
userId: '',
userName: '',
nickName: '',
phonenumber: '',
avatar: '',
File: '',
},
}
},
computed:{
getNurseStationName() {
return data => data?.nurseStationSysUserVOList?.[0]?.nurseStationName || ''
},
},
onLoad(options) {
this.baseurl = baseurl;
const that = this
this.baseurl = baseurl;
uni.getStorage({
key: 'phonenumber',
success: function(res) {
that.phonenumber = res.data
console.log(that.phonenumber)
}
});
uni.getStorage({
key: 'password',
success: function(res) {
that.password = res.data
console.log(that.password)
}
});
console.log(that.password, '-----', that.phonenumber)
this.myInfo()
},
methods: {
//
uploadImag() {
var that = this;
uni.chooseImage({
count: 1,
sizeType: ['original'],
sourceType: ['album'],
success(res) {
//blob
console.log(res)
uni.uploadFile({
url: baseurl + '/nurseApp/PersonLogin/updateHeadAvatarHead',
filePath: res.tempFilePaths[0], //file: (filePath)
name: 'file',
formData: { //
'userId': '13',
},
timeout: 5000,
success(res) {
console.log(JSON.parse(res.data))
that.appPersonallist.avatar = JSON.parse(res.data).imgUrl
}
})
}
})
},
//
myInfo() {
nursePerson(this.phonenumber, this.password).then(res => {
console.log(res, 'resresres')
this.appPersonallist = res.data
console.log(this.appPersonallist)
})
},
gofinish() {
// this.appPersonallist = JSON.stringify(this.appPersonallist)
// console.log(this.appPersonallist, 'this.appPersonallist')
userPassWord(this.appPersonallist).then(res => {
if (res.code == 200) {
this.$refs.uToast.show({
title: '修改成功',
type: 'success',
url: '/pages/personal/personal',
duration: '1500'
})
} else {
console.log(res)
this.$refs.uToast.show({
title: res.msg,
type: 'error'
})
}
})
},
},
}
</script>
<style lang="scss">
.app {
background-color: #F4F5F7;
width: 100%;
height: 100vh;
color: #000000;
padding: 3%;
font-size: 36rpx;
.centercontent {
width: 99%;
height: 521rpx;
background: #FFFFFF;
box-shadow: 0rpx 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
margin: 0 auto;
.finish {
width: 217rpx;
font-size: 32rpx;
color: #FFFFFF;
height: 68rpx;
line-height: 68rpx;
text-align: center;
margin-top: 60%;
margin-left: 70%;
background: #4C7BC9;
border-radius: 26rpx;
}
.content {
line-height: 100rpx;
.name {
margin-left: 5%;
height: 100rpx;
border-bottom: 1rpx solid #D8D4D4;
input {
font-size: 36rpx;
margin-top: -11%;
margin-left: 15%;
}
}
.nursetype {
input {
margin-left: 25%;
}
}
}
.Commodity {
line-height: 110rpx;
margin-left: 5%;
border-bottom: 1rpx solid #D8D4D4;
.picture {
vertical-align: middle;
margin-left: 60%;
width: 103rpx;
height: 103rpx;
border-radius: 50%;
}
.pictureA {
margin-left: 3%;
width: 18rpx;
height: 27rpx;
}
.head {
line-height: 140rpx;
margin-left: 5%;
display: inline-block;
}
}
}
}
</style>

View File

@ -0,0 +1,296 @@
<template>
<view class="app">
<view class="inputs">
<i class="icon"></i>
<input type="text" name="" id="" class="input" placeholder="请输入搜索内容">
</view>
<view class="tab">
<view class="tab-item" @tap="testTabClick(index)" v-for="(item,index) in tabList"
:class="tabIndex == index?'active':''">
{{item.name}}
</view>
<view class="Apayment" v-if='choicetab==0' v-for="(item,index) in list" :key="item.id">
<view class="names">{{item.serviceDate}} {{item.serviceStartTime}}-{{item.serviceEndTime}}
<span>待完成</span>
</view>
<image :src="baseurl+item.itemPictureUrl" mode=""></image>
<view class="detailsinfo">
<view class="change">
{{item.nurseItemName}}
</view>
<view class="time">
服务时长{{item.itemServeDurationUnit}}
</view>
<view class="price">
{{item.totalPrice}}
</view>
</view>
<view class="anniu">
<view class="logistics" @tap='gotask(item)'>详情</view>
<view class="logistics harvest">去完成</view>
</view>
</view>
<view class="Apayment" v-if='choicetab==1' v-for="(item,uindex) in list" :key="uindex">
<view class="names">{{item.serviceDate}} {{item.serviceStartTime}}-{{item.serviceEndTime}}
<span>已完成</span>
</view>
<image src="../../static/fuwutu.png" mode=""></image>
<view class="detailsinfo">
<view class="change">
{{item.nurseItemName}}
</view>
<view class="time">
服务时长{{item.itemServeDurationUnit}}
</view>
<view class="price">
{{item.totalPrice}}
</view>
</view>
<view class="anniu">
<view class="evaluate">查看评价</view>
</view>
</view>
</view>
</view>
</template>
<script>
import {
selectMission
} from '@/api/Mymission.js'
import baseurl from '@/api/baseurl.js'
export default {
data() {
return {
baseurl: '',
choicetab: 0, //
tabIndex: 0, //
tabList: [{
name: "待完成"
}, {
name: "已完成"
}, ],
nursePersonId: 2, //id
orderStatus: 'NOT_FINISH', // orderStatus: NOT_FINISHCOMPLETE
pageNum: 1,
pageSize: 10,
//
list: [],
total: 0,
}
},
methods: {
//list
selectMissioninfo() {
selectMission(this.nursePersonId, this.orderStatus, this.pageNum, this.pageSize).then(res => {
this.list = res.rows
this.total = res.total
})
},
//
gotask(item) {
uni.navigateTo({
url: `/pages/taskDetails/taskDetails?orderDetailsId=${item.id}`
})
},
//
testTabClick(index) {
this.list = []
this.tabIndex = index
this.choicetab = index
this.pageNum == 1
if (this.choicetab == 0) {
this.orderStatus = 'NOT_FINISH'
} else {
this.orderStatus = 'COMPLETE'
}
selectMission(this.nursePersonId, this.orderStatus, this.pageNum, this.pageSize).then(res => {
this.list = res.rows
this.total = res.total
})
},
// goorderdetails() {
// uni.navigateTo({
// url: '/pages/orderDetails/orderDetails'
// })
// },
},
onLoad() { //
this.baseurl = baseurl
this.selectMissioninfo();
},
onReachBottom() { //
if (this.list.length >= this.total) {} else {
this.pageNum++
selectMission(this.nursePersonId, this.orderStatus, this.pageNum, this.pageSize).then(res => {
res.rows.forEach(e => {
this.list.push(e)
})
})
}
},
onPullDownRefresh() { //
this.pageNum = 1;
selectMission(this.nursePersonId, this.orderStatus, this.PageNum, this.PageSize).then(res => {
this.list = res.rows
this.total = res.total
})
setTimeout(function() {
uni.stopPullDownRefresh();
}, 1000);
},
}
</script>
<style lang="scss">
.app {
background-color: #F4F5F7;
width: 100%;
height: 100vh;
padding: 1rpx 3%;
.tab .active {
background: #4C7BC9;
}
//
.tab-item {
width: 50%;
text-align: center;
line-height: 70rpx;
color: #ffffff;
background: #BAB7B8;
display: inline-block;
box-shadow: 0rpx 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
font-size: 34rpx;
}
.Apayment {
width: 100%;
height: 391rpx;
background: #FFFFFF;
box-shadow: 0rpx 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
line-height: 70rpx;
padding: 1%;
font-size: 30rpx;
color: #969394;
margin-top: 20rpx;
position: relative;
image {
display: block;
width: 170rpx;
height: 170rpx;
border-radius: 10rpx;
margin: 30rpx 0 0 20rpx;
}
.anniu {
// width: 375rpx;
float: right;
margin: 30rpx 20rpx 0 0;
.evaluate {
background: #4C7BC9;
width: 216rpx;
height: 68rpx;
text-align: center;
color: #ffffff;
border-radius: 26rpx;
}
.logistics {
width: 175rpx;
height: 68rpx;
text-align: center;
color: #ffffff;
background: #E1AE3C;
border-radius: 26rpx;
display: inline-block;
}
.harvest {
background: #4C7BC9;
margin: 0 0 0 15rpx;
}
}
.detailsinfo {
width: 60%;
height: 200rpx;
border-radius: 10rpx;
position: absolute;
top: 25%;
left: 35%;
.change {
width: 100%;
color: #000000;
font-size: 34rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.time {
width: 100%;
font-size: 32rpx;
color: #999999;
position: absolute;
top: 32%;
}
.price {
width: 100%;
font-size: 30rpx;
color: #D43953;
position: absolute;
top: 65%;
}
}
.names {
width: 95%;
margin-left: 20rpx;
border-bottom: 1rpx solid #D8D4D4;
span {
color: #4C7BC9;
float: right;
}
}
}
.inputs {
box-shadow: 0rpx 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border: 1rpx solid #f0f0f0;
width: 99%;
height: 65rpx;
margin: 20rpx auto;
border-radius: 20rpx;
background-color: #Ffffff;
position: relative;
.input {
position: absolute;
height: 65rpx;
left: 10%;
line-height: 65rpx;
font-size: 26rpx;
color: #BEBEC0;
}
.icon {
background: url(@/static/sousuo.png) no-repeat;
width: 30rpx;
height: 28rpx;
background-size: cover;
position: absolute;
top: 30%;
left: 5%;
}
}
}
</style>

View File

@ -0,0 +1,147 @@
<template>
<view class="app">
<view class="picture">
<view class="attendantImg">
护理员到岗照片
</view>
<view class="uppicture">
<u-upload class="slot-btn" width="530" height="130"></u-upload>
</view>
</view>
<view class="picture" style="height: 330rpx;">
<view class="attendantImg">
服务进行中视频不少于1min<span>*选填</span>
</view>
<view class="uppicture">
<u-upload class="slot-btn" width="530" height="130"></u-upload>
</view>
<view class="user">
<image src="../../static/radio.png" mode=""></image>
用户不同意拍摄
</view>
</view>
<view class="picture">
<view class="attendantImg">
服务结束照片
</view>
<view class="uppicture">
<u-upload class="slot-btn" width="530" height="130"></u-upload>
</view>
</view>
<view class="picture" style="height: 350rpx;">
<view class="attendantImg" style="border-bottom: 1rpx solid #BAB7B8;">
用户签名确认
</view>
<view class="receive">
我确认已接受服务
</view>
<view class="uppicture">
<image src="../../static/autograph.png" mode=""></image>
<span>点此签名</span>
<!-- <u-upload class="slot-btn" :action="action" :file-list="fileList" width="620" height="130"></u-upload> -->
</view>
</view>
<view class="submit">
<view class="finish">
去完成
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style lang="scss">
.app {
height: 100%;
padding: 3%;
font-size: 36rpx;
.picture {
width: 95%;
height: 272rpx;
background: #FFFFFF;
box-shadow: 0px 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20px;
margin: 0 auto;
margin-bottom: 20rpx;
.attendantImg {
color: #000000;
height: 88rpx;
line-height: 88rpx;
margin-left: 30rpx;
span {
color: #BAB7B8;
}
}
.uppicture {
border: 1rpx dashed #818181;
width: 90%;
height: 150rpx;
margin: 0 auto;
::v-deep .u-list-item[data-v-49deb6f2] {
background: #FFFFFF;
}
image {
width: 36rpx;
height: 36rpx;
margin-left: 40%;
margin-top: 8%;
}
span {
font-size: 35rpx;
color: #969394;
}
}
.user{
height: 88rpx;
line-height: 88rpx;
color: #969394;
margin-left: 30rpx;
image{
width: 34rpx;
height: 34rpx;
}
}
.receive {
height: 88rpx;
line-height: 88rpx;
color: #969394;
margin-left: 30rpx;
}
}
.submit{
height: 68rpx;
font-size: 32rpx;
color: #FFFFFF;
text-align: center;
margin-left: 60%;
.finish{
width: 217rpx;
height: 68rpx;
line-height: 68rpx;
background: #4C7BC9;
border-radius: 26rpx;
margin-left: 30rpx;
}
}
}
</style>

View File

@ -0,0 +1,74 @@
.app {
height: 100vh;
padding: 20rpx 0;
.item {
font-size: 34rpx;
margin: 0 auto 20rpx;
width: 94%;
height: 100rpx;
line-height: 100rpx;
background-color: #fff;
box-shadow: 0px 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
position: relative;
.lefttext {
position: absolute;
top: 50%;
transform: translateY(-50%);
left: 3%;
}
.righttext {
position: absolute;
top: 50%;
transform: translateY(-50%);
left: 18%;
height: 100rpx;
}
.lefttext,
.righttext {
::v-deep .uni-input-input {
font-size: 34rpx;
}
::v-deep .uni-input-wrapper {
height: 100rpx;
line-height: 100rpx;
}
::v-deep .uni-input-placeholder {
line-height: 100rpx;
font-size: 34rpx;
font-weight: 400;
color: #C3C1C1;
}
}
.obtaincode {
text-align: center;
font-size: 36rpx;
color: #4C7BC9;
line-height: 100rpx;
position: absolute;
right: 5%;
top: 0%;
}
}
.loginbtn {
width: 80%;
height: 100rpx;
text-align: center;
line-height: 100rpx;
background: #4C7BC9;
border-radius: 51rpx;
font-size: 41rpx;
color: #FFFFFF;
position: absolute;
top: 40%;
left: 10%;
}
}

View File

@ -0,0 +1,122 @@
<template>
<view class="app">
<view class="item">
<view class="lefttext">
输入新密码
</view>
<u-input class='righttext' style='left:30%' placeholder="请输入密码" maxlength="10" type="password"
:border="false" :password-icon="true" v-model="newpassword" />
</view>
<view class="item">
<view class="lefttext">
重复新密码
</view>
<u-input class='righttext' style='left:30%' placeholder="请再次输入密码" maxlength="10" type="password"
:border="false" :password-icon="true" v-model="password" />
</view>
<view class="item">
<view class="lefttext">
手机号
</view>
<input class="righttext" style='left:23%' type="text" placeholder="请输入" maxlength="11" v-model="phonenumber"/>
</view>
<view class="item">
<view class="lefttext">
验证码
</view>
<input class="righttext" style='left:23%' type="text" placeholder="" maxlength="6" v-model="verification" />
<view class="obtaincode" :style="{'color':getCodeBtnColor}" @click.stop="getCode()">
{{getCodeText}}
</view>
</view>
<view class="loginbtn" @tap='pwdlogin'>
登录
</view>
<u-toast ref="uToast" />
</view>
</template>
<script>
import {
updatePassword
} from '@/api/forgotPassword/forgotPassword.js'
export default {
data() {
return {
phonenumber: '18963146613',
password: '23456',
newpassword: '',
getCodeText: '获取验证码', //
getCodeBtnColor: "#4C7BC9", //color
}
},
methods: {
pwdlogin() {
updatePassword(this.phonenumber, this.password, this.verification).then(res => {
if (this.password !== this.newpassword) {
this.$refs.uToast.show({
title: '密码输入不一致,请重新输入',
type: 'error',
duration: '1500'
})
} else {
this.$refs.uToast.show({
title: '密码修改成功',
type: 'success',
url: '/pages/login/login',
duration: '1500'
})
}
})
},
//
getCode() {
uni.hideKeyboard() //
if (this.getCodeisWaiting) { //
return;
}
if (!(/^1(3|4|5|6|7|8|9)\d{9}$/.test(this.phonenumber))) { //
uni.showToast({
title: '请填写正确手机号码',
icon: "none"
});
return false;
}
this.getCodeText = "发送中..." //
this.getCodeisWaiting = true;
this.getCodeBtnColor = "rgba(138,139,133,1)" //
//
//setTimeout(()
setTimeout(() => {
uni.showToast({
title: '验证码已发送',
icon: "none"
}); //
// this.code = '1234'; // 1234
this.setTimer(); //
}, 1000)
},
// setTimer 使SetTimer
setTimer() {
let holdTime = 60; //
this.getCodeText = "重新获取(60)"
//setInterval
//setInterval clearInterval
this.Timer = setInterval(() => {
if (holdTime <= 0) {
this.getCodeisWaiting = false;
this.getCodeBtnColor = "#4C7BC9";
this.getCodeText = "获取验证码"
clearInterval(this.Timer); //
return; //
}
this.getCodeText = "重新获取(" + holdTime + ")"
holdTime--;
}, 1000)
},
},
}
</script>
<style lang="scss">
@import "./forgotPassword.scss";
</style>

View File

@ -0,0 +1,56 @@
<template>
<view class="app">
<view class="cards">
<view class="item" style="background: #D43953;" @tap='gomymission'>
<image src="../../static/dingdan.png" mode=""></image>
<view class="title">
我的任务
</view>
</view>
<view class=" item" style="background: #4C7BC9; "@tap='gopersonal'>
<image src="../../static/user.png" mode=""></image>
<view class="title">
个人信息
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {};
},
methods: {
gomymission() {
uni.navigateTo({
url: '/pages/Mymission/Mymission'
})
},
gopersonal(){
uni.navigateTo({
url: '/pages/personal/personal'
})
},
},
}
</script>
<style lang="scss">
.app {
.cards {
height: 1029rpx;
.item {
height: 295rpx;
.title {
width: 80%;
top: 60%;
}
}
}
}
</style>

89
pages/login/login.scss Normal file
View File

@ -0,0 +1,89 @@
.app {
font-family: DengXian;
color: #C3C1C1;
font-weight: 400;
.switch {
text-align: center;
height: 100rpx;
color: #46ABD7;
position: absolute;
top: 67%;
left: 10%;
}
.loginbtn {
width: 80%;
height: 100rpx;
text-align: center;
line-height: 100rpx;
background: #4C7BC9;
border-radius: 51rpx;
font-size: 41rpx;
color: #FFFFFF;
position: absolute;
top: 57%;
left: 10%;
}
.loginphone {
background-color: #fff;
width: 80%;
height: 162rpx;
position: absolute;
left: 10%;
top: 23%;
input {
font-size: 45rpx;
color: #000000;
}
::v-deep .uni-input-placeholder {
padding-left: 40rpx;
font-size: 41rpx;
font-weight: 400;
color: #C3C1C1;
}
.phone {
padding-left: 40rpx;
height: 100%;
box-shadow: 0px 9px 31px 9px rgba(0, 0, 0, 0.03);
}
}
.logincode {
position: absolute;
left: 10%;
.obtaincode {
text-align: center;
font-size: 37rpx;
color: #4C7BC9;
line-height: 162rpx;
position: absolute;
left: 65%;
top: 0%;
}
::v-deep .u-input__input {
padding-left: 20rpx;
color: #000000;
font-size: 42rpx;
font-weight: 400;
height: 100%;
}
}
.title {
height: 50rpx;
font-size: 52rpx;
font-weight: bold;
color: #000000;
line-height: 44rpx;
position: absolute;
top: 13%;
left: 13%;
}
}

179
pages/login/login.vue Normal file
View File

@ -0,0 +1,179 @@
<template>
<view class="app">
<view class="title">
账号登录
</view>
<view class="loginphone">
<input class="phone" type="text" placeholder="手机号码" maxlength="11" v-model="phonenumber" />
</view>
<view class="logincode loginphone" style="top: 40%;">
<u-input class='code phone' placeholder="密码" maxlength="10" v-model="password" type="password"
:border="true" :password-icon="true" />
</view>
<view class="forget" @tap='forgetpassword'>
忘记密码
</view>
<!-- <u-checkbox-group>
<u-checkbox v-model="checked" shape="circle">记住密码</u-checkbox>
</u-checkbox-group> -->
<view class="loginbtn" @tap='pwdlogin'>
登录
</view>
<view class="loginbtn" style="top: 65%; color: #969394;background-color: #ffffff;" @tap='goregister'>
注册
</view>
<u-toast ref="uToast" />
</view>
</template>
<script>
import {
appLogin
} from '../../api/login/index.js'
export default {
data() {
return {
checked: false,
phonenumber: '',
password: '',
userId:'',
};
},
//
onLoad(options) {
console.log(options)
},
methods: {
//
pwdlogin() {
appLogin(this.phonenumber, this.password).then(res => {
console.log(res)
if (res.code == 200) {
this.$refs.uToast.show({
title: '登录成功',
type: 'success',
url: '/pages/homepage/homepage',
duration: '1500'
})
} else {
console.log(res)
this.$refs.uToast.show({
title: res.msg,
type: 'error'
})
}
})
},
//
goregister() {
uni.navigateTo({
url: '/pages/register/register'
})
},
forgetpassword() {
uni.navigateTo({
url: '/pages/forgotPassword/forgotPassword'
})
},
},
}
</script>
<style lang="scss">
.app {
font-family: DengXian;
color: #C3C1C1;
font-weight: 400;
height: 100vh;
.forget {
position: absolute;
top: 53%;
left: 70%;
color: #46ABD7;
}
.loginbtn {
width: 80%;
height: 100rpx;
text-align: center;
line-height: 100rpx;
background: #4C7BC9;
border-radius: 51rpx;
font-size: 41rpx;
color: #FFFFFF;
position: absolute;
top: 56%;
left: 10%;
}
// ::v-deep .u-checkbox {
// margin-top: 345%;
// margin-left: 50%;
// font-size: 32rpx;
// color: #BFBFBF;
// }
.loginphone {
background-color: #fff;
width: 80%;
height: 150rpx;
position: absolute;
left: 10%;
top: 23%;
input {
font-size: 45rpx;
color: #000000;
}
::v-deep .uni-input-placeholder {
padding-left: 40rpx;
font-size: 41rpx;
font-weight: 400;
color: #C3C1C1;
}
.phone {
padding-left: 40rpx;
height: 150rpx;
box-shadow: 0px 9px 31px 9px rgba(0, 0, 0, 0.03);
}
}
.logincode {
position: absolute;
left: 10%;
::v-deep .u-input {
border: 0;
}
::v-deep .u-input__input {
padding-left: 20rpx;
color: #000000;
font-size: 42rpx;
font-weight: 400;
height: 100%;
// line-height: 150rpx;
}
}
.title {
height: 50rpx;
font-size: 52rpx;
font-weight: bold;
color: #000000;
line-height: 44rpx;
position: absolute;
top: 13%;
left: 13%;
}
}
</style>

222
pages/personal/personal.vue Normal file
View File

@ -0,0 +1,222 @@
<template>
<view class="app">
<view class="user">
<view class="img">
<image :src="baseurl+appPersonallist.avatar" mode=""></image>
</view>
<view class="phone">
电话{{appPersonallist.phonenumber}}
</view>
<view class="nickname">
点此设置昵称
</view>
<view class="modify" @tap='updatainfo()'>
修改信息
<u-icon name="arrow-right" color="#ffffff" size="32"></u-icon>
</view>
</view>
<view class="information">
<view class="item">
姓名{{appPersonallist.nickName}}
</view>
<view class="item">
电话{{appPersonallist.phonenumber }}
</view>
<view class="item" style="height:100%">
</view>
<view class="item" style="border:none;" v-if="appPersonallist.nurseStationSysUserVOList">
护理站: {{appPersonallist.nurseStationSysUserVOList[0].nurseStationName}}
</view>
</view>
<view class="External" style="margin: 100rpx auto 0;">
<view class="lefttext">
我的设备
</view>
<view class="righttext">
</view>
<image src="../../static/jiantou.png" mode=""></image>
</view>
<view class="External">
<view class="lefttext">
修改密码
</view>
<view class="righttext">
</view>
<image src="../../static/jiantou.png" mode=""></image>
</view>
</view>
</template>
<script>
import {
nursePerson,
} from '@/api/personnal/personal.js';
import baseurl from '@/api/baseurl.js'
export default {
data() {
return {
baseurl: '', //url
phonenumber: '',
avatar:'',
password: '',
userId:'',
appPersonallist: [], //
nurseStationSysUserVOList: [],
}
},
onLoad(options) {
//
const that=this
this.baseurl = baseurl;
uni.getStorage({
key: 'phonenumber',
success: function(res) {
that.phonenumber = res.data
console.log(that.phonenumber)
}
});
uni.getStorage({
key: 'password',
success: function(res) {
that.password = res.data
console.log(that.password)
}
});
console.log(that.password,'-----',that.phonenumber)
this.myInfo()
},
methods: {
myInfo() {
console.log(this.phonenumber)
nursePerson(this.phonenumber, this.password).then(res => {
this.appPersonallist = res.data
})
},
updatainfo() {
console.log()
uni.navigateTo({
url: `/pages/Modifyinformation/Modifyinformation`
})
}
}
}
</script>
<style lang="scss">
.app {
padding: 0;
font-size: 35rpx;
height: 100vh;
.External {
width: 94%;
height: 100rpx;
line-height: 100rpx;
margin: 20rpx auto;
padding-left: 5%;
background: #FFFFFF;
box-shadow: 0px 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
position: relative;
.righttext {
position: absolute;
right: 12%;
top: 50%;
color: #969394;
transform: translateY(-50%);
}
image {
width: 18rpx;
height: 27rpx;
position: absolute;
right: 5%;
top: 50%;
transform: translateY(-50%);
}
.lefttext,
.righttext {
display: inline-block;
}
}
.information {
width: 94%;
background: #FFFFFF;
box-shadow: 0px 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
position: absolute;
top: 18%;
left: 3%;
color: #000000;
padding-left: 5%;
overflow: hidden;
font-size: 35rpx;
.item {
// height: 110rpx;
line-height: 110rpx;
border-bottom: 1rpx solid #D8D4D4;
.address {
height: 40rpx;
// font-size: 30rpx;
line-height: 40rpx;
display: inline-block;
width: 80%;
margin-left: 30rpx;
margin-top: 30rpx;
}
}
}
.user {
width: 100%;
height: 500rpx;
background: #4C7BC9;
position: relative;
color: #FFFFFF;
.modify {
font-size: 32rpx;
position: absolute;
right: 3%;
top: 22%;
}
.nickname {
position: absolute;
top: 26%;
left: 33%;
}
.phone {
position: absolute;
top: 13%;
left: 33%;
}
.img {
width: 150rpx;
height: 150rpx;
position: absolute;
top: 10%;
left: 8%;
image {
border-radius: 50%;
width: 130rpx;
margin-left: 50%;
margin-top: 50%;
transform: translate(-50%, -50%);
height: 130rpx;
}
}
}
}
</style>

View File

@ -0,0 +1,80 @@
.app {
font-family: DengXian;
color: #C3C1C1;
font-weight: 400;
.switch {
text-align: center;
line-height: 60rpx;
color: #46ABD7;
position: absolute;
top: 66%;
left: 10%;
}
.loginbtn {
width: 80%;
height: 100rpx;
text-align: center;
line-height: 100rpx;
background: #4C7BC9;
border-radius: 51rpx;
font-size: 41rpx;
color: #FFFFFF;
position: absolute;
top: 57%;
left: 10%;
}
.loginphone {
background-color: #fff;
width: 80%;
height: 162rpx;
position: absolute;
left: 10%;
top: 23%;
input {
font-size: 40rpx;
color: #000000;
}
::v-deep .uni-input-placeholder {
padding-left: 40rpx;
font-size: 41rpx;
font-weight: 400;
color: #C3C1C1;
}
.phone {
padding-left: 40rpx;
height: 100%;
box-shadow: 0px 9px 31px 9px rgba(0, 0, 0, 0.03);
}
}
.logincode {
position: absolute;
left: 10%;
::v-deep .u-input__input {
padding-left: 20rpx;
color: #000000;
font-size: 41rpx;
font-weight: 400;
height: 100%;
}
}
.title {
height: 50rpx;
font-size: 52rpx;
font-weight: bold;
color: #000000;
line-height: 44rpx;
position: absolute;
top: 13%;
left: 13%;
}
}

301
pages/register/register.vue Normal file
View File

@ -0,0 +1,301 @@
<template>
<view class="app">
<view class="item">
<view class="lefttext">
姓名
</view>
<input class="righttext" type="text" placeholder="请输入" v-model="appPersonallist.nickName" />
</view>
<view class="item">
<view class="lefttext">
输入密码
</view>
<u-input class='righttext' style='left:30%' placeholder="请输入密码" maxlength="10"
v-model="appPersonallist.password" type="password" :border="false" :password-icon="true" />
</view>
<view class="item">
<view class="lefttext">
重复密码
</view>
<u-input class='righttext' style='left:30%' placeholder="请再次输入密码" maxlength="10"
v-model="appPersonallist.newpassword" type="password" :border="false" :password-icon="true" />
</view>
<view class="item">
<view class="lefttext">
手机号
</view>
<input class="righttext" style='left:23%' type="text" placeholder="请输入" maxlength="11"
v-model="appPersonallist.phonenumber" />
</view>
<view class="item" @tap='show=true'>
<span>护理站</span>
<text class='addition'>{{nurseStationName}}</text>
<u-select v-model="show" mode="single-column" :list="listinfo" @confirm="confirm"></u-select>
</view>
<view class="radio-content" @tap="changeRadio">
<view class="radio-right">
<view class="radio" :class="radio == 2 ? 'radio-default':''">
<view :class="radio == 2 ? 'radio-active':''"></view>
</view>
</view>
<text class="agreement">我已阅读并同意</text>
<text @tap='maskshow=true;showRegectAgreeButton=false'>用户协议</text>
</view>
<view class="loginbtn" @tap='getInfo'>
注册
</view>
<view class="switch" style="right:5%" @tap='gologin'>
已有账号,去登录
</view>
<u-toast ref="uToast" />
</view>
</template>
<script>
import {
nurseAppLoginSysUser,
personNurseStationLists
} from '../../api/register/index.js'
export default {
data() {
return {
listinfo: [],
show: false,
radio: 1, //
nickName: '',
userId: 13,
userName: 123,
nurseStationName: '',
pageSize: 999,
pageNum: 1,
total: 0,
appPersonallist: {
nickName: '',
newpassword: '',
phonenumber: '',
password: '',
nurseStationIds: '',
}
};
},
onLoad() {
this.info()
},
onReachBottom() { //
if (this.listinfo.length >= this.total) {} else {
this.pageNum++
personNurseStationLists(this.pageNum, this.pageSize).then(res => {
res.rows.forEach(e => {
this.list.push(e)
})
})
}
},
onPullDownRefresh() { //
this.pageNum = 1;
personNurseStationLists(this.PageNum, this.pageSize).then(res => {
this.listinfo = res.rows
this.total = res.total
})
setTimeout(function() {
uni.stopPullDownRefresh();
}, 1000);
},
methods: {
//
info() {
personNurseStationLists(this.pageNum, this.pageSize).then(res => {
console.log(res)
this.total = res.total
this.listinfo = res.rows.map((e) => {
return {
value: e.id,
label: e.nurseStationName,
}
})
})
},
confirm(e) {
console.log(e);
this.appPersonallist.nurseStationIds = e[0].value
this.nurseStationName = e[0]['label']
console.log(e[0]['label'])
},
//
getInfo() {
this.appPersonallist.nurseStationIds = JSON.stringify(this.appPersonallist.nurseStationIds)
nurseAppLoginSysUser(this.appPersonallist).then(res => {
console.log(res)
if (this.password !== this.newpassword) {
this.$refs.uToast.show({
title: '密码输入不一致,请重新输入',
type: 'error',
duration: '1500'
})
} else if (res.code == 200) {
this.$refs.uToast.show({
title: '注册成功,前往登录',
type: 'success',
url: '/pages/login/login',
duration: '1500'
})
} else if (this.radio == 1) {
this.$refs.uToast.show({
title: '请审核并同意用户协议',
type: 'error'
})
} else {
this.$refs.uToast.show({
title: res.msg,
type: 'error'
})
}
})
},
//
gologin() {
uni.navigateTo({
url: `/pages/login/login?phonenumber=${this.phonenumber}&password=${this.password}`
})
},
changeRadio() {
if (this.radio == 1) {
this.radio = 2;
} else {
this.radio = 1;
}
},
},
}
</script>
<style lang="scss">
.app {
height: 100vh;
padding: 20rpx 0;
.item {
font-size: 34rpx;
margin: 0 auto 20rpx;
width: 94%;
height: 100rpx;
line-height: 100rpx;
background-color: #fff;
box-shadow: 0px 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
position: relative;
span {
margin-left: 3%;
}
.addition {
line-height: 100rpx;
font-size: 34rpx;
font-weight: 400;
margin-left: 3%;
}
.lefttext {
position: absolute;
top: 50%;
transform: translateY(-50%);
left: 3%;
}
.righttext {
position: absolute;
top: 50%;
transform: translateY(-50%);
left: 18%;
height: 100rpx;
}
.lefttext,
.righttext {
::v-deep .uni-input-input {
font-size: 34rpx;
}
::v-deep .uni-input-wrapper {
height: 100rpx;
line-height: 100rpx;
}
::v-deep .uni-input-placeholder {
line-height: 100rpx;
font-size: 34rpx;
font-weight: 400;
color: #C3C1C1;
}
}
}
.radio-content {
padding-top: 50rpx;
height: 80rpx;
line-height: 11rpx;
font-size: 28rpx;
.agreement {
color: #878987;
margin-left: 25%;
}
.radio-right {
margin-left: 20%;
.radio-default {
border: 2rpx solid #0fbda6;
}
.radio {
width: 30rpx;
height: 30rpx;
border-radius: 70%;
border: 2rpx solid #178ffb;
margin: 6px 25px -20rpx -5rpx;
.radio-active {
width: 16rpx;
height: 16rpx;
border-radius: 50%;
background-color: #178ffb;
margin-left: 22%;
margin-top: 22%;
}
}
}
}
.switch {
text-align: center;
line-height: 60rpx;
color: #46ABD7;
position: absolute;
top: 70%;
}
.loginbtn {
width: 70%;
height: 100rpx;
text-align: center;
line-height: 100rpx;
background: #4C7BC9;
border-radius: 51rpx;
font-size: 41rpx;
color: #FFFFFF;
position: absolute;
top: 57%;
left: 15%;
}
}
</style>

53
pages/startup/startup.vue Normal file
View File

@ -0,0 +1,53 @@
<template>
<view class="app">
<image src="../../static/启动页.png" mode=""></image>
<view class="title">
泉医到家
</view>
</view>
</template>
<script>
export default {
data() {
return {
};
},
created() {
this.info();
},
methods: {
info() {
setTimeout(() => {
uni.reLaunch({
url: '/pages/login/login'
});
}, 2000);
},
},
}
</script>
<style lang="scss">
image {
width: 50%;
height: 200rpx;
position: absolute;
left: 25%;
top: 28%;
}
.title {
width: 80%;
height: 48rpx;
font-size: 49rpx;
text-align: center;
font-family: DengXian;
font-weight: bold;
color: #000000;
position: absolute;
top: 50%;
left: 10%;
}
</style>

View File

@ -0,0 +1,209 @@
<template>
<view class="app">
<view class="details">
<image :src="baseurl+list.itemPictureUrl" mode=""></image>
<view class="detailsinfo">
<view class="change">
{{list.nurseItemName}}
</view>
<view class="time">
服务时长 {{list.itemServeDurationUnit}}
</view>
<view class="price">
{{list.totalPrice}}
</view>
</view>
</view>
<view class="info">
<view class="item">
姓名 {{list.patientName}}
</view>
<view class="item">
电话{{list.phone}}
</view>
<view class="item" style="border:none;">
<view class="add" style="display:inline-block;">
地址:
</view>
<view class="address">
{{list.serviceAddress}}
</view>
</view>
</view>
<view class="submit">
<view class="return" @tap='goreturn'>
任务退回
</view>
<view class="finish" @tap='gocomplete'>
去完成
</view>
</view>
</view>
</template>
<script>
import {
taskDetails
} from '@/api/taskDetails.js'
import baseurl from '@/api/baseurl.js'
export default {
data() {
return {
baseurl: '',
list: {},
}
},
methods: {
//
taskDetailsinfo(orderDetailsId) {
taskDetails(orderDetailsId).then(res => {
this.list = res.data
console.log(this.list)
})
},
goreturn() {
uni.navigateTo({
url: '/pages/taskReturn/taskReturn'
})
},
gocomplete() {
uni.navigateTo({
url: '/pages/confirmCompletion/confirmCompletion'
})
},
},
onLoad(options) {
this.baseurl = baseurl
this.taskDetailsinfo(options.orderDetailsId)
}
}
</script>
<style lang="scss">
.app {
padding: 0;
// font-size: 35rpx;
height: 100vh;
padding: 3%;
.details {
width: 100%;
height: 250rpx;
background: #FFFFFF;
box-shadow: 0rpx 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
margin: 0 auto;
position: relative;
image {
width: 170rpx;
height: 170rpx;
border-radius: 10rpx;
margin: 20rpx 0 0 30rpx;
}
.detailsinfo {
width: 60%;
height: 200rpx;
border-radius: 10rpx;
position: absolute;
top: 12%;
left: 35%;
.change {
width: 100%;
color: #000000;
font-size: 34rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.time {
width: 100%;
font-size: 32rpx;
color: #999999;
position: absolute;
top: 32%;
}
.price {
width: 100%;
font-size: 30rpx;
color: #D43953;
position: absolute;
top: 65%;
}
}
}
.info {
width: 100%;
background: #FFFFFF;
box-shadow: 0px 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
position: relative;
top: 20rpx;
.item {
line-height: 110rpx;
border-bottom: 1rpx solid #D8D4D4;
font-size: 32rpx;
color: #000000;
margin-left: 30rpx;
.add {
position: absolute;
}
.address {
height: 100rpx;
line-height: 40rpx;
display: inline-block;
width: 80%;
margin-left: 100rpx;
margin-top: 30rpx;
}
}
}
.submit {
width: 100%;
height: 100rpx;
height: 68rpx;
font-size: 32rpx;
color: #FFFFFF;
text-align: center;
position: fixed;
bottom: 80rpx;
// background-color: red;
left: 15%;
// padding: 20rpx;
.return {
width: 216rpx;
height: 68rpx;
background: #E1AE3C;
border-radius: 26rpx;
line-height: 68rpx;
display: inline-block;
}
.finish {
width: 217rpx;
height: 68rpx;
line-height: 68rpx;
background: #4C7BC9;
border-radius: 26rpx;
display: inline-block;
margin-left: 30rpx;
}
}
}
</style>

View File

@ -0,0 +1,76 @@
<template>
<view class="app">
<view class="return">
<view class="reason">
退回原因
</view>
<view class="reason" style="border: none;margin: 20rpx 0 0 50rpx;">
<input type="text" placeholder="请填写" />
</view>
</view>
<view class="submit">
<view class="finish">
去完成
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style lang="scss">
.app {
padding: 0;
// font-size: 35rpx;
height: 100vh;
padding: 3%;
.return {
width: 98%;
height: 342rpx;
background: #FFFFFF;
box-shadow: 0px 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
margin: 0 auto;
.reason {
width: 93%;
height: 80rpx;
font-size: 30rpx;
color: #030303;
line-height: 80rpx;
border-bottom: 1rpx solid #D8D4D4;
margin: 0 auto;
}
}
.submit{
height: 68rpx;
font-size: 32rpx;
color: #FFFFFF;
text-align: center;
position: fixed;
bottom: 80rpx;
left: 60%;
.finish{
width: 217rpx;
height: 68rpx;
line-height: 68rpx;
background: #4C7BC9;
border-radius: 26rpx;
margin-left: 30rpx;
}
}
}
</style>

BIN
static/autograph.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
static/detailed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
static/dingdan.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
static/evaluated.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
static/finished.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
static/fuwutu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
static/gb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
static/headportrait.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
static/home.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
static/home1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
static/homepagew.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
static/homepagews.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
static/jiantou.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
static/order.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
static/person.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
static/pic.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 729 B

BIN
static/radio.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
static/rowsright.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 638 B

BIN
static/shopping.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
static/sousuo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
static/user.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
static/users.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
static/启动页.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

77
uni.scss Normal file
View File

@ -0,0 +1,77 @@
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
@import 'uview-ui/theme.scss';
$uni-color-primary: #007aff;
$uni-color-success: #4cd964;
$uni-color-warning: #f0ad4e;
$uni-color-error: #dd524d;
/* 文字基本颜色 */
$uni-text-color:#333;//基本色
$uni-text-color-inverse:#fff;//反色
$uni-text-color-grey:#999;//辅助灰色如加载更多的提示信息
$uni-text-color-placeholder: #808080;
$uni-text-color-disable:#c0c0c0;
/* 背景颜色 */
$uni-bg-color:#ffffff;
$uni-bg-color-grey:#f8f8f8;
$uni-bg-color-hover:#f1f1f1;//点击状态颜色
$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
/* 边框颜色 */
$uni-border-color:#c8c7cc;
/* 尺寸变量 */
/* 文字尺寸 */
$uni-font-size-sm:12px;
$uni-font-size-base:14px;
$uni-font-size-lg:16;
/* 图片尺寸 */
$uni-img-size-sm:20px;
$uni-img-size-base:26px;
$uni-img-size-lg:40px;
/* Border Radius */
$uni-border-radius-sm: 2px;
$uni-border-radius-base: 3px;
$uni-border-radius-lg: 6px;
$uni-border-radius-circle: 50%;
/* 水平间距 */
$uni-spacing-row-sm: 5px;
$uni-spacing-row-base: 10px;
$uni-spacing-row-lg: 15px;
/* 垂直间距 */
$uni-spacing-col-sm: 4px;
$uni-spacing-col-base: 8px;
$uni-spacing-col-lg: 12px;
/* 透明度 */
$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
/* 文章场景相关 */
$uni-color-title: #2C405A; // 文章标题颜色
$uni-font-size-title:20px;
$uni-color-subtitle: #555555; // 二级标题颜色
$uni-font-size-subtitle:26px;
$uni-color-paragraph: #3F536E; // 文章段落颜色
$uni-font-size-paragraph:15px;