Merge remote-tracking branch 'origin/dev' into dev
# Conflicts: # pages.json
This commit is contained in:
commit
fad8140fcc
2
App.vue
2
App.vue
@ -11,7 +11,7 @@
|
||||
|
||||
/*每个页面公共css */
|
||||
page {
|
||||
// background-color: #F4F5F7;
|
||||
background-color: #F4F5F7;
|
||||
}
|
||||
|
||||
.app {
|
||||
|
||||
12
api/pagesB/myfamilydoctorteam/index.js
Normal file
12
api/pagesB/myfamilydoctorteam/index.js
Normal file
@ -0,0 +1,12 @@
|
||||
import request from "@/api/request.js"
|
||||
|
||||
|
||||
export function getDoctorListtwo(pageNum, pageSize, teamNo, region) {
|
||||
return request({
|
||||
url: `/applet/signinfo/getDoctorList?pageNum=${pageNum}&pageSize=${pageSize}&teamNo=${teamNo}`,
|
||||
method: 'get',
|
||||
header: {
|
||||
region: region
|
||||
}
|
||||
})
|
||||
}
|
||||
12
api/pagesB/mysigning/index.js
Normal file
12
api/pagesB/mysigning/index.js
Normal file
@ -0,0 +1,12 @@
|
||||
import request from "@/api/request.js"
|
||||
//解约
|
||||
export function rescindapplysave(data, region) {
|
||||
return request({
|
||||
url: `/applet/rescind/apply/save`,
|
||||
method: 'post',
|
||||
data: data,
|
||||
header: {
|
||||
region: region
|
||||
}
|
||||
})
|
||||
}
|
||||
12
api/pagesB/performancedetails/index.js
Normal file
12
api/pagesB/performancedetails/index.js
Normal file
@ -0,0 +1,12 @@
|
||||
import request from "@/api/request.js"
|
||||
|
||||
|
||||
export function getPerformance(identity, region) {
|
||||
return request({
|
||||
url: `/applet/signinfo/getPerformance/${identity}`,
|
||||
method: 'get',
|
||||
header: {
|
||||
region: region
|
||||
}
|
||||
})
|
||||
}
|
||||
@ -44,4 +44,4 @@ export function getPackageByCrowdNo(data, region) {
|
||||
region: region
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
24
api/pagesC/contractsigningprotocol/index.js
Normal file
24
api/pagesC/contractsigningprotocol/index.js
Normal file
@ -0,0 +1,24 @@
|
||||
import request from "@/api/request.js"
|
||||
|
||||
|
||||
export function getContent(orgNo, region) {
|
||||
return request({
|
||||
url: `/applet/signinfo/getContent/${orgNo}`,
|
||||
method: 'get',
|
||||
header: {
|
||||
region: region
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
export function getSignProtocol(cardNo, region) {
|
||||
return request({
|
||||
url: `/applet/signinfo/getSignProtocol/${cardNo}`,
|
||||
method: 'get',
|
||||
header: {
|
||||
region: region
|
||||
}
|
||||
})
|
||||
}
|
||||
263
components/protocol/index.vue
Normal file
263
components/protocol/index.vue
Normal file
@ -0,0 +1,263 @@
|
||||
<template>
|
||||
<view class="app">
|
||||
<view class="agreement-title-box">
|
||||
家庭医生签约服务协议书
|
||||
</view>
|
||||
<view class="agreement-content-container">
|
||||
<view class="agreement-content_parta-box">
|
||||
<h4>甲方:</h4>
|
||||
<h4 class="box-line">{{list.signInfo.agencyOrgName}}</h4>
|
||||
</view>
|
||||
<view class="agreement-content_parta-box">
|
||||
<h4>乙方:</h4>
|
||||
<h4 class="box-line">{{list.signInfo.residentName?list.signInfo.residentName:''}}</h4>
|
||||
</view>
|
||||
<uni-table border stripe emptyText="暂无更多数据">
|
||||
<uni-tr>
|
||||
<uni-th>姓名</uni-th>
|
||||
<uni-th>性别</uni-th>
|
||||
<uni-th>年龄</uni-th>
|
||||
<uni-th>身份证号</uni-th>
|
||||
<uni-th>现住址</uni-th>
|
||||
<uni-th>手机号码</uni-th>
|
||||
<uni-th>选择签约基础服务包 </uni-th>
|
||||
<uni-th>选择签约个性服务包</uni-th>
|
||||
</uni-tr>
|
||||
<uni-tr>
|
||||
<uni-td>{{list.signInfo.residentName?list.signInfo.residentName:''}}</uni-td>
|
||||
<uni-td>{{list.signInfo.gender === '1' ? '男' : '女'}}</uni-td>
|
||||
<uni-td>{{list.signInfo.age?list.signInfo.age:''}}</uni-td>
|
||||
<uni-td>{{list.signInfo.identity?list.signInfo.identity:''}}</uni-td>
|
||||
<uni-td>{{list.signInfo.address?list.signInfo.address:''}}</uni-td>
|
||||
<uni-td>{{list.signInfo.phone?list.signInfo.phone:''}}</uni-td>
|
||||
<uni-td>{{list.basePackagesName?list.basePackagesName:''}} </uni-td>
|
||||
<uni-td>{{list.specialPackagesName?list.specialPackagesName:""}}</uni-td>
|
||||
</uni-tr>
|
||||
</uni-table>
|
||||
<view>
|
||||
<p style='padding-top: 30rpx;line-height: 46rpx;'>甲乙双方本着平等、尊重和自愿的原则,签订此协议,接受以下条款的约定</p>
|
||||
<p style='padding: 30rpx 0;line-height: 46rpx;'>甲乙双方共同确定
|
||||
<text class="box-line">{{list.signInfo.teamName}}</text>为乙方的家庭医生服务团队
|
||||
</p>
|
||||
<uni-table border stripe emptyText="暂无更多数据">
|
||||
<uni-tr>
|
||||
<uni-th>专病管理服务团队成员</uni-th>
|
||||
<uni-th>姓名</uni-th>
|
||||
<uni-th>职称</uni-th>
|
||||
<uni-th>固定电话</uni-th>
|
||||
<uni-th>联系电话</uni-th>
|
||||
</uni-tr>
|
||||
<uni-tr v-for="(member, index) in list.signInfo.dutyDoctorList" :index="index" :key="index">
|
||||
<uni-td v-if="member.teamLeader">
|
||||
团队长
|
||||
</uni-td>
|
||||
<uni-td v-else>
|
||||
{{member.teamMemberType=='0'?'全科医生':''}}
|
||||
{{member.teamMemberType=='1'?'专科医生':''}}
|
||||
{{member.teamMemberType=='2'?'社区护士':''}}
|
||||
{{member.teamMemberType=='3'?'公共卫生人员':''}}
|
||||
</uni-td>
|
||||
<uni-td>{{member.realname?member.realname:''}}</uni-td>
|
||||
<uni-td>
|
||||
{{member.profTitle=='0'?'初级':''}}
|
||||
{{member.profTitle=='1'?'中级':''}}
|
||||
{{member.profTitle=='2'?'高级':''}}
|
||||
{{member.profTitle=='99'?'其他':''}}
|
||||
</uni-td>
|
||||
<uni-td>{{member.landline?member.landline:''}}</uni-td>
|
||||
<uni-td>{{member.mobilePhone?member.mobilePhone:''}}</uni-td>
|
||||
</uni-tr>
|
||||
</uni-table>
|
||||
<u-parse style="margin-top: 30rpx;" :html="list.protocolContent.content"></u-parse>
|
||||
<h4 style='padding-top: 30rpx;font-weight: 600;'>三、服务收费</h4>
|
||||
<p style='padding-top: 30rpx;line-height: 46rpx;'>1. 根据自愿选择的原则,乙方选择<text
|
||||
class="box-line">{{list.basePackagesName?list.basePackagesName:''}}{{list.specialPackagesName?','+list.specialPackagesName:''}}</text>由甲方提供相应服务,服务费为<text
|
||||
class="box-line">{{list.packSignCost}}</text>元/年</p>
|
||||
<p style='padding-top: 30rpx;line-height: 46rpx;'>2.服务过程中,根据医生判断及患者临时需求增加的服务内容,按照国家相关规定和当地物价部门规定收费。
|
||||
</p>
|
||||
<p style='padding-top: 30rpx;line-height: 46rpx;'>3.乙方应于<text
|
||||
class="box-line">{{list.signInfo.signTime}}</text>
|
||||
前将签约服务费缴纳至甲方机构指定科室,不得由签约团队成员代收。
|
||||
</p>
|
||||
<h4 style='padding-top: 30rpx;font-weight: 600;'>四、其他约定服务:<text class="box-line">{{' '}}</text></h4>
|
||||
<h4 style='padding-top: 30rpx;font-weight: 600;'>
|
||||
五、保密条款:签约居民授权其所签约的家庭医生及其团队成员可调阅其电子健康档案和在其他医疗机构的诊疗记录信息。甲方有义务对签约居民的电子健康档案和在其他医疗机构的诊
|
||||
疗记录信息予以保密。除法律法规规定外,未经签约居民允许,不得泄露给第三方。
|
||||
</h4>
|
||||
<h4 style='padding-top:30rpx;font-weight: 600;'>六、本协议未尽事宜,经双方协商一致,签订补充协议,补充协议具有同等效力。</h4>
|
||||
<h4 style='padding-top: 30rpx;font-weight: 600;'>
|
||||
七、本协议解释权归甲方。协议一式两份,甲、乙双方各执一份,自双方签字之日起生效,
|
||||
<text
|
||||
class="box-line">{{list.signInfo.signTime}}{{' —— '}}{{list.signInfo.signDeadline}}</text>有效期<text
|
||||
class="box-line">{{list.signYears}}</text>年
|
||||
</h4>
|
||||
</view>
|
||||
</view>
|
||||
<view class="agreement-execute_container-img">
|
||||
<view class="parta-execute_box">
|
||||
<view class="textparta">甲方(团队长)签字</br><text style="padding-left: 15rpx;">或(单位盖章)</text></view>
|
||||
<image :src="list.doctorBase64" mode="aspectFill" style="width: 280rpx; height: 200rpx;"></image>
|
||||
</view>
|
||||
<view class="parta-execute_box">
|
||||
<view class="textparta">乙方(居民)签字</br><text style="padding-left: 8rpx;">或拍照</text></view>
|
||||
<image :src="list.residentBase64" mode="widthFix" style="width: 180rpx; height: 180rpx;"></image>
|
||||
</view>
|
||||
<view class="parta-execute_box">
|
||||
<view class="textparta">机构公章</view>
|
||||
<image :src="list.orgBase64" mode="widthFix" style="width: 180rpx; height: 180rpx;"></image>
|
||||
</view>
|
||||
</view>
|
||||
<u-mask :show="signatureshow" @click="signatureshow = false">
|
||||
<view style="position:absolute;bottom:0;height:900rpx;width:100%;background-color: #fff;"
|
||||
v-if='signatureshow'>
|
||||
<signature @userSignaturePictureUrl='userSignaturePicture' @click.native.stop
|
||||
style='background-color: #F4F5F7;width: 100%;height: 900rpx;'></signature>
|
||||
</view>
|
||||
</u-mask>
|
||||
<uni-fab ref="fab" horizontal="left" vertical="bottom" :content="fabContent" @trigger="fabTrigger" />
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import baseurl from '@/api/baseurl.js'
|
||||
import signature from '@/components/signature/signature.vue'
|
||||
import {
|
||||
getSignProtocol
|
||||
} from '@/api/pagesC/contractsigningprotocol/index.js'
|
||||
export default {
|
||||
components: {
|
||||
signature
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
signatureshow: false,
|
||||
list: null,
|
||||
fabContent: [{
|
||||
iconPath: '/static/pageC/signature-unselected.png',
|
||||
selectedIconPath: '/static/pageC/signature-selected.png',
|
||||
text: '居民签字',
|
||||
active: true
|
||||
}, {
|
||||
iconPath: '/static/pageC/camera-unselected.png',
|
||||
selectedIconPath: '/static/pageC/camera.png',
|
||||
text: '居民拍照',
|
||||
active: true
|
||||
}],
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
fabTrigger(e) {
|
||||
if (e.index === 0) {
|
||||
this.signatureshow = true
|
||||
} else if (e.index === 1) {
|
||||
this.openCamera()
|
||||
}
|
||||
},
|
||||
openCamera() {
|
||||
let that = this
|
||||
setTimeout(function() {
|
||||
uni.chooseImage({
|
||||
sizeType: ['compressed'],
|
||||
sourceType: ['camera'],
|
||||
success: function(res) {
|
||||
let tempFilePath = res.tempFilePaths[0]
|
||||
uni.saveImageToPhotosAlbum({
|
||||
filePath: tempFilePath,
|
||||
success: (resp) => {
|
||||
uni.uploadFile({
|
||||
url: baseurl +
|
||||
'/applet/sign/apply/residentSignatureUpload',
|
||||
filePath: tempFilePath,
|
||||
name: 'file',
|
||||
header: {
|
||||
region: '1'
|
||||
},
|
||||
timeout: 10000,
|
||||
success(respp) {
|
||||
// residentAutographPath
|
||||
console.log(respp)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
150)
|
||||
},
|
||||
// //签名
|
||||
userSignaturePicture(data) {
|
||||
this.signatureshow = false
|
||||
},
|
||||
info() {
|
||||
getSignProtocol(this.cardNo, '1').then(res => {
|
||||
this.list = res.data
|
||||
})
|
||||
},
|
||||
},
|
||||
onLoad(options) {
|
||||
this.cardNo = options.cardNo
|
||||
this.cardNo = '372424194703207523'
|
||||
this.info();
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.app {
|
||||
width: 98%;
|
||||
margin: 10rpx auto;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.agreement-title-box {
|
||||
padding-top: 20rpx;
|
||||
margin: 0 0 30rpx;
|
||||
font-size: 40rpx;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.agreement-content-container {
|
||||
margin: 10rpx 10rpx;
|
||||
font-size: 16px;
|
||||
color: #333333;
|
||||
padding-bottom: 100rpx;
|
||||
}
|
||||
|
||||
.agreement-content_parta-box {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.box-line {
|
||||
display: inline-block;
|
||||
padding: 0 20rpx;
|
||||
text-align: center;
|
||||
border-bottom: 1px #808080 solid;
|
||||
}
|
||||
|
||||
.agreement-execute_container-img {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
padding-bottom: 200rpx;
|
||||
|
||||
.parta-execute_box {
|
||||
width: 50%;
|
||||
|
||||
.textparta {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
image {
|
||||
display: block;
|
||||
margin: 30rpx auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
52
components/signature/signature.vue
Normal file
52
components/signature/signature.vue
Normal file
@ -0,0 +1,52 @@
|
||||
<template>
|
||||
<view class="signature" style="background-color: #F4F5F7;height: 800rpx;">
|
||||
<Signature @init="onSignInit" style='background-color: #fff;height: 700rpx;width: 100%;'></Signature>
|
||||
<view class="btns">
|
||||
<button @click="clear">清空</button>
|
||||
<button @click="revoke">撤回</button>
|
||||
<button @click="saveTempFilePath">保存</button>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
import Signature from '@/components/v-sign/v-sign.vue'
|
||||
export default {
|
||||
components: {
|
||||
Signature
|
||||
},
|
||||
methods: {
|
||||
onSignInit(signCtx) {
|
||||
this.signCtx = signCtx
|
||||
},
|
||||
// 清空
|
||||
clear() {
|
||||
this.signCtx.clear()
|
||||
},
|
||||
// 撤回
|
||||
revoke() {
|
||||
this.signCtx.revoke()
|
||||
},
|
||||
// 保存为临时图片路径,h5返回 base64
|
||||
async saveTempFilePath() {
|
||||
const res = await this.signCtx.canvasToTempFilePath()
|
||||
this.$emit('userSignaturePictureUrl', res)
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang='scss'>
|
||||
.signature {
|
||||
height: 800rpx;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.btns {
|
||||
margin-top: 50rpx;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
button {
|
||||
width: 30%;
|
||||
}
|
||||
</style>
|
||||
15
components/v-sign/utils.js
Normal file
15
components/v-sign/utils.js
Normal file
@ -0,0 +1,15 @@
|
||||
/**
|
||||
* 判断是否未数值
|
||||
* @param {Object} val
|
||||
*/
|
||||
export function isNumber(val) {
|
||||
return !isNaN(Number(val))
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理大小单位
|
||||
* @param {Object} val
|
||||
*/
|
||||
export function formatSize(val) {
|
||||
return isNumber(val) ? `${val}rpx` : val
|
||||
}
|
||||
162
components/v-sign/v-sign-action.vue
Normal file
162
components/v-sign/v-sign-action.vue
Normal file
@ -0,0 +1,162 @@
|
||||
<template>
|
||||
<view class="v-sign-action" :style="[customStyle]">
|
||||
<view
|
||||
v-for="item in btns"
|
||||
:key="item.label"
|
||||
:class="['btn', { border: border }]"
|
||||
:style="[{ 'margin-right': formatSize(space) }]"
|
||||
@click="onBtnClick(item)"
|
||||
>
|
||||
<image :class="['icon', 'icon-' + item.action]" :src="item.icon"></image>
|
||||
<text class="text">{{ item.label }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
/**
|
||||
* v-sign-action 控制按钮组(v-sign 子组件)
|
||||
* @description 控制 v-sign 组件的一些按钮
|
||||
* @tutorial
|
||||
* @property {Array} actions 按钮配置 所有值: 清空(clear), 撤回(prev) 保存图片(save)
|
||||
* @property {Boolean} border 按钮是否有边框
|
||||
* @property {String/Number} space 按钮间隔
|
||||
* @property {Object} customStyle 根元素自定义样式
|
||||
* @event {Function} 点击对应类型按钮触发对应事件, 例如点击 clear 则触发 clear 事件
|
||||
* @example 示例
|
||||
**/
|
||||
import { formatSize } from './utils'
|
||||
|
||||
// v-sign 父组件提供的接口
|
||||
let vSignInterface
|
||||
// 按钮类型
|
||||
const btn_type = {
|
||||
CLEAR: 'clear', // 清空
|
||||
PREV: 'prev', // 撤回/上一步
|
||||
// NEXT: 'next',
|
||||
SAVE: 'save' // 保存临时图片
|
||||
}
|
||||
const all_action = Object.values(btn_type)
|
||||
const btnsConf = [
|
||||
{
|
||||
label: '清空',
|
||||
action: btn_type.CLEAR,
|
||||
icon: '/static/v-sign/clear.png'
|
||||
},
|
||||
{
|
||||
label: '撤回',
|
||||
action: btn_type.PREV,
|
||||
icon: '/static/v-sign/prev.png'
|
||||
},
|
||||
// {
|
||||
// label: '取消撤回',
|
||||
// action: btn_type.NEXT,
|
||||
// icon: '/static/v-sign/next.png'
|
||||
// },
|
||||
{
|
||||
label: '保存',
|
||||
action: btn_type.SAVE,
|
||||
icon: '/static/v-sign/save.png'
|
||||
}
|
||||
]
|
||||
export default {
|
||||
name: 'v-sign-action',
|
||||
props: {
|
||||
// 按钮配置
|
||||
actions: {
|
||||
type: Array,
|
||||
default: () => all_action
|
||||
},
|
||||
// 按钮是否有边框
|
||||
border: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
// 按钮间隔
|
||||
space: {
|
||||
type: [String, Number],
|
||||
default: 12
|
||||
},
|
||||
// 根元素自定义样式
|
||||
customStyle: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
},
|
||||
inject: ['getInterface'],
|
||||
data() {
|
||||
return {
|
||||
formatSize
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
btns() {
|
||||
return btnsConf.filter(item => this.actions.includes(item.action))
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
vSignInterface = this.getInterface()
|
||||
},
|
||||
methods: {
|
||||
async onBtnClick(btn) {
|
||||
// console.log(btn, btn.action)
|
||||
let emit_result
|
||||
switch (btn.action) {
|
||||
case btn_type.CLEAR:
|
||||
vSignInterface.clear()
|
||||
break
|
||||
case btn_type.PREV:
|
||||
vSignInterface.revoke()
|
||||
break
|
||||
// case btn_type.NEXT:
|
||||
// console.log('next')
|
||||
// break
|
||||
case btn_type.SAVE:
|
||||
emit_result = await vSignInterface.canvasToTempFilePath()
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
// console.log(btn.action, emit_result);
|
||||
// 触发按钮对应类型事件
|
||||
this.$emit(btn.action, emit_result)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.v-sign-action {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
.btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 12rpx;
|
||||
min-width: 88rpx;
|
||||
white-space: nowrap;
|
||||
&:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
&.border {
|
||||
border: 2rpx solid #666;
|
||||
border-radius: 12rpx;
|
||||
}
|
||||
.icon {
|
||||
width: 28rpx;
|
||||
height: 28rpx;
|
||||
&.icon-clear,
|
||||
&.icon-prev,
|
||||
&.icon-next {
|
||||
margin-right: 4rpx;
|
||||
}
|
||||
&.icon-save {
|
||||
}
|
||||
}
|
||||
.text {
|
||||
color: #666;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
211
components/v-sign/v-sign-pen.vue
Normal file
211
components/v-sign/v-sign-pen.vue
Normal file
@ -0,0 +1,211 @@
|
||||
<template>
|
||||
<view class="v-sign-pen">
|
||||
<view class="label" v-if="label">{{ label }}</view>
|
||||
<view class="options">
|
||||
<view
|
||||
class="opt-item"
|
||||
:style="{
|
||||
minHeight: minWrapHeight,
|
||||
marginRight: space + 'rpx'
|
||||
}"
|
||||
v-for="item in csizes"
|
||||
:key="item.size"
|
||||
@click="onItemClick(item)"
|
||||
>
|
||||
<view
|
||||
:class="type"
|
||||
:style="{
|
||||
border:
|
||||
border && currentSelect.size === item.size
|
||||
? `${borderWidth}rpx solid ${activeColor}`
|
||||
: ''
|
||||
}"
|
||||
>
|
||||
<view class="inner" :style="[defaultInnerStyle(item)]"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
/**
|
||||
* v-sign-pen 画笔(v-sign 子组件)
|
||||
* @description 控制 v-sign 画笔的线宽
|
||||
* @tutorial
|
||||
* @property {String} type 选项样式 line / circle
|
||||
* @property {String} label 标签
|
||||
* @property {Array} sizes 画笔大小数组,单位 px
|
||||
* @property {String} color 选项颜色
|
||||
* @property {String} activeColor 选中项颜色
|
||||
* @property {Boolean} border 选中项是否有边框
|
||||
* @property {Number} borderWidth 边框大小,单位 rpx
|
||||
* @property {String} space 选项间隙,单位 rpx
|
||||
* @property {Number} bigger 圆点变大变粗倍数
|
||||
* @property {Number} minSize 圆点最小大小,单位 px
|
||||
* @event {Function} change 选择画笔大小时触发
|
||||
* @example
|
||||
**/
|
||||
// v-sign 父组件提供的接口
|
||||
let vSignInterface
|
||||
// 选项样式
|
||||
const type_style = {
|
||||
CIRCLE: 'circle',
|
||||
LINE: 'line'
|
||||
}
|
||||
export default {
|
||||
name: 'v-sign-pen',
|
||||
props: {
|
||||
// 选项样式
|
||||
type: {
|
||||
type: String,
|
||||
default: type_style.CIRCLE
|
||||
},
|
||||
label: {
|
||||
type: String
|
||||
},
|
||||
// 画笔大小数组,单位是px
|
||||
sizes: {
|
||||
type: Array,
|
||||
default: () => [2, 4, 6, 8, 10]
|
||||
},
|
||||
// 选项颜色
|
||||
color: {
|
||||
type: String,
|
||||
default: '#333'
|
||||
},
|
||||
// 选中项颜色
|
||||
activeColor: {
|
||||
type: String,
|
||||
default: '#333'
|
||||
},
|
||||
// 选中项是否有边框
|
||||
border: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
// 边框大小, 单位 rpx
|
||||
borderWidth: {
|
||||
type: Number,
|
||||
default: 4
|
||||
},
|
||||
// 选项间隙, 单位 rpx
|
||||
space: {
|
||||
type: Number,
|
||||
default: 20
|
||||
},
|
||||
// 圆点变大变粗倍数
|
||||
bigger: {
|
||||
type: Number,
|
||||
default: 2
|
||||
},
|
||||
// 圆点最小大小,单位 px
|
||||
minSize: {
|
||||
type: Number,
|
||||
default: 4
|
||||
}
|
||||
},
|
||||
inject: ['getInterface'],
|
||||
data() {
|
||||
return {
|
||||
type_style,
|
||||
currentSelect: null,
|
||||
csizes: [],
|
||||
maxSize: 0,
|
||||
maxCsize: 0
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
minWrapHeight() {
|
||||
let height
|
||||
switch (this.type) {
|
||||
case type_style.CIRCLE:
|
||||
height = this.maxCsize + 10 + 'px'
|
||||
break
|
||||
case type_style.LINE:
|
||||
height = this.maxSize + 4 + 'px'
|
||||
break
|
||||
}
|
||||
return height
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.csizes = this.sizes.map((size, index) => {
|
||||
const csize = (index + 1) * this.bigger + this.minSize
|
||||
this.maxSize = csize > this.maxSize ? csize : this.maxSize
|
||||
this.maxCsize = csize > this.maxCsize ? csize : this.maxCsize
|
||||
return {
|
||||
size,
|
||||
csize
|
||||
}
|
||||
})
|
||||
this.currentSelect = this.csizes[0]
|
||||
},
|
||||
mounted() {
|
||||
vSignInterface = this.getInterface()
|
||||
this.setLineWidth()
|
||||
},
|
||||
methods: {
|
||||
onItemClick(opt) {
|
||||
this.currentSelect = opt
|
||||
this.setLineWidth()
|
||||
this.$emit('change', opt.size)
|
||||
},
|
||||
setLineWidth() {
|
||||
vSignInterface.setLineWidth(this.currentSelect.size)
|
||||
},
|
||||
defaultInnerStyle(item) {
|
||||
let width
|
||||
let height
|
||||
switch (this.type) {
|
||||
case type_style.CIRCLE:
|
||||
width = `${item.csize}px`
|
||||
height = `${item.csize}px`
|
||||
break
|
||||
case type_style.LINE:
|
||||
width = '20px'
|
||||
height = `${item.size}px`
|
||||
break
|
||||
}
|
||||
const background = this.currentSelect.size === item.size ? this.activeColor : this.color
|
||||
return {
|
||||
width,
|
||||
height,
|
||||
background
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.v-sign-pen {
|
||||
padding: 12rpx;
|
||||
.label {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
}
|
||||
.options {
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
.opt-item {
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
justify-content: center;
|
||||
&:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
.circle {
|
||||
border-radius: 50%;
|
||||
padding: 4rpx;
|
||||
.inner {
|
||||
border-radius: 50%;
|
||||
}
|
||||
}
|
||||
.line {
|
||||
padding: 4rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
238
components/v-sign/v-sign.vue
Normal file
238
components/v-sign/v-sign.vue
Normal file
@ -0,0 +1,238 @@
|
||||
<template>
|
||||
<view class="signature-wrap">
|
||||
<canvas
|
||||
:canvas-id="cid"
|
||||
:id="cid"
|
||||
@touchstart="onTouchStart"
|
||||
@touchmove="onTouchMove"
|
||||
@touchend="onTouchEnd"
|
||||
style="height:600rpx"
|
||||
:style="[{ width: formatSize(width)}, customStyle]"
|
||||
></canvas>
|
||||
<slot />
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
/**
|
||||
* sign canvas 手写签名
|
||||
* @description 设置线条宽度、颜色,撤回,清空
|
||||
* @tutorial
|
||||
* @property {String} cid canvas id 不设置则默认为 v-sign-时间戳
|
||||
* @property {String, Number} width canvas 宽度
|
||||
* @property {String, Number} height canvas 高度
|
||||
* @property {Object} customStyle 自定义样式
|
||||
* @property {String} lineColor 画笔颜色
|
||||
* @property {Number} lineWidth 画笔大小,权重大于 v-sign-pen 组件设置的画笔大小
|
||||
* @event {Function} init 当创建完 canvas 实例后触发,向外提供 canvas实例,撤回,清空方法
|
||||
* @example <v-sign @init="signInit"></v-sign>
|
||||
*/
|
||||
import { formatSize } from './utils'
|
||||
// convas 实例
|
||||
let canvasCtx
|
||||
|
||||
export default {
|
||||
name: 'v-sign',
|
||||
props: {
|
||||
// canvas id
|
||||
cid: {
|
||||
type: String,
|
||||
default: `v-sign-${Date.now()}`
|
||||
// required: true
|
||||
},
|
||||
// canvas 宽度
|
||||
width: {
|
||||
type: [String, Number],
|
||||
default: '100%'
|
||||
},
|
||||
// canvas 高度
|
||||
height: {
|
||||
type: [String, Number],
|
||||
default: 300
|
||||
},
|
||||
// 画笔大小,权重大于 v-sign-pen 组件设置的画笔大小
|
||||
lineWidth: {
|
||||
type: Number
|
||||
},
|
||||
// 线颜色
|
||||
lineColor: {
|
||||
type: String,
|
||||
default: '#000'
|
||||
},
|
||||
// canvas自定义样式
|
||||
customStyle: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
},
|
||||
provide() {
|
||||
return {
|
||||
getInterface: this.provideInterface
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
formatSize,
|
||||
lineData: [],
|
||||
winWidth: 0,
|
||||
winHeight: 0,
|
||||
penLineWidth: null, // v-sign-pen 组件设置的画笔大小
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
canvasCtx = uni.createCanvasContext(this.cid, this)
|
||||
// 初始化完成,向外暴露接口
|
||||
this.$emit('init', this.provideInterface())
|
||||
// 获取窗口宽高
|
||||
uni.getSystemInfo({
|
||||
success: res => {
|
||||
this.winWidth = res.windowWidth
|
||||
this.winHeight = res.windowHeight
|
||||
}
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
onTouchStart(e) {
|
||||
const pos = e.touches[0]
|
||||
this.lineData.push({
|
||||
style: {
|
||||
color: this.lineColor,
|
||||
width: this.lineWidth || this.penLineWidth || 4
|
||||
},
|
||||
// 屏幕坐标
|
||||
coordinates: [
|
||||
{
|
||||
type: e.type,
|
||||
x: pos.x,
|
||||
y: pos.y
|
||||
}
|
||||
]
|
||||
})
|
||||
this.drawLine()
|
||||
},
|
||||
onTouchMove(e) {
|
||||
const pos = e.touches[0]
|
||||
this.lineData[this.lineData.length - 1].coordinates.push({
|
||||
type: e.type,
|
||||
x: pos.x,
|
||||
y: pos.y
|
||||
})
|
||||
this.drawLine()
|
||||
},
|
||||
onTouchEnd(e) {
|
||||
// console.log(e.type, e)
|
||||
},
|
||||
// 清空画布
|
||||
clear() {
|
||||
this.lineData = []
|
||||
canvasCtx.clearRect(0, 0, this.winWidth, this.winHeight)
|
||||
canvasCtx.draw()
|
||||
},
|
||||
// 撤销
|
||||
revoke() {
|
||||
this.lineData.pop()
|
||||
this.lineData.forEach((item, index) => {
|
||||
canvasCtx.beginPath()
|
||||
canvasCtx.setLineCap('round')
|
||||
canvasCtx.setStrokeStyle(item.style.color)
|
||||
canvasCtx.setLineWidth(item.style.width)
|
||||
item.coordinates.forEach(pos => {
|
||||
if (pos.type == 'touchstart') {
|
||||
canvasCtx.moveTo(pos.x, pos.y)
|
||||
} else {
|
||||
canvasCtx.lineTo(pos.x, pos.y)
|
||||
}
|
||||
})
|
||||
canvasCtx.stroke()
|
||||
})
|
||||
canvasCtx.draw()
|
||||
},
|
||||
// 绘制线条
|
||||
drawLine() {
|
||||
const lineDataLen = this.lineData.length
|
||||
if (!lineDataLen) return
|
||||
const currentLineData = this.lineData[lineDataLen - 1]
|
||||
const coordinates = currentLineData.coordinates
|
||||
const coordinatesLen = coordinates.length
|
||||
if (!coordinatesLen) return
|
||||
let startPos
|
||||
let endPos
|
||||
if (coordinatesLen < 2) {
|
||||
// only start, no move event
|
||||
startPos = coordinates[coordinatesLen - 1]
|
||||
endPos = { x: startPos.x + 1, y: startPos.y }
|
||||
} else {
|
||||
startPos = coordinates[coordinatesLen - 2]
|
||||
endPos = coordinates[coordinatesLen - 1]
|
||||
}
|
||||
|
||||
const style = currentLineData.style
|
||||
canvasCtx.beginPath()
|
||||
canvasCtx.setLineCap('round')
|
||||
canvasCtx.setStrokeStyle(style.color)
|
||||
canvasCtx.setLineWidth(style.width)
|
||||
canvasCtx.moveTo(startPos.x, startPos.y)
|
||||
canvasCtx.lineTo(endPos.x, endPos.y)
|
||||
// const P1 = this.caculateBezier(startPos, endPos, centerPos)
|
||||
// console.log(P1.x, P1.y)
|
||||
// canvasCtx.moveTo(startPos.x, startPos.y)
|
||||
// canvasCtx.quadraticCurveTo(P1.x, P1.y, endPos.x, endPos.y)
|
||||
canvasCtx.stroke()
|
||||
canvasCtx.draw(true)
|
||||
},
|
||||
canvasToTempFilePath(conf = {}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
uni.canvasToTempFilePath(
|
||||
{
|
||||
canvasId: this.cid,
|
||||
...conf,
|
||||
success: res => {
|
||||
resolve(res.tempFilePath)
|
||||
},
|
||||
fail: err => {
|
||||
console.log('fail', err)
|
||||
reject(err)
|
||||
}
|
||||
},
|
||||
this
|
||||
)
|
||||
})
|
||||
},
|
||||
setLineWidth(numberVal) {
|
||||
this.penLineWidth = numberVal
|
||||
},
|
||||
provideInterface() {
|
||||
return {
|
||||
cid: this.cid,
|
||||
ctx: canvasCtx,
|
||||
clear: this.clear,
|
||||
revoke: this.revoke,
|
||||
canvasToTempFilePath: this.canvasToTempFilePath,
|
||||
setLineWidth: this.setLineWidth
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 计算二次贝塞尔曲线 控制点 P1
|
||||
* 起点 P0(x0,y0)、控制点P1(x1, y1)、P2(x2, y2)、曲线上任意点B(x, y)
|
||||
* 二次贝塞尔公式:B(t) = (1-t)²P0 + 2t(1-t)P1 + t²P2
|
||||
* 代入坐标得:
|
||||
* x = (1-t)²*x0 + 2t(1-t)*x1 + t²*x2
|
||||
* y = (1-t)²*y0 + 2t(1-t)*y1 + t²*y2
|
||||
*/
|
||||
caculateBezier(P0, P2, B, t = 0.5) {
|
||||
const { x: x0, y: y0 } = P0
|
||||
const { x: x2, y: y2 } = P2
|
||||
const { x, y } = B
|
||||
let x1 = (x - (1 - t) * (1 - t) * x0 - t * t * x2) / (2 * t * (1 - t))
|
||||
let y1 = (y - (1 - t) * (1 - t) * y0 - t * t * y2) / (2 * t * (1 - t))
|
||||
return { x: x1, y: y1 }
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.signature-wrap {
|
||||
position: relative;
|
||||
}
|
||||
</style>
|
||||
19
pages.json
19
pages.json
@ -3,7 +3,7 @@
|
||||
"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
|
||||
},
|
||||
"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
|
||||
|
||||
|
||||
{
|
||||
"path": "pages/startup/startup",
|
||||
"style": {
|
||||
@ -16,7 +16,7 @@
|
||||
"enablePullDownRefresh": false,
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
"path": "pages/medicalservice/medicalservice",
|
||||
"style": {
|
||||
@ -398,12 +398,6 @@
|
||||
"navigationBarTitleText": "履约详情",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
||||
}, {
|
||||
"path": "contractsigningprotocol/contractsigningprotocol",
|
||||
"style": {
|
||||
"navigationBarTitleText": "签约协议",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
||||
}
|
||||
]
|
||||
}, {
|
||||
@ -509,6 +503,13 @@
|
||||
"navigationBarTitleText": "",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "contractsigningprotocol/contractsigningprotocol",
|
||||
"style": {
|
||||
"navigationBarTitleText": "签约协议",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
||||
}
|
||||
]
|
||||
}],
|
||||
@ -551,4 +552,4 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -114,7 +114,7 @@
|
||||
// 家医签约
|
||||
goonline() {
|
||||
uni.navigateTo({
|
||||
url: "/pagesB/mysigning/mysigning"
|
||||
url: "/pagesC/Onlinesigning/Onlinesigning"
|
||||
})
|
||||
// if (!this.userinfo) {
|
||||
// this.gologin();
|
||||
@ -246,4 +246,4 @@
|
||||
|
||||
<style lang="scss">
|
||||
@import "./homepage.scss";
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@ -114,4 +114,4 @@
|
||||
padding-left: 10rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<view class="content" v-for="(item,index) in prejectlist">
|
||||
<view class="big">{{item.projectName}}
|
||||
</view>
|
||||
<view class="servename" @tap="result(item.projectId)">
|
||||
<view class="servename" @tap="result(item)">
|
||||
查看筛查结果
|
||||
</view>
|
||||
</view>
|
||||
@ -33,7 +33,7 @@
|
||||
} from '@/api/pagesB/SelectItem/SelectItem.js'
|
||||
export default {
|
||||
data() {
|
||||
|
||||
|
||||
return {
|
||||
prejectlist:{},
|
||||
};
|
||||
@ -43,19 +43,20 @@
|
||||
projectTypedata(projectType).then(res=>{
|
||||
this.prejectlist=res.data
|
||||
console.log(res)
|
||||
|
||||
|
||||
})
|
||||
// this.resultstype();
|
||||
},
|
||||
|
||||
methods: {
|
||||
resultstype(){
|
||||
|
||||
|
||||
},
|
||||
// 查看筛查结果
|
||||
result(item){
|
||||
console.log(item)
|
||||
uni.navigateTo({
|
||||
url: `/pagesB/screeningResult/screeningResult?registerId=${item}`
|
||||
url: `/pagesB/screeningResult/screeningResult?projectId=${item.projectId}`
|
||||
});
|
||||
console.log(item)
|
||||
|
||||
|
||||
@ -86,11 +86,7 @@
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
page {
|
||||
background-color: #F4F5F7;
|
||||
}
|
||||
|
||||
.app {
|
||||
.app {
|
||||
|
||||
.card {
|
||||
background-color: #fff;
|
||||
|
||||
@ -1,19 +0,0 @@
|
||||
<template>
|
||||
<view>
|
||||
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
|
||||
</style>
|
||||
178
pagesB/createnewconsultation/createnewconsultation.scss
Normal file
178
pagesB/createnewconsultation/createnewconsultation.scss
Normal file
@ -0,0 +1,178 @@
|
||||
.app {
|
||||
padding-top: 10rpx;
|
||||
width: 100%;
|
||||
|
||||
.btns {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
font-size: 31rpx;
|
||||
justify-content: space-around;
|
||||
text-align: center;
|
||||
font-weight: 500;
|
||||
margin-top: 80rpx;
|
||||
padding-bottom: 50rpx;
|
||||
|
||||
.btnleft {
|
||||
width: 290rpx;
|
||||
height: 62rpx;
|
||||
background: #FFFFFF;
|
||||
border: 1px solid #26A888;
|
||||
border-radius: 5rpx;
|
||||
color: #26A888;
|
||||
line-height: 62rpx
|
||||
}
|
||||
|
||||
.btnright {
|
||||
width: 289rpx;
|
||||
height: 62rpx;
|
||||
background: #26A888;
|
||||
border-radius: 5rpx;
|
||||
color: #FFFFFF;
|
||||
line-height: 62rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.item {
|
||||
width: 96%;
|
||||
margin: 20rpx auto;
|
||||
background-color: #fff;
|
||||
box-shadow: 0rpx 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
|
||||
border-radius: 5rpx;
|
||||
padding-bottom: 50rpx;
|
||||
|
||||
.select {
|
||||
width: 90%;
|
||||
height: 80rpx;
|
||||
background: #F6F6F6;
|
||||
margin: 12rpx auto;
|
||||
border-radius: 5rpx;
|
||||
display: flex;
|
||||
position: relative;
|
||||
|
||||
text {
|
||||
padding: 0 60rpx 0 20rpx;
|
||||
line-height: 80rpx;
|
||||
font-size: 22rpx;
|
||||
font-weight: 400;
|
||||
height: 80rpx;
|
||||
color: #8E8E8E;
|
||||
// text-overflow: -o-ellipsis-lastline;
|
||||
// overflow: hidden;
|
||||
// text-overflow: ellipsis;
|
||||
// display: -webkit-box;
|
||||
// -webkit-line-clamp: 1;
|
||||
// line-clamp: 1;
|
||||
// -webkit-box-orient: vertical;
|
||||
// white-space:normal;
|
||||
// word-break:break-all;
|
||||
}
|
||||
|
||||
image {
|
||||
width: 9rpx;
|
||||
height: 17rpx;
|
||||
position: absolute;
|
||||
right: 40rpx;
|
||||
top: 50%;
|
||||
-webkit-transform: translateY(-50%);
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
}
|
||||
|
||||
.textarea {
|
||||
font-size: 18rpx;
|
||||
font-weight: 400;
|
||||
color: #8E8E8E;
|
||||
line-height: 42rpx;
|
||||
padding: 30rpx 0 0 40rpx;
|
||||
}
|
||||
|
||||
.text {
|
||||
font-size: 30rpx;
|
||||
font-weight: 400;
|
||||
color: #333333;
|
||||
padding: 30rpx 0 0 40rpx;
|
||||
}
|
||||
|
||||
::v-deep .u-upload {
|
||||
padding: 30rpx 30rpx 0 30rpx;
|
||||
}
|
||||
|
||||
.input {
|
||||
width: 90%;
|
||||
height: 80rpx;
|
||||
border-radius: 5rpx;
|
||||
background: #f6f6f6;
|
||||
margin: 20rpx 0 0 40rpx;
|
||||
position: relative;
|
||||
padding-left: 10rpx;
|
||||
|
||||
image {
|
||||
width: 10rpx;
|
||||
height: 20rpx;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
right: 5%;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
|
||||
.uni-textarea-placeholder {
|
||||
padding-left: 12rpx;
|
||||
font-size: 22rpx;
|
||||
font-weight: 400;
|
||||
color: #8E8E8E !important;
|
||||
}
|
||||
|
||||
.phsy {
|
||||
padding-left: 12rpx;
|
||||
font-size: 22rpx;
|
||||
font-weight: 400;
|
||||
color: #8E8E8E !important;
|
||||
}
|
||||
|
||||
.inputtext {
|
||||
padding-left: 12rpx;
|
||||
color: black;
|
||||
font-size: 26rpx;
|
||||
width: 90%;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
}
|
||||
|
||||
.uinput {
|
||||
color: black;
|
||||
font-size: 26rpx;
|
||||
width: 90%;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
}
|
||||
|
||||
.noimageuinput {
|
||||
width: 98% !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
width: 100%;
|
||||
padding: 10rpx 0 10rpx 35rpx;
|
||||
|
||||
.left {
|
||||
vertical-align: middle;
|
||||
display: inline-block;
|
||||
width: 10rpx;
|
||||
height: 30rpx;
|
||||
background: #26A888;
|
||||
border-radius: 1rpx;
|
||||
}
|
||||
|
||||
.right {
|
||||
vertical-align: middle;
|
||||
display: inline-block;
|
||||
font-size: 30rpx;
|
||||
font-weight: 500;
|
||||
color: #26A888;
|
||||
line-height: 30rpx;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -39,6 +39,14 @@
|
||||
<input v-model="formdata.phone" class="uinput noimageuinput" placeholder="请输入患者联系电话" type="text"
|
||||
placeholder-class="phsy" />
|
||||
</view>
|
||||
<view class="text">
|
||||
选择医生
|
||||
</view>
|
||||
<view class="select" @tap='gochoosedoctor'>
|
||||
<text v-if="formdata.doctorName" style="font-size: 26rpx;color: #303133;">{{formdata.doctorName}}</text>
|
||||
<text v-else>请选择医生</text>
|
||||
<image src="../../static/huijiantou.png" mode=""></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="title">
|
||||
<view class="left">
|
||||
@ -163,6 +171,13 @@
|
||||
},
|
||||
onShow() {
|
||||
this.areaInfo();
|
||||
let that = this
|
||||
uni.$on('doctordata', function(data) {
|
||||
let item = JSON.parse(data.data)
|
||||
that.formdata.doctorName = item.realname
|
||||
that.formdata.doctorId = item.userNo
|
||||
uni.$off('doctordata')
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
updata() {
|
||||
@ -222,153 +237,15 @@
|
||||
this.address = '请选择所属地区'
|
||||
}
|
||||
},
|
||||
gochoosedoctor() {
|
||||
uni.navigateTo({
|
||||
url: '/pagesC/choosedoctor/choosedoctor'
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
page {
|
||||
background-color: #F4F5F7;
|
||||
}
|
||||
|
||||
.app {
|
||||
padding-top: 10rpx;
|
||||
width: 100%;
|
||||
|
||||
.btns {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
font-size: 31rpx;
|
||||
justify-content: space-around;
|
||||
text-align: center;
|
||||
font-weight: 500;
|
||||
margin-top: 80rpx;
|
||||
padding-bottom: 50rpx;
|
||||
|
||||
.btnleft {
|
||||
width: 290rpx;
|
||||
height: 62rpx;
|
||||
background: #FFFFFF;
|
||||
border: 1px solid #26A888;
|
||||
border-radius: 5rpx;
|
||||
color: #26A888;
|
||||
line-height: 62rpx
|
||||
}
|
||||
|
||||
.btnright {
|
||||
width: 289rpx;
|
||||
height: 62rpx;
|
||||
background: #26A888;
|
||||
border-radius: 5rpx;
|
||||
color: #FFFFFF;
|
||||
line-height: 62rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.item {
|
||||
width: 96%;
|
||||
margin: 20rpx auto;
|
||||
background-color: #fff;
|
||||
box-shadow: 0rpx 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
|
||||
border-radius: 5rpx;
|
||||
padding-bottom: 50rpx;
|
||||
|
||||
.textarea {
|
||||
font-size: 18rpx;
|
||||
font-weight: 400;
|
||||
color: #8E8E8E;
|
||||
line-height: 42rpx;
|
||||
padding: 30rpx 0 0 40rpx;
|
||||
}
|
||||
|
||||
.text {
|
||||
font-size: 30rpx;
|
||||
font-weight: 400;
|
||||
color: #333333;
|
||||
padding: 30rpx 0 0 40rpx;
|
||||
}
|
||||
|
||||
::v-deep .u-upload {
|
||||
padding: 30rpx 30rpx 0 30rpx;
|
||||
}
|
||||
|
||||
.input {
|
||||
width: 90%;
|
||||
height: 80rpx;
|
||||
border-radius: 5rpx;
|
||||
background: #f6f6f6;
|
||||
margin: 20rpx 0 0 40rpx;
|
||||
position: relative;
|
||||
padding-left: 10rpx;
|
||||
|
||||
image {
|
||||
width: 10rpx;
|
||||
height: 20rpx;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
right: 5%;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
|
||||
.uni-textarea-placeholder {
|
||||
padding-left: 12rpx;
|
||||
font-size: 22rpx;
|
||||
font-weight: 400;
|
||||
color: #8E8E8E !important;
|
||||
}
|
||||
|
||||
.phsy {
|
||||
padding-left: 12rpx;
|
||||
font-size: 22rpx;
|
||||
font-weight: 400;
|
||||
color: #8E8E8E !important;
|
||||
}
|
||||
|
||||
.inputtext {
|
||||
padding-left: 12rpx;
|
||||
color: black;
|
||||
font-size: 26rpx;
|
||||
width: 90%;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
}
|
||||
|
||||
.uinput {
|
||||
color: black;
|
||||
font-size: 26rpx;
|
||||
width: 90%;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
}
|
||||
|
||||
.noimageuinput {
|
||||
width: 98% !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
width: 100%;
|
||||
padding: 10rpx 0 10rpx 35rpx;
|
||||
|
||||
.left {
|
||||
vertical-align: middle;
|
||||
display: inline-block;
|
||||
width: 10rpx;
|
||||
height: 30rpx;
|
||||
background: #26A888;
|
||||
border-radius: 1rpx;
|
||||
}
|
||||
|
||||
.right {
|
||||
vertical-align: middle;
|
||||
display: inline-block;
|
||||
font-size: 30rpx;
|
||||
font-weight: 500;
|
||||
color: #26A888;
|
||||
line-height: 30rpx;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@import './createnewconsultation.scss';
|
||||
</style>
|
||||
|
||||
@ -74,11 +74,7 @@
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
page {
|
||||
background-color: #F4F5F7;
|
||||
}
|
||||
|
||||
.app {
|
||||
.app {
|
||||
width: 96%;
|
||||
margin: 16rpx auto;
|
||||
color: #666666;
|
||||
|
||||
@ -47,11 +47,7 @@
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
page {
|
||||
background-color: #F4F5F7;
|
||||
}
|
||||
|
||||
.app {
|
||||
.app {
|
||||
background-color: #fff;
|
||||
width: 96%;
|
||||
margin: 20rpx auto 0;
|
||||
|
||||
@ -114,10 +114,6 @@
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
page {
|
||||
background-color: #F4F5F7;
|
||||
}
|
||||
|
||||
.app {
|
||||
width: 96%;
|
||||
margin: 20rpx auto;
|
||||
|
||||
@ -1,6 +1,3 @@
|
||||
page {
|
||||
background-color: #F4F5F7;
|
||||
}
|
||||
|
||||
.app {
|
||||
color: #333333;
|
||||
|
||||
@ -1,6 +1,4 @@
|
||||
page {
|
||||
background-color: #F4F5F7;
|
||||
}
|
||||
|
||||
.app {
|
||||
background-color: #F4F5F7;
|
||||
width: 100%;
|
||||
|
||||
94
pagesB/myfamilydoctorteam/myfamilydoctorteam.scss
Normal file
94
pagesB/myfamilydoctorteam/myfamilydoctorteam.scss
Normal file
@ -0,0 +1,94 @@
|
||||
.app {
|
||||
width: 96%;
|
||||
margin: 20rpx auto;
|
||||
background-color: #fff;
|
||||
|
||||
.list {
|
||||
width: 100%;
|
||||
|
||||
.item {
|
||||
width: 96%;
|
||||
margin: 0 auto;
|
||||
padding-bottom: 60rpx;
|
||||
border-bottom: 2rpx solid #E6E6E6;
|
||||
position: relative;
|
||||
height: 300rpx;
|
||||
|
||||
.zixunbtn {
|
||||
width: 169rpx;
|
||||
height: 61rpx;
|
||||
background: #26A888;
|
||||
border-radius: 5rpx;
|
||||
font-size: 28rpx;
|
||||
font-weight: 400;
|
||||
color: #FFFFFF;
|
||||
line-height: 61rpx;
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
top: 65%;
|
||||
right: 10rpx;
|
||||
}
|
||||
|
||||
.title {
|
||||
position: absolute;
|
||||
top: 70%;
|
||||
left: 210rpx;
|
||||
font-size: 18rpx;
|
||||
font-weight: 500;
|
||||
color: #FFA733;
|
||||
line-height: 30rpx;
|
||||
height: 30rpx;
|
||||
background: #FFFFFF;
|
||||
border: 1px solid #FFA115;
|
||||
border-radius: 5rpx;
|
||||
text-align: center;
|
||||
padding: 0 15rpx;
|
||||
}
|
||||
|
||||
.phone {
|
||||
position: absolute;
|
||||
top: 38%;
|
||||
left: 210rpx;
|
||||
font-size: 28rpx;
|
||||
font-weight: 400;
|
||||
color: #959595;
|
||||
}
|
||||
|
||||
.name {
|
||||
position: absolute;
|
||||
font-size: 28rpx;
|
||||
font-weight: 500;
|
||||
color: #333333;
|
||||
top: 20%;
|
||||
left: 210rpx;
|
||||
}
|
||||
|
||||
image {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
left: 5rpx;
|
||||
width: 180rpx;
|
||||
height: 180rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.teamname {
|
||||
padding: 20rpx 0 0 30rpx;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
|
||||
image {
|
||||
width: 40rpx;
|
||||
height: 36rpx;
|
||||
}
|
||||
|
||||
.name {
|
||||
padding-left: 15rpx;
|
||||
font-size: 28rpx;
|
||||
font-weight: 500;
|
||||
color: #000000;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3,37 +3,22 @@
|
||||
<view class="teamname">
|
||||
<image src="../../static/pagesB/myfamilydoctorteam.png" mode=""></image>
|
||||
<view class="name">
|
||||
中心团队
|
||||
{{list?list[0].teamName:''}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="list">
|
||||
<view class="item">
|
||||
<image src="../../static/pagesB/Behave.png" mode=""></image>
|
||||
<view class="item" v-for='item in list'>
|
||||
<image src="../../static/docHead.png" mode=""></image>
|
||||
<view class="name">
|
||||
齐鲁医院张医生
|
||||
{{item.realname?item.realname:''}}
|
||||
</view>
|
||||
<view class="phone">
|
||||
17869882345
|
||||
{{item.mobilePhone?item.mobilePhone:''}}
|
||||
</view>
|
||||
<view class="title">
|
||||
全科医生
|
||||
{{item.teamMemberTypeName?item.teamMemberTypeName:''}}
|
||||
</view>
|
||||
<view class="zixunbtn">
|
||||
咨询
|
||||
</view>
|
||||
</view>
|
||||
<view class="item">
|
||||
<image src="../../static/pagesB/Behave.png" mode=""></image>
|
||||
<view class="name">
|
||||
齐鲁医院张医生
|
||||
</view>
|
||||
<view class="phone">
|
||||
17869882345
|
||||
</view>
|
||||
<view class="title">
|
||||
全科医生
|
||||
</view>
|
||||
<view class="zixunbtn">
|
||||
<view class="zixunbtn" @tap='goseekadvicefrom'>
|
||||
咨询
|
||||
</view>
|
||||
</view>
|
||||
@ -42,112 +27,58 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
getDoctorListtwo
|
||||
} from '@/api/pagesB/myfamilydoctorteam/index.js'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
teamNo: null,
|
||||
list: null,
|
||||
total: 0,
|
||||
};
|
||||
}
|
||||
},
|
||||
onLoad(options) {
|
||||
this.teamNo = options.teamNo
|
||||
this.info()
|
||||
},
|
||||
methods: {
|
||||
info() {
|
||||
getDoctorListtwo(this.pageNum, this.pageSize, this.teamNo, '1').then(res => {
|
||||
this.list = res.rows
|
||||
this.total = res.total
|
||||
})
|
||||
},
|
||||
//咨询
|
||||
goseekadvicefrom() {
|
||||
uni.navigateTo({
|
||||
url: `/pagesB/imagetextConsultation/imagetextConsultation`
|
||||
})
|
||||
},
|
||||
},
|
||||
onReachBottom() { //上滑加载
|
||||
if (this.list.length >= this.total) {} else {
|
||||
this.pageNum++;
|
||||
getDoctorListtwo(this.pageNum, this.pageSize, this.teamNo, '1').then(res => {
|
||||
res.rows.forEach(e => {
|
||||
this.list.push(e)
|
||||
})
|
||||
this.total = res.total
|
||||
})
|
||||
}
|
||||
},
|
||||
onPullDownRefresh() { //下拉刷新
|
||||
this.pageNum = 1;
|
||||
this.info()
|
||||
setTimeout(function() {
|
||||
uni.stopPullDownRefresh();
|
||||
}, 1000);
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
page {
|
||||
background-color: #F4F5F7;
|
||||
}
|
||||
|
||||
.app {
|
||||
width: 96%;
|
||||
margin: 20rpx auto;
|
||||
background-color: #fff;
|
||||
|
||||
.list {
|
||||
width: 100%;
|
||||
|
||||
.item {
|
||||
width: 96%;
|
||||
margin: 0 auto ;
|
||||
padding-bottom: 60rpx;
|
||||
border-bottom: 2rpx solid #E6E6E6;
|
||||
position: relative;
|
||||
height: 300rpx;
|
||||
|
||||
.zixunbtn {
|
||||
width: 169rpx;
|
||||
height: 61rpx;
|
||||
background: #26A888;
|
||||
border-radius: 5rpx;
|
||||
font-size: 28rpx;
|
||||
font-weight: 400;
|
||||
color: #FFFFFF;
|
||||
line-height: 61rpx;
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
top: 65%;
|
||||
right: 10rpx;
|
||||
}
|
||||
|
||||
.title {
|
||||
position: absolute;
|
||||
top: 70%;
|
||||
left: 210rpx;
|
||||
font-size: 18rpx;
|
||||
font-weight: 500;
|
||||
color: #FFA733;
|
||||
line-height: 30rpx;
|
||||
height: 30rpx;
|
||||
background: #FFFFFF;
|
||||
border: 1px solid #FFA115;
|
||||
border-radius: 5rpx;
|
||||
text-align: center;
|
||||
padding: 0 15rpx;
|
||||
}
|
||||
|
||||
.phone {
|
||||
position: absolute;
|
||||
top: 38%;
|
||||
left: 210rpx;
|
||||
font-size: 28rpx;
|
||||
font-weight: 400;
|
||||
color: #959595;
|
||||
}
|
||||
|
||||
.name {
|
||||
position: absolute;
|
||||
font-size: 28rpx;
|
||||
font-weight: 500;
|
||||
color: #333333;
|
||||
top: 20%;
|
||||
left: 210rpx;
|
||||
}
|
||||
|
||||
image {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
left: 5rpx;
|
||||
width: 180rpx;
|
||||
height: 180rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.teamname {
|
||||
padding: 20rpx 0 0 30rpx;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
|
||||
image {
|
||||
width: 40rpx;
|
||||
height: 36rpx;
|
||||
}
|
||||
|
||||
.name {
|
||||
padding-left: 15rpx;
|
||||
font-size: 28rpx;
|
||||
font-weight: 500;
|
||||
color: #000000;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@import './myfamilydoctorteam.scss';
|
||||
</style>
|
||||
|
||||
220
pagesB/mysigning/mysigning.scss
Normal file
220
pagesB/mysigning/mysigning.scss
Normal file
@ -0,0 +1,220 @@
|
||||
.app {
|
||||
width: 96%;
|
||||
margin: 20rpx auto;
|
||||
background-color: #fff;
|
||||
padding-bottom: 50rpx;
|
||||
font-size: 31rpx;
|
||||
|
||||
.mask {
|
||||
background-color: #fff;
|
||||
width: 100%;
|
||||
position: relative;
|
||||
height: 100%;
|
||||
padding-top: 80rpx;
|
||||
|
||||
.titletext {
|
||||
width: 100%;
|
||||
padding: 40rpx 30rpx 0;
|
||||
display: flex;
|
||||
|
||||
.select {
|
||||
width: 60%;
|
||||
height: 63rpx;
|
||||
border: 2rpx solid #d0d0d0;
|
||||
border-radius: 5rpx;
|
||||
display: flex;
|
||||
position: relative;
|
||||
flex: 1;
|
||||
|
||||
text {
|
||||
height: 63rpx;
|
||||
padding: 0 60rpx 0 20rpx;
|
||||
line-height: 63rpx;
|
||||
font-weight: 400;
|
||||
color: gray;
|
||||
font-size: 24rpx;
|
||||
// text-overflow: -o-ellipsis-lastline;
|
||||
// overflow: hidden;
|
||||
// text-overflow: ellipsis;
|
||||
// display: -webkit-box;
|
||||
// -webkit-line-clamp: 1;
|
||||
// line-clamp: 1;
|
||||
// -webkit-box-orient: vertical;
|
||||
// white-space:normal;
|
||||
// word-break:break-all;
|
||||
}
|
||||
|
||||
image {
|
||||
width: 9rpx;
|
||||
height: 17rpx;
|
||||
position: absolute;
|
||||
right: 40rpx;
|
||||
top: 50%;
|
||||
-webkit-transform: translateY(-50%);
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btnss {
|
||||
display: flex;
|
||||
text-align: center;
|
||||
border-top: 1rpx solid #f6f6f6;
|
||||
font-size: 32rpx;
|
||||
line-height: 100rpx;
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
|
||||
.cancel {
|
||||
width: 50%;
|
||||
height: 100rpx;
|
||||
border-right: 0.5rpx solid #f6f6f6;
|
||||
}
|
||||
|
||||
.Rescind {
|
||||
width: 50%;
|
||||
height: 100rpx;
|
||||
color: #55d0df;
|
||||
border-left: 0.5rpx solid #f6f6f6;
|
||||
}
|
||||
}
|
||||
|
||||
textarea {
|
||||
padding: 10rpx 20rpx;
|
||||
font-size: 24rpx;
|
||||
border: 1rpx solid #d0d0d0;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
text {
|
||||
display: inline-block;
|
||||
padding-left: 20rpx;
|
||||
width: 200rpx;
|
||||
height: 50rpx;
|
||||
font-size: 28rpx;
|
||||
line-height: 50rpx;
|
||||
color: #333333;
|
||||
}
|
||||
}
|
||||
|
||||
.btns {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-evenly;
|
||||
padding-bottom: 100rpx;
|
||||
|
||||
.leftbtn,
|
||||
.rightbtn {
|
||||
width: 290rpx;
|
||||
height: 62rpx;
|
||||
background: #FFFFFF;
|
||||
border: 1px solid #26A888;
|
||||
border-radius: 5rpx;
|
||||
text-align: center;
|
||||
font-weight: 500;
|
||||
color: #26A888;
|
||||
line-height: 62rpx;
|
||||
}
|
||||
|
||||
.rightbtn {
|
||||
color: #fff;
|
||||
background: #26A888;
|
||||
}
|
||||
}
|
||||
|
||||
.lookbtn {
|
||||
margin: 50rpx auto 0;
|
||||
width: 497rpx;
|
||||
height: 62rpx;
|
||||
background: #FFFFFF;
|
||||
border: 1px solid #26A888;
|
||||
border-radius: 5rpx;
|
||||
font-weight: 500;
|
||||
color: #26A888;
|
||||
text-align: center;
|
||||
line-height: 62rpx;
|
||||
}
|
||||
|
||||
.border {
|
||||
width: 94%;
|
||||
height: 2rpx;
|
||||
margin: 60rpx auto 30rpx;
|
||||
background: #E6E6E6;
|
||||
}
|
||||
|
||||
.item {
|
||||
width: 100%;
|
||||
padding: 30rpx 50rpx 0 50rpx;
|
||||
font-size: 30rpx;
|
||||
font-weight: 400;
|
||||
color: #333333;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.flexitem {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
.right {
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
|
||||
image {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
}
|
||||
|
||||
text {
|
||||
padding-left: 10rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.name {
|
||||
width: 100%;
|
||||
font-size: 38rpx;
|
||||
font-weight: 500;
|
||||
color: #333333;
|
||||
padding: 60rpx 50rpx 0 50rpx;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
|
||||
.text {
|
||||
margin-right: 40rpx;
|
||||
}
|
||||
|
||||
.card {
|
||||
font-size: 18rpx;
|
||||
font-weight: 400;
|
||||
color: #FFA115;
|
||||
padding: 0 15rpx;
|
||||
height: 35rpx;
|
||||
line-height: 35rpx;
|
||||
background: #FFFFFF;
|
||||
border: 1px solid #FFA115;
|
||||
border-radius: 5rpx;
|
||||
margin-right: 14rpx;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
width: 100%;
|
||||
padding: 20rpx 0 0 30rpx;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
|
||||
.text {
|
||||
font-size: 28rpx;
|
||||
font-weight: 500;
|
||||
color: #000000;
|
||||
padding-left: 20rpx;
|
||||
}
|
||||
|
||||
image {
|
||||
width: 35rpx;
|
||||
height: 35rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -15,7 +15,7 @@
|
||||
</view>
|
||||
</view>
|
||||
<view class="item">
|
||||
{{list.gender=='2'?'女':''}}{{list.gender=='1'?'男':''}} {{list.age}}岁
|
||||
{{list.gender=='2'?'女':''}}{{list.gender=='1'?'男':''}} {{list.age? list.age +'岁':''}}
|
||||
</view>
|
||||
<view class="item">
|
||||
{{list.phone?list.phone:''}}
|
||||
@ -73,17 +73,48 @@
|
||||
<view class="border">
|
||||
</view>
|
||||
<view class="btns">
|
||||
<view class="leftbtn">
|
||||
<view class="leftbtn" @tap='maskshow = true'>
|
||||
申请解约
|
||||
</view>
|
||||
<view class="rightbtn" @tap='gocontractsigningprotocol'>
|
||||
查看签约协议
|
||||
</view>
|
||||
</view>
|
||||
<u-popup v-model="maskshow" mode="center" length="90%" closeable height="50%">
|
||||
<view class="mask" @tap.stop=''>
|
||||
<view class="titletext">
|
||||
<text>解约类型:</text>
|
||||
<view class="select" @tap='maskshowtwo=true'>
|
||||
<text v-if="list.rescindName">{{list.rescindName}}</text>
|
||||
<text v-else>请选择解约类型</text>
|
||||
<image src="../../static/huijiantou.png" mode=""></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="titletext">
|
||||
<text>解约原因:</text>
|
||||
<textarea name="" id="" cols="30" rows="10" style="width: 60%;color: gray;" placeholder="请输入解决原因"
|
||||
v-model="list.rescindReason"></textarea>
|
||||
</view>
|
||||
<view class="btnss">
|
||||
<view class="cancel" @click="maskshowtwo=false">
|
||||
取消
|
||||
</view>
|
||||
<view class="Rescind" @click="rescindapplysaveinfo">
|
||||
解约
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</u-popup>
|
||||
<u-toast ref="uToast" />
|
||||
<u-select v-model="maskshowtwo" mode="single-column" :list="maskshowtwolist" @confirm="maskshowtwoconfirm"
|
||||
z-index='10076'></u-select>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
rescindapplysave
|
||||
} from '@/api/pagesB/mysigning/index.js'
|
||||
import {
|
||||
detail,
|
||||
} from '@/api/pages/homepage/homepage.js'
|
||||
@ -91,15 +122,54 @@
|
||||
data() {
|
||||
return {
|
||||
list: {},
|
||||
maskshow: false,
|
||||
maskshowtwo: false,
|
||||
maskshowtwolist: [{
|
||||
value: 1,
|
||||
label: '主动解约'
|
||||
},
|
||||
{
|
||||
value: 2,
|
||||
label: '迁出'
|
||||
}, {
|
||||
value: 3,
|
||||
label: '死亡'
|
||||
}, {
|
||||
value: 4,
|
||||
label: '到期'
|
||||
}, {
|
||||
value: 5,
|
||||
label: '其他'
|
||||
},
|
||||
],
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
//解约
|
||||
rescindapplysaveinfo() {
|
||||
rescindapplysave(this.list).then(res => {
|
||||
if (res.code == 200) {
|
||||
this.$refs.uToast.show({
|
||||
title: '您已解约成功',
|
||||
type: 'success',
|
||||
})
|
||||
setTimeout(() => {
|
||||
uni.switchTab({
|
||||
url: "/pages/homepage/homepage"
|
||||
})
|
||||
}, 2000)
|
||||
}
|
||||
})
|
||||
},
|
||||
// 签约信息
|
||||
detailinfo() {
|
||||
// detail(uni.getStorageSync('userinfo').cardNo, this.region).then(res => {
|
||||
detail('372424194703207523', '1').then(res => {
|
||||
if (res.code == 200) {
|
||||
this.list = res.data
|
||||
this.list.rescindType = null
|
||||
this.list.rescindName = null
|
||||
this.list.rescindReason = null
|
||||
this.list.crowdsName = this.list.crowdsName.split(',')
|
||||
this.list.packagesName = this.list.packagesName.split(',')
|
||||
}
|
||||
@ -108,7 +178,7 @@
|
||||
//我的家庭医生团队
|
||||
gomyfamilydoctorteam() {
|
||||
uni.navigateTo({
|
||||
url: '/pagesB/myfamilydoctorteam/myfamilydoctorteam'
|
||||
url: `/pagesB/myfamilydoctorteam/myfamilydoctorteam?teamNo=${this.list.teamNo}`
|
||||
})
|
||||
},
|
||||
// 履约详情
|
||||
@ -120,18 +190,22 @@
|
||||
//签约协议
|
||||
gocontractsigningprotocol() {
|
||||
uni.navigateTo({
|
||||
url: "/pagesB/contractsigningprotocol/contractsigningprotocol"
|
||||
url: `/pagesC/contractsigningprotocol/contractsigningprotocol?orgNo=${this.list.orgNo}&cardNo=${this.list.identity}`
|
||||
})
|
||||
},
|
||||
//咨询
|
||||
goseekadvicefrom() {
|
||||
uni.navigateTo({
|
||||
url: `pagesB/imagetextConsultation/imagetextConsultation`
|
||||
url: `/pagesB/imagetextConsultation/imagetextConsultation`
|
||||
})
|
||||
// uni.navigateTo({
|
||||
// url: `/pagesC/seekadvicefrom/seekadvicefrom?item=${JSON.stringify(this.list)}`
|
||||
// })
|
||||
},
|
||||
maskshowtwoconfirm(e) {
|
||||
this.list.rescindType = e[0].value
|
||||
this.list.rescindName = e[0].label
|
||||
},
|
||||
},
|
||||
onLoad(options) {
|
||||
this.detailinfo();
|
||||
@ -140,135 +214,5 @@
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
page {
|
||||
background-color: #F4F5F7;
|
||||
}
|
||||
|
||||
.app {
|
||||
width: 96%;
|
||||
margin: 20rpx auto;
|
||||
background-color: #fff;
|
||||
padding-bottom: 50rpx;
|
||||
font-size: 31rpx;
|
||||
|
||||
.btns {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-evenly;
|
||||
padding-bottom: 100rpx;
|
||||
|
||||
.leftbtn,
|
||||
.rightbtn {
|
||||
width: 290rpx;
|
||||
height: 62rpx;
|
||||
background: #FFFFFF;
|
||||
border: 1px solid #26A888;
|
||||
border-radius: 5rpx;
|
||||
text-align: center;
|
||||
font-weight: 500;
|
||||
color: #26A888;
|
||||
line-height: 62rpx;
|
||||
}
|
||||
|
||||
.rightbtn {
|
||||
color: #fff;
|
||||
background: #26A888;
|
||||
}
|
||||
}
|
||||
|
||||
.lookbtn {
|
||||
margin: 50rpx auto 0;
|
||||
width: 497rpx;
|
||||
height: 62rpx;
|
||||
background: #FFFFFF;
|
||||
border: 1px solid #26A888;
|
||||
border-radius: 5rpx;
|
||||
font-weight: 500;
|
||||
color: #26A888;
|
||||
text-align: center;
|
||||
line-height: 62rpx;
|
||||
}
|
||||
|
||||
.border {
|
||||
width: 94%;
|
||||
height: 2rpx;
|
||||
margin: 60rpx auto 30rpx;
|
||||
background: #E6E6E6;
|
||||
}
|
||||
|
||||
.item {
|
||||
width: 100%;
|
||||
padding: 30rpx 50rpx 0 50rpx;
|
||||
font-size: 30rpx;
|
||||
font-weight: 400;
|
||||
color: #333333;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.flexitem {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
.right {
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
|
||||
image {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
}
|
||||
|
||||
text {
|
||||
padding-left: 10rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.name {
|
||||
width: 100%;
|
||||
font-size: 38rpx;
|
||||
font-weight: 500;
|
||||
color: #333333;
|
||||
padding: 60rpx 50rpx 0 50rpx;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
|
||||
.text {
|
||||
margin-right: 40rpx;
|
||||
}
|
||||
|
||||
.card {
|
||||
font-size: 18rpx;
|
||||
font-weight: 400;
|
||||
color: #FFA115;
|
||||
padding: 0 15rpx;
|
||||
height: 35rpx;
|
||||
line-height: 35rpx;
|
||||
background: #FFFFFF;
|
||||
border: 1px solid #FFA115;
|
||||
border-radius: 5rpx;
|
||||
margin-right: 14rpx;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
width: 100%;
|
||||
padding: 20rpx 0 0 30rpx;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
|
||||
.text {
|
||||
font-size: 28rpx;
|
||||
font-weight: 500;
|
||||
color: #000000;
|
||||
padding-left: 20rpx;
|
||||
}
|
||||
|
||||
image {
|
||||
width: 35rpx;
|
||||
height: 35rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@import './mysigning.scss';
|
||||
</style>
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
<template>
|
||||
<view class="app">
|
||||
<u-collapse :accordion='false'>
|
||||
<u-collapse-item :title="item.head" v-for="item in itemList" :key="item.id"
|
||||
:class="headitemid.find(e=>e==item.id)?'headcollapse':''" @change='tapcollapse(item.id)'>
|
||||
<view class="itemtext" v-for="uitem in item.item">
|
||||
<u-collapse-item :title="item.packageName" v-for="item in itemlist" :key="item.packageNo"
|
||||
:class="item.check?'headcollapse':''" @change='tapcollapse(item)'>
|
||||
<view class="itemtext" v-for="uitem in item.formList">
|
||||
<view class="left">
|
||||
{{uitem.body}}
|
||||
{{uitem.formName}}
|
||||
</view>
|
||||
<view class="right">
|
||||
{{uitem.text}}
|
||||
{{uitem.performanceCount}}/{{uitem.serviceFreq}}
|
||||
</view>
|
||||
</view>
|
||||
</u-collapse-item>
|
||||
@ -17,67 +17,37 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
getPerformance
|
||||
} from "@/api/pagesB/performancedetails/index.js"
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
headitemid: [],
|
||||
itemList: [{
|
||||
head: "高血压个性服务包",
|
||||
id: 1,
|
||||
item: [{
|
||||
body: '大生化',
|
||||
text: '1/1'
|
||||
},
|
||||
{
|
||||
body: '心电图',
|
||||
text: '1/1'
|
||||
}
|
||||
]
|
||||
}, {
|
||||
head: "高血压基本公卫服务包",
|
||||
id: 2,
|
||||
item: [{
|
||||
body: '大生化',
|
||||
text: '1/1'
|
||||
},
|
||||
{
|
||||
body: '心电图',
|
||||
text: '1/1'
|
||||
}
|
||||
]
|
||||
}, {
|
||||
head: "老年人个性服务包",
|
||||
id: 3,
|
||||
item: [{
|
||||
body: '大生化',
|
||||
text: '1/1'
|
||||
},
|
||||
{
|
||||
body: '心电图',
|
||||
text: '1/1'
|
||||
}
|
||||
]
|
||||
}],
|
||||
itemlist: [],
|
||||
};
|
||||
},
|
||||
watch: {},
|
||||
methods: {
|
||||
tapcollapse(i) {
|
||||
let findindex = this.headitemid.findIndex(e => e == i)
|
||||
if (findindex != -1) {
|
||||
this.headitemid.splice(findindex, 1)
|
||||
} else {
|
||||
this.headitemid.push(i)
|
||||
}
|
||||
tapcollapse(item) {
|
||||
item.check = !item.check
|
||||
},
|
||||
}
|
||||
info() {
|
||||
// getPerformance(uni.getStorageSync('userinfo').cardNo, '1').then(res => {
|
||||
getPerformance('372424194703207523', '1').then(res => {
|
||||
res.data.forEach(e => {
|
||||
e.check = false
|
||||
})
|
||||
this.itemlist = res.data
|
||||
})
|
||||
},
|
||||
},
|
||||
onLoad() {
|
||||
this.info();
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
page {
|
||||
background-color: #F4F5F7;
|
||||
}
|
||||
|
||||
.app {
|
||||
width: 96%;
|
||||
margin: 20rpx auto;
|
||||
@ -109,6 +79,7 @@
|
||||
border-bottom: 2rpx solid #E6E6E6;
|
||||
margin: 0 auto;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.headcollapse {
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
<!-- <view>筛查日期:{{ item.screeningDate }}</view> -->
|
||||
<view style="font-size: 16px;font-weight: 900;">{{ item.screeningDate }}</view>
|
||||
<view style="border-bottom: 1px solid #EDEDED;margin: 8px 0;"></view>
|
||||
<view>筛查项目:{{ item.projectName }}</view>
|
||||
<view>筛查医院:{{ item.hospitalName }}</view>
|
||||
<view>责任医生:{{ item.doctorName}}</view>
|
||||
<view style="border-bottom: 1px solid #EDEDED;margin: 10px 0;"></view>
|
||||
@ -28,7 +29,7 @@
|
||||
pageSize:10,
|
||||
total: 0,
|
||||
// qure:{
|
||||
|
||||
|
||||
// }
|
||||
};
|
||||
},
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
<view style="color: #2968F1;" @click="goToScreeningRecord" v-show="type != '1'">筛查记录</view>
|
||||
</view>
|
||||
<view class="tabbarCon">
|
||||
<view style="text-align: center;color: #26A888;">
|
||||
<view style="text-align: center;color: #26A888;" v-if="screeningResultData.projectName">
|
||||
{{screeningResultData.projectName}}
|
||||
</view>
|
||||
<uni-segmented-control :current="Inv" :values="items" @clickItem="onClickItem" styleType="text"
|
||||
@ -201,13 +201,14 @@ import baseurl from '@/api/baseurl.js'
|
||||
onShow() {
|
||||
this.baseurl=baseurl
|
||||
console.log(baseurl)
|
||||
|
||||
|
||||
},
|
||||
onLoad(e) {
|
||||
// console.log(e);
|
||||
console.log(e);
|
||||
this.type = e.type
|
||||
if (e) {
|
||||
this.registerId = e.registerId
|
||||
this.projectId = e.projectId
|
||||
}
|
||||
if (e.screeningId) {
|
||||
screeningResultDetail(e.screeningId).then(res => {
|
||||
@ -217,16 +218,17 @@ import baseurl from '@/api/baseurl.js'
|
||||
console.log(this.screeningResultData, '000000')
|
||||
})
|
||||
} else {
|
||||
this.patientld = 52;
|
||||
// this.patientld= uni.getStorageSync('patientld');
|
||||
// this.patientld = 52;
|
||||
this.userinfo= uni.getStorageSync('userinfo');
|
||||
this.patientld = this.userinfo.patientld;
|
||||
this.getLastScreeningResult()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
lookpath() {
|
||||
var that = this
|
||||
|
||||
var url = that.baseurl + `/nurseApplet/screening/record/fileview/${that.screeningResultData.screeningId}`
|
||||
|
||||
var url = that.baseurl + `/nurseApplet/screening/record/fileview/${that.screeningResultData.attachment}`
|
||||
console.log(url,'1')
|
||||
uni.downloadFile({
|
||||
url: url,
|
||||
@ -293,8 +295,9 @@ import baseurl from '@/api/baseurl.js'
|
||||
},
|
||||
// 获取最新的筛查结果
|
||||
getLastScreeningResult() {
|
||||
lastScreeningResult(this.patientld, this.registerId).then(res => {
|
||||
|
||||
console.log(this.registerId,'999')
|
||||
lastScreeningResult(this.patientld,this.projectId).then(res => {
|
||||
|
||||
// console.log(res);
|
||||
this.items.push(res.data.projectName)
|
||||
this.screeningResultData = res.data
|
||||
@ -365,4 +368,4 @@ import baseurl from '@/api/baseurl.js'
|
||||
color: #393939;
|
||||
border-bottom: 3px solid #4DC2A8;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@ -1,8 +1,4 @@
|
||||
page {
|
||||
background-color: #F4F5F7;
|
||||
}
|
||||
|
||||
.app {
|
||||
.app {
|
||||
width: 96%;
|
||||
margin: 20rpx auto;
|
||||
background-color: #F7F5F5;
|
||||
|
||||
@ -103,7 +103,11 @@
|
||||
<image src="../../static/huijiantou.png" mode=""></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="signing">
|
||||
<view class="name">
|
||||
签约周期(年)
|
||||
<u-input v-model="query.signYears" type='number' :border="true" placeholder="请输入签约周期(单位年)" />
|
||||
</view>
|
||||
<view class=" signing">
|
||||
<view class="agency">
|
||||
签约提醒:
|
||||
</view>
|
||||
@ -144,6 +148,7 @@
|
||||
</u-checkbox-group>
|
||||
</scroll-view>
|
||||
</u-popup>
|
||||
<protocol></protocol>
|
||||
<u-toast ref="uToast" />
|
||||
</view>
|
||||
</template>
|
||||
@ -159,7 +164,11 @@
|
||||
getSex,
|
||||
getBirthday
|
||||
} from '@/api/conversion.js'
|
||||
import protocol from '@/components/protocol/index.vue'
|
||||
export default {
|
||||
components: {
|
||||
protocol
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
showGroup: 1,
|
||||
@ -200,12 +209,19 @@
|
||||
crowdNoList: null,
|
||||
packageList: [],
|
||||
packageNoList: null,
|
||||
signYears: null,
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
// 'query.signYears': {
|
||||
// handler(newVal, oldVal) {},
|
||||
// }
|
||||
},
|
||||
methods: {
|
||||
updata() {
|
||||
if (this.radio == 2) {
|
||||
if (!this.query.signYears) this.query.signYears = 1
|
||||
let date = new Date();
|
||||
let year = date.getFullYear();
|
||||
let month = date.getMonth() + 1;
|
||||
@ -450,4 +466,4 @@
|
||||
</script>
|
||||
<style lang="scss">
|
||||
@import "./Onlinesigning.scss";
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@ -1,7 +1,3 @@
|
||||
page {
|
||||
background-color: #F4F5F7;
|
||||
}
|
||||
|
||||
.app {
|
||||
width: 100%;
|
||||
|
||||
|
||||
@ -28,10 +28,14 @@
|
||||
import {
|
||||
getDoctorList
|
||||
} from '@/api/pagesC/choosedoctor/index.js'
|
||||
import {
|
||||
getDoctorListtwo
|
||||
} from '@/api/pagesB/myfamilydoctorteam/index.js'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
orgNo: null,
|
||||
teamNo: null,
|
||||
doctorlist: [],
|
||||
doctortotal: 0,
|
||||
pageNum: 1,
|
||||
@ -39,10 +43,17 @@
|
||||
},
|
||||
methods: {
|
||||
getDoctorListinfo() {
|
||||
getDoctorList(this.pageNum, this.orgNo, '1').then(res => {
|
||||
this.doctorlist = res.rows
|
||||
this.doctortotal = res.total
|
||||
})
|
||||
if (this.orgNo) {
|
||||
getDoctorList(this.pageNum, this.orgNo, '1').then(res => {
|
||||
this.doctorlist = res.rows
|
||||
this.doctortotal = res.total
|
||||
})
|
||||
} else {
|
||||
getDoctorListtwo(this.pageNum, 10, this.teamNo, '1').then(res => {
|
||||
this.doctorlist = res.rows
|
||||
this.doctortotal = res.total
|
||||
})
|
||||
}
|
||||
},
|
||||
emitdata(item) {
|
||||
uni.$emit('doctordata', {
|
||||
@ -54,18 +65,32 @@
|
||||
},
|
||||
},
|
||||
onLoad(options) {
|
||||
this.orgNo = options.orgNo
|
||||
if (options.orgNo) {
|
||||
this.orgNo = options.orgNo
|
||||
} else {
|
||||
// this.teamNo = uni.getStorageSync('userinfo').teamNo
|
||||
this.teamNo = "00bf7f5a02f3460aa975721ff9f5e533"
|
||||
}
|
||||
this.getDoctorListinfo();
|
||||
},
|
||||
onReachBottom() { //上滑加载
|
||||
if (this.doctorlist.length >= this.doctortotal) {} else {
|
||||
this.pageNum++;
|
||||
getDoctorList(this.pageNum, this.orgNo, '1').then(res => {
|
||||
res.rows.forEach(e => {
|
||||
this.doctorlist.push(e)
|
||||
if (this.orgNo) {
|
||||
getDoctorList(this.pageNum, this.orgNo, '1').then(res => {
|
||||
res.rows.forEach(e => {
|
||||
this.doctorlist.push(e)
|
||||
})
|
||||
this.doctortotal = res.total
|
||||
})
|
||||
this.doctortotal = res.total
|
||||
})
|
||||
} else {
|
||||
getDoctorListtwo(this.pageNum, 10, this.teamNo, '1').then(res => {
|
||||
res.rows.forEach(e => {
|
||||
this.doctorlist.push(e)
|
||||
})
|
||||
this.doctortotal = res.total
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
onPullDownRefresh() { //下拉刷新
|
||||
|
||||
263
pagesC/contractsigningprotocol/contractsigningprotocol.vue
Normal file
263
pagesC/contractsigningprotocol/contractsigningprotocol.vue
Normal file
@ -0,0 +1,263 @@
|
||||
<template>
|
||||
<view class="app">
|
||||
<view class="agreement-title-box">
|
||||
家庭医生签约服务协议书
|
||||
</view>
|
||||
<view class="agreement-content-container">
|
||||
<view class="agreement-content_parta-box">
|
||||
<h4>甲方:</h4>
|
||||
<h4 class="box-line">{{list.signInfo.agencyOrgName}}</h4>
|
||||
</view>
|
||||
<view class="agreement-content_parta-box">
|
||||
<h4>乙方:</h4>
|
||||
<h4 class="box-line">{{list.signInfo.residentName?list.signInfo.residentName:''}}</h4>
|
||||
</view>
|
||||
<uni-table border stripe emptyText="暂无更多数据">
|
||||
<uni-tr>
|
||||
<uni-th>姓名</uni-th>
|
||||
<uni-th>性别</uni-th>
|
||||
<uni-th>年龄</uni-th>
|
||||
<uni-th>身份证号</uni-th>
|
||||
<uni-th>现住址</uni-th>
|
||||
<uni-th>手机号码</uni-th>
|
||||
<uni-th>选择签约基础服务包 </uni-th>
|
||||
<uni-th>选择签约个性服务包</uni-th>
|
||||
</uni-tr>
|
||||
<uni-tr>
|
||||
<uni-td>{{list.signInfo.residentName?list.signInfo.residentName:''}}</uni-td>
|
||||
<uni-td>{{list.signInfo.gender === '1' ? '男' : '女'}}</uni-td>
|
||||
<uni-td>{{list.signInfo.age?list.signInfo.age:''}}</uni-td>
|
||||
<uni-td>{{list.signInfo.identity?list.signInfo.identity:''}}</uni-td>
|
||||
<uni-td>{{list.signInfo.address?list.signInfo.address:''}}</uni-td>
|
||||
<uni-td>{{list.signInfo.phone?list.signInfo.phone:''}}</uni-td>
|
||||
<uni-td>{{list.basePackagesName?list.basePackagesName:''}} </uni-td>
|
||||
<uni-td>{{list.specialPackagesName?list.specialPackagesName:""}}</uni-td>
|
||||
</uni-tr>
|
||||
</uni-table>
|
||||
<view>
|
||||
<p style='padding-top: 30rpx;line-height: 46rpx;'>甲乙双方本着平等、尊重和自愿的原则,签订此协议,接受以下条款的约定</p>
|
||||
<p style='padding: 30rpx 0;line-height: 46rpx;'>甲乙双方共同确定
|
||||
<text class="box-line">{{list.signInfo.teamName}}</text>为乙方的家庭医生服务团队
|
||||
</p>
|
||||
<uni-table border stripe emptyText="暂无更多数据">
|
||||
<uni-tr>
|
||||
<uni-th>专病管理服务团队成员</uni-th>
|
||||
<uni-th>姓名</uni-th>
|
||||
<uni-th>职称</uni-th>
|
||||
<uni-th>固定电话</uni-th>
|
||||
<uni-th>联系电话</uni-th>
|
||||
</uni-tr>
|
||||
<uni-tr v-for="(member, index) in list.signInfo.dutyDoctorList" :index="index" :key="index">
|
||||
<uni-td v-if="member.teamLeader">
|
||||
团队长
|
||||
</uni-td>
|
||||
<uni-td v-else>
|
||||
{{member.teamMemberType=='0'?'全科医生':''}}
|
||||
{{member.teamMemberType=='1'?'专科医生':''}}
|
||||
{{member.teamMemberType=='2'?'社区护士':''}}
|
||||
{{member.teamMemberType=='3'?'公共卫生人员':''}}
|
||||
</uni-td>
|
||||
<uni-td>{{member.realname?member.realname:''}}</uni-td>
|
||||
<uni-td>
|
||||
{{member.profTitle=='0'?'初级':''}}
|
||||
{{member.profTitle=='1'?'中级':''}}
|
||||
{{member.profTitle=='2'?'高级':''}}
|
||||
{{member.profTitle=='99'?'其他':''}}
|
||||
</uni-td>
|
||||
<uni-td>{{member.landline?member.landline:''}}</uni-td>
|
||||
<uni-td>{{member.mobilePhone?member.mobilePhone:''}}</uni-td>
|
||||
</uni-tr>
|
||||
</uni-table>
|
||||
<u-parse style="margin-top: 30rpx;" :html="list.protocolContent.content"></u-parse>
|
||||
<h4 style='padding-top: 30rpx;font-weight: 600;'>三、服务收费</h4>
|
||||
<p style='padding-top: 30rpx;line-height: 46rpx;'>1. 根据自愿选择的原则,乙方选择<text
|
||||
class="box-line">{{list.basePackagesName?list.basePackagesName:''}}{{list.specialPackagesName?','+list.specialPackagesName:''}}</text>由甲方提供相应服务,服务费为<text
|
||||
class="box-line">{{list.packSignCost}}</text>元/年</p>
|
||||
<p style='padding-top: 30rpx;line-height: 46rpx;'>2.服务过程中,根据医生判断及患者临时需求增加的服务内容,按照国家相关规定和当地物价部门规定收费。
|
||||
</p>
|
||||
<p style='padding-top: 30rpx;line-height: 46rpx;'>3.乙方应于<text
|
||||
class="box-line">{{list.signInfo.signTime}}</text>
|
||||
前将签约服务费缴纳至甲方机构指定科室,不得由签约团队成员代收。
|
||||
</p>
|
||||
<h4 style='padding-top: 30rpx;font-weight: 600;'>四、其他约定服务:<text class="box-line">{{' '}}</text></h4>
|
||||
<h4 style='padding-top: 30rpx;font-weight: 600;'>
|
||||
五、保密条款:签约居民授权其所签约的家庭医生及其团队成员可调阅其电子健康档案和在其他医疗机构的诊疗记录信息。甲方有义务对签约居民的电子健康档案和在其他医疗机构的诊
|
||||
疗记录信息予以保密。除法律法规规定外,未经签约居民允许,不得泄露给第三方。
|
||||
</h4>
|
||||
<h4 style='padding-top:30rpx;font-weight: 600;'>六、本协议未尽事宜,经双方协商一致,签订补充协议,补充协议具有同等效力。</h4>
|
||||
<h4 style='padding-top: 30rpx;font-weight: 600;'>
|
||||
七、本协议解释权归甲方。协议一式两份,甲、乙双方各执一份,自双方签字之日起生效,
|
||||
<text
|
||||
class="box-line">{{list.signInfo.signTime}}{{' —— '}}{{list.signInfo.signDeadline}}</text>有效期<text
|
||||
class="box-line">{{list.signYears}}</text>年
|
||||
</h4>
|
||||
</view>
|
||||
</view>
|
||||
<view class="agreement-execute_container-img">
|
||||
<view class="parta-execute_box">
|
||||
<view class="textparta">甲方(团队长)签字</br><text style="padding-left: 15rpx;">或(单位盖章)</text></view>
|
||||
<image :src="list.doctorBase64" mode="aspectFill" style="width: 280rpx; height: 200rpx;"></image>
|
||||
</view>
|
||||
<view class="parta-execute_box">
|
||||
<view class="textparta">乙方(居民)签字</br><text style="padding-left: 8rpx;">或拍照</text></view>
|
||||
<image :src="list.residentBase64" mode="widthFix" style="width: 180rpx; height: 180rpx;"></image>
|
||||
</view>
|
||||
<view class="parta-execute_box">
|
||||
<view class="textparta">机构公章</view>
|
||||
<image :src="list.orgBase64" mode="widthFix" style="width: 180rpx; height: 180rpx;"></image>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <u-mask :show="signatureshow" @click="signatureshow = false">
|
||||
<view style="position:absolute;bottom:0;height:900rpx;width:100%;background-color: #fff;"
|
||||
v-if='signatureshow'>
|
||||
<signature @userSignaturePictureUrl='userSignaturePicture' @click.native.stop
|
||||
style='background-color: #F4F5F7;width: 100%;height: 900rpx;'></signature>
|
||||
</view>
|
||||
</u-mask> -->
|
||||
<!-- <uni-fab ref="fab" horizontal="left" vertical="bottom" :content="fabContent" @trigger="fabTrigger" /> -->
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import baseurl from '@/api/baseurl.js'
|
||||
import signature from '@/components/signature/signature.vue'
|
||||
import {
|
||||
getSignProtocol
|
||||
} from '@/api/pagesC/contractsigningprotocol/index.js'
|
||||
export default {
|
||||
components: {
|
||||
signature
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
signatureshow: false,
|
||||
list: null,
|
||||
fabContent: [{
|
||||
iconPath: '/static/pageC/signature-unselected.png',
|
||||
selectedIconPath: '/static/pageC/signature-selected.png',
|
||||
text: '居民签字',
|
||||
active: true
|
||||
}, {
|
||||
iconPath: '/static/pageC/camera-unselected.png',
|
||||
selectedIconPath: '/static/pageC/camera.png',
|
||||
text: '居民拍照',
|
||||
active: true
|
||||
}],
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
fabTrigger(e) {
|
||||
if (e.index === 0) {
|
||||
this.signatureshow = true
|
||||
} else if (e.index === 1) {
|
||||
this.openCamera()
|
||||
}
|
||||
},
|
||||
openCamera() {
|
||||
let that = this
|
||||
setTimeout(function() {
|
||||
uni.chooseImage({
|
||||
sizeType: ['compressed'],
|
||||
sourceType: ['camera'],
|
||||
success: function(res) {
|
||||
let tempFilePath = res.tempFilePaths[0]
|
||||
uni.saveImageToPhotosAlbum({
|
||||
filePath: tempFilePath,
|
||||
success: (resp) => {
|
||||
uni.uploadFile({
|
||||
url: baseurl +
|
||||
'/applet/sign/apply/residentSignatureUpload',
|
||||
filePath: tempFilePath,
|
||||
name: 'file',
|
||||
header: {
|
||||
region: '1'
|
||||
},
|
||||
timeout: 10000,
|
||||
success(respp) {
|
||||
// residentAutographPath
|
||||
console.log(respp)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
150)
|
||||
},
|
||||
// //签名
|
||||
userSignaturePicture(data) {
|
||||
this.signatureshow = false
|
||||
},
|
||||
info() {
|
||||
getSignProtocol(this.cardNo, '1').then(res => {
|
||||
this.list = res.data
|
||||
})
|
||||
},
|
||||
},
|
||||
onLoad(options) {
|
||||
this.cardNo = options.cardNo
|
||||
this.cardNo = '372424194703207523'
|
||||
this.info();
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.app {
|
||||
width: 98%;
|
||||
margin: 10rpx auto;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.agreement-title-box {
|
||||
padding-top: 20rpx;
|
||||
margin: 0 0 30rpx;
|
||||
font-size: 40rpx;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.agreement-content-container {
|
||||
margin: 10rpx 10rpx;
|
||||
font-size: 16px;
|
||||
color: #333333;
|
||||
padding-bottom: 100rpx;
|
||||
}
|
||||
|
||||
.agreement-content_parta-box {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.box-line {
|
||||
display: inline-block;
|
||||
padding: 0 20rpx;
|
||||
text-align: center;
|
||||
border-bottom: 1px #808080 solid;
|
||||
}
|
||||
|
||||
.agreement-execute_container-img {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
padding-bottom: 200rpx;
|
||||
|
||||
.parta-execute_box {
|
||||
width: 50%;
|
||||
|
||||
.textparta {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
image {
|
||||
display: block;
|
||||
margin: 30rpx auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -103,7 +103,22 @@
|
||||
that.query.lng = resp.longitude
|
||||
that.getNearbyOrginfo()
|
||||
},
|
||||
fail: function(err) {},
|
||||
fail: function(err) {
|
||||
// uni.openSetting({
|
||||
// success(res) {
|
||||
// if (res.authSetting['scope.userLocation']) {
|
||||
// uni.getLocation({
|
||||
// type: 'wgs84',
|
||||
// success: function(resp) {
|
||||
// that.query.lat = resp.latitude
|
||||
// that.query.lng = resp.longitude
|
||||
// that.getNearbyOrginfo()
|
||||
// },
|
||||
// });
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
},
|
||||
});
|
||||
},
|
||||
onReachBottom() { //上滑加载
|
||||
@ -127,10 +142,6 @@
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
page {
|
||||
background-color: #F4F5F7;
|
||||
}
|
||||
|
||||
.app {
|
||||
width: 94%;
|
||||
margin: 20rpx auto;
|
||||
@ -277,4 +288,4 @@
|
||||
::v-deep .u-cell-box {}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
BIN
static/pageC/camera-unselected.png
Normal file
BIN
static/pageC/camera-unselected.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.2 KiB |
BIN
static/pageC/camera.png
Normal file
BIN
static/pageC/camera.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.3 KiB |
BIN
static/pageC/signature-selected.png
Normal file
BIN
static/pageC/signature-selected.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.3 KiB |
BIN
static/pageC/signature-unselected.png
Normal file
BIN
static/pageC/signature-unselected.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
Loading…
Reference in New Issue
Block a user