ParamsSettingDialog.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  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. />
  109. </template>
  110. </el-table-column>
  111. <el-table-column
  112. label="操作"
  113. width="105"
  114. align="center"
  115. >
  116. <template slot="header">
  117. <el-button
  118. icon="el-icon-plus"
  119. type="text"
  120. class="no-border"
  121. @click="addParam"
  122. >
  123. 添加
  124. </el-button>
  125. </template>
  126. <template slot-scope="scope">
  127. <el-button
  128. type="text"
  129. style="color: #e47470;"
  130. class="no-border"
  131. @click="delRow(scope.$index)"
  132. >
  133. 删除
  134. </el-button>
  135. </template>
  136. </el-table-column>
  137. </el-table>
  138. </div>
  139. <span
  140. slot="footer"
  141. class="dialog-footer"
  142. >
  143. <el-button
  144. class="bs-el-button-default"
  145. @click="cancel"
  146. >
  147. 取消
  148. </el-button>
  149. <el-button
  150. type="primary"
  151. @click="confirm"
  152. >
  153. 确定
  154. </el-button>
  155. </span>
  156. </el-dialog>
  157. </div>
  158. </template>
  159. <script>
  160. import { cloneDeep } from 'lodash'
  161. export default {
  162. name: 'ParamsSettingDialog',
  163. props: {
  164. paramsList: {
  165. type: Array,
  166. default: () => []
  167. }
  168. },
  169. data () {
  170. return {
  171. dialogVisible: false
  172. }
  173. },
  174. methods: {
  175. open () {
  176. this.dialogVisible = true
  177. },
  178. close () {
  179. this.dialogVisible = false
  180. },
  181. handleClose () {
  182. this.dialogVisible = false
  183. },
  184. addParam () {
  185. this.paramsList.push({
  186. name: '',
  187. type: '',
  188. value: '',
  189. status: 1,
  190. require: 0,
  191. remark: ''
  192. })
  193. },
  194. delRow (index) {
  195. this.paramsList.splice(index, 1)
  196. },
  197. checkParamsName (value) {
  198. const checkList = this.paramsList.filter(item => item.fieldName === value.name)
  199. if (checkList.length) {
  200. this.$message.warning('参数名称不可以与字段名相同!')
  201. value.name = ''
  202. }
  203. },
  204. cancel () {
  205. this.dialogVisible = false
  206. },
  207. confirm () {
  208. this.$emit('saveParams', cloneDeep(this.paramsList))
  209. this.dialogVisible = false
  210. }
  211. }
  212. }
  213. </script>
  214. <style lang="scss" scoped>
  215. @import '../../../packages/assets/style/bsTheme.scss';
  216. </style>