Генератор внешнего кода - генерировать внешний код в соответствии с интерфейсом

Vue.js
Генератор внешнего кода - генерировать внешний код в соответствии с интерфейсом

до

Текущий генератор кода в основном генерирует соответствующий интерфейсный и внутренний код на основе таблицы базы данных.Преимущество заключается в том, что интерфейс и серверная часть могут быть выполнены одновременно. Однако в реальной разработке многим предприятиям необходимо связывать таблицы, поэтому в этом случае прямая генерация фронт-кода по интерфейсу экономит время на соединение полей с фоном, а также экономит операцию копирования.

Исходя из этого, у меня возникла идея написать генератор кода фронтенда на основе интерфейса. Поскольку в нашей компании есть два типа документов API, а также два фреймворка vue2+element и vue3+ant+ts во внешнем интерфейсе, таким образом, расширяются три вида генераторов кода.

идеи

Генератор внешнего кода, проще говоря:

Первым шагом является получение входных/выходных параметров интерфейса через интерфейсный документ и форматирование входных/выходных параметров в определенный JSON.

Второй шаг - извлечь шаблон кода в соответствии с вашим собственным проектом, объединив таблицы и компоненты формы.

Третий шаг — создание файлов vue, JS и маршрутизации через JSON и шаблоны кода первого и второго шагов.

Введение

Этот проект использует puppeteer для чтения веб-страницы документа интерфейса, получения ссылок интерфейса, входных параметров, выходных параметров и т. д., а также записи и полугенерации json в определенном формате.

Технические решения

Для получения входных параметров и выходных параметров интерфейса в интерфейсном документе я использую для их получения краулер фреймворк puppeteer.По полученным входным параметрам и выходным параметрам, в сочетании с шаблоном кода, файлы добавления, удаления и модификации, которые фактически помещаются в проект, генерируются, чтобы добиться основного добавления, удаления, модификации и проверки.Больше кодирования. В то же время он поддерживает операции с формами, такие как аудит

Генерировать файлы с помощью fs.writeFile

иллюстрировать

В настоящее время в проекте приведен только код для генерации элемента vue2+ в соответствии с интерфейсом. Код генерируется в соответствии с конкретным компонентом. Поскольку проект заключается в сотрудничестве с интерфейсными документами компании и создании веб-сайта управления фоном компании, уровень настройки высок, поэтому этот проект можно использовать в качестве справочного материала для других друзей, а также можно изменить шаблон для реализации кода. создание собственных проектов. Для других обменов, вы можете связаться со мной.

Для компонентов таблиц и форм см. каталог компонентов в проекте, который необходимо импортировать глобально. см. каталог компонентов

Также есть код для генерации vue3+typescript+ant, который еще не анонсирован.

Компонент Описание

Большая часть фоновой системы управления состоит из форм + страниц форм, а формы\формы нужно писать одну за другой, особенно если у вас есть свои собственные требования к стилю, довольно хлопотно добавлять классы и тому подобное, а иногда и орфографию error\copy Если вовремя не обратить внимания, то возможно придется долго искать, что кажется хлопотным.Я предпочитаю конфигурационный код, поэтому стою на плечах специалистов и меняю эту форму и форму компонент. Не распыляйте, если вам это не нравится.

Инструкции по настройке

конфигурация шкалы

// 适用于scale的配置
export const config = {
  href: 'http://xxx.cn/',
  serverName: 'AdminStoreContractService',
  pages: [{
    filePath: 'promotionNew',     // 列表\新\修页面所在路径
    chunkName: 'base', // chunkName 用于路由中 require.ensure 打包参数
    list: { // 列表
      fileName: 'pn-list', // 列表文件名字
      name: '列表', // 菜单名
      apiName: 'listStoreContract',  // 列表接口名
      exportFile: { // 导出 [非必填]
        apiUrl: '',
        downFileName: ''
      }
    },
    modify: { // (修改\新增)  [非必填]
      fileName: 'modify',  // 页面名
      apiName: 'saveStoreContract',  // 接口名
      detailApi: 'getStoreContractById', // 查看详情接口名 (用于查看详情、编辑)
      hasEdit: true
    },
    opts: [ // 表格行操作
      {
        apiName: 'modifyStoreContractStatus', // 接口
        confrimMsg: '确认审核该记录', // 如果没有确认信息,则直接请求
        text: '审核'
      }
    ]
  }]
}

Swagger API Конфигурация


// 适用于swagger api 的配置
export const swaggerConfig = {
  href: 'http://xxx.com',
  serverName: 'mini-new-promotion-service',
  baseUrl: '/promotion-new/manager/',
  pages: [{
    filePath: 'promotionNew',     // 列表\新\修页面所在路径
    chunkName: 'base', // chunkName 用于路由中 require.ensure 打包参数
    list: { // 列表
      fileName: 'pn-list', // 列表文件名字
      name: '列表', // 菜单名
      apiName: 'getPromotionList',  // 列表接口名
      exportFile: { // 导出 [非必填]
        apiUrl: '',
        downFileName: ''
      }
    },
    modify: { // (修改\新增)  [非必填]
      fileName: 'modify',  // 页面名
      apiName: 'savePromotion',  // 接口名
      detailApi: 'promotionDetail', // 查看详情接口名 (用于查看详情、编辑)
      hasEdit: true
    },
    opts: [ // 表格行操作
      {
        apiName: 'updPromotionConfigStatus', // 接口
        confrimMsg: '确认审核该记录', // 如果没有确认信息,则直接请求
        text: '审核'
      }
    ]
  }]
}

Команда генерации кода

​ В настоящее время этот проект поддерживает два типа документов API, первый поддерживает swagger API, второй поддерживает масштабирование [этого типа пользователей относительно мало]

Перед выполнением команды измените конфигурацию в config.ts/swaggerConfig.ts, например, настройте URL-адрес генерируемого кода.

  • команда кода чванства
yarn run scr
  • Код команды для масштабирования
yarn run start

Сгенерированный файл:

image.png

image.png

image.png

Без лишних слов, вот код:

https://gitee.com/myreborns/curd

Генератор постоянно обновляется, добро пожаловать в общение с друзьями, если он прост в использовании, ставьте лайк.

сравнение масштаба\чванства

scale swagger
перечислить Перечисления под одним и тем же сервисом будут размещены в одном месте, что может быть размещено непосредственно в файлах, используемых в проекте. Медленно разберите его в соответствии с описанием на заднем плане.
Исходящее\входящее приобретение Требуется послойное получение Когда страница открыта, есть запрос на ее получение, просто получите возвращаемое значение запроса напрямую