EnergyRateForm.vue 9.3 KB

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