This commit is contained in:
左哥 2025-06-25 23:21:22 +08:00
parent e3dde62565
commit 1e9367e2a7
7 changed files with 470 additions and 197 deletions

View File

@ -28,6 +28,10 @@ page {
button{
margin: 0;
}
.t-image-viewer {
top: 0;
}
}
.page {

View File

@ -1,8 +1,8 @@
@font-face {
font-family: "iconfont"; /* Project id 4945922 */
src: url('//at.alicdn.com/t/c/font_4945922_h7s60vu3p4o.woff2?t=1749983302860') format('woff2'),
url('//at.alicdn.com/t/c/font_4945922_h7s60vu3p4o.woff?t=1749983302860') format('woff'),
url('//at.alicdn.com/t/c/font_4945922_h7s60vu3p4o.ttf?t=1749983302860') format('truetype');
src: url('//at.alicdn.com/t/c/font_4945922_6mzvl34xg5m.woff2?t=1750861347404') format('woff2'),
url('//at.alicdn.com/t/c/font_4945922_6mzvl34xg5m.woff?t=1750861347404') format('woff'),
url('//at.alicdn.com/t/c/font_4945922_6mzvl34xg5m.ttf?t=1750861347404') format('truetype');
}
.iconfont {
@ -13,6 +13,54 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-x:before {
content: "\e602";
}
.icon-yanjing_yincang:before {
content: "\e6cc";
}
.icon-yanjing-xianshi:before {
content: "\e668";
}
.icon-gouxuan:before {
content: "\e608";
}
.icon-yisheng1:before {
content: "\e60d";
}
.icon-yisheng3:before {
content: "\e603";
}
.icon-mima:before {
content: "\e630";
}
.icon-mima1:before {
content: "\e7d1";
}
.icon-fanhui:before {
content: "\e601";
}
.icon-sousuo:before {
content: "\e733";
}
.icon-riqi:before {
content: "\e675";
}
.icon-nanbaobao:before {
content: "\e60a";
}
.icon-jiahao2:before {
content: "\e660";
}

View File

@ -10,15 +10,15 @@ Page({
style: 'border: 2rpx solid #efefef;border-radius: 12rpx;',
form: {
liver_function_image:[],
b_mode_image: [],
blood_routine_image: [],
coagulation_function_image: [],
liver_function_image: [],
mdt_image: [],
nutritional_indicator_image: []
},
key: 'filename.txt', //待上传的文件名称您也可以指定其存储在某个目录下。例如将filename.txt文件上传到youfolder文件夹下此时需填写/youfolder/filename.txt。
policy: '',
xOssSecurityToken: '',
xOssSignatureVersion: '',
xOssCredential: '',
xOssDate: '',
xOssSignature: '',
@ -113,7 +113,9 @@ Page({
config: {
count: 1,
},
imageVisible: false,
imageList: [],
imageIndex: 1,
},
onInput(e) {
@ -157,9 +159,16 @@ Page({
console.log(e.detail.file);
},
toQuestionnaire() {
request('patient/follow_questionnaire', 'post', {
})
const data = this.data.form
data.liver_function_image = data.liver_function_image.length > 0 ? data.liver_function_image.join(',') : ''
data.b_mode_image = data.b_mode_image.length > 0 ? data.b_mode_image.join(',') : '',
data.blood_routine_image = data.blood_routine_image.length > 0 ? data.blood_routine_image.join(',') : '',
data.coagulation_function_image = data.coagulation_function_image.length > 0 ? data.coagulation_function_image.join(',') : '',
data.liver_function_image = data.liver_function_image.length > 0 ? data.liver_function_image.join(',') : '',
data.mdt_image = data.mdt_image.length > 0 ? data.mdt_image.join(',') : '',
data.nutritional_indicator_image = data.nutritional_indicator_image.length > 0 ? data.nutritional_indicator_image.join(',') : ''
console.log(data)
request('patient/follow_questionnaire', 'post', data)
},
handleChangeGroup(e) {
console.log(e)
@ -169,24 +178,15 @@ Page({
})
},
//上传文件方法
async uploadFileToOSS(filePath, callback) {
const {
key,
policy,
xOssSecurityToken,
xOssSignatureVersion,
xOssCredential,
xOssDate,
xOssSignature
} = this.data;
async uploadFileToOSS(file, callback) {
const policyData = await request('admin/policy_token', 'post')
const res = JSON.parse(policyData.token)
console.log(res)
const formData = {
key, //上传文件名称
key: file.name, //上传文件名称
policy: res.policy, //表单域
'x-oss-signature-version': res.x_oss_signature_version, //指定签名的版本和算法
'x-oss-credential': res.x_oss_credential, //指明派生密钥的参数集
@ -195,17 +195,19 @@ Page({
'x-oss-security-token': res.security_token, //安全令牌
success_action_status: "200" //上传成功后响应状态码
};
// console.log(filePath)
// return
// 发送请求上传文件
wx.uploadFile({
url: 'https://image-fudan.oss-cn-beijing.aliyuncs.com/', // 此域名仅作示例实际Bucket域名请替换为您的目标Bucket域名。
filePath: filePath,
url: 'https://image-fudan.oss-cn-beijing.aliyuncs.com/',
method: 'put',
filePath: file.path,
name: 'file', //固定值为file
formData: formData,
success(res) {
console.log('上传响应:', res);
if (res.statusCode === 200) {
callback(null, res.data); // 上传成功
callback(null, 'https://image-fudan.oss-cn-beijing.aliyuncs.com/'+ file.name); // 上传成功
} else {
console.error('上传失败,状态码:', res.statusCode);
console.error('失败响应:', res);
@ -218,72 +220,17 @@ Page({
callback(err); // 调用回调处理错误
}
});
return
const apiUrl = 'http://<ECS实例公网IP地址>:<port>/generate_signature' //请将IP地址和端口号替换为实际服务器公网IP地址及端口号
// 发送请求获取签名信息
wx.request({
url: apiUrl,
success: (res) => {
this.data.xOssSignatureVersion = res.x_oss_signature_version;
this.data.xOssCredential = res.x_oss_credential;
this.data.xOssDate = res.x_oss_date;
this.data.xOssSignature = res.signature;
this.data.xOssSecurityToken = res.security_token;
this.data.policy = res.policy;
//此示例上传参数只列举必填字段,如有其他需求可参考:
//PostObject文档https://help.aliyun.com/zh/oss/developer-reference/postobject
//签名版本4文档https://help.aliyun.com/zh/oss/developer-reference/signature-version-4-recommend
const formData = {
key, //上传文件名称
policy: this.data.policy, //表单域
'x-oss-signature-version': this.data.xOssSignatureVersion, //指定签名的版本和算法
'x-oss-credential': this.data.xOssCredential, //指明派生密钥的参数集
'x-oss-date': this.data.xOssDate, //请求的时间
'x-oss-signature': this.data.xOssSignature, //签名认证描述信息
'x-oss-security-token': this.data.xOssSecurityToken, //安全令牌
success_action_status: "200" //上传成功后响应状态码
};
// 发送请求上传文件
wx.uploadFile({
url: 'https://examplebucket.oss-cn-hangzhou.aliyuncs.com', // 此域名仅作示例实际Bucket域名请替换为您的目标Bucket域名。
filePath: filePath,
name: 'file', //固定值为file
formData: formData,
success(res) {
console.log('上传响应:', res);
if (res.statusCode === 200) {
callback(null, res.data); // 上传成功
} else {
console.error('上传失败,状态码:', res.statusCode);
console.error('失败响应:', res);
callback(res); // 上传失败,返回响应
}
},
fail(err) {
console.error('上传失败:', err); // 输出错误信息
wx.showToast({ title: '上传失败,请重试!', icon: 'none' });
callback(err); // 调用回调处理错误
}
});
},
fail: (err) => {
console.error('请求接口失败:', err);
wx.showToast({ title: '获取上传参数失败,请重试!', icon: 'none' });
}
});
},
handleUpload() {
handleUpload(e) {
wx.chooseMessageFile({
count: 1, // 选择一个文件
type: 'all', // 支持所有类型的文件
success: (res) => {
wx.showToast({ title: '文件上传中,请稍等!', icon: 'none' });
console.log('选择的文件:', res.tempFiles); // 输出选择的文件信息
if (res.tempFiles.length > 0) {
const tempFilePath = res.tempFiles[0].path; // 获取选择的文件路径
const tempFilePath = res.tempFiles[0];
console.log('选择的文件路径:', tempFilePath); // 输出文件路径
this.uploadFileToOSS(tempFilePath, (error, data) => {
if (error) {
@ -291,6 +238,13 @@ Page({
console.error('上传失败:', error); // 输出具体的错误信息
} else {
wx.showToast({ title: '上传成功!', icon: 'success' });
const { mode } = e.currentTarget.dataset;
let arr = this.data.form[mode]
arr.unshift(data)
this.setData({
[`form.${mode}`]: arr
})
console.log('上传成功:', data); // 输出上传成功后的数据
}
});
@ -305,6 +259,45 @@ Page({
});
},
imageKey:'',
handleImagePreview(e){
const { mode, index } = e.currentTarget.dataset;
this.imageKey = mode
console.log(this.data.form[mode])
this.setData({
imageList: this.data.form[mode],
imageIndex: index,
imageVisible: true
})
},
onClose(){
this.setData({
imageVisible: false
})
},
handleDelete(){
const { mode, index } = e.currentTarget.dataset;
let arr = this.data.form[mode]
arr.splice(index, 1)
this.setData({
[`form.${mode}`]: arr
})
},
onDelete(e){
console.log(e)
let arr = this.data.form[this.imageKey]
arr.splice(e.detail.index, 1)
// let imageList = this.data.imageList
// imageList.splice(this.data.imageIndex, 1)
let imageIndex = e.detail.index
this.setData({
// imageIndex: imageIndex - 1,
[`form.${this.imageKey}`]: arr,
imageList: arr,
imageVisible: arr.length != 0
})
},
/**
* 生命周期函数--监听页面加载
*/

View File

@ -8,7 +8,8 @@
"t-button": "tdesign-miniprogram/button/button",
"t-upload": "tdesign-miniprogram/upload/upload",
"t-radio": "tdesign-miniprogram/radio/radio",
"t-radio-group": "tdesign-miniprogram/radio-group/radio-group"
"t-radio-group": "tdesign-miniprogram/radio-group/radio-group",
"t-image-viewer": "tdesign-miniprogram/image-viewer/image-viewer"
},
"navigationStyle": "default",
"navigationBarTitleText": "填写随访问卷"

View File

@ -40,8 +40,8 @@
padding-right: 60rpx;
}
.improt-file{
width: 140rpx;
height: 140rpx;
width: 196rpx;
height: 196rpx;
background: rgba(0,91,162,0.05);
border-radius: 16rpx;
border: 2rpx dotted rgba(0,91,162,0.2);
@ -58,4 +58,48 @@
}
}
}
.report-image{
width: 196rpx;
height: 196rpx;
background: #F8F8F8;
border-radius: 16rpx;
border: 1rpx solid #EEEEEE;
position: relative;
overflow: hidden;
image{
width: 100%;
height: 100%;
}
.more{
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
border-radius: 16rpx;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
color: #fff;
font-size: 48rpx;
}
.delete-btn{
position: absolute;
right: 0;
top: 0;
width: 40rpx;
height: 40rpx;
background-color: rgba(0, 0, 0, 0.7);
color: #fff;
display: flex;
justify-content: center;
align-items: center;
border-radius: 0 16rpx 0 16rpx;
z-index: 2;
text{
font-size: 24rpx;
}
}
}
}

View File

@ -1,39 +1,35 @@
<!--pages/followUp/index.wxml-->
<!-- pages/followUp/index.wxml -->
<view class="follow-up">
<view class="follow-item">
<view>随访信息</view>
<view class="input-example">
<view class="input-example__label"> 随访名称</view>
<view class="input-example__label">随访名称</view>
<t-input placeholder="请输入" size="small" bind:tap="onInput" value="{{form.follow_name}}" data-key="follow_name" borderless="{{true}}" style="{{style}}" />
</view>
<view class="input-example">
<view class="input-example__label"> 随访日期</view>
<t-input placeholder="请输入" bindtap="showPicker" size="small" borderless="{{true}}" style="{{style}}" data-mode="birth" suffixIcon="{{ { name: 'calendar-1'} }}" note="'请选择'" value="{{form.follow_date}}" />
<view class="input-example__label">随访日期</view>
<t-input placeholder="请输入" bindtap="showPicker" size="small" borderless="{{true}}" style="{{style}}" data-mode="birth" suffixIcon="{{ { name: 'calendar-1'} }}" note="'请选择'" value="{{form.follow_date}}" />
</view>
<view class="input-example">
<view class="input-example__label"> 随访医院</view>
<view class="input-example__label">随访医院</view>
<t-input placeholder="请输入" size="small" bind:tap="onInput" value="{{form.follow_hospital}}" data-key="follow_hospital" borderless="{{true}}" style="{{style}}" />
</view>
</view>
<view class="follow-item">
<view>生长指数</view>
<t-row gutter="12">
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 身高cm </view>
<view class="input-example__label">身高cm</view>
<t-input placeholder="请输入" size="small" bind:tap="onInput" value="{{form.height}}" data-key="height" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 体重kg </view>
<view class="input-example__label">体重kg</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.weight}}" data-key="weight" borderless="{{true}}" style="{{style}}" />
</view>
</view>
@ -41,16 +37,15 @@
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 头围cm </view>
<view class="input-example__label">头围cm</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.head_circumference}}" data-key="head_circumference" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 上臀围cm </view>
<view class="input-example__label">上臀围cm</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.high_hip}}" data-key="high_hip" borderless="{{true}}" style="{{style}}" />
</view>
</view>
@ -59,28 +54,40 @@
</view>
<view class="follow-item">
<view>肝功能</view>
<view class="wrapper">
<view class="input-example">
<view class="input-example__label"> 上传肝功能检查报告支持OCR识别</view>
</view>
<view class="improt-file" bind:tap="handleUpload">
<view class="upload-flow">
<text class="iconfont icon-xiangji"></text>
<view>拍照导入</view>
</view>
<view class="input-example__label">上传肝功能检查报告支持OCR识别</view>
</view>
<t-row gutter="16">
<t-col span="8">
<view class="improt-file" data-mode="liver_function_image" bind:tap="handleUpload">
<view class="upload-flow">
<text class="iconfont icon-xiangji"></text>
<view>拍照导入</view>
</view>
</view>
</t-col>
<t-col span="8" wx:for="{{form.liver_function_image}}" wx:key="index" wx:if="{{index < 1 || (index == 1 && form.liver_function_image.length > 1)}}">
<view class="report-image" data-mode="liver_function_image" data-index="{{index}}" bind:tap="handleImagePreview">
<image class="image" src="{{item}}" mode=""></image>
<view class="more" wx:if="{{index == 1 && form.liver_function_image.length > 2 }}">
+ {{form.liver_function_image.length - 2}}
</view>
<view class="delete-btn" wx:if="{{index == 0 || form.liver_function_image.length == 2 }}" data-mode="liver_function_image" data-index="{{index}}" catchtap="handleDelete">
<text class="iconfont icon-x"></text>
</view>
</view>
</t-col>
</t-row>
<!-- <t-upload media-type="{{['image']}}" files="{{originFiles}}" gridConfig="{{gridConfig}}" removeBtn="{{false}}" bind:success="handleSuccess" bind:remove="handleRemove" bind:click="handleClick" bind:sort-end="handleSortEnd" /> -->
</view>
<t-row gutter="12">
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 总胆红素µmol/L) </view>
<view class="input-example__label">总胆红素µmol/L)</view>
<t-input placeholder="请输入" size="small" bind:tap="onInput" value="{{form.total_bilirubin}}" data-key="total_bilirubin" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
@ -94,16 +101,15 @@
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 总胆汁酸g/L </view>
<view class="input-example__label">总胆汁酸g/L</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.total_bile_acid}}" data-key="total_bile_acid" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 白蛋白g/L </view>
<view class="input-example__label">白蛋白g/L</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.albumin}}" data-key="albumin" borderless="{{true}}" style="{{style}}" />
</view>
</view>
@ -111,16 +117,15 @@
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 谷草U/L</view>
<view class="input-example__label">谷草U/L</view>
<t-input placeholder="请输入" size="small" bind:tap="onInput" value="{{form.grain_grass}}" data-key="grain_grass" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 谷丙U/L</view>
<view class="input-example__label">谷丙U/L</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.gu_bing}}" data-key="gu_bing" borderless="{{true}}" style="{{style}}" />
</view>
</view>
@ -128,16 +133,15 @@
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> GGTU/L</view>
<view class="input-example__label">GGTU/L</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.ggt}}" data-key="ggt" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> ALPU/L</view>
<view class="input-example__label">ALPU/L</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.alp}}" data-key="alp" borderless="{{true}}" style="{{style}}" />
</view>
</view>
@ -145,71 +149,157 @@
</t-row>
</view>
<view class="follow-item">
<view>
凝血功能</view>
<view>凝血功能</view>
<view class="wrapper">
<view class="input-example">
<view class="input-example__label"> 上传凝血功能检查报告支持OCR识别</view>
<view class="input-example__label">上传凝血功能检查报告支持OCR识别</view>
</view>
<t-upload media-type="{{['image']}}" files="{{originFiles}}" gridConfig="{{gridConfig}}" removeBtn="{{false}}" bind:success="handleSuccess" bind:remove="handleRemove" bind:click="handleClick" bind:sort-end="handleSortEnd" />
<t-row gutter="16">
<t-col span="8">
<view class="improt-file" data-mode="coagulation_function_image" bind:tap="handleUpload">
<view class="upload-flow">
<text class="iconfont icon-xiangji"></text>
<view>拍照导入</view>
</view>
</view>
</t-col>
<t-col span="8" wx:for="{{form.coagulation_function_image}}" wx:key="index" wx:if="{{index < 1 || (index == 1 && form.coagulation_function_image.length > 1)}}">
<view class="report-image" data-mode="coagulation_function_image" data-index="{{index}}" bind:tap="handleImagePreview">
<image class="image" src="{{item}}" mode=""></image>
<view class="more" wx:if="{{index == 1 && form.coagulation_function_image.length > 2 }}">
+ {{form.coagulation_function_image.length - 2}}
</view>
<view class="delete-btn" wx:if="{{index == 0 || form.coagulation_function_image.length == 2 }}" data-mode="coagulation_function_image" data-index="{{index}}" catchtap="handleDelete">
<text class="iconfont icon-x"></text>
</view>
</view>
</t-col>
</t-row>
</view>
<t-row gutter="12">
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 凝血酶原时间s</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.follow_date}}" data-key="follow_name" size="small" borderless="{{true}}" style="{{style}}" />
<view class="input-example__label">CRPmg/L</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.crp}}" data-key="crp" size="small" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 国际标准化比</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.follow_date}}" data-key="follow_name" borderless="{{true}}" style="{{style}}" />
<view class="input-example__label">DDR</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.ddr}}" data-key="ddr" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="13">
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 活化的部分凝血酶时间s</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.follow_date}}" data-key="follow_name" borderless="{{true}}" style="{{style}}" />
<view class="input-example__label">INR</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.inr}}" data-key="inr" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label">PTs</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.pt}}" data-key="pt" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label">PTA%</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.pta}}" data-key="pta" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label">APTTs</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.aptt}}" data-key="aptt" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label">TTs</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.tt}}" data-key="tt" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label">FIBg/L</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.fib}}" data-key="fib" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label">NPDPmg/L</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.npdp}}" data-key="npdp" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label">MMP-7ng/mL</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.mmp_7}}" data-key="mmp_7" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
</t-row>
</view>
<view class="follow-item">
<view>
血常规</view>
<view>血常规</view>
<view class="wrapper">
<view class="input-example">
<view class="input-example__label"> 上传血常规检查报告支持OCR识别</view>
<view class="input-example__label">上传血常规检查报告支持OCR识别</view>
</view>
<t-upload media-type="{{['image']}}" files="{{originFiles}}" gridConfig="{{gridConfig}}" removeBtn="{{false}}" bind:success="handleSuccess" bind:remove="handleRemove" bind:click="handleClick" bind:sort-end="handleSortEnd" />
<t-row gutter="16">
<t-col span="8">
<view class="improt-file" data-mode="blood_routine_image" bind:tap="handleUpload">
<view class="upload-flow">
<text class="iconfont icon-xiangji"></text>
<view>拍照导入</view>
</view>
</view>
</t-col>
<t-col span="8" wx:for="{{form.blood_routine_image}}" wx:key="index" wx:if="{{index < 1 || (index == 1 && form.blood_routine_image.length > 1)}}">
<view class="report-image" data-mode="blood_routine_image" data-index="{{index}}" bind:tap="handleImagePreview">
<image class="image" src="{{item}}" mode=""></image>
<view class="more" wx:if="{{index == 1 && form.blood_routine_image.length > 2 }}">
+ {{form.blood_routine_image.length - 2}}
</view>
<view class="delete-btn" wx:if="{{index == 0 || form.blood_routine_image.length == 2 }}" data-mode="blood_routine_image" data-index="{{index}}" catchtap="handleDelete">
<text class="iconfont icon-x"></text>
</view>
</view>
</t-col>
</t-row>
</view>
<t-row gutter="12">
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 血小板10^9/L </view>
<view class="input-example__label">血小板10^9/L</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.platelets}}" data-key="platelets" size="small" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 血红蛋白g/L</view>
<view class="input-example__label">血红蛋白g/L</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.hemoglobin}}" data-key="hemoglobin" borderless="{{true}}" style="{{style}}" />
</view>
</view>
@ -217,40 +307,70 @@
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 白细胞10^9/L</view>
<view class="input-example__label">白细胞10^9/L</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.white_blood_cells}}" data-key="white_blood_cells" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
</t-row>
</view>
<view class="follow-item">
<view>
营养指标</view>
<view>营养指标</view>
<view class="wrapper">
<view class="input-example">
<view class="input-example__label"> 上传营养指标检查报告支持OCR识别</view>
<view class="input-example__label">上传营养指标检查报告支持OCR识别</view>
</view>
<t-upload media-type="{{['image']}}" files="{{originFiles}}" gridConfig="{{gridConfig}}" removeBtn="{{false}}" bind:success="handleSuccess" bind:remove="handleRemove" bind:click="handleClick" bind:sort-end="handleSortEnd" />
<t-row gutter="16">
<t-col span="8">
<view class="improt-file" data-mode="nutritional_indicator_image" bind:tap="handleUpload">
<view class="upload-flow">
<text class="iconfont icon-xiangji"></text>
<view>拍照导入</view>
</view>
</view>
</t-col>
<t-col span="8" wx:for="{{form.nutritional_indicator_image}}" wx:key="index" wx:if="{{index < 1 || (index == 1 && form.nutritional_indicator_image.length > 1)}}">
<view class="report-image" data-mode="nutritional_indicator_image" data-index="{{index}}" bind:tap="handleImagePreview">
<image class="image" src="{{item}}" mode=""></image>
<view class="more" wx:if="{{index == 1 && form.nutritional_indicator_image.length > 2 }}">
+ {{form.nutritional_indicator_image.length - 2}}
</view>
<view class="delete-btn" wx:if="{{index == 0 || form.nutritional_indicator_image.length == 2 }}" data-mode="nutritional_indicator_image" data-index="{{index}}" catchtap="handleDelete">
<text class="iconfont icon-x"></text>
</view>
</view>
</t-col>
</t-row>
</view>
<t-row gutter="12">
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 25OHD3 (ng/ml) </view>
<view class="input-example__label">25OHD3 (ng/ml)</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.oh_d3}}" data-key="oh_d3" size="small" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 维生素A (ng/ml)</view>
<view class="input-example__label">25OHD2 (ng/ml)</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.oh_d2}}" data-key="oh_d2" size="small" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label">25OHD (ng/ml)</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.oh_d}}" data-key="oh_d" size="small" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label">维生素A (ng/ml)</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.vitamin_a}}" data-key="vitamin_a" borderless="{{true}}" style="{{style}}" />
</view>
</view>
@ -258,48 +378,62 @@
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 维生素K (ng/ml)</view>
<view class="input-example__label">维生素K (ng/ml)</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.vitamin_k}}" data-key="vitamin_k" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 维生素E (ng/ml)</view>
<view class="input-example__label">维生素E (ng/ml)</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.vitamin_e}}" data-key="vitamin_e" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
</t-row>
</view>
<view class="follow-item">
<view>
B超</view>
<view>B超</view>
<view class="wrapper">
<view class="input-example">
<view class="input-example__label"> 上传B超报告支持OCR识别</view>
<view class="input-example__label">上传B超报告支持OCR识别</view>
</view>
<t-upload media-type="{{['image']}}" files="{{originFiles}}" gridConfig="{{gridConfig}}" removeBtn="{{false}}" bind:success="handleSuccess" bind:remove="handleRemove" bind:click="handleClick" bind:sort-end="handleSortEnd" />
<t-row gutter="16">
<t-col span="8">
<view class="improt-file" data-mode="b_mode_image" bind:tap="handleUpload">
<view class="upload-flow">
<text class="iconfont icon-xiangji"></text>
<view>拍照导入</view>
</view>
</view>
</t-col>
<t-col span="8" wx:for="{{form.b_mode_image}}" wx:key="index" wx:if="{{index < 1 || (index == 1 && form.b_mode_image.length > 1)}}">
<view class="report-image" data-mode="b_mode_image" data-index="{{index}}" bind:tap="handleImagePreview">
<image class="image" src="{{item}}" mode=""></image>
<view class="more" wx:if="{{index == 1 && form.b_mode_image.length > 2 }}">
+ {{form.b_mode_image.length - 2}}
</view>
<view class="delete-btn" wx:if="{{index == 0 || form.b_mode_image.length == 2 }}" data-mode="b_mode_image" data-index="{{index}}" catchtap="handleDelete">
<text class="iconfont icon-x"></text>
</view>
</view>
</t-col>
</t-row>
</view>
<t-row gutter="12">
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 肝肋下(mm)</view>
<view class="input-example__label">肝肋下(mm)</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.under_the_liver_rib}}" data-key="under_the_liver_rib" size="small" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 肝剑突下(mm)</view>
<view class="input-example__label">肝剑突下(mm)</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.under_the_xiphoid_liver}}" data-key="under_the_xiphoid_liver" borderless="{{true}}" style="{{style}}" />
</view>
</view>
@ -307,34 +441,63 @@
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 脾肋下(mm)</view>
<view class="input-example__label">脾肋下(mm)</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.spleen_rib_area}}" data-key="spleen_rib_area" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 门静脉主干(mm)</view>
<view class="input-example__label">门静脉主干内径(mm)</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.main_portal_vein}}" data-key="main_portal_vein" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 门静脉流速</view>
<view class="input-example__label">肝回声</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.liver_echo}}" data-key="liver_echo" size="small" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label">胆囊大小(mm)</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.gallbladder_size}}" data-key="gallbladder_size" size="small" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label">胆总管(mm)</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.common_bile_duct}}" data-key="common_bile_duct" size="small" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label">纤维块大小(mm)</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.fiber_block_size}}" data-key="fiber_block_size" size="small" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label">门静脉流速</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.pvv}}" data-key="pvv" size="small" borderless="{{true}}" style="{{style}}" />
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 肝弹性值</view>
<view class="input-example__label">肝弹性值</view>
<t-input placeholder="请输入" bind:tap="onInput" value="{{form.liver_elasticity_value}}" data-key="liver_elasticity_value" borderless="{{true}}" style="{{style}}" />
</view>
</view>
@ -342,44 +505,57 @@
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 有无肝囊肿</view>
<view class="input-example__label">有无肝囊肿</view>
<t-radio-group default-value="{{form.is_have_cyst}}" borderless t-class="box" data-mode="is_have_cyst" bind:change="handleChangeGroup">
<t-radio block="{{false}}" label="有" value="1" />
<t-radio block="{{false}}" label="无" value="2" />
</t-radio-group>
</view>
</view>
</t-col>
<t-col span="12">
<view class="dark">
<view class="input-example">
<view class="input-example__label"> 有无腹水</view>
<view class="input-example__label">有无腹水</view>
<t-radio-group default-value="{{form.is_have_ascites}}" borderless t-class="box" data-mode="is_have_ascites" bind:change="handleChangeGroup">
<t-radio block="{{false}}" label="有" value="1" />
<t-radio block="{{false}}" label="无" value="2" />
</t-radio-group>
</view>
</view>
</t-col>
</t-row>
</view>
<view class="follow-item">
<view>
MDT电子病历</view>
<view>MDT电子病历</view>
<view class="wrapper">
<view class="input-example">
<view class="input-example__label"> 上传本次随访的电子病历</view>
<view class="input-example__label">上传本次随访的电子病历</view>
</view>
<t-upload media-type="{{['image']}}" files="{{originFiles}}" gridConfig="{{gridConfig}}" removeBtn="{{false}}" bind:success="handleSuccess" bind:remove="handleRemove" bind:click="handleClick" bind:sort-end="handleSortEnd" />
<t-row gutter="16">
<t-col span="8">
<view class="improt-file" data-mode="mdt_image" bind:tap="handleUpload">
<view class="upload-flow">
<text class="iconfont icon-xiangji"></text>
<view>拍照导入</view>
</view>
</view>
</t-col>
<t-col span="8" wx:for="{{form.mdt_image}}" wx:key="index" wx:if="{{index < 1 || (index == 1 && form.mdt_image.length > 1)}}">
<view class="report-image" data-mode="mdt_image" data-index="{{index}}" bind:tap="handleImagePreview">
<image class="image" src="{{item}}" mode=""></image>
<view class="more" wx:if="{{index == 1 && form.mdt_image.length > 2 }}">
+ {{form.mdt_image.length - 2}}
</view>
<view class="delete-btn" wx:if="{{index == 0 || form.mdt_image.length == 2 }}" data-mode="mdt_image" data-index="{{index}}" catchtap="handleDelete">
<text class="iconfont icon-x"></text>
</view>
</view>
</t-col>
</t-row>
</view>
</view>
<t-button bindtap="clockIn" theme="primary" block bindtap="toQuestionnaire">提交</t-button>
<t-date-time-picker auto-close bind:cancel="hidePicker" bind:change="onPickerChange" cancelBtn="取消" confirmBtn="确认" data-mode="birth" defaultValue="{{personInfo.birth}}" end="{{birthEnd}}" filter="{{birthFilter}}" format="YYYY-MM-DD" mode="date" popup-props="{{ { usingCustomNavbar: true } }}" start="{{birthStart}}" title="选择生日" value="{{personInfo.birth}}" visible="{{birthVisible}}" />
<t-image-viewer usingCustomNavbar deleteBtn="{{false}}" closeBtn="{{true}}" showIndex="{{true}}" initial-index="{{imageIndex}}" visible="{{imageVisible}}" images="{{imageList}}" bind:change="onChange" bind:delete="onDelete" bind:close="onClose"></t-image-viewer>
</view>

View File

@ -2,6 +2,13 @@
"condition": {
"miniprogram": {
"list": [
{
"name": "添加随访",
"pathName": "pages/followUp/index",
"query": "",
"scene": null,
"launchMode": "default"
},
{
"name": "pages/home/index",
"pathName": "pages/home/index",