Skip to content

SelectBlock

下拉选择组件,拦截 <select-block> 标签,通过 options 属性传递选项列表。

演示


<template>
  <div>
    <Input v-model="text" :rows="3" :simulate-text="exampleText" />

    <hr>

    <StreamContains v-model:data="blocks" :model-value="text" mode="accurate">
      <SelectBlock />
    </StreamContains>

    <div v-if="blocks.length" class="s-demo-payload">
      <div v-for="b in blocks" :key="b.id" class="s-demo-item">
        <span class="s-demo-tag">[{{ b.tagName }}]</span>
        payload: <code>{{ JSON.stringify(b.payload) }}</code>
      </div>
    </div>
  </div>
</template>

<script setup>
import { ref } from 'vue'
import { StreamContains, SelectBlock } from 'stream-ui'
import Input from '../../.comm/Input.vue'

const exampleText = '<select-block id="region-select" name="region" label="地区" options="北京,上海,广州,深圳" required />'
const text = ref(exampleText)
const blocks = ref([])
</script>

<style scoped>
.s-demo-payload {
  margin-top: 12px;
  padding: 8px 12px;
  background: #f8fafc;
  border: 1px solid #e2e8f0;
  border-radius: 6px;
  font-size: 13px;
}

.s-demo-item {
  margin: 4px 0;
}

.s-demo-tag {
  color:#6366f1;
  font-weight: 600;
}
</style>

使用

vue
<StreamContains v-model:data="blocks" :model-value="text" mode="accurate">
  <SelectBlock />
</StreamContains>

Props

属性类型来源说明
isClosedboolean注入闭合后才可操作
attrs.idstring标签属性稳定区块 ID,用于保留 payload
attrs.namestring标签属性业务字段名,用于归一化表单数据
attrs.labelstring标签属性标签文字
attrs.optionsstring标签属性逗号分隔的选项列表,如 "北京,上海,广州"
attrs.placeholderstring标签属性默认提示文字
attrs.requiredboolean标签属性是否必选

reportData

用户选择时调用 reportData({ value, name, label, valid, error })

html
<select-block id="city-select" name="city" label="城市" options="北京,上海,广州,深圳" required />

CLI

bash
npx @huiol/stream-ui add select

生成 src/components/ui/select-block.vue

Released under the MIT License.