salarySolutionRulesEditParam.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <template>
  2. <m-form ref="form" label-width="100px" :items="formItems" v-model="formValues">
  3. <template #content>
  4. <m-table
  5. clearHeader
  6. shadow="never"
  7. :headers="headers"
  8. :items="items"
  9. >
  10. <template #name="{ row }">
  11. <el-input v-model="row.name" placeholder="请输入参数名称" size="small"></el-input>
  12. </template>
  13. <template #value="{ row }">
  14. <el-input v-model="row.value" placeholder="请输入参数值" size="small"></el-input>
  15. </template>
  16. <template #actions="{ $index }">
  17. <m-button circle type="danger" icon="el-icon-delete" size="mini" @click="onRemove($index)"></m-button>
  18. </template>
  19. <div class="text-center">
  20. <m-button type="orange" size="mini" @click="onAdd">添加一组数据</m-button>
  21. </div>
  22. </m-table>
  23. </template>
  24. </m-form>
  25. </template>
  26. <script>
  27. import {
  28. DICT_CATEGORY
  29. } from '../utils/Dict'
  30. export default {
  31. name: 'salarySolutionRulesEditParam',
  32. data () {
  33. return {
  34. headers: [
  35. { label: '参数名称', prop: 'name' },
  36. { label: '参数值', prop: 'value' },
  37. { label: '操作', prop: 'actions' }
  38. ],
  39. items: [],
  40. id: 0,
  41. formValues: {
  42. name: null,
  43. valueCategory: 0,
  44. miniValue: null,
  45. maxValue: null,
  46. value: null
  47. }
  48. }
  49. },
  50. computed: {
  51. formItems () {
  52. const style = 'margin-bottom: 12px'
  53. const common = [
  54. {
  55. label: '参数名称',
  56. prop: 'name',
  57. type: 'input',
  58. options: {
  59. placeholder: '请输入参数名称',
  60. size: 'small'
  61. },
  62. rules: [
  63. { required: true, message: '请输入参数名称', trigger: 'blur' }
  64. ],
  65. style
  66. },
  67. {
  68. label: '参数类型',
  69. prop: 'valueCategory',
  70. type: 'select',
  71. options: {
  72. placeholder: '请选择参数类型',
  73. items: DICT_CATEGORY,
  74. size: 'small'
  75. },
  76. rules: [
  77. { required: true, message: '请选择参数类型', trigger: 'change' }
  78. ],
  79. style
  80. }
  81. ]
  82. const maxAndMin = [
  83. {
  84. label: '最小值',
  85. prop: 'miniValue',
  86. type: 'number',
  87. options: {
  88. size: 'small',
  89. step: 0.1
  90. },
  91. style
  92. },
  93. {
  94. label: '最大值',
  95. prop: 'maxValue',
  96. type: 'number',
  97. options: {
  98. size: 'small',
  99. step: 0.1
  100. },
  101. style
  102. }
  103. ]
  104. if (this.formValues.valueCategory === 0) {
  105. return [
  106. ...common,
  107. ...maxAndMin,
  108. {
  109. label: '初始值',
  110. prop: 'value',
  111. type: 'number',
  112. options: {
  113. size: 'small',
  114. step: 0.1
  115. },
  116. style
  117. }
  118. ]
  119. }
  120. if (this.formValues.valueCategory === 2) {
  121. return [
  122. ...common,
  123. ...maxAndMin,
  124. {
  125. label: '数据',
  126. prop: 'content',
  127. style
  128. }
  129. ]
  130. }
  131. return [
  132. ...common,
  133. {
  134. label: '数据',
  135. prop: 'content',
  136. style
  137. }
  138. ]
  139. }
  140. },
  141. methods: {
  142. setValue (item) {
  143. console.log(item)
  144. const {
  145. valueCategory,
  146. value,
  147. maxValue,
  148. miniValue,
  149. ...obj
  150. } = item
  151. this.formValues = {
  152. ...obj,
  153. maxValue: !maxValue ? undefined : Number(maxValue),
  154. miniValue: !miniValue ? undefined : Number(miniValue),
  155. valueCategory,
  156. value: valueCategory === 0 ? value : JSON.parse(value)
  157. }
  158. if (valueCategory !== 0) {
  159. this.id = 0
  160. this.items = JSON.parse(value).map(e => {
  161. return {
  162. name: e.name,
  163. value: e.value,
  164. index: this.id++
  165. }
  166. })
  167. }
  168. },
  169. onAdd () {
  170. this.items.push({
  171. name: null,
  172. valueCategory: 0,
  173. miniValue: null,
  174. maxValue: null,
  175. value: null,
  176. index: this.id++
  177. })
  178. },
  179. onRemove (index) {
  180. this.items.splice(index, 1)
  181. },
  182. valid () {
  183. if (!this.formValues.name) {
  184. return
  185. }
  186. if (this.formValues.valueCategory !== 0) {
  187. return this.items.every(e => {
  188. return (e.name === null && e.value === null) || (e.name !== null && e.value !== null)
  189. })
  190. }
  191. return true
  192. },
  193. getValue () {
  194. const {
  195. name,
  196. valueCategory,
  197. miniValue,
  198. maxValue,
  199. value
  200. } = this.formValues
  201. if (valueCategory === 0) {
  202. return {
  203. name,
  204. valueCategory,
  205. miniValue: miniValue ?? null,
  206. maxValue: maxValue ?? null,
  207. value
  208. }
  209. }
  210. const items = this.items.map(e => {
  211. return {
  212. name: e.name,
  213. value: e.value
  214. }
  215. })
  216. if (valueCategory === 1) {
  217. return {
  218. name,
  219. valueCategory,
  220. value: JSON.stringify(items)
  221. }
  222. }
  223. return {
  224. name,
  225. valueCategory,
  226. miniValue: miniValue ?? null,
  227. maxValue: maxValue ?? null,
  228. value: JSON.stringify(items)
  229. }
  230. }
  231. }
  232. }
  233. </script>
  234. <style lang="scss" scoped>
  235. </style>