book.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <template>
  2. <hc-new-card title="开工预付款报表手册">
  3. <template #extra>
  4. <el-button hc-btn type="primary" @click="addModalClick">
  5. <HcIcon name="add" />
  6. <span>新增</span>
  7. </el-button>
  8. </template>
  9. <hc-table :column="tableColumn" :datas="tableData" :loading="tableLoading" is-new :index-style="{ width: 60 }">
  10. <template #action="{ row }">
  11. <el-link type="primary" @click="viewPdf(row)">查看报表</el-link>
  12. <el-link type="success" @click="editRow(row)">修改</el-link>
  13. <el-link type="danger" @click="delCilck(row)">删除</el-link>
  14. <el-link v-loading="recalculateLoading" @click="recalculate(row)">重新计算</el-link>
  15. </template>
  16. </hc-table>
  17. <template #action>
  18. <hc-pages :pages="searchForm" @change="pageChange" />
  19. </template>
  20. <!-- 新增/修改 -->
  21. <hc-new-dialog v-model="formModalShow" is-to-body widths="30rem" :title="modalTitle" :loading="saveLoading" @save="formModalSave" @close="formModalClose">
  22. <el-form ref="formRef" class="p-4" :model="formModel" :rules="formRules" label-position="top">
  23. <el-form-item label="计量期:" prop="meterPeriodId">
  24. <el-select v-if="editType === 'add'" v-model="formModel.meterPeriodId" placeholder="选择计量期" filterable clearable block @change="selectPeriod">
  25. <el-option v-for="item in periodData" :key="item.id" :label="item.periodName" :value="item.id" />
  26. </el-select>
  27. <el-select v-if="editType === 'edit'" v-model="formModel.meterPeriodId" placeholder="选择计量期" disabled filterable clearable block @change="selectPeriod">
  28. <el-option v-for="item in key1Data" :key="item.id" :label="item.periodName" :value="item.id" />
  29. </el-select>
  30. </el-form-item>
  31. <el-form-item label="报表名称:" prop="statementName">
  32. <el-input v-model="formModel.statementName" />
  33. </el-form-item>
  34. <el-form-item label="报表期:">
  35. <el-input v-model="formModel.statementPeriod" disabled />
  36. </el-form-item>
  37. <el-form-item label="打印日期:">
  38. <el-date-picker v-model="formModel.printDate" class="block" format="YYYY-MM-DD" type="date" value-format="YYYY-MM-DD" />
  39. </el-form-item>
  40. <el-form-item label="请款理由:">
  41. <el-input v-model="formModel.repaymentCause" :autosize="{ minRows: 3, maxRows: 6 }" type="textarea" />
  42. </el-form-item>
  43. </el-form>
  44. </hc-new-dialog>
  45. </hc-new-card>
  46. </template>
  47. <script setup>
  48. import { onActivated, onMounted, ref } from 'vue'
  49. import bookApi from '~api/debit-pay/material/book.js'
  50. import periodApi from '~api/debit-pay/material/periods.js'
  51. import { useAppStore } from '~src/store'
  52. import { formValidate, getArrValue, getObjValue } from 'js-fast-way'
  53. const useAppState = useAppStore()
  54. const contractId = ref(useAppState.getContractId)
  55. const projectId = ref(useAppState.getProjectId)
  56. import { delMessageV2 } from '~com/message/index.js'
  57. import { toPdfPage } from '~uti/btn-auth'
  58. defineOptions({
  59. name: 'DebitPayMaterialBook',
  60. })
  61. //渲染完成
  62. onActivated(() => {
  63. getTableData()
  64. getPeriodData()
  65. getKey1Data()
  66. })
  67. //计量期
  68. const periodData = ref([])
  69. //未被引用的
  70. const getPeriodData = async ()=>{
  71. const { error, code, data } = await periodApi.conditionPeriod({
  72. contractId:contractId.value,
  73. type:2,
  74. })
  75. tableLoading.value = false
  76. if (!error && code === 200) {
  77. periodData.value = getArrValue(data)
  78. } else {
  79. periodData.value = []
  80. }
  81. }
  82. //所有计量期
  83. const key1Data = ref([])
  84. const getKey1Data = async ()=>{
  85. const { error, code, data } = await periodApi.allPeriod({
  86. contractId:contractId.value,
  87. type:2,
  88. })
  89. tableLoading.value = false
  90. if (!error && code === 200) {
  91. key1Data.value = getArrValue(data)
  92. } else {
  93. key1Data.value = []
  94. }
  95. }
  96. const selectPeriod = (val)=>{
  97. periodData.value.forEach((ele)=>{
  98. if (ele.id === val) {
  99. formModel.value.statementPeriod = ele.periodName
  100. formModel.value.printDate = ele.formPrintDate
  101. formModel.value.periodNumber = ele.periodNumber
  102. }
  103. })
  104. }
  105. //搜索表单
  106. const searchForm = ref({
  107. current: 1, size: 10, total: 0,
  108. })
  109. //分页
  110. const pageChange = ({ current, size }) => {
  111. searchForm.value.current = current
  112. searchForm.value.size = size
  113. getTableData()
  114. }
  115. //表格数据
  116. const tableLoading = ref(false)
  117. const tableColumn = ref([
  118. { key: 'periodNumber', name: '计量期' },
  119. { key: 'statementName', name: '报表名称' },
  120. { key: 'printDate', name: '打印日期' },
  121. { key: 'calculateDate', name: '重新计算时间' },
  122. { key: 'action', name: '操作', width: 230 },
  123. ])
  124. const tableData = ref([])
  125. const getTableData = async () => {
  126. tableLoading.value = true
  127. const { error, code, data } = await bookApi.getPage({
  128. ...searchForm.value,
  129. contractId:contractId.value,
  130. type:2,
  131. // meterPeriodId:searchForm.value.key1,
  132. })
  133. tableLoading.value = false
  134. if (!error && code === 200) {
  135. tableData.value = getArrValue(data['records'])
  136. searchForm.value.total = data['total']
  137. } else {
  138. tableData.value = []
  139. searchForm.value.total = 0
  140. }
  141. }
  142. //新增
  143. const formModalShow = ref(false)
  144. const editType = ref('')
  145. const modalTitle = ref('开工预付款报表新增')
  146. const addModalClick = () => {
  147. formModalShow.value = true
  148. formModel.value = {}
  149. editType.value = 'add'
  150. modalTitle.value = '开工预付款报表新增'
  151. }
  152. //查看报表
  153. const viewPdf = (row)=>{
  154. toPdfPage(row.rawUrl)
  155. }
  156. const editRow = (row)=>{
  157. formModalShow.value = true
  158. console.log(row, 'row')
  159. formModel.value = row
  160. editType.value = 'edit'
  161. modalTitle.value = '开工预付款报表修改'
  162. }
  163. const delCilck = (row)=>{
  164. delMessageV2(async (action, instance, done) => {
  165. if (action === 'confirm') {
  166. instance.confirmButtonLoading = true
  167. removeProPay(row.id)
  168. instance.confirmButtonLoading = false
  169. done()
  170. } else {
  171. done()
  172. }
  173. })
  174. }
  175. //重新计算
  176. const recalculateLoading = ref(false)
  177. const recalculate = async (row)=>{
  178. recalculateLoading.value = true
  179. const { error, code, msg } = await bookApi.meterPdfInfo({
  180. FormDataId:row.meterPeriodId,
  181. ContractId:contractId.value,
  182. type:2,
  183. })
  184. recalculateLoading.value = false
  185. if (!error && code === 200) {
  186. window.$message.success('计算成功')
  187. getTableData()
  188. }
  189. }
  190. const removeProPay = async (id) => {
  191. const { error, code } = await bookApi.remove({
  192. ids: id,
  193. })
  194. if (!error && code === 200) {
  195. window?.$message?.success('删除成功')
  196. getTableData()
  197. }
  198. }
  199. //表单
  200. const formRef = ref(null)
  201. const formModel = ref({})
  202. const formRules = {
  203. meterPeriodId: {
  204. required: true,
  205. trigger: 'blur',
  206. message: '请选择计量期',
  207. },
  208. statementName: {
  209. required: true,
  210. trigger: 'blur',
  211. message: '请输入报表名称',
  212. },
  213. }
  214. const saveLoading = ref(false)
  215. const formModalSave = async () => {
  216. const isValidate = await formValidate(formRef.value)
  217. if (!isValidate) return false
  218. saveLoading.value = true
  219. const { error, code, msg } = await bookApi.submit({
  220. ...formModel.value,
  221. contractId:contractId.value,
  222. projectId:projectId.value,
  223. type:2,
  224. })
  225. //判断状态
  226. saveLoading.value = false
  227. if (!error && code === 200) {
  228. window?.$message?.success(msg)
  229. }
  230. formModalClose()
  231. }
  232. const formModalClose = () => {
  233. formModalShow.value = false
  234. getTableData()
  235. }
  236. </script>
  237. <style scoped lang="scss">
  238. </style>