cool-admin框架前端使用-vue3版本,useUpsert使用

本文展示了如何在Vue组件中设置input为不可编辑状态,并实现三级联动选择的效果。通过在`el-input`组件中添加`disabled`属性实现禁用状态。同时,详细描述了使用`el-select`组件实现根据一级、二级选择更新三级选项的联动逻辑,通过监听`onChange`事件并更新对应级别的选项。
摘要由CSDN通过智能技术生成

1. 设置组件input 状态不可编辑

设置组件input 状态不可编辑

在component的props添加 disabled: true

<script lang="ts" name="sg-domain" setup>
import { useCrud, useTable, useUpsert } from "@cool-vue/crud";
import { useCool } from "/@/cool";
 
const { service } = useCool();
 
const Upsert = useUpsert({
	items: [
		{
			label: "会员",
			prop: "uid",
			required: true,
			component: { name: "el-select", options: [] }
		},
		{
			label: "订单号",
			prop: "unique",
			span: 12,
			required: true,
			component: {
				name: "el-input",
				props: {
					disabled: true,//不可编辑
				}
			}
		},
		
	],
 
});
 
</script>


效果:

在这里插入图片描述

2.不同字段,三级联动

<script lang="ts" name="sg-chat_count" setup>
 
import { useCrud, useTable, useUpsert } from "@cool-vue/crud";
import { useCool } from "/@/cool";
 
const { service } = useCool();
const addressList = [
	{
		label: "广东省",
		value: "1",
		children: [
			{
				label: "广州市",
				value: "101",
				children: [
					{ label: "越秀", value: "1001" },
					{ label: "天河", value: "1002" },
					{ label: "萝岗", value: "1003" }
				]
			},
			{
				label: "深圳市",
				value: "102",
				children: [
					{ label: "宝安", value: "1004" },
					{ label: "龙岗", value: "1005" },
					{ label: "罗湖", value: "1006" }
				]
			},
			{
				label: "茂名市",
				value: "103",
				children: [
					{ label: "高州", value: "1007" },
					{ label: "化州", value: "1008" },
					{ label: "信宜", value: "1009" }
				]
			}
		]
	},
	{
		label: "河南省",
		value: "2",
		children: [
			{
				label: "郑州市",
				value: "104",
				children: [
					{ label: "中原区", value: "1010" },
					{ label: "二七区", value: "1011" },
					{ label: "金水区", value: "1012" }
				]
			},
			{
				label: "开封市",
				value: "105",
				children: [
					{ label: "龙亭区", value: "1013" },
					{ label: "鼓楼区", value: "1014" },
					{ label: "祥符区", value: "1015" }
				]
			},
			{
				label: "洛阳市",
				value: "106",
				children: [
					{ label: "老城区", value: "1016" },
					{ label: "西工区", value: "1017" },
					{ label: "涧西区", value: "1018" }
				]
			}
		]
	}
];
 
 
let address: any[] = [];
const filterList = (level: number, status: string) => {
	let resList;
	switch (level) {
		case 1:
			address[0] = status;
			address = address.slice(0, 1); //移除二级和三级
			Upsert.value?.setForm("two", ""); //清空表单值,有更好的写法,这里应该给二级的一个默认值,默认是当前一级下二级第一个值
			Upsert.value?.setForm("three", ""); //清空表单值,有更好的写法,这里应该给三级的一个默认值,默认是当前二级下三级第一个值
			resList = addressList.filter((item: any) => item.value == status)[0].children;
			break;
		case 2:
			address[1] = status;
			address = address.slice(0, 2); //移除三级
			Upsert.value?.setForm("three", ""); //清空表单值,有更好的写法,这里应该给三级的一个默认值,默认是当前二级下三级第一个值
			let t2 = addressList.filter((item: any) => item.value == address[0])[0].children;
			resList = t2.filter((item: any) => item.value == status)[0].children;
			break;
		case 3:
			address[2] = status;
			break;
		default:
			break;
	}
	return resList;
};
 
const change = (level: number, status: string, param?: string) => {
	const list: any = filterList(level, status);
	if (param) {
		Upsert.value?.setOptions(
			param,
			list.map((e: { label: any; value: any }) => {
				return {
					label: e.label || "",
					value: e.value
				};
			})
		);
	}
};
 
// cl-upsert 配置
const Upsert = useUpsert({
	items: [
		{
			label: "一级",
			prop: "one",
			span: 8,
			required: true,
			component: {
				name: "el-select",
				options: [],
				props: {
					onChange(status: any) {
						change(1, status, "two");
					}
				}
			}
		},
		{
			label: "二级",
			prop: "two",
			span: 8,
			required: true,
			component: {
				name: "el-select",
				options: [],
				props: {
					onChange(status: any) {
						change(2, status, "three");
					}
				}
			}
		},
		{
			label: "三级",
			prop: "three",
			span: 8,
			required: true,
			component: {
				name: "el-select",
				options: [],
				props: {
					onChange(status: any) {
						change(3, status);
					}
				}
			}
		},
		{
			label: "会员账号",
			prop: "uid",
			span: 12,
			required: true,
			component: { name: "el-select", options: [] }
		},
	
		
		{
			label: "状态",
			prop: "status",
			value: 1,
			component: {
				name: "el-radio-group",
				options: [
					{
						label: "正常",
						value: 1
					},
					{
						label: "禁用",
						value: 0
					}
				]
			}
		}
	],
	async onOpen() {
        //打开一级默认数据
		Upsert.value?.setOptions(
			"one",
			addressList.map((e: { label: any; value: any }) => {
				return {
					label: e.label || "",
					value: e.value
				};
			})
		);
 
	}
});

</script>

效果

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值