ykt-wxapp/pages/case/patient-inner-info.vue

145 lines
3.2 KiB
Vue
Raw Normal View History

2026-01-20 16:24:43 +08:00
<template>
<view class="page">
<view class="body">
<scroll-view scroll-y class="scroll">
<view class="form-wrap">
<form-template v-if="items.length" ref="formRef" :items="items" :form="form" :rule="rules" @change="onChange" />
</view>
</scroll-view>
<view class="footer">
<button class="btn plain" @click="cancel">取消</button>
<button class="btn primary" @click="save">完成</button>
</view>
</view>
</view>
</template>
<script setup>
import { reactive, ref } from 'vue';
import { onLoad } from '@dcloudio/uni-app';
import FormTemplate from '@/components/form-template/index.vue';
const BASE_KEY = 'patient-create-base';
const INNER_KEY = 'patient-create-inner';
const formRef = ref(null);
const form = reactive({
customerSource: '',
firstVisitDate: '',
diseaseTag: '',
remark: ''
});
const items = [
{ title: 'customerSource', name: '患者来源', type: 'select', operateType: 'formCell', required: false, range: ['线上咨询', '同事推荐', '客户推荐', '其他'] },
{ title: 'firstVisitDate', name: '首次就诊日期', type: 'date', operateType: 'formCell', required: false },
{ title: 'diseaseTag', name: '慢病标签', type: 'select', operateType: 'formCell', required: false, range: ['糖尿病', '高血压', '冠心病', '慢阻肺'] },
{ title: 'remark', name: '备注', type: 'textarea', operateType: 'formCell', required: false, wordLimit: 200 }
];
const rules = {};
onLoad(() => {
const base = uni.getStorageSync(BASE_KEY);
if (!base || typeof base !== 'object') {
uni.showToast({ title: '请先填写基础信息', icon: 'none' });
uni.navigateBack();
return;
}
const cached = uni.getStorageSync(INNER_KEY);
if (cached && typeof cached === 'object') {
Object.assign(form, cached);
}
});
function onChange({ title, value }) {
form[title] = value;
}
function cancel() {
uni.navigateBack();
}
function save() {
if (formRef.value?.verify && !formRef.value.verify()) return;
const base = uni.getStorageSync(BASE_KEY) || {};
const payload = { ...base, ...form };
uni.setStorageSync(INNER_KEY, { ...form });
// 这里后续对接真实新增接口payload 即最终提交数据
uni.showModal({
title: '提示',
content: '已完成新增mock。后续将对接真实建档接口。',
showCancel: false,
success: () => {
uni.removeStorageSync(BASE_KEY);
uni.removeStorageSync(INNER_KEY);
// 返回到病例列表
uni.navigateBack({ delta: 2 });
}
});
}
</script>
<style lang="scss" scoped>
.page {
height: 100vh;
background: #f6f6f6;
}
.body {
height: 100vh;
display: flex;
flex-direction: column;
}
.scroll {
flex: 1;
}
.form-wrap {
background: #fff;
}
.footer {
position: fixed;
left: 0;
right: 0;
bottom: 0;
background: #fff;
padding: 12px 16px calc(12px + env(safe-area-inset-bottom));
display: flex;
gap: 12px;
box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.06);
}
.btn {
flex: 1;
height: 44px;
line-height: 44px;
border-radius: 6px;
font-size: 15px;
}
.btn::after {
border: none;
}
.btn.plain {
background: #fff;
color: #666;
border: 1px solid #ddd;
}
.btn.primary {
background: #5d8aff;
color: #fff;
}
</style>