Skip to content

设计器

PC 端、移动端的界面都需要在 PC 端进行设计,所以设计器组件只需在 PC 端安装即可,且安装、引用、使用方式完全相同。可通过设计器组件的 type 属性(值为"PC"或"mobile",默认为"PC")区分设计器类型。

安装

bash
yarn add pangea-ui

引用

js
import { createApp } from "vue";
import ArcoVue from "@arco-design/web-vue";
import ArcoVueIcon from "@arco-design/web-vue/es/icon";
import App from "./App.vue";
import PangeaUi from "pangea-ui";
import "pangea-ui/dist/style.css";

createApp(App).use(ArcoVue).use(ArcoVueIcon).use(PangeaUi).mount("#app");

使用示例

html
<template>
  <HiPageDesign
    ref="design"
    :json="state.json"
    type="PC"
    :component-list="componentList"
    :open-intl="openIntl"
    :intl-option="intlOption"
  >
    <template #action>
      <a-button type="primary" @click="save">保存</a-button>
    </template>
  </HiPageDesign>
</template>

<script lang="ts" setup>
  import { reactive, ref } from "vue";
  import { useI18n } from "vue-i18n";
  import componentList from "pangea-ui/dist/customConfig";

  const design = ref();
  const state = reactive({
    json: {
      pages: [
        {
          type: "default",
          name: "默认页",
          key: 0,
          props: {
            backgroundColor: "#f0f2f5",
            padding: "",
          },
          coms: [],
        },
      ],
      apis: [],
      params: [],
    },
  });
  const openIntl = ref(true); // 是否开启国际化
  const { t } = useI18n();
  const intlOption = {
    intlList: [], // 设计器左侧国际化的列表数据
    langList: [
      {
        languageCode: "zh_CN",
        languageName: "简体中文",
      },
      {
        languageCode: "en_GB",
        languageName: "English",
      },
    ], // 支持配置的语言列表
    languageCode: "zh_CN", // 当前语言环境
    registerMessage: registerMessage, // 国际化注册方法, 用于设计器内实时注册国际化数据
    showAlias: showAlias, // 国际化值渲染函数
  };

  // 注册国际化,intlList为设计器内已添加的国际化数据
  // intlList数据示例:[{LANGUAGE_KEY: "intl_uuid", "zh_CN": "测试", "en_GB": "test"}]
  function registerMessage(intlList) {
    // 用户根据传入的国际化数据以及系统当前的语言环境处理进行国际化注册
  }

  // 将国际化key等渲染为显示数据
  function showAlias(val) {
    let aliasT = val;
    let alias = val;
    try {
      alias = JSON.parse(val);
    } catch (error) {}
    if (alias && typeof alias === "object") {
      // 对象
      if (alias.intlKey) {
        aliasT = t?.(alias.intlKey) || alias.intlKey;
      } else {
        aliasT = alias.val;
      }
    } else if (alias && typeof alias === "string") {
      // 字符串
      aliasT = alias.startsWith("intl_") ? t?.(alias) : alias;
    }
    return aliasT;
  }

  const save = () => {
    console.log(design.value.getPageJson());
    state.json.pages[0].name += "1";
  };
</script>

API

Props

参数名描述类型默认值
json设计器页面配置数据Object[]
tabs顶部 tab 页签配置项tabs[]
componentList组件列表数据,不传入时使用默认组件列表componentList[]
templateList模板列表数据,不传入不显示模板列表templateList[]
openIntl是否开启国际化boolean
intlOption国际化配置项intlOption
type设计器类型PC/mobilePC
customCodeSuggestion自定义代码编辑提示ICustomCodeSuggestion[][]

intlOption

参数名描述类型默认值
intlList设计器中的国际化数据列表IntlItem[][]
langList国际化语言列表LanguageItem[]
languageCode当前语言环境stringzh_CN
registerMessage设计器内注册国际化方法function
showAlias渲染国际化数据方法function

slot

属性名描述
logo设计器头部 logo 和标题自定义区域
action设计器头部操作按钮自定义区域

events

属性名描述
getPageJson获取 json 方法
getIntlData获取设计器内的国际化列表数据
getComponentList获取组件列表数据
javascript
interface tabs {
  icon: ""; // 图标
  title: ""; // 标题
  slotName: ""; // name
}
interface componentList {
  id: "";
  groupName: "";
  comDetailsList: [
    {
      code: string,
      name: string,
      desc: string,
      icon: string,
      config: any,
      defaultProps: any,
    }
  ];
}
interface templateList {
  code: string;
  name: string;
  desc: string;
  icon: string;
  config: any;
  defaultProps: any;
}
interface LanguageItem {
  langaugeCode: string;
  languageName: string;
}
interface IntlItem {
  LANGUAGE_KEY: string;
  [语言编码]: string;
}
interface ICustomCodeSuggestion {
  meta: string; // 提示信息
  caption: string; // 触发内容
  value: string; // 自动填充代码内容
  score: number; // 权重,数值越大越靠前
}

国际化说明

目前设计器支持中文英文两种语言。 传递国际化语言列表时遵循统一的语言编码。

javascript
{
  "中文": "zh_CN",
  "英文": "en_GB",
  "日语": "ja_JP",
  "法语": "fr_FR",
  "西班牙语": "es_ES",
  "越南语": "vi_VN",
  ...
}