recompose.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <template>
  2. <el-dialog
  3. title="水权设置"
  4. :visible.sync="dialogVisible"
  5. :close-on-click-modal="false"
  6. :close-on-press-escape="false"
  7. @close="handleClose"
  8. width="700px"
  9. >
  10. <el-form
  11. ref="baseForm"
  12. class="base-form"
  13. label-position="right"
  14. label-width="130px"
  15. :model="baseForm"
  16. :rules="rules"
  17. size="small"
  18. >
  19. <el-row>
  20. <el-form-item label="年度:">
  21. <el-input
  22. placeholder="请输入"
  23. disabled
  24. style="width:250px;"
  25. v-model="editRow.waterrightYear"
  26. />
  27. </el-form-item>
  28. </el-row>
  29. <el-row>
  30. <el-form-item label="区域:">
  31. <el-input
  32. placeholder="请输入"
  33. disabled
  34. style="width:250px;"
  35. v-model="editRow.cusareaName">
  36. </el-input>
  37. </el-form-item>
  38. </el-row>
  39. <el-row>
  40. <el-form-item label="">
  41. <span>(上级组织:{{ infoData.cusareaName }} 总面积:{{ infoData.areasizeResidue || 0 }} 亩 额定水权:{{ infoData.waterrightAmount || 0 }} m³ 剩余水权:{{ infoData.amountResidue || 0 }})</span>
  42. </el-form-item>
  43. </el-row>
  44. <el-row>
  45. <el-form-item label="面积:" prop="area">
  46. <el-input
  47. placeholder="请输入"
  48. v-model="baseForm.area"
  49. style="width:250px;"
  50. >
  51. </el-input>
  52. <span style="margin-left:5px">亩</span>
  53. </el-form-item>
  54. </el-row>
  55. <el-row>
  56. <el-form-item label="额定水权:" prop="ratedWater">
  57. <el-input
  58. placeholder="请输入"
  59. style="width:250px;"
  60. v-model="baseForm.ratedWater">
  61. </el-input>
  62. <span style="margin-left:5px">m³ </span>
  63. </el-form-item>
  64. </el-row>
  65. <el-row>
  66. <el-form-item label="">
  67. <span>(上年实际用水量:{{ baseForm.lastYearUseWater }}m³)</span>
  68. </el-form-item>
  69. </el-row>
  70. <el-row>
  71. <el-form-item label="亩均水权:">
  72. <el-input
  73. placeholder="请输入"
  74. style="width:250px;"
  75. disabled
  76. v-model="averageWater">
  77. </el-input>
  78. <span style="margin-left:5px">亩/m³</span>
  79. </el-form-item>
  80. </el-row>
  81. </el-form>
  82. <div style="text-align: right">
  83. <el-button type="info" plain @click="resetForm('baseForm')">取消</el-button
  84. >
  85. <el-button
  86. type="primary"
  87. style="margin-left:16px;"
  88. @click="submitForm('baseForm')"
  89. :disabled="dialogSubmitLoading"
  90. :loading="dialogSubmitLoading"
  91. >确定</el-button
  92. >
  93. </div>
  94. </el-dialog>
  95. </template>
  96. <script>
  97. import { assign } from 'lodash-es';
  98. import { getWaterrightUpareaInfo, editWaterright } from '@/api/waterright/index.js'
  99. export default {
  100. name: 'recompose',
  101. props: {
  102. data: {
  103. default() {
  104. return {};
  105. }
  106. },
  107. visible: {
  108. type: Boolean,
  109. default: false
  110. },
  111. editRow: {
  112. type: Object,
  113. default:() => {}
  114. }
  115. },
  116. data() {
  117. return {
  118. dialogSubmitLoading: false,
  119. dialogVisible: false,
  120. baseForm: {
  121. area: '',
  122. ratedWater: '',
  123. lastYearUseWater: '0'
  124. },
  125. averageWater: 0,
  126. infoData: {},
  127. hasFetched: false,
  128. rules: {
  129. area: [
  130. { required: true, message: '请输入面积', trigger: 'blur' }
  131. ],
  132. ratedWater: [
  133. { required: true, message: '请输入额定水权', trigger: 'blur' }
  134. ]
  135. }
  136. };
  137. },
  138. watch: {
  139. visible(val) {
  140. if (val !== this.dialogVisible) {
  141. this.dialogVisible = val;
  142. if (val) {
  143. assign(this.baseForm, this.data);
  144. if (!this.hasFetched) {
  145. this.hasFetched = true;
  146. }
  147. }
  148. }
  149. },
  150. editRow:{
  151. handler(val) {
  152. this.visible && this.getWaterrightUpareaList(val)
  153. },
  154. deep: true
  155. },
  156. baseForm: {
  157. handler(val) {
  158. const { area, ratedWater } = val
  159. if (area && ratedWater) {
  160. this.averageWater = (+ratedWater / +area).toFixed(2)
  161. }
  162. },
  163. deep: true
  164. }
  165. },
  166. methods: {
  167. async getWaterrightUpareaList(row) {
  168. const { waterrightId } = row
  169. const res = await getWaterrightUpareaInfo({
  170. waterrightId
  171. })
  172. this.infoData = res?.data
  173. },
  174. resetForm() {
  175. this.dialogVisible = false;
  176. this.baseForm = {
  177. area: '',
  178. ratedWater: '',
  179. }
  180. this.averageWater = 0
  181. },
  182. async editRecompose() {
  183. const { waterrightId } = this.editRow
  184. const { area: waterrightAreasize, ratedWater: waterrightAmount } = this.baseForm
  185. const params = {
  186. waterrightId,
  187. waterrightAreasize,
  188. waterrightAmount
  189. }
  190. const res = await editWaterright(params)
  191. this.handleClose()
  192. this.$emit('refresh')
  193. },
  194. submitForm(formName) {
  195. this.$refs[formName].validate((valid) => {
  196. valid && this.editRecompose(formName)
  197. })
  198. },
  199. handleClose() {
  200. this.$emit('update:visible', false);
  201. this.$emit('resetEdit');
  202. this.resetForm();
  203. },
  204. }
  205. };
  206. </script>
  207. <style lang="scss" scoped>
  208. .input-number {
  209. width: 100%;
  210. }
  211. .base-form {
  212. max-height: 70vh;
  213. overflow-y: auto;
  214. overflow-x: hidden;
  215. padding: 0 20px;
  216. }
  217. </style>
  218. <style lang="css" scoped>
  219. ::v-deep .el-dialog__header {
  220. border-bottom: 1px solid #ebeef5;
  221. }
  222. </style>