dataModal.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <template>
  2. <hc-new-dialog widths="500px" :show="isShow" :title="modalTitle" :loading="modalSaving" @save="modalSave" @close="modalClose">
  3. <el-scrollbar>
  4. <hc-card-item>
  5. <el-form ref="baseFormRef" :model="baseForm" :rules="baseFormRules" label-position="top" label-width="auto">
  6. <el-form-item label="计量期:">
  7. <el-select v-model="baseForm.meterPeriodId" placeholder="选择计量期" filterable clearable block>
  8. <el-option v-for="item in key1Data" :key="item.id" :label="item.periodName" :value="item.id" />
  9. </el-select>
  10. </el-form-item>
  11. <el-form-item label="业务日期:">
  12. <el-date-picker v-model="baseForm.businessDate" class="block" format="YYYY-MM-DD" type="date" value-format="YYYY-MM-DD" />
  13. </el-form-item>
  14. <el-form-item label="计量金额:">
  15. <el-input-number v-model="baseForm.meterMoney" :controls="false" :min="0" :precision="2" style="width: 100%;" />
  16. </el-form-item>
  17. <el-form-item label="开工预付款总额:">
  18. <el-input-number v-model="baseForm.startPayAmount" :controls="false" :min="0" :precision="2" style="width: 100%;" disabled />
  19. </el-form-item>
  20. <el-form-item label="申请依据:">
  21. <el-input v-model="baseForm.applyCause" :autosize="{ minRows: 2, maxRows: 6 }" type="textarea" />
  22. </el-form-item>
  23. </el-form>
  24. </hc-card-item>
  25. <!-- 附件列表 -->
  26. <hc-card-item class="mt-3" title="附件列表" extra-text="可上传:图片、Excel、PDF、Word文件">
  27. <el-form :model="baseForm" label-position="top">
  28. <el-form-item label="">
  29. <hc-form-upload type="list" :src="fileName" :h-props="hProps" @upload="formItemUpload" @change="formItemChange" />
  30. </el-form-item>
  31. </el-form>
  32. </hc-card-item>
  33. </el-scrollbar>
  34. <HcUploadFile ref="HcUploadFileRef" @finish="HcUploadFileFinish" />
  35. </hc-new-dialog>
  36. </template>
  37. <script setup>
  38. import { ref, watch } from 'vue'
  39. import { useAppStore } from '~src/store'
  40. import { arrToKey, getArrValue, getObjValue } from 'js-fast-way'
  41. import periodApi from '~api/debit-pay/material/periods.js'
  42. import orderApi from '~api/debit-pay/start-work/order.js'
  43. const props = defineProps({
  44. ids: {
  45. type: [String, Number],
  46. default: '',
  47. },
  48. infoData:{
  49. type: Object,
  50. default: () => ({}),
  51. },
  52. })
  53. //事件
  54. const emit = defineEmits(['close'])
  55. const useAppState = useAppStore()
  56. const contractId = ref(useAppState.getContractId)
  57. const projectId = ref(useAppState.getProjectId)
  58. const infoData = ref(props.infoData)
  59. const ids = ref(props.ids)
  60. const fileName = ref([])
  61. const hProps = ref({
  62. url: 'filePdfUrl',
  63. name: 'fileName',
  64. })
  65. const baseForm = ref({})
  66. const modalTitle = ref('开工预付款计量单新增')
  67. //获取开工预付款总额
  68. const getStartAmountData = async ()=>{
  69. const { error, code, data } = await orderApi.getStartAmount({
  70. contractId:contractId.value,
  71. })
  72. if (!error && code === 200) {
  73. if (modalTitle.value === '开工预付款计量单新增') {
  74. baseForm.value.startPayAmount = Number(data)
  75. }
  76. } else {
  77. baseForm.value.startPayAmount = 0
  78. }
  79. }
  80. //监听
  81. watch(() => [
  82. props.ids,
  83. props.infoData,
  84. ], ([Id, info]) => {
  85. ids.value = Id
  86. infoData.value = info
  87. if (Id.length > 0) {
  88. baseForm.value = info
  89. fileName.value = info?.fileList
  90. modalTitle.value = '开工预付款计量单修改'
  91. } else {
  92. baseForm.value = {}
  93. fileName.value = []
  94. modalTitle.value = '开工预付款计量单新增'
  95. }
  96. }, { immediate: true })
  97. //双向绑定
  98. // eslint-disable-next-line no-undef
  99. const isShow = defineModel('modelValue', {
  100. default: false,
  101. })
  102. //监听
  103. watch(() => [
  104. props.ids,
  105. ], ([ids]) => {
  106. console.log('ids', ids)
  107. }, { immediate: true })
  108. //监听
  109. watch(isShow, (val) => {
  110. if (val) {
  111. console.log('isShow', val)
  112. getKey1Data()
  113. getStartAmountData()
  114. }
  115. })
  116. //计量期
  117. const key1Data = ref([])
  118. const getKey1Data = async ()=>{
  119. const { error, code, data } = await periodApi.allPeriod({
  120. contractId:contractId.value,
  121. type:2,
  122. })
  123. if (!error && code === 200) {
  124. key1Data.value = getArrValue(data)
  125. if (key1Data.value.length > 0) {
  126. baseForm.value.meterPeriodId = key1Data.value[ key1Data.value.length - 1].id
  127. }
  128. } else {
  129. key1Data.value = []
  130. }
  131. }
  132. //基础表单
  133. const baseFormRef = ref(null)
  134. // const baseForm = ref({})
  135. const baseFormRules = {}
  136. const modalSaving = ref(false)
  137. const modalSave = async () => {
  138. console.log(baseForm.value, 'baseForm.value')
  139. modalSaving.value = true
  140. if (ids.value.length < 1) {
  141. const { error, code, msg } = await orderApi.add({
  142. ...baseForm.value,
  143. contractId:contractId.value,
  144. projectId:projectId.value,
  145. })
  146. //判断状态
  147. modalSaving.value = false
  148. if (!error && code === 200) {
  149. window?.$message?.success(msg)
  150. }
  151. } else if (ids.value.length > 0) {
  152. const { error, code, msg } = await orderApi.update({
  153. ...baseForm.value,
  154. contractId:contractId.value,
  155. projectId:projectId.value,
  156. })
  157. //判断状态
  158. modalSaving.value = false
  159. if (!error && code === 200) {
  160. window?.$message?.success(msg)
  161. }
  162. }
  163. modalClose()
  164. }
  165. const modalClose = () => {
  166. isShow.value = false
  167. emit('close')
  168. }
  169. //上传
  170. const formItemUpload = () => {
  171. HcUploadFileRef.value?.selectFile()
  172. }
  173. const formItemChange = (src, index, list)=>{
  174. baseForm.value.fileList = list
  175. }
  176. const HcUploadFileRef = ref(null)
  177. // 文件全部上传完成
  178. const HcUploadFileFinish = (res) => {
  179. let arr = []
  180. res.forEach((ele)=>{
  181. arr.push(ele.resData)
  182. })
  183. arr.forEach((ele)=>{
  184. ele.fileName = ele.originalName
  185. ele.fileUrl = ele.link
  186. ele.filePdfUrl = ele.pdfUrl
  187. })
  188. baseForm.value.fileList = arr
  189. fileName.value = arr
  190. HcUploadFileRef?.value.setModalShow(false)
  191. }
  192. </script>
  193. <style scoped lang="scss">
  194. </style>