2025-07-17 23:31:50 +08:00

255 lines
6.2 KiB
JavaScript

import request from '~/api/request'
Page({
/**
* 页面的初始数据
*/
data: {
form: {
username:'',
mmp_7: '',
day: '',
mobile: '',
gallbladder_image: '',
portal_vein_branch_image: '',
portal_vein_cross_image: ''
},
isName: true,
isMmp: true,
isDay: true,
isMobile: true,
isGallbladder: true,
isPortalVeinBranch: true,
isPortalVeinCross: true,
imageVisible: false,
imageList: [],
imageIndex: 1,
visible: false,
msg: ''
},
formKey: '',
//上传文件方法
async uploadFileToOSS(file, callback) {
const policyData = await request('admin/policy_token', 'post')
const res = JSON.parse(policyData.token)
const fileNameWithExt = file.tempFilePath.split('/').pop(); // hello.png
const fileName = fileNameWithExt.split('.').slice(0, -1).join('.'); // hello
const formData = {
key: 'upload_file/' + fileName, //上传文件名称
policy: res.policy, //表单域
'x-oss-signature-version': res.x_oss_signature_version, //指定签名的版本和算法
'x-oss-credential': res.x_oss_credential, //指明派生密钥的参数集
'x-oss-date': res.x_oss_date, //请求的时间
'x-oss-signature': res.signature, //签名认证描述信息
'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/',
method: 'put',
filePath: file.tempFilePath,
name: 'file', //固定值为file
formData: formData,
success(res) {
console.log('上传响应:', res);
if (res.statusCode === 200) {
callback(null, 'https://image-fudan.oss-cn-beijing.aliyuncs.com/upload_file/'+ fileName); // 上传成功
} else {
console.error('上传失败,状态码:', res.statusCode);
console.error('失败响应:', res);
callback(res); // 上传失败,返回响应
}
},
fail(err) {
console.error('上传失败:', err); // 输出错误信息
wx.showToast({ title: '上传失败,请重试!', icon: 'none' });
callback(err); // 调用回调处理错误
}
});
},
handleUpload(e) {
const { mode } = e.currentTarget.dataset;
wx.chooseMedia({
count: 1, // 选择一个文件
mediaType: ['image'],
sourceType: ['album', 'camera'],
success: (res) => {
wx.showToast({ title: '文件上传中,请稍等!', icon: 'none' });
if (res.tempFiles.length > 0) {
const tempFilePath = res.tempFiles[0];
this.uploadFileToOSS(tempFilePath, (error, data) => {
if (error) {
wx.showToast({ title: '上传失败!', icon: 'none' });
console.error('上传失败:', error); // 输出具体的错误信息
} else {
wx.showToast({ title: '上传成功!', icon: 'success' });
this.setData({
[`form.${mode}`]: data
}, () => {
this.validateForm(mode);
})
console.log('上传成功:', data); // 输出上传成功后的数据
}
});
} else {
wx.showToast({ title: '未选择文件!', icon: 'none' });
}
},
fail: (err) => {
wx.showToast({ title: '选择文件失败!', icon: 'none' });
console.error('选择文件失败:', err); // 输出选择文件的错误信息
}
});
},
handleDelete(e){
const { mode } = e.currentTarget.dataset;
this.setData({
[`form.${mode}`]: ''
})
},
handleImagePreview(e){
const { mode } = e.currentTarget.dataset;
this.setData({
imageList: [this.data.form[mode]],
imageIndex: 1,
imageVisible: true
})
},
onInput(e){
const { mode } = e.currentTarget.dataset;
this.setData({
[`form.${mode}`]: e.detail.value
}, () => {
this.validateForm(mode);
});
},
validateForm(mode) {
let update = {};
let form = this.data.form;
if (!mode || mode === 'username') {
update.isName = !!form.username.trim();
}
if (!mode || mode === 'mmp_7') {
update.isMmp = !!form.mmp_7.trim();
}
if (!mode || mode === 'day') {
update.isDay = !!form.day.trim();
}
if (!mode || mode === 'mobile') {
update.isMobile = /^1[3-9]\d{9}$/.test(form.mobile.trim());
}
if (!mode || mode === 'gallbladder_image') {
update.isGallbladder = !!form.gallbladder_image.trim();
}
if (!mode || mode === 'portal_vein_branch_image') {
update.isPortalVeinBranch = !!form.portal_vein_branch_image.trim();
}
if (!mode || mode === 'portal_vein_cross_image') {
update.isPortalVeinCross = !!form.portal_vein_cross_image.trim();
}
this.setData(update);
// 全量校验时返回整体结果
if (!mode) {
return update.isName && update.isMmp && update.isDay && update.isMobile && update.isGallbladder && update.isPortalVeinBranch && update.isPortalVeinCross;
}
},
async toQuestionnaire(){
if (!this.validateForm()) {
wx.showToast({ title: '请完善表单信息', icon: 'none' });
return;
}
const body = {
username: this.data.form.username,
mmp_7: this.data.form.mmp_7,
day: Number(this.data.form.day),
mobile: this.data.form.mobile,
gallbladder_image: this.data.form.gallbladder_image,
portal_vein_branch_image: this.data.form.portal_vein_branch_image,
portal_vein_cross_image: this.data.form.portal_vein_cross_image
}
const res = await request('patient/diagnostic', 'post', body)
this.setData({
msg: res.message,
visible: true
})
},
confirm(){
this.setData({
visible: false
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})