template.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. /*
  2. * @Description: 页面快速生成脚本
  3. * @Date: 2018-12-06 10:28:08
  4. * @LastEditTime: 2018-12-12 17:02:36
  5. */
  6. const fs = require('fs');
  7. const path = require('path');
  8. const basePath = path.resolve(__dirname, '../src');
  9. const dirName = process.argv[2];
  10. const capPirName = dirName.substring(0, 1).toUpperCase() + dirName.substring(1);
  11. if (!dirName) {
  12. console.log('文件夹名称不能为空!');
  13. console.log('示例:npm run tep ${capPirName}');
  14. process.exit(0)
  15. }
  16. /**
  17. * @msg: vue页面模版
  18. */
  19. const VueTep = `<template>
  20. <div class="${dirName}-wrap">
  21. {{data.pageName}}
  22. </div>
  23. </template>
  24. <script lang="ts" src="./${dirName}.ts"></script>
  25. <style lang="scss">
  26. @import './${dirName}.scss'
  27. </style>
  28. `;
  29. // ts 模版
  30. const tsTep = `import { Component, Vue } from "vue-property-decorator"
  31. import { Getter, Action } from "vuex-class"
  32. import { ${capPirName}Data } from '@/types/views/${dirName}.interface'
  33. // import { } from "@/components" // 组件
  34. @Component({})
  35. export default class About extends Vue {
  36. // Getter
  37. // @Getter author
  38. // Action
  39. // @Action GET_DATA_ASYN
  40. // data
  41. data: ${capPirName}Data = {
  42. pageName: '${dirName}'
  43. }
  44. created() {
  45. //
  46. }
  47. activated() {
  48. //
  49. }
  50. mounted() {
  51. //
  52. }
  53. // 初始化函数
  54. init() {
  55. //
  56. }
  57. }
  58. `;
  59. // scss 模版
  60. const scssTep = `@import "@/assets/scss/variables.scss";
  61. .${dirName}-wrap {
  62. width: 100%;
  63. }
  64. `;
  65. // interface 模版
  66. const interfaceTep = `// ${dirName}.Data 参数类型
  67. export interface ${capPirName}Data {
  68. pageName: string
  69. }
  70. // VUEX ${dirName}.State 参数类型
  71. export interface ${capPirName}State {
  72. author?: string
  73. }
  74. // GET_DATA_ASYN 接口参数类型
  75. // export interface DataOptions {}
  76. `;
  77. // vuex 模版
  78. const vuexTep = `
  79. import { ${capPirName}State } from '@/types/views/${dirName}.interface'
  80. import { GetterTree, MutationTree, ActionTree } from 'vuex'
  81. const state: ${capPirName}State = {
  82. author: '三毛'
  83. }
  84. // 强制使用getter获取state
  85. const getters: GetterTree<${capPirName}State, any> = {
  86. author: (state: ${capPirName}State) => state.author
  87. }
  88. // 更改state
  89. const mutations: MutationTree<${capPirName}State> = {
  90. // 更新state都用该方法
  91. UPDATE_STATE(state: ${capPirName}State, data: ${capPirName}State) {
  92. for (const key in data) {
  93. if (!data.hasOwnProperty(key)) { return }
  94. state[key] = data[key]
  95. }
  96. }
  97. }
  98. const actions: ActionTree<${capPirName}State, any> = {
  99. UPDATE_STATE_ASYN({ commit, state: ${capPirName}State }, data: ${capPirName}State) {
  100. commit('UPDATE_STATE', data)
  101. },
  102. // GET_DATA_ASYN({ commit, state: LoginState }) {
  103. // ${capPirName}.getData()
  104. // }
  105. }
  106. export default {
  107. state,
  108. getters,
  109. mutations,
  110. actions
  111. }
  112. `;
  113. // api 接口模版
  114. const apiTep = `import Api from '@/utils/request'
  115. export const getData = (data) => {
  116. return Api.getData(data)
  117. }
  118. `;
  119. fs.mkdirSync(`${basePath}/views/${dirName}`); // mkdir
  120. process.chdir(`${basePath}/views/${dirName}`); // cd views
  121. fs.writeFileSync(`${dirName}.vue`, VueTep); // vue
  122. fs.writeFileSync(`${dirName}.ts`, tsTep); // ts
  123. fs.writeFileSync(`${dirName}.scss`, scssTep); // scss
  124. process.chdir(`${basePath}/types/views`); // cd types
  125. fs.writeFileSync(`${dirName}.interface.ts`, interfaceTep); // interface
  126. process.chdir(`${basePath}/store/module`); // cd store
  127. fs.writeFileSync(`${dirName}.ts`, vuexTep); // vuex
  128. process.chdir(`${basePath}/api`); // cd api
  129. fs.writeFileSync(`${dirName}.ts`, apiTep); // api
  130. process.exit(0);