Skip to content

Switch开关组件 jb-switch

头像

jb-switch组件是在NaiveUISwitch组件基础上扩展的一个组件,所以NaiveUI中支持的属性在jb-switch中都可以使用。 jb-switch做了以下扩展:

  • 支持配置url请求地址,当开关状态发生变化时,会自动向url发起请求。
  • 支持配置confirm属性,切换开关时,会弹出确认框,用户确认后才会向url发起请求。

Props

名称类型默认值说明
urlstringundefined切换开关时,向url发起请求。url中支持${value}占位符,会自动替换为开关新的值。
confirmstringundefined确认提示。一旦传入有效字符串,就会开启提示,用户点击切换开关时,只有经过确认才会向url发起请求
fieldNamestringenable请求响应后,会自动提取响应结果中的fieldName字段值更新为组件的value值。如果响应结果就是个boolean类型值,那么该结果将直接更新为value值。如果响应结果不满足前面两种情况,将会用组件当前值去更新value
@change(resData) => voidundefined组件值发生变化时触发,参数为请求的响应结果

示例

在表格中使用

vue
<jb-column field="enable" title="是否启用" width="160" fixed="right">
    <template #default="{ row }">
        <jb-switch
            v-model:value="row.enable"
            :url="`/api/admin/app/toggleEnable/${row.id}`"
        ></jb-switch>
    </template>
</jb-column>
<jb-column field="enable" title="是否启用" width="160" fixed="right">
    <template #default="{ row }">
        <jb-switch
            v-model:value="row.enable"
            :url="`/api/admin/app/toggleEnable/${row.id}`"
        ></jb-switch>
    </template>
</jb-column>

切换时进行确认,成功后调用change回调,刷新表格数据

vue
<jb-column field="enable" title="是否启用" width="80">
    <template #default="{ row }">
        <jb-switch
            v-model:value="row.enable"
            confirm="确定切换此类型启用状态?"
            :url="`/api/admin/dictionaryType/toggleEnable/${row.id}`"
            @change="typePage?.loadData()"
        ></jb-switch>
    </template>
</jb-column>
<jb-column field="enable" title="是否启用" width="80">
    <template #default="{ row }">
        <jb-switch
            v-model:value="row.enable"
            confirm="确定切换此类型启用状态?"
            :url="`/api/admin/dictionaryType/toggleEnable/${row.id}`"
            @change="typePage?.loadData()"
        ></jb-switch>
    </template>
</jb-column>

切换后,url请求中传入开关值,change回调中获取响应结果。注意: 如果url本身是模版字符串,你又想使用${value}占位符,那么需要使用\$来转义。

vue

<jb-column field="isDefault" title="是否设为默认选项" width="80">
    <template #default="{ row }">
        <jb-switch
            v-model:value="row.isDefault"
            :url="`/api/admin/dictionaryType/toggleDefault/${row.id}-\${value}`"
            fieldName="isDefault"
            @change="updateRow(row,$event)"
        ></jb-switch>
    </template>
</jb-column>

<script >
    function updateRow(row, resData) {
        //resData就是响应数据
    }
</script>

<jb-column field="isDefault" title="是否设为默认选项" width="80">
    <template #default="{ row }">
        <jb-switch
            v-model:value="row.isDefault"
            :url="`/api/admin/dictionaryType/toggleDefault/${row.id}-\${value}`"
            fieldName="isDefault"
            @change="updateRow(row,$event)"
        ></jb-switch>
    </template>
</jb-column>

<script >
    function updateRow(row, resData) {
        //resData就是响应数据
    }
</script>