HttpParamsSettingDialog.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  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. <el-form
  13. ref="form"
  14. :model="form"
  15. :rules="formRules"
  16. >
  17. <div class="bs-table-box">
  18. <el-table
  19. ref="singleTable"
  20. :data="form.params"
  21. :border="true"
  22. align="center"
  23. class="bs-el-table"
  24. >
  25. <el-empty slot="empty" />
  26. <el-table-column
  27. prop="name"
  28. label="参数名称"
  29. align="center"
  30. >
  31. <template slot-scope="scope">
  32. <el-input
  33. v-model="scope.row.name"
  34. class="bs-el-input"
  35. placeholder="请输入名称"
  36. clearable
  37. readonly
  38. @change="checkParamsName(scope.row)"
  39. />
  40. </template>
  41. </el-table-column>
  42. <el-table-column
  43. prop="require"
  44. label="是否必填"
  45. align="center"
  46. width="200"
  47. filterable
  48. >
  49. <template slot-scope="scope">
  50. <el-radio-group
  51. v-model="scope.row.require"
  52. :disabled="isUpdate"
  53. >
  54. <el-radio :label="1">
  55. </el-radio>
  56. <el-radio :label="0">
  57. </el-radio>
  58. </el-radio-group>
  59. </template>
  60. </el-table-column>
  61. <el-table-column
  62. prop="value"
  63. label="参数值"
  64. align="center"
  65. >
  66. <template slot-scope="scope">
  67. <el-date-picker
  68. v-if="scope.row.type === 'Date'"
  69. v-model="scope.row.value"
  70. type="datetime"
  71. value-format="yyyy-MM-dd HH:mm:ss"
  72. placeholder="选择日期时间"
  73. />
  74. <el-form-item
  75. v-else
  76. style="margin-bottom: 0"
  77. :prop="'params.' + scope.$index + '.value'"
  78. :rules="scope.row.require ?formRules.value:null"
  79. >
  80. <el-input
  81. v-model="scope.row.value"
  82. class="bs-el-input"
  83. clearable
  84. placeholder="请输入值"
  85. />
  86. </el-form-item>
  87. </template>
  88. </el-table-column>
  89. <el-table-column
  90. prop="remark"
  91. label="备注"
  92. align="center"
  93. >
  94. <template slot-scope="scope">
  95. <el-input
  96. v-model="scope.row.remark"
  97. clearable
  98. class="bs-el-input"
  99. placeholder="请输入备注"
  100. rows="2"
  101. :readonly="isUpdate"
  102. maxlength="200"
  103. />
  104. </template>
  105. </el-table-column>
  106. </el-table>
  107. </div>
  108. </el-form>
  109. <span
  110. slot="footer"
  111. class="dialog-footer"
  112. >
  113. <el-button
  114. class="bs-el-button-default"
  115. @click="cancel"
  116. >
  117. 取消
  118. </el-button>
  119. <el-button
  120. type="primary"
  121. @click="confirm"
  122. >
  123. 确定
  124. </el-button>
  125. </span>
  126. </el-dialog>
  127. </div>
  128. </template>
  129. <script>
  130. import cloneDeep from 'lodash/cloneDeep'
  131. export default {
  132. name: 'HttpParamsSettingDialog',
  133. props: {
  134. paramsList: {
  135. type: Array,
  136. default: () => []
  137. },
  138. newParamsList: {
  139. type: Array,
  140. default: () => []
  141. }
  142. },
  143. data () {
  144. return {
  145. isUpdate: false,
  146. dialogVisible: false,
  147. form: {
  148. params: []
  149. },
  150. formRules: {
  151. value: [{ required: true, message: '参数值不能为空', trigger: 'blur' }]
  152. }
  153. }
  154. },
  155. methods: {
  156. open (isUpdate = false) {
  157. this.$emit('getPramsList')
  158. if (isUpdate) {
  159. this.form.params = this.newParamsList
  160. } else {
  161. this.form.params = cloneDeep(this.paramsList)
  162. }
  163. this.isUpdate = isUpdate
  164. this.dialogVisible = true
  165. },
  166. close () {
  167. this.$refs.form.clearValidate()// 清空校验信息
  168. this.dialogVisible = false
  169. },
  170. handleClose () {
  171. this.$refs.form.clearValidate() // 清空校验信息
  172. this.dialogVisible = false
  173. },
  174. checkParamsName (value) {
  175. const checkList = this.form.params.filter(item => item.fieldName === value.name)
  176. if (checkList.length) {
  177. this.$message.warning('参数名称不可以与字段名相同!')
  178. value.name = ''
  179. }
  180. },
  181. cancel () {
  182. this.$refs.form.clearValidate() // 清空校验信息
  183. this.dialogVisible = false
  184. },
  185. confirm () {
  186. this.$refs.form.validate((valid) => {
  187. if (valid) {
  188. if (!this.isUpdate) {
  189. this.$emit('saveParams', cloneDeep(this.form.params))
  190. } else {
  191. this.$emit('saveNewParams', cloneDeep(this.form.params))
  192. this.$emit('getData')
  193. }
  194. this.dialogVisible = false
  195. }
  196. })
  197. }
  198. }
  199. }
  200. </script>
  201. <style lang="scss" scoped>
  202. @import '../../assets/style/bsTheme.scss';
  203. </style>