You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

455 lines
14 KiB

<template>
3 years ago
<div class="establish" style="padding-top: 42px">
<Demonstration />
<div bordered class="list-box bg-white" v-for="(item, index) in list" :key="index">
<div
class="list-item"
3 years ago
:style="{ 'border-bottom': listIndex === item.length - 1 ? '' : '1px solid #eee;' }"
v-for="(listItem, listIndex) in item"
:key="listIndex"
>
<div class="w-full flex flex-nowrap justify-between items-center">
<view v-if="listItem.title">
<div class="flex items-center" v-if="listItem.type !== -1">
<view class="putong-title">{{ listItem.title }}</view>
<span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span>
</div>
<div class="flex items-center" v-else>
<view class="shu"></view>
<view class="shu-title">{{ listItem.title }}</view>
</div>
</view>
<div class="flex-1 flex justify-end">
<!-- <u-switch v-if="listItem.type === 1" v-model="codeValue['CJBL-YLMS']" /> -->
<u-upload
v-if="listItem.type === 2"
name="part"
accept="image/*"
:action="action"
:show-upload-list="false"
:custom-btn="true"
@on-success="successUpload"
>
<img slot="addBtn" src="@/common/icon/idcard.png" class="img-icon" />
</u-upload>
<div v-else-if="listItem.type === 3" style="width: 174px">
<u-input
input-align="right"
:value="codeValue[listItem.code]"
placeholder="请输入"
@blur="chanegIpt($event, listItem.code)"
style="text-align: right"
/>
<div class="text-red-400 font-12" style="text-align: right" v-if="!isFit && listItem.code === 'CJBL-idCard'">
身份证号输入有误!
</div>
</div>
<u-radio-group class="w-full" :value="codeValue[listItem.code]" v-else-if="listItem.type === 4" name="radioGroup">
<div
class="w-full flex justify-between items-center"
style="height: 78rpx"
@click="clickRadio(listItem.code, radioItem.name)"
v-for="radioItem in listItem.listItem"
:key="radioItem.id"
>
<view class="flex-1 putong-title">
{{ radioItem.name }}
</view>
<u-radio
@change="changeRadio($event, listItem.code)"
:disabled="isDisabled(listItem.code, radioItem.name)"
:key="radioItem.id"
:name="radioItem.id"
>
</u-radio>
</div>
</u-radio-group>
<u-radio-group
:disabled="sexIsDisabled('CJBL-idCard')"
:value="codeValue[listItem.code]"
v-else-if="listItem.type === 41"
name="radioGroup"
>
<u-radio
@change="changeRadio($event, listItem.code)"
v-for="(radioItem, radioIndex) in listItem.listItem"
:key="radioItem.id"
:name="radioItem.id"
>
<view class="ml-2" :class="radioIndex === listItem.listItem.length - 1 ? '' : 'mr-2'">{{ radioItem.name }}</view>
</u-radio>
</u-radio-group>
</div>
</div>
</div>
</div>
<u-toast ref="uToast" />
</div>
</template>
<script>
import { mapState, mapGetters, mapMutations } from 'vuex';
import Demonstration from 'components/Demonstration/Demonstration';
export default {
components: { Demonstration },
data: () => ({
action: '',
codeValue: {
'CJBL-YLMS': false,
'CJBL-NAME': null,
'CJBL-SEX': null,
'CJBL-nation': null,
'CJBL-idCard': null,
'CJBL-YSBL': 'AS急性脑卒中',
},
list: [
// [{ title: '演练模式', type: 1, isTrue: false }],
[
{
title: '信息填写',
type: -1,
isTrue: false,
},
{ title: '扫描身份证', type: 2, isTrue: false },
{ title: '姓名', type: 3, code: 'CJBL-NAME', isTrue: true },
{
title: '性别',
type: 41,
code: 'CJBL-SEX',
isTrue: true,
listItem: [
{ name: '女', id: 0 },
{ name: '男', id: 1 },
],
},
{ title: '民族', type: 3, code: 'CJBL-nation', isTrue: false },
{ title: '身份证号', type: 3, code: 'CJBL-idCard', isTrue: false },
{
title: '疑似诊断',
code: 'CJBL-YSBL',
type: -1,
isTrue: false,
},
{
title: '',
code: 'CJBL-YSBL',
type: 4,
isTrue: false,
listItem: [
{ name: 'AS急性脑卒中', id: 'AS急性脑卒中' },
{ name: 'AMI急性心肌梗死', id: 'AMI急性心肌梗死' },
{ name: 'ATI急性创伤', id: 'ATI急性创伤' },
{ name: 'AGB急性消化道出血', id: 'AGB急性消化道出血' },
],
},
],
],
dropList: [],
bodyStyle: { textAlign: 'center', height: '240px', padding: '24px 24px 0 24px', position: 'relative', overFlow: 'hidden' },
visible: false,
isActive: true,
active: 0,
role: '',
isFit: true, // 身份证号是否符合验证规则
isWatch: false,
}),
computed: {
...mapGetters('project', ['projectId']),
...mapState('carbasics', ['globalData', 'firstAidId', 'detailValueType']),
},
onLoad(options) {
this.role = options.role;
this.action = uni.$u.api.identifyWords;
this.getData();
},
methods: {
...mapMutations('carbasics', ['setRefreshList']),
// 获取病例信息
async getData() {
try {
const param = { firstAidId: this.firstAidId };
const data = await this.$u.api.getPatient(param);
console.log('data: ', data);
if (data && data.firstAidId) {
this.codeValue = {
'CJBL-NAME': data.name,
'CJBL-SEX': data.gender,
'CJBL-nation': data.nation,
'CJBL-idCard': data.idcard,
'CJBL-YSBL': data.suspected || 'AS急性脑卒中',
};
setTimeout(() => {
this.isWatch = true;
}, 100);
}
} catch (error) {
console.log('error: ', error);
}
},
// 上传图片成功时
successUpload(res) {
const { code, data } = res;
let obj = { ...this.codeValue };
if (code === 200) {
obj['CJBL-NAME'] = data.name;
obj['CJBL-SEX'] = data.sex;
obj['CJBL-idCard'] = data.idCardNo;
obj['CJBL-nation'] = data.nation;
this.codeValue = { ...obj };
const param = {
firstAidId: this.firstAidId,
gender: data.sex,
idcard: data.idCardNo,
name: data.name,
nation: data.nation,
};
this.updateData(param);
}
},
// 判断当前选项是否可点
isDisabled(code, name) {
if (code === 'CJBL-YSBL' && name !== 'AS急性脑卒中') {
return true;
} else {
return false;
}
},
sexIsDisabled(code) {
if (this.codeValue[code] && this.codeValue[code].length > 0) {
return true;
}
},
// 点击了疑似病例的其他选项
clickRadio(code, name) {
if (code === 'CJBL-YSBL' && name !== 'AS急性脑卒中') {
// this.$message.warning('请联系系统代理商开通该功能');
this.$refs.uToast.show({
title: '请联系系统代理商开通该功能',
type: 'warning',
});
}
},
// 单选改变事件
changeRadio(e, questionCode) {
this.codeValue[questionCode] = e;
let param = { firstAidId: this.firstAidId };
if (questionCode === 'CJBL-SEX') {
param.gender = e;
} else if (questionCode === 'CJBL-YSBL') {
param.suspected = e;
}
this.updateData(param);
},
// 输入框失去焦点
iptBlur(e, code) {
if (code === 'CJBL-idCard') {
if (this.codeValue['CJBL-idCard']) {
this.isFit = this.isIdentityId(this.codeValue['CJBL-idCard']);
const idcard = this.codeValue['CJBL-idCard'];
if (this.codeValue['CJBL-idCard'].length === 15) {
this.codeValue['CJBL-SEX'] = (idcard[idcard.length - 1] - 0) % 2;
} else if (this.codeValue['CJBL-idCard'].length === 18) {
this.codeValue['CJBL-SEX'] = (idcard[idcard.length - 2] - 0) % 2;
}
} else {
this.isFit = true;
}
}
this.chanegIpt(e, code);
},
// 输入框改变事件
chanegIpt(e, questionCode) {
this.codeValue[questionCode] = e;
const param = { firstAidId: this.firstAidId };
if (questionCode === 'CJBL-NAME') {
param.name = e;
} else if (questionCode === 'CJBL-nation') {
param.nation = e;
} else if (questionCode === 'CJBL-idCard') {
param.idcard = e;
}
if (questionCode !== 'CJBL-idCard' || (questionCode === 'CJBL-idCard' && e.length === 18)) {
3 years ago
this.updateData(param, 1);
}
},
// 验证身份证
isIdentityId(identityId) {
var patrn = /(^\d{15}$)|(^\d{17}(\d|X|x)$)/; //长度或格式校验
//地区校验
var aCity = {
11: '北京',
12: '天津',
13: '河北',
14: '山西',
15: '内蒙古',
21: '辽宁',
22: '吉林',
23: '黑龙江',
31: '上海',
32: '江苏',
33: '浙江',
34: '安徽',
35: '福建',
36: '江西',
37: '山东',
41: '河南',
42: '湖北',
43: '湖南',
44: '广东',
45: '广西',
46: '海南',
50: '重庆',
51: '四川',
52: '贵州',
53: '云南',
54: '西藏',
61: '陕西',
62: '甘肃',
63: '青海',
64: '宁夏',
65: '新疆',
71: '台湾',
81: '香港',
82: '澳门',
91: '国外',
};
// 出生日期验证
var sBirthday = (identityId.substr(6, 4) + '-' + Number(identityId.substr(10, 2)) + '-' + Number(identityId.substr(12, 2))).replace(
/-/g,
'/',
),
d = new Date(sBirthday);
// 身份证号码校验 最后4位 包括最后一位的数字/字母X
var sum = 0,
weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2],
codes = '10X98765432',
codes1 = '10x98765432';
for (var i = 0; i < identityId.length - 1; i++) {
sum += identityId[i] * weights[i];
}
var last = codes[sum % 11]; //计算出来的最后一位身份证号码
var last1 = codes1[sum % 11]; //计算出来的最后一位身份证号码
var errorMsg = true;
if (identityId === '') {
errorMsg = false;
} else if (!patrn.exec(identityId)) {
errorMsg = false;
} else if (!aCity[parseInt(identityId.substr(0, 2))]) {
errorMsg = false;
} else if (sBirthday != d.getFullYear() + '/' + (d.getMonth() + 1) + '/' + d.getDate()) {
errorMsg = false;
} else if (identityId[identityId.length - 1] != last && identityId[identityId.length - 1] != last1) {
errorMsg = false;
}
return errorMsg;
},
// 修改患者信息
3 years ago
async updateData(param, type) {
try {
await this.$u.api.updatePatient(param);
3 years ago
if (!type) {
this.$refs.uToast.show({
title: '修改成功',
type: 'ssuccess',
});
}
} catch (error) {
this.$refs.uToast.show({
title: '修改失败',
type: 'warning',
});
}
},
},
watch: {
codeValue: {
handler(val) {
console.log('val: ', val);
if (!this.isWatch) return;
this.iptBlur(val['CJBL-idCard'], 'CJBL-idCard');
},
deep: true,
},
},
// 页面周期函数--监听页面初次渲染完成
onReady() {},
// 页面周期函数--监听页面显示(not-nvue)
onShow() {},
// 页面周期函数--监听页面隐藏
onHide() {},
// 页面周期函数--监听页面卸载
onUnload() {},
// 页面处理函数--监听用户下拉动作
onPullDownRefresh() {
uni.stopPullDownRefresh();
},
// 页面处理函数--监听用户上拉触底
onReachBottom() {},
// 页面处理函数--监听页面滚动(not-nvue)
/* onPageScroll(event) {}, */
// 页面处理函数--用户点击右上角分享
/* onShareAppMessage(options) {}, */
};
</script>
<style scoped>
/deep/.u-radio__label {
margin-left: 0 !important;
margin-right: 0 !important;
}
.putong-title {
margin-left: 24rpx;
font-size: 32rpx;
font-family: OPPOSans-Bold, OPPOSans;
font-weight: bold;
color: #3e3d4d;
}
.shu {
width: 16rpx;
height: 40rpx;
background: linear-gradient(136deg, #7bc0ff 0%, #4d88ff 100%);
border-radius: 40rpx;
opacity: 1;
margin-right: 8rpx;
}
.shu-title {
font-size: 36rpx;
font-family: Open Sans-Bold, Open Sans;
font-weight: bold;
color: #3e3d4d;
}
.img-icon {
height: 24px;
width: 24px;
color: #717171;
}
.btn-box {
padding: 16px;
}
.list-box {
border-radius: 4px;
overflow: hidden;
box-sizing: border-box;
margin: 0 0 0.75rem 0;
padding: 0 32rpx;
color: rgba(0, 0, 0, 0.65);
font-size: 14px;
font-variant: tabular-nums;
line-height: 1.5;
list-style: none;
font-feature-settings: 'tnum';
position: relative;
}
.list-item {
3 years ago
min-height: 60px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 24rpx 0;
}
</style>