ParamsSettingDialog.vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <template>
  2. <div>
  3. <el-dialog
  4. title="参数配置"
  5. :visible.sync="dialogVisible"
  6. width="1000px"
  7. append-to-body
  8. :close-on-click-modal="false"
  9. :before-close="handleClose"
  10. class="bs-dialog-wrap bs-el-dialog"
  11. >
  12. <div class="bs-table-box">
  13. <el-table
  14. ref="singleTable"
  15. :data="paramsList"
  16. :border="true"
  17. align="center"
  18. class="bs-el-table"
  19. >
  20. <el-empty slot="empty" />
  21. <el-table-column
  22. prop="name"
  23. label="参数名称"
  24. align="center"
  25. >
  26. <template slot-scope="scope">
  27. <el-input
  28. v-model="scope.row.name"
  29. class="bs-el-input"
  30. placeholder="请输入名称"
  31. clearable
  32. @change="checkParamsName(scope.row)"
  33. />
  34. </template>
  35. </el-table-column>
  36. <!-- <el-table-column
  37. prop="type"
  38. label="参数类型"
  39. align="center"
  40. width="200"
  41. filterable
  42. >
  43. <template slot-scope="scope">
  44. <el-select
  45. v-model="scope.row.type"
  46. popper-class="bs-el-select"
  47. class="bs-el-select"
  48. placeholder="请选择"
  49. >
  50. <el-option
  51. v-for="item in typeOptions"
  52. :key="item.value"
  53. :label="item.value"
  54. :value="item.value"
  55. />
  56. </el-select>
  57. </template>
  58. </el-table-column> -->
  59. <el-table-column
  60. prop="require"
  61. label="是否必填"
  62. align="center"
  63. width="200"
  64. filterable
  65. >
  66. <template slot-scope="scope">
  67. <el-radio-group v-model="scope.row.require">
  68. <el-radio :label="1">
  69. </el-radio>
  70. <el-radio :label="0">
  71. </el-radio>
  72. </el-radio-group>
  73. </template>
  74. </el-table-column>
  75. <el-table-column
  76. prop="value"
  77. label="参数值"
  78. align="center"
  79. >
  80. <template slot-scope="scope">
  81. <el-date-picker
  82. v-if="scope.row.type === 'Date'"
  83. v-model="scope.row.value"
  84. type="datetime"
  85. value-format="yyyy-MM-dd HH:mm:ss"
  86. placeholder="选择日期时间"
  87. />
  88. <el-input
  89. v-else
  90. v-model="scope.row.value"
  91. class="bs-el-input"
  92. clearable
  93. placeholder="请输入值"
  94. />
  95. </template>
  96. </el-table-column>
  97. <el-table-column
  98. prop="remark"
  99. label="备注"
  100. align="center"
  101. >
  102. <template slot-scope="scope">
  103. <el-input
  104. v-model="scope.row.remark"
  105. clearable
  106. class="bs-el-input"
  107. placeholder="请输入备注"
  108. rows="2"
  109. maxlength="200"
  110. />
  111. </template>
  112. </el-table-column>
  113. <el-table-column
  114. label="操作"
  115. width="105"
  116. align="center"
  117. >
  118. <template slot="header">
  119. <el-button
  120. icon="el-icon-plus"
  121. type="text"
  122. class="no-border"
  123. @click="addParam"
  124. >
  125. 添加
  126. </el-button>
  127. </template>
  128. <template slot-scope="scope">
  129. <el-button
  130. type="text"
  131. style="color: #e47470;"
  132. class="no-border"
  133. @click="delRow(scope.$index)"
  134. >
  135. 删除
  136. </el-button>
  137. </template>
  138. </el-table-column>
  139. </el-table>
  140. </div>
  141. <span
  142. slot="footer"
  143. class="dialog-footer"
  144. >
  145. <el-button
  146. class="bs-el-button-default"
  147. @click="cancel"
  148. >
  149. 取消
  150. </el-button>
  151. <el-button
  152. type="primary"
  153. @click="confirm"
  154. >
  155. 确定
  156. </el-button>
  157. </span>
  158. </el-dialog>
  159. </div>
  160. </template>
  161. <script>
  162. import { cloneDeep } from 'lodash'
  163. export default {
  164. name: 'ParamsSettingDialog',
  165. props: {
  166. paramsList: {
  167. type: Array,
  168. default: () => []
  169. }
  170. },
  171. data () {
  172. return {
  173. dialogVisible: false
  174. }
  175. },
  176. methods: {
  177. open () {
  178. this.dialogVisible = true
  179. },
  180. close () {
  181. this.dialogVisible = false
  182. },
  183. handleClose () {
  184. this.dialogVisible = false
  185. },
  186. addParam () {
  187. this.paramsList.push({
  188. name: '',
  189. type: '',
  190. value: '',
  191. status: 1,
  192. require: 0,
  193. remark: ''
  194. })
  195. },
  196. delRow (index) {
  197. this.paramsList.splice(index, 1)
  198. },
  199. checkParamsName (value) {
  200. const checkList = this.paramsList.filter(item => item.fieldName === value.name)
  201. if (checkList.length) {
  202. this.$message.warning('参数名称不可以与字段名相同!')
  203. value.name = ''
  204. }
  205. },
  206. cancel () {
  207. this.dialogVisible = false
  208. },
  209. confirm () {
  210. this.$emit('saveParams', cloneDeep(this.paramsList))
  211. this.dialogVisible = false
  212. }
  213. }
  214. }
  215. </script>
  216. <style lang="scss" scoped>
  217. @import '../../../assets/style/bsTheme.scss';
  218. </style>