# XQuestionOptions

题目选项组件：根据「是否多选」展示单选或复选框，选项以卡片样式排列。支持两种用法：**原始问题模式**（传入 `questionData` + 字段名，组件内部转换并上报完整「问题 + 选中」对象）、**扁平模式**（传入 `options` + `multiple`，兼容旧用法）。

## 何时使用

- 列表/卡片内需要「一道题 + 若干选项」的交互（如 AI 问诊推荐问题）
- 希望由组件持有「原始问题 JSON」并在变更时上报完整 `{ question, selected }`，父组件（如 XList）只做按问题记录

## 引用方式

```javascript
import XQuestionOptions from '@vue2-client/base-client/components/his/XQuestionOptions/XQuestionOptions.vue'
```

## 使用示例

**原始问题模式（推荐，用于 XList）**：传入原始问题 JSON 与字段名，变更时 `@change` 收到 `{ question, selected }`。

```html
<x-question-options
  :question-data="serverQuestion"
  question-label-field="label"
  options-field="options"
  multiple-field="multiple"
  v-model="selected"
  @change="onAnswer"
/>
```

**扁平模式（兼容）**：直接传选项与是否多选。

```html
<x-question-options
  :options="[{ label: '有', value: '有发热' }, { label: '无', value: '无发热' }]"
  :multiple="false"
  v-model="selectedValue"
  @change="onChange"
/>
```

## API

| 参数                 | 说明                                           | 类型    | 默认值   |
|----------------------|------------------------------------------------|---------|----------|
| questionData         | 原始问题的 JSON；与下方字段名一起使用时组件内部转换 | Object  | null     |
| questionLabelField   | 从问题对象中取「问题文案」的字段名（由外部配置 JS 在每条数据上设置） | String  | -        |
| multipleField        | 从问题对象中取「是否多选」的字段名（同上）       | String  | -        |
| optionsField         | 从问题对象中取「选项列表」的字段名（同上）       | String  | -        |
| selectedField        | 选择结果写入问题对象的字段名（直接改 questionData[selectedField]）；与上列字段名均由外部配置 JS 在每条数据上设置，XList 不设默认、不从后端 List 取 | String  | -          |
| options              | 选项列表（与 questionData 二选一）              | Array   | []       |
| multiple             | 是否多选（与 questionData 二选一）              | Boolean | false    |
| value                | 当前选中值（v-model）                           | Any/Array | -      |
| name                 | radio-group 的 name                            | String  | ''       |

### 事件

| 事件名  | 说明       | 回调参数 |
|---------|------------|----------|
| input   | v-model 用 | 选中值（单选为单值，多选为数组） |
| change  | 选项变化   | **原始问题模式**：`{ question, selected }`；**扁平模式**：`selected` |

### 数据约定

- **原始问题模式**：`questionData` 上应有 `[optionsField]`（选项数组）、`[multipleField]`（是否多选）、可选 `[questionLabelField]`（问题文案）。选项项可为 `{ label, value }` 或仅 `value` 为对象（展示从 value.text/label/name 取）。
- **扁平模式**：每项可为 `{ label, value }`；对象 value 时同上，支持深度相等比较。
