This commit is contained in:
Your Name
2026-04-15 16:31:25 +08:00
parent 906684c1ed
commit 3d9c5dd8f5
47 changed files with 7963 additions and 10 deletions
+243 -3
View File
@@ -576,6 +576,66 @@
<el-option label="汤剂" value="汤剂" />
</el-select>
</el-form-item> </el-col>
<!-- 用量字段 -->
<el-col :span="8">
<el-form-item label="用量" prop="dosage_amount">
<!-- 浓缩水丸:1-10g 下拉选择 -->
<el-select
v-if="editForm.prescription_type === '浓缩水丸'"
v-model="editForm.dosage_amount"
placeholder="请选择用量"
class="w-full"
>
<el-option :label="1 + 'g'" :value="1" />
<el-option :label="2 + 'g'" :value="2" />
<el-option :label="3 + 'g'" :value="3" />
<el-option :label="4 + 'g'" :value="4" />
<el-option :label="5 + 'g'" :value="5" />
<el-option :label="6 + 'g'" :value="6" />
<el-option :label="7 + 'g'" :value="7" />
<el-option :label="8 + 'g'" :value="8" />
<el-option :label="9 + 'g'" :value="9" />
<el-option :label="10 + 'g'" :value="10" />
</el-select>
<!-- 饮片:50-250ml 下拉选择,步进50 -->
<el-select
v-else-if="editForm.prescription_type === '饮片'"
v-model="editForm.dosage_amount"
placeholder="请选择用量"
class="w-full"
>
<el-option label="50ml" :value="50" />
<el-option label="100ml" :value="100" />
<el-option label="150ml" :value="150" />
<el-option label="200ml" :value="200" />
<el-option label="250ml" :value="250" />
</el-select>
<!-- 其他类型:自由输入 -->
<el-input-number
v-else
v-model="editForm.dosage_amount"
:min="0"
:precision="2"
class="w-full"
/>
</el-form-item>
</el-col>
<!-- 饮片代煎选项 -->
<el-col v-if="editForm.prescription_type === '饮片'" :span="8">
<el-form-item label="是否代煎" prop="need_decoction">
<el-radio-group v-model="editForm.need_decoction">
<el-radio :label="true">代煎</el-radio>
<el-radio :label="false">不代煎</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="每天几次" prop="times_per_day">
<el-input-number v-model="editForm.times_per_day" :min="1" :max="10" class="!w-full" placeholder="每天服用次数" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="服用天数" prop="usage_days">
<el-input-number
@@ -795,12 +855,26 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="收货地址" prop="shipping_address">
<el-form-item label="省市区" prop="region">
<el-cascader
v-model="createOrderForm.region"
:options="regionOptions"
:props="{ value: 'name', label: 'name', children: 'children', emitPath: false, checkStrictly: false }"
placeholder="请选择省/市/区"
clearable
filterable
class="w-full"
@change="handleRegionChange"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="详细地址" prop="shipping_address">
<el-input
v-model="createOrderForm.shipping_address"
type="textarea"
:rows="2"
placeholder="完整收货地址"
placeholder="请输入街道、门牌号等详细地址"
maxlength="200"
show-word-limit
/>
@@ -1176,6 +1250,7 @@ const createOrderForm = reactive({
patient_id: '' as number | string,
recipient_name: '',
recipient_phone: '',
region: [] as string[],
shipping_address: '',
is_follow_up: 0,
medication_days: undefined as number | undefined,
@@ -1191,6 +1266,146 @@ const createOrderForm = reactive({
pay_order_ids: [] as number[]
})
// 省市区数据(简化版,实际项目中应该从 API 获取或使用完整的省市区数据)
const regionOptions = ref([
{
name: '四川省',
children: [
{
name: '成都市',
children: [
{ name: '锦江区' },
{ name: '青羊区' },
{ name: '金牛区' },
{ name: '武侯区' },
{ name: '成华区' },
{ name: '龙泉驿区' },
{ name: '青白江区' },
{ name: '新都区' },
{ name: '温江区' },
{ name: '双流区' },
{ name: '郫都区' },
{ name: '新津区' },
{ name: '都江堰市' },
{ name: '彭州市' },
{ name: '邛崃市' },
{ name: '崇州市' },
{ name: '简阳市' },
{ name: '金堂县' },
{ name: '大邑县' },
{ name: '蒲江县' }
]
},
{
name: '绵阳市',
children: [
{ name: '涪城区' },
{ name: '游仙区' },
{ name: '安州区' },
{ name: '江油市' },
{ name: '三台县' },
{ name: '盐亭县' },
{ name: '梓潼县' },
{ name: '北川羌族自治县' },
{ name: '平武县' }
]
}
]
},
{
name: '北京市',
children: [
{
name: '北京市',
children: [
{ name: '东城区' },
{ name: '西城区' },
{ name: '朝阳区' },
{ name: '丰台区' },
{ name: '石景山区' },
{ name: '海淀区' },
{ name: '门头沟区' },
{ name: '房山区' },
{ name: '通州区' },
{ name: '顺义区' },
{ name: '昌平区' },
{ name: '大兴区' },
{ name: '怀柔区' },
{ name: '平谷区' },
{ name: '密云区' },
{ name: '延庆区' }
]
}
]
},
{
name: '上海市',
children: [
{
name: '上海市',
children: [
{ name: '黄浦区' },
{ name: '徐汇区' },
{ name: '长宁区' },
{ name: '静安区' },
{ name: '普陀区' },
{ name: '虹口区' },
{ name: '杨浦区' },
{ name: '闵行区' },
{ name: '宝山区' },
{ name: '嘉定区' },
{ name: '浦东新区' },
{ name: '金山区' },
{ name: '松江区' },
{ name: '青浦区' },
{ name: '奉贤区' },
{ name: '崇明区' }
]
}
]
},
{
name: '广东省',
children: [
{
name: '广州市',
children: [
{ name: '荔湾区' },
{ name: '越秀区' },
{ name: '海珠区' },
{ name: '天河区' },
{ name: '白云区' },
{ name: '黄埔区' },
{ name: '番禺区' },
{ name: '花都区' },
{ name: '南沙区' },
{ name: '从化区' },
{ name: '增城区' }
]
},
{
name: '深圳市',
children: [
{ name: '罗湖区' },
{ name: '福田区' },
{ name: '南山区' },
{ name: '宝安区' },
{ name: '龙岗区' },
{ name: '盐田区' },
{ name: '龙华区' },
{ name: '坪山区' },
{ name: '光明区' }
]
}
]
}
])
// 处理省市区选择变化
const handleRegionChange = (value: string[]) => {
console.log('选择的省市区:', value)
}
const createOrderLinkedPaidTotal = computed(() => {
const ids = new Set(createOrderForm.pay_order_ids.map((x) => Number(x)))
let s = 0
@@ -1454,6 +1669,9 @@ const slipDietaryText = computed(() => {
const editForm = reactive({
id: 0,
prescription_type: '浓缩水丸',
dosage_amount: 1 as number | undefined,
dosage_unit: 'g',
need_decoction: false,
patient_name: '',
gender: 1,
age: 0,
@@ -1483,7 +1701,25 @@ const editForm = reactive({
diagnosis_id: 0,
/** 列表带入:业务订单「处方审核」驳回(消费者处方本身可能仍为已通过) */
business_prescription_audit_rejected: 0,
business_prescription_audit_remark: ''
business_prescription_audit_remark: '',
times_per_day: 2
})
// 监听处方类型变化,自动调整用量单位和默认值
watch(() => editForm.prescription_type, (newType) => {
if (newType === '浓缩水丸') {
editForm.dosage_unit = 'g'
editForm.dosage_amount = 1
editForm.need_decoction = false
} else if (newType === '饮片') {
editForm.dosage_unit = 'ml'
editForm.dosage_amount = 50
// need_decoction 保持用户选择
} else {
editForm.dosage_unit = 'g'
editForm.dosage_amount = undefined
editForm.need_decoction = false
}
})
// 表单验证规则
@@ -1863,6 +2099,9 @@ const handleEdit = (row: any) => {
// 深拷贝数据到表单
editForm.id = row.id
editForm.prescription_type = row.prescription_type || '浓缩水丸'
editForm.dosage_amount = row.dosage_amount ?? undefined
editForm.dosage_unit = row.dosage_unit || ''
editForm.need_decoction = row.need_decoction === 1 || row.need_decoction === true
editForm.patient_name = row.patient_name || ''
editForm.gender = row.gender ?? 1
editForm.age = row.age ?? 0
@@ -1877,6 +2116,7 @@ const handleEdit = (row: any) => {
editForm.dose_count = row.dose_count ?? 7
editForm.dose_unit = row.dose_unit || '剂'
editForm.usage_days = row.usage_days ?? 7
editForm.times_per_day = row.times_per_day ?? 2
editForm.usage_instruction = row.usage_instruction || '水煎服,一日二次'
editForm.usage_time = row.usage_time || '饭前'
editForm.usage_way = row.usage_way || '温水送服'