book.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  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">查看报表</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>重新计算</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="计量期:">
  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="报表名称:">
  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 { 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 { 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. defineOptions({
  58. name: 'DebitPayMaterialBook',
  59. })
  60. //渲染完成
  61. onMounted(() => {
  62. getTableData()
  63. getPeriodData()
  64. getKey1Data()
  65. })
  66. //计量期
  67. const periodData = ref([])
  68. //未被引用的
  69. const getPeriodData = async ()=>{
  70. const { error, code, data } = await periodApi.conditionPeriod({
  71. contractId:contractId.value,
  72. type:1,
  73. })
  74. tableLoading.value = false
  75. if (!error && code === 200) {
  76. periodData.value = getArrValue(data)
  77. } else {
  78. periodData.value = []
  79. }
  80. }
  81. //所有计量期
  82. const key1Data = ref([])
  83. const getKey1Data = async ()=>{
  84. const { error, code, data } = await periodApi.allPeriod({
  85. contractId:contractId.value,
  86. type:1,
  87. })
  88. tableLoading.value = false
  89. if (!error && code === 200) {
  90. key1Data.value = getArrValue(data)
  91. } else {
  92. key1Data.value = []
  93. }
  94. }
  95. const selectPeriod = (val)=>{
  96. periodData.value.forEach((ele)=>{
  97. if (ele.id === val) {
  98. formModel.value.statementPeriod = ele.periodName
  99. formModel.value.printDate = ele.formPrintDate
  100. formModel.value.periodNumber = ele.periodNumber
  101. }
  102. })
  103. }
  104. //搜索表单
  105. const searchForm = ref({
  106. current: 1, size: 10, total: 0,
  107. })
  108. //分页
  109. const pageChange = ({ current, size }) => {
  110. searchForm.value.current = current
  111. searchForm.value.size = size
  112. }
  113. //表格数据
  114. const tableLoading = ref(false)
  115. const tableColumn = ref([
  116. { key: 'periodNumber', name: '计量期' },
  117. { key: 'statementName', name: '报表名称' },
  118. { key: 'printDate', name: '打印日期' },
  119. { key: 'calculateDate', name: '重新计算时间' },
  120. { key: 'action', name: '操作', width: 230 },
  121. ])
  122. const tableData = ref([])
  123. const getTableData = async () => {
  124. tableLoading.value = true
  125. const { error, code, data } = await bookApi.getPage({
  126. ...searchForm.value,
  127. contractId:contractId.value,
  128. type:1,
  129. // meterPeriodId:searchForm.value.key1,
  130. })
  131. tableLoading.value = false
  132. if (!error && code === 200) {
  133. tableData.value = getArrValue(data['records'])
  134. searchForm.value.total = data['total']
  135. } else {
  136. tableData.value = []
  137. searchForm.value.total = 0
  138. }
  139. }
  140. //新增
  141. const formModalShow = ref(false)
  142. const editType = ref('')
  143. const modalTitle = ref('材料预付款报表新增')
  144. const addModalClick = () => {
  145. formModalShow.value = true
  146. formModel.value = {}
  147. editType.value = 'add'
  148. modalTitle.value = '材料预付款报表新增'
  149. }
  150. const editRow = (row)=>{
  151. formModalShow.value = true
  152. console.log(row, 'row')
  153. formModel.value = row
  154. editType.value = 'edit'
  155. modalTitle.value = '材料预付款报表修改'
  156. }
  157. const delCilck = (row)=>{
  158. delMessageV2(async (action, instance, done) => {
  159. if (action === 'confirm') {
  160. instance.confirmButtonLoading = true
  161. removeProPay(row.id)
  162. instance.confirmButtonLoading = false
  163. done()
  164. } else {
  165. done()
  166. }
  167. })
  168. }
  169. const removeProPay = async (id) => {
  170. const { error, code } = await bookApi.remove({
  171. ids: id,
  172. })
  173. if (!error && code === 200) {
  174. window?.$message?.success('删除成功')
  175. getTableData()
  176. }
  177. }
  178. //表单
  179. const formRef = ref(null)
  180. const formModel = ref({})
  181. const formRules = []
  182. const saveLoading = ref(false)
  183. const formModalSave = async () => {
  184. saveLoading.value = true
  185. const { error, code, msg } = await bookApi.submit({
  186. ...formModel.value,
  187. contractId:contractId.value,
  188. projectId:projectId.value,
  189. type:1,
  190. })
  191. //判断状态
  192. saveLoading.value = false
  193. if (!error && code === 200) {
  194. window?.$message?.success(msg)
  195. }
  196. formModalClose()
  197. }
  198. const formModalClose = () => {
  199. formModalShow.value = false
  200. getTableData()
  201. }
  202. </script>
  203. <style scoped lang="scss">
  204. </style>