# Dynamic Dose Count Label (动态剂数标签) ## Feature Made the dose count label dynamic based on the selected dose unit. When the user selects a different unit (剂/丸/袋/盒/瓶/膏/贴), the label automatically updates to match. ## Changes Made ### File: `admin/src/views/consumer/prescription/order_list.vue` #### 1. Added Computed Property Added a computed property that generates the label dynamically: ```typescript // 动态剂数标签(根据剂量单位变化) const doseCountLabel = computed(() => { const unit = editForm.dose_unit || '剂' return `${unit}数` }) ``` #### 2. Updated Form Item Label Changed from static label to dynamic computed property: **Before:** ```vue ``` **After:** ```vue ``` ## How It Works ### Label Generation Logic ```typescript const unit = editForm.dose_unit || '剂' // Get current unit, default to '剂' return `${unit}数` // Append '数' to create label ``` ### Examples | Selected Unit | Label Display | |---------------|---------------| | 剂 | 剂数 | | 丸 | 丸数 | | 袋 | 袋数 | | 盒 | 盒数 | | 瓶 | 瓶数 | | 膏 | 膏数 | | 贴 | 贴数 | ### Reactive Updates The label updates automatically when: 1. User selects a different dose unit from the dropdown 2. Form is loaded with existing data 3. Form is reset or cleared ## User Experience ### Before: - Label always shows "剂数" regardless of selected unit - Confusing when unit is "贴" but label says "剂数" ### After: - Label dynamically matches the selected unit - Shows "贴数" when unit is "贴" - Shows "丸数" when unit is "丸" - More intuitive and consistent ## Implementation Details ### Computed Property Benefits 1. **Reactive**: Automatically updates when `editForm.dose_unit` changes 2. **Efficient**: Only recalculates when dependency changes 3. **Clean**: No need for watchers or manual updates ### Default Value Uses `'剂'` as default when `dose_unit` is empty or undefined: ```typescript const unit = editForm.dose_unit || '剂' ``` ### Placeholder Update Also updated the placeholder to match the label: ```vue :placeholder="doseCountLabel" ``` This ensures consistency between the label and placeholder text. ## Testing Steps ### 1. Test Label Changes 1. Open order edit dialog 2. Check initial label (should be "剂数" if dose_unit is "剂") 3. Change dose unit to "贴" 4. Verify label changes to "贴数" 5. Try all other units and verify labels update correctly ### 2. Test with Existing Data 1. Edit an order that has dose_unit = "丸" 2. Verify label shows "丸数" when dialog opens 3. Change to different unit 4. Verify label updates immediately ### 3. Test Default Behavior 1. Create a new order (dose_unit is empty) 2. Verify label shows "剂数" (default) 3. Select a unit 4. Verify label updates ### 4. Test Placeholder 1. Clear the dose_count field 2. Verify placeholder text matches the label 3. Change dose unit 4. Verify placeholder updates with label ## Edge Cases Handled ### Empty/Undefined Unit ```typescript const unit = editForm.dose_unit || '剂' ``` Falls back to '剂' if unit is empty, null, or undefined. ### Form Reset When form is reset, the computed property automatically recalculates based on the new (or default) value. ### Multiple Edits Label updates correctly even when editing multiple orders in sequence without closing the dialog. ## Related Code ### Form Structure ```vue ``` ### Data Flow ``` User selects dose_unit → editForm.dose_unit changes → doseCountLabel computed property recalculates → Label and placeholder update in UI ``` ## Future Enhancements ### Possible Improvements 1. **Validation Message**: Update validation messages to use dynamic unit 2. **Display in Detail View**: Show unit-specific label in order detail view 3. **Internationalization**: Support multiple languages for unit names 4. **Custom Units**: Allow admin to configure custom dose units ### Example: Dynamic Validation ```typescript const doseCountRules = computed(() => [ { required: true, message: `请输入${editForm.dose_unit || '剂'}数`, trigger: 'blur' } ]) ``` ## Summary ✅ Added dynamic label that changes based on selected dose unit ✅ Label updates automatically when unit changes ✅ Placeholder also updates to match label ✅ Default to "剂数" when unit is empty ✅ Handles all 7 dose units (剂/丸/袋/盒/瓶/膏/贴) ✅ Reactive and efficient using computed property ✅ Better user experience with consistent terminology The dose count label now dynamically reflects the selected unit, making the form more intuitive and user-friendly!