Skip to content

Grid Cascader 网格选择器

用于表单选取网格区域。

全局配置

在全局配置组件属性。

GridCascader组件属性配置
ts
app.provide(GRID_CASCADER_KEY, {
  placeholder: '请选择网格',
  clearable: true,
  showAllLevels: true,
  collapseTags: true,
  collapseTagsTooltip: true,
  separator: '/',
  props: {
    id: 'gridId',
    label: 'gridName',
    value: 'gridCode',
    leaf: 'leaf',
    children: 'children',
    disabled: 'disabled',
  },
  // others props...
});

业务注入

在全局注入网格加载业务。

注入加载根网格业务
ts
app.provide(LOAD_ROOT_GRID_KEY, () =>
  axios
    .get('/api/grid/getByCode', {
      params: {
        gridCode: '36',
      },
    })
    .then(res => res.data),
);
注入加载用户所属网格业务
ts
app.provide(LOAD_USER_GRID_KEY, () =>
  axios
    .get('/api/grid/getByCode', {
      params: {
        gridCode: '3601',
      },
    })
    .then(res => res.data),
);
注入根据网格编码加载网格业务
ts
app.provide(LOAD_GRID_BY_CODE_KEY, gridCode =>
  axios
    .get('/api/grid/getByCode', {
      params: {
        gridCode: gridCode,
      },
    })
    .then(res => res.data),
);
注入根据网格ID加载网格业务
ts
app.provide(LOAD_GRID_BY_ID_KEY, gridId =>
  axios
    .get('/api/grid/getById', {
      params: {
        id: gridId,
      },
    })
    .then(res => res.data),
);
注入根据网格编码加载子级网格业务
ts
app.provide(LOAD_GRID_CHILDREN_BY_CODE_KEY, gridCode =>
  axios
    .get('/api/grid/getChildren', {
      params: {
        gridCode: gridCode,
      },
    })
    .then(res => res.data),
);
注入查询起始网格编码到目标网格编码对应的网格树业务
ts
app.provide(LOAD_GRID_TREE_BY_CODE_KEY, (rootCode, targetCode) =>
  axios
    .get('/api/grid/getExpandedTree', {
      params: {
        rootCode: rootCode,
        targetCode: targetCode,
      },
    })
    .then(res => [res.data.areaTree]),
);

提示

演示数据只展示到区县。

基础用法

v-model参数

v-model支持多个参数的双向绑定。

起始网格

组件默认起始网格为用户所属网格,通过root属性可以设置起始网格为根网格。

设置默认值

通过v-modelv-model:grid-id可以设置默认选中的网格。

控制网格级别

通过透传ElCascader组件的props.leaf属性可以控制网格数据展示级别。

属性&事件&插槽透传

Grid Cascader基于ElCascader封装,所以你可以传入ElCascader的所有属性、事件和插槽。

属性

属性名说明类型默认值
model-value / v-model选中项绑定值,默认绑定props.value属性对应的值CascaderValue
grid-id / v-model:grid-id选中项绑定值,默认绑定props.id属性对应的值CascaderValue
grid-name / v-model:grid-name选中项绑定值,默认绑定props.label属性对应的值CascaderValue
grid / v-model:grid选中项绑定值,绑定数据对象T / T[] / T[][]
root是否从根节点开始查询,为false表示从用户所属网格开始查询booleanfalse
root-code2.1.0指定起始节点的网格编码string
show-level2.2.0用于控制展示到某个层级number99
类型声明
ts
import type { ExtractPropTypes } from 'vue';
import type { ComponentExposed } from 'vue-component-type-helpers';
import { cascaderProps, type CascaderProps as ElCascaderPropsProps } from 'element-plus';
import GridCascader from './grid-cascader.vue';

/**
 * 网格级联选择器属性
 * @template T 网格的数据类型
 */
export interface GridCascaderProps<T = Record<string | number | symbol, any>> {
  /**
   * 是否从根网格开始查询,默认从用户所属网格开始查询。
   * @defaultValue false
   */
  root?: boolean;
  /**
   * 指定起始节点的网格编码
   */
  rootCode?: string;
  /**
   * 用于控制展示到某个层级
   * @deafultValue 99
   */
  showLevel?: number;
}

/**
 * 网格级联选择器实例
 * @template T 网格类型
 */
export type GridCascaderInstance<
  T extends Record<string | number | symbol, any> = Record<string | number | symbol, any>,
> = ComponentExposed<typeof GridCascader<T>>;

/**
 * el-cascader属性类型
 * @remarks 修改了原生`props`属性的类型。
 */
type ElCascaderProps = Omit<ExtractPropTypes<typeof cascaderProps>, 'props'> & {
  /**
   * 配置选项, 请参阅[el-cascader](https://element-plus.org/zh-CN/component/cascader.html)组件的[props属性](https://element-plus.org/zh-CN/component/cascader.html#cascaderprops)。
   */
  props: CascaderPropsProps;
};

/**
 * 网格级联选择器组件配置选项
 * @remarks 扩展`id`属性。
 */
export type CascaderPropsProps = ElCascaderPropsProps & {
  /**
   * 指定选项的id为选项对象的某个属性值。
   * @remarks el-cascader没有提供该属性,为实现网格id的双向绑定,故扩展该属性。
   */
  id?: string;
  /**
   * 指定选项的level为选项对象的某个属性值。
   * @remarks el-cascader没有提供该属性,为实现控制网格选择层级,故扩展该属性。
   */
  level?: string;
};

/**
 * 网格级联选择器包含透传属性在内的全部属性
 * @template T 网格的数据类型
 */
export type GridCascaderFullProps<T> = Partial<ElCascaderProps & GridCascaderProps<T>>;