ListConfig.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <!--
  2. * @Author: WangJiaCheng
  3. * @Date: 2021-05-12 15:36:33
  4. * @LastEditors: WangJiaCheng
  5. * @LastEditTime: 2021-07-27 10:17:04
  6. * @Description:
  7. -->
  8. <template>
  9. <div class="form-config">
  10. <el-form
  11. ref="listForm"
  12. :rules="rules"
  13. :model="formData"
  14. label-width="100px"
  15. >
  16. <el-form-item label="列表模型" prop="listModel">
  17. <el-select v-model="formData.listModel" placeholder="请选择">
  18. <el-option
  19. v-for="item in options"
  20. :key="item.value"
  21. :label="item.label"
  22. :value="item.value"
  23. />
  24. </el-select>
  25. </el-form-item>
  26. <!-- TODO: 是否可以打通yapi接口,提供接口选择 -->
  27. <el-form-item label="列表接口">
  28. <el-input
  29. v-model="formData.listApi"
  30. />
  31. </el-form-item>
  32. <el-form-item label="请求方式">
  33. <el-input
  34. v-model="formData.apiMethod"
  35. />
  36. </el-form-item>
  37. <el-form-item label="表格列配置">
  38. <el-table
  39. border
  40. :data="tableData"
  41. style="width: 100%"
  42. >
  43. <el-table-column
  44. prop="type"
  45. label="类型"
  46. width="180"
  47. >
  48. <template slot-scope="{row}">
  49. <el-select v-model="row.type" placeholder="请选择">
  50. <el-option
  51. v-for="item in options"
  52. :key="item.value"
  53. :label="item.label"
  54. :value="item.value"
  55. />
  56. </el-select>
  57. </template>
  58. </el-table-column>
  59. <el-table-column
  60. prop="field"
  61. label="列字段"
  62. width="180"
  63. >
  64. <template slot-scope="{row}">
  65. <el-input
  66. v-model="row.field"
  67. />
  68. </template>
  69. </el-table-column>
  70. <el-table-column
  71. prop="name"
  72. label="列名称"
  73. width="180"
  74. >
  75. <template slot-scope="{row}">
  76. <el-input
  77. v-model="row.name"
  78. />
  79. </template>
  80. </el-table-column>
  81. <el-table-column
  82. prop="minWidth"
  83. label="最小宽度"
  84. width="180"
  85. >
  86. <template slot-scope="{row}">
  87. <el-input
  88. v-model="row.minWidth"
  89. />
  90. </template>
  91. </el-table-column>
  92. <el-table-column
  93. prop="width"
  94. label="宽度"
  95. width="180"
  96. >
  97. <template slot-scope="{row}">
  98. <el-input
  99. v-model="row.width"
  100. />
  101. </template>
  102. </el-table-column>
  103. <el-table-column
  104. prop="fixed"
  105. label="固定"
  106. width="80"
  107. >
  108. <template slot-scope="{row}">
  109. <el-switch
  110. v-model="row.fixed"
  111. />
  112. </template>
  113. </el-table-column>
  114. <el-table-column
  115. prop="filter"
  116. label="表头过滤"
  117. width="180"
  118. />
  119. <el-table-column
  120. prop="edit"
  121. label="操作"
  122. width="180"
  123. />
  124. </el-table>
  125. <el-button
  126. style="margin-top: 8px"
  127. @click="addCol"
  128. >
  129. 新增列
  130. </el-button>
  131. </el-form-item>
  132. <el-form-item>
  133. <el-button type="primary" @click="next">下一步</el-button>
  134. <el-button type="primary" @click="previewCode">预览代码</el-button>
  135. </el-form-item>
  136. </el-form>
  137. </div>
  138. </template>
  139. <script>
  140. import { mapMutations } from 'vuex'
  141. export default {
  142. name: 'ListConfig',
  143. components: {
  144. },
  145. data() {
  146. return {
  147. formData: {},
  148. rules: {},
  149. options: [
  150. {
  151. value: '1',
  152. label: '列表1'
  153. },
  154. {
  155. value: '2',
  156. label: '列表2'
  157. }
  158. ],
  159. tableData: [
  160. {
  161. type: '',
  162. name: '',
  163. field: '',
  164. minWidth: '',
  165. width: '',
  166. fixed: false,
  167. filter: ''
  168. }
  169. ]
  170. }
  171. },
  172. methods: {
  173. ...mapMutations('page', ['setListConfig', 'setActiveTab']),
  174. next() {
  175. this.setListConfig({ ...this.formData, list: this.tableData })
  176. this.setActiveTab('detail')
  177. },
  178. previewCode() {
  179. this.$emit('preview', { ...this.formData, list: this.tableData }, 'list')
  180. },
  181. addCol() {
  182. this.tableData.push({
  183. type: '',
  184. name: '',
  185. field: '',
  186. minWidth: '',
  187. width: '',
  188. fixed: false,
  189. filter: ''
  190. })
  191. }
  192. }
  193. }
  194. </script>
  195. <style lang="less">
  196. </style>