EnergyRateForm.vue 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. <template>
  2. <a-spin :spinning="confirmLoading">
  3. <j-form-container :disabled="formDisabled">
  4. <!-- 主表单区域 -->
  5. <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
  6. <a-row>
  7. <a-col :xs="24" :sm="12">
  8. <a-form-model-item label="名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="name">
  9. <a-input v-model="model.name" placeholder="请输入名称" ></a-input>
  10. </a-form-model-item>
  11. </a-col>
  12. <a-col :xs="24" :sm="12">
  13. <a-form-model-item label="能源分类" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="energytypeid">
  14. <j-search-select-tag v-model="model.energytypeid" placeholder="请选择设备" dict="base_energy_type,name,id" />
  15. </a-form-model-item>
  16. </a-col>
  17. <a-col :xs="24" :sm="12">
  18. <a-form-model-item label="费率类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ratetype">
  19. <j-dict-select-tag type="list" v-model="model.ratetype" dictCode="energy_rate_type" placeholder="请选择费率类型" />
  20. </a-form-model-item>
  21. </a-col>
  22. <a-col :xs="24" :sm="12">
  23. <a-form-model-item label="单位" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="rateunit">
  24. <a-input v-model="model.rateunit" placeholder="请输入单位" ></a-input>
  25. </a-form-model-item>
  26. </a-col>
  27. <a-col :xs="24" :sm="12">
  28. <a-form-model-item label="费率有效期开始" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="begintime">
  29. <j-date placeholder="请选择费率有效期开始" v-model="model.begintime" style="width: 100%" />
  30. </a-form-model-item>
  31. </a-col>
  32. <a-col :xs="24" :sm="12">
  33. <a-form-model-item label="费率有效期结束" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="endtime">
  34. <j-date placeholder="请选择费率有效期结束" v-model="model.endtime" style="width: 100%" />
  35. </a-form-model-item>
  36. </a-col>
  37. <a-col :xs="24" :sm="24">
  38. <a-form-model-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
  39. <a-textarea v-model="model.remark" placeholder="请输入备注" rows="3" ></a-textarea>
  40. </a-form-model-item>
  41. </a-col>
  42. </a-row>
  43. </a-form-model>
  44. </j-form-container>
  45. <!-- 子表单区域 -->
  46. <a-tabs v-model="activeKey" @change="handleChangeTabs">
  47. <a-tab-pane tab="详情" :key="refKeys[0]" :forceRender="true">
  48. <j-editable-table
  49. :ref="refKeys[0]"
  50. :loading="baseEnergyRateDetailTable.loading"
  51. :columns="baseEnergyRateDetailTable.columns"
  52. :dataSource="baseEnergyRateDetailTable.dataSource"
  53. :maxHeight="300"
  54. :disabled="formDisabled"
  55. :rowNumber="true"
  56. :rowSelection="true"
  57. :actionButton="true"/>
  58. </a-tab-pane>
  59. </a-tabs>
  60. </a-spin>
  61. </template>
  62. <script>
  63. import { FormTypes,getRefPromise,VALIDATE_NO_PASSED } from '@/utils/JEditableTableUtil'
  64. import { JEditableTableModelMixin } from '@/mixins/JEditableTableModelMixin'
  65. import { validateDuplicateValue } from '@/utils/util'
  66. export default {
  67. name: 'EnergyRateForm',
  68. mixins: [JEditableTableModelMixin],
  69. components: {
  70. },
  71. data() {
  72. return {
  73. labelCol: {
  74. xs: { span: 24 },
  75. sm: { span: 5 },
  76. },
  77. wrapperCol: {
  78. xs: { span: 24 },
  79. sm: { span: 16 },
  80. },
  81. model:{
  82. },
  83. validatorRules: {
  84. energyrateid: [
  85. { required: true, message: '请输入能源费率ID!'},
  86. ],
  87. name: [
  88. { required: true, message: '请输入名称!'},
  89. ],
  90. energytypeid: [
  91. { required: true, message: '请输入能源分类ID!'},
  92. ],
  93. ratetype: [
  94. { required: true, message: '请输入费率类型:分时费率、阶梯费率!'},
  95. ],
  96. rateunit: [
  97. { required: true, message: '请输入单位!'},
  98. ],
  99. begintime: [
  100. { required: true, message: '请输入费率有效期开始!'},
  101. ],
  102. endtime: [
  103. { required: true, message: '请输入费率有效期结束!'},
  104. ],
  105. },
  106. // 新增时子表默认添加几行空数据
  107. addDefaultRowNum: 1,
  108. refKeys: ['baseEnergyRateDetail', ],
  109. tableKeys:['baseEnergyRateDetail', ],
  110. activeKey: 'baseEnergyRateDetail',
  111. // base_energy_rate_detail
  112. baseEnergyRateDetailTable: {
  113. loading: false,
  114. dataSource: [],
  115. columns: [
  116. {
  117. title: '分时开始时间',
  118. key: 'begintime',
  119. type: FormTypes.time,
  120. width:"200px",
  121. placeholder: '请输入${title}',
  122. defaultValue:'',
  123. validateRules: [{ required: true, message: '${title}不能为空' }],
  124. },
  125. {
  126. title: '分时结束时间',
  127. key: 'endtime',
  128. type: FormTypes.time,
  129. width:"200px",
  130. placeholder: '请输入${title}',
  131. defaultValue:'',
  132. },
  133. {
  134. title: '峰平谷:尖、峰、谷、平',
  135. key: 'pandv',
  136. type: FormTypes.input,
  137. width:"200px",
  138. placeholder: '请输入${title}',
  139. defaultValue:'',
  140. validateRules: [{ required: true, message: '${title}不能为空' }],
  141. },
  142. {
  143. title: '价格',
  144. key: 'price',
  145. type: FormTypes.input,
  146. width:"200px",
  147. placeholder: '请输入${title}',
  148. defaultValue:'',
  149. validateRules: [{ required: true, message: '${title}不能为空' }],
  150. },
  151. {
  152. title: '起始量',
  153. key: 'beginamount',
  154. type: FormTypes.input,
  155. width:"200px",
  156. placeholder: '请输入${title}',
  157. defaultValue:'',
  158. validateRules: [{ required: true, message: '${title}不能为空' }],
  159. },
  160. {
  161. title: '结束量',
  162. key: 'endamount',
  163. type: FormTypes.input,
  164. width:"200px",
  165. placeholder: '请输入${title}',
  166. defaultValue:'',
  167. // validateRules: [{ required: true, message: '${title}不能为空' }],
  168. },
  169. ]
  170. },
  171. url: {
  172. add: "/energyRate/energyRate/add",
  173. edit: "/energyRate/energyRate/edit",
  174. baseEnergyRateDetail: {
  175. list: '/energyRate/energyRate/queryDetailByMainId'
  176. },
  177. }
  178. }
  179. },
  180. props: {
  181. //表单禁用
  182. disabled: {
  183. type: Boolean,
  184. default: false,
  185. required: false
  186. }
  187. },
  188. computed: {
  189. formDisabled(){
  190. return this.disabled
  191. },
  192. },
  193. created () {
  194. },
  195. methods: {
  196. addBefore(){
  197. this.baseEnergyRateDetailTable.dataSource=[]
  198. },
  199. getAllTable() {
  200. let values = this.tableKeys.map(key => getRefPromise(this, key))
  201. return Promise.all(values)
  202. },
  203. /** 调用完edit()方法之后会自动调用此方法 */
  204. editAfter() {
  205. this.$nextTick(() => {
  206. })
  207. // 加载子表数据
  208. if (this.model.id) {
  209. let params = { id: this.model.id }
  210. this.requestSubTableData(this.url.baseEnergyRateDetail.list, params, this.baseEnergyRateDetailTable)
  211. }
  212. },
  213. //校验所有一对一子表表单
  214. validateSubForm(allValues){
  215. return new Promise((resolve,reject)=>{
  216. Promise.all([
  217. ]).then(() => {
  218. resolve(allValues)
  219. }).catch(e => {
  220. if (e.error === VALIDATE_NO_PASSED) {
  221. // 如果有未通过表单验证的子表,就自动跳转到它所在的tab
  222. this.activeKey = e.index == null ? this.activeKey : this.refKeys[e.index]
  223. } else {
  224. console.error(e)
  225. }
  226. })
  227. })
  228. },
  229. /** 整理成formData */
  230. classifyIntoFormData(allValues) {
  231. let main = Object.assign(this.model, allValues.formValue)
  232. return {
  233. ...main, // 展开
  234. baseEnergyRateDetailList: allValues.tablesValue[0].values,
  235. }
  236. },
  237. validateError(msg){
  238. this.$message.error(msg)
  239. },
  240. close() {
  241. this.visible = false
  242. this.$emit('close')
  243. this.$refs.form.clearValidate();
  244. },
  245. }
  246. }
  247. </script>
  248. <style scoped>
  249. </style>