ShacoPage低代码模板开发文档

shaco本人参考了了大多数的后台页面的设计,归纳出后台页面常见的模块划分。为满足大多数企业需求抽象出三个主流模块区域,即:headerConfig区域,searchConfig区域,tableConfig区域。

该模版搭配elementPlus组件库并且配置了响应式,更友好的在移动端,PC端展示,根据公司业务来判定是否能使用该模版,切勿盲目使用。

该模版的理念是: less complex logic , more extends config 。少量的复杂逻辑,更多更灵活的配置项

在这里插入图片描述

headerConfig配置项

属性属性介绍类型
title页面标题String
isAdorn标题前缀Boolean
isBottomLineheader区域底部分割线Boolean
adormClass自定义标题前缀class类名String
operationConfig右侧操作按钮配置项Object

operationConfig配置项

右侧操作按钮放在operationConfig的children配置项中 比如新增按钮,可以唤醒Dialog弹窗
具体children配置项如下

属性属性介绍类型
labelbutton名称String
type类型,可选项如:dialog,confirm,link等后续会进一步扩展String
permission按钮展示权限控制String
extendsOptionsbutton扩展项Object
callback接口或者操作函数Function
formConfig表单配置Object
formConfig配置项

formConfig来配置dialog中的Form表单

属性属性介绍类型
colLayOut响应式布局 colLayOut: {xl: 24,lg: 24,md: 24,sm: 24,xs: 24}Object
labelWidth表单label宽度String
labelPosition表单label位置,可选项:‘left’ , ‘right’ , ‘top’String
dialogConfigdialog配置Object
formData表单数据配置Object
dialogConfig配置项

具体配置项参见Element-Plus中 Dialog配置项

属性属性介绍类型
titledialog标题String
center是否居中Boolean
widthdialog宽度
formData配置项
属性属性介绍类型
model绑定的model值String
label表单label名称String
type表单项类型,可选:input,password,select,datepicker,image等,需进一步完善String
placeholder表单placeholderString
labelWidth表单label宽度,单独设置String
maxWidth表单项最大宽度,无需加单位String
options当type为select时,选择项配置String
aliasValue当type为select时,value别名String
aliasLabel当type为select时,label别名String
pickerType当type为datepicker时,可以选择datepicker的类型,比如:daterange等详情参见ElementPlusString
format当type为datepicker时,组件显示的时间格式,比如:“YYYY-MM-DD HH:mm:ss”String
valueFormat当type为datepicker时,组件绑定的值的时间格式,当为’x’时代表时间戳String

searchConfig配置项

属性属性介绍类型
labelWidth标签宽度String
labelPosition标签位置String
gutter各个label之间的间隔Number
colLayOut响应式布局 colLayOut: {xl: 24,lg: 24,md: 24,sm: 24,xs: 24}Object
searchText搜索按钮文本内容String
resetText重置按钮文本内容String
searchFunction获取tableData的逻辑函数Function
formData配置项
属性属性介绍类型
model绑定的model值String
label表单label名称String
type表单项类型,可选:input,password,select,datepicker,image等,需进一步完善String
placeholder表单placeholderString
labelWidth表单label宽度,单独设置String
maxWidth表单项最大宽度,无需加单位String
options当type为select时,选择项配置String
aliasValue当type为select时,value别名String
aliasLabel当type为select时,label别名String
pickerType当type为datepicker时,可以选择datepicker的类型,比如:daterange等详情参见ElementPlusString
format当type为datepicker时,组件显示的时间格式,比如:“YYYY-MM-DD HH:mm:ss”String
valueFormat当type为datepicker时,组件绑定的值的时间格式,当为’x’时代表时间戳String

tableConfig配置项

属性属性介绍类型
callback初始化table数据的回调Function
datasName后端接口返回的table数据的别名String
totalCountAlias后端返回数据的总条数,一般用于表格的分页Number
extendOption表格的属性,参考element-plus中表格的属性Object
isShowIndex是否展示表格index列Boolean
isShowSection是否展示表格section列Boolean
tablePropstableItem每一项的配置Object
tableProps配置项
属性属性介绍类型
proptable数据展示的字段名称String
label表头名称String
align每一项的排列方式String
minWidth表格内容的最小宽度String
width表格固定宽度String
fixed固定表格的哪一列,比如:true / ‘left’ / ‘right’String
formatConfig表格内容处理configObject
operationConfig表格操作项配置,同headerConfig中的operationConfigObject
formatConfig配置项
属性属性介绍类型
typetable数据展示的类型,默认是text类型,可选:“text” “button” “link” “image” “tag”String
format处理数据的回调函数Function
extendsOptions灵活的可扩展项,详情参见ElementPlus的button,link,image,tag配置Object

案例展示

页面效果:

在这里插入图片描述

<template>
  <div class="container">
    <shacoPage :config="config"></shacoPage>
  </div>
</template>

<script lang="tsx">
import { defineComponent, ref } from "vue";
import shacoPage from "@/components/shacoPage/index.vue";
import IForm from "@/components/shacoPage/type";
import { spaceData, spaceDataAdd, spaceDatadel } from "@/api/space";
export default defineComponent({
  name: "HomeView",
  components: {
    shacoPage,
  },
  setup() {
    const config = ref({} as IForm);
    config.value = {
      headerConfig: {
        title: "我的心意",
        isAdorn: true,
        isBottomLine: true,
        adormClass: "adormClass",
        operationConfig: {
          chlidren: [
            {
              label: "新增",
              type: "dialog",
              permission: "la128",
              extendsOptions: {
                // plain: true,
                // type: "primary",
              },
              callback: spaceDataAdd,
              formConfig: {
                colLayOut: {
                  xl: 24,
                  lg: 24,
                  md: 24,
                  sm: 24,
                  xs: 24,
                },
                labelWidth: "150",
                labelPosition: "right",
                dialogConfig: {
                  title: "新增素材",
                  center: true,
                  width: "600px",
                },
                formData: [
                  {
                    model: "material_name",
                    label: "素材名称",
                    type: "datepicker",
                    placeholder: "请输入素材名称",
                    extendOption: {},
                    maxWidth: "300",
                  },
                  {
                    model: "material_type",
                    label: "素材类型",
                    type: "select",
                    placeholder: "请选择",
                    options: [
                      { id: "#", name: "全部" },
                      { id: "PIC", name: "图片" },
                      { id: "VDO", name: "视频" },
                    ],
                    aliasValue: "id",
                    aliasLabel: "name",
                    maxWidth: "300",
                  },
                  {
                    model: "project_id",
                    label: "关联项目",
                    type: "select",
                    placeholder: "请选择",
                    options: [
                      { code: "#", label: "全部" },
                      { code: "8", label: "1昊楼" },
                      { code: "10", label: "ztz002" },
                    ],
                    aliasValue: "code",
                    aliasLabel: "label",
                    maxWidth: "300",
                  },
                  {
                    model: "position",
                    label: "关联位置",
                    type: "select",
                    placeholder: "请选择",
                    options: [
                      { code: "#", label: "全部" },
                      { code: "SY", label: "首页" },
                    ],
                    aliasValue: "code",
                    aliasLabel: "label",
                    maxWidth: "300",
                  },
                  {
                    model: "material_url",
                    label: "图片",
                    type: "input",
                    maxWidth: "300",
                  },
                ],
              },
            },
          ],
        },
      },
      searchConfig: {
        labelWidth: "80",
        labelPosition: "right",
        gutter: 10,
        colLayOut: {
          xl: 6,
          lg: 6,
          md: 12,
          sm: 24,
          xs: 24,
        },
        searchText: "查询",
        resetText: "重置",
        searchFunction: (val: any) => {
          // 这里做一些 获取tableData的逻辑
          console.log(val);
        },
        formData: [
          {
            model: "keyword",
            label: "素材名称",
            type: "input",
            placeholder: "请输入素材名称",
            extendOption: {},
          },
          // {
          //   model: "status",
          //   label: "我的选择",
          //   type: "select",
          //   placeholder: "请选择",
          //   options: [
          //     { code: "#", label: "全部" },
          //     { code: "WCL", label: "待处理" },
          //     { code: "FU", label: "跟进中" },
          //     { code: "EN", label: "完结" },
          //   ],
          //   aliasValue: "code",
          //   aliasLabel: "label",
          // },
          {
            model: "type",
            label: "素材类型",
            type: "select",
            placeholder: "请选择",
            options: [
              { code: "#", label: "全部" },
              { code: "PIC", label: "图片" },
              { code: "VDO", label: "视频" },
            ],
            aliasValue: "code",
            aliasLabel: "label",
          },
          {
            model: "project_ids",
            label: "关联项目",
            type: "select",
            placeholder: "请选择",
            options: [
              { code: "#", label: "全部" },
              { code: "8", label: "1昊楼" },
              { code: "10", label: "ztz002" },
            ],
            aliasValue: "code",
            aliasLabel: "label",
          },
          {
            model: "position",
            label: "关联位置",
            type: "select",
            placeholder: "请选择",
            options: [
              { code: "#", label: "全部" },
              { code: "SY", label: "首页" },
            ],
            aliasValue: "code",
            aliasLabel: "label",
          },
          // {
          //   model: "password",
          //   label: "我的密码",
          //   type: "password",
          //   placeholder: "请输入密码",
          // },
          // {
          //   model: "keyword",
          //   label: "搜索关键词",
          //   type: "input",
          //   placeholder: "请输入搜索关键词",
          // },
          // {
          //   model: "select",
          //   label: "我的选择",
          //   type: "select",
          //   placeholder: "请选择",
          //   options: [
          //     { code: 1, label: "张三" },
          //     { code: 2, label: "莉丝" },
          //   ],
          //   aliasValue: "code",
          //   aliasLabel: "label",
          // },
          // {
          //   model: "date",
          //   label: "时间选择器",
          //   type: "datepicker",
          //   placeholder: "请选择时间",
          //   pickerType: "date",
          //   labelWidth: "100",
          //   format: "YYYY-MM-DD HH:mm:ss",
          //   valueFormat: "x",
          //   maxWidth: "300",
          // },
          // {
          //   model: "date2",
          //   label: "我的选择器",
          //   type: "datepicker",
          //   placeholder: "请选择时间2",
          //   pickerType: "daterange",
          //   labelWidth: "100",
          //   format: "YYYY-MM-DD HH:mm:ss",
          //   valueFormat: "x",
          //   startPlaceholder: "我是开始的placeholder",
          //   endPlaceholder: "我是结束的placeholder",
          // },
        ],
      },
      tableConfig: {
        callback: spaceData,
        datasName: "datas",
        totalCountAlias: "totalCount",
        extendOption: {
          border: true,
          stripe: true,
        },
        isShowIndex: true,
        isShowSection: true,
        tableProps: [
          {
            prop: "url",
            label: "图片",
            align: "center",
            minWidth: "200",
            formatConfig: {
              type: "image",
              extendsOptions: {
                "hide-on-click-modal": true,
              },
            },
          },
          {
            prop: "name",
            label: "素材名称",
            minWidth: "200",
            align: "center",
            formatConfig: {
              type: "link",
              // extendsOptions: {
              //   type: "primary",
              //   target: "_blank",
              //   href: "https://www.baidu.com",
              // },
              // format: (val: any, allVal: any) => {
              //   return val + "link";
              // },
            },
          },
          {
            prop: "typeVal",
            label: "素材类型",
            minWidth: "200",
            align: "center",
            // formatConfig: {
            //   type: "tag", // "text" "button" "link" "image" "tag"
            //   extendsOptions: {
            //     target: "_blank",
            //     href: "https://www.baidu.com",
            //   },
            //   format: (val: any, allVal: any) => {
            //     let arr = [];
            //     for (let i = 0; i < val.length; i++) {
            //       if ((i + 1) % 2 == 0) {
            //         arr.push(val[i]);
            //       }
            //     }
            //     return arr;
            //   },
            // },
          },

          {
            prop: "positionVal",
            label: "素材位置",
            align: "center",
            minWidth: "200",
          },
          {
            prop: "linkTypeVal",
            label: "链接类型",
            align: "center",
            minWidth: "200",
          },
          {
            prop: "linkUrl",
            label: "链接",
            align: "center",
            minWidth: "200",
          },
          {
            prop: "statusVal",
            label: "关联项目",
            align: "center",
            minWidth: "200",
            // formatConfig: {
            //   format: (val: any) => {
            //     return val + "123";
            //   },
            // },
          },
          {
            prop: "createTime",
            label: "创建时间",
            align: "center",
            minWidth: "200",
            formatConfig: {
              // type: "button",
              // extendsOptions: {
              //   type: "primary",
              //   size: "small",
              //   plain: true,
              // },
              format: (val: any) => {
                console.log(val, "val");
                let date = new Date(val);
                return (
                  date.getFullYear() +
                  "-" +
                  (date.getMonth() * 1 + 1) +
                  "-" +
                  date.getDate() +
                  " " +
                  date.getHours() +
                  ":" +
                  date.getMinutes() +
                  ":" +
                  date.getSeconds()
                );
              },
            },
          },
          // {
          //   prop: "status",
          //   label: "状态",
          //   align: "center",
          //   minWidth: "200",
          //   formatConfig: {
          //     type: "button",
          //     extendsOptions: {
          //       type: "primary",
          //       size: "small",
          //       plain: true,
          //     },
          //     format: (val: any, allVal: any) => {
          //       return val + "999";
          //     },
          //   },
          // },
          {
            label: "操作",
            align: "center",
            width: "150",
            fixed: "right",
            operationConfig: {
              chlidren: [
                {
                  label: "编辑",
                  type: "dialog",
                  permission: "la123",
                  callback: spaceDataAdd,
                  formConfig: {
                    colLayOut: {
                      xl: 24,
                      lg: 24,
                      md: 24,
                      sm: 24,
                      xs: 24,
                    },
                    labelWidth: "150",
                    labelPosition: "right",
                    dialogConfig: {
                      title: "编辑素材",
                      center: true,
                      width: "600px",
                    },
                    editInitKey: [
                      "name",
                      "type",
                      "projectId",
                      "position",
                      "url",
                    ],
                    formData: [
                      {
                        model: "material_name",
                        label: "素材名称",
                        type: "input",
                        placeholder: "请输入素材名称",
                        extendOption: {},
                        maxWidth: "300",
                      },
                      {
                        model: "material_type",
                        label: "素材类型",
                        type: "select",
                        placeholder: "请选择",
                        options: [
                          { code: "#", label: "全部" },
                          { code: "PIC", label: "图片" },
                          { code: "VDO", label: "视频" },
                        ],
                        aliasValue: "code",
                        aliasLabel: "label",
                        maxWidth: "300",
                      },
                      {
                        model: "project_id",
                        label: "关联项目",
                        type: "select",
                        placeholder: "请选择",
                        options: [
                          { code: "#", label: "全部" },
                          { code: "8", label: "1昊楼" },
                          { code: "10", label: "ztz002" },
                        ],
                        aliasValue: "code",
                        aliasLabel: "label",
                        maxWidth: "300",
                      },
                      {
                        model: "position",
                        label: "关联位置",
                        type: "select",
                        placeholder: "请选择",
                        options: [
                          { code: "#", label: "全部" },
                          { code: "SY", label: "首页" },
                        ],
                        aliasValue: "code",
                        aliasLabel: "label",
                        maxWidth: "300",
                      },
                      {
                        model: "material_url",
                        label: "图片",
                        type: "input",
                        maxWidth: "300",
                      },
                    ],
                  },
                },
                {
                  label: "删除",
                  type: "dialog",
                  permission: "la124",
                  callback: (val: any) => {
                    return spaceDatadel({ id: val.id });
                  },
                },
              ],
            },
          },
        ],
      },
    };

    return {
      config,
    };
  },
});
</script>

<style scoped>
.container {
  width: 100vw;
  height: 100vh;
  background-color: #ccc;
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小张很嚣张~

支持一下小老弟吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值