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

145 lines
3.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>