certificate.vue 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. <template>
  2. <div class="relative h-full">
  3. <hc-new-card title="中期支付证书列表">
  4. <template #extra>
  5. <hc-tooltip keys="debit_pay_admin_certificate_recalculate_btn">
  6. <el-button
  7. :disabled="tableCheckedKeys.length <= 0"
  8. hc-btn
  9. type="warning"
  10. :loading="recalculateLoading"
  11. @click="recalculateClick"
  12. >
  13. 重新计算
  14. </el-button>
  15. </hc-tooltip>
  16. <el-button hc-btn type="primary" @click="addModalClick">
  17. <hc-icon name="add" />
  18. <span>新增</span>
  19. </el-button>
  20. </template>
  21. <hc-table
  22. :column="tableColumn"
  23. :datas="tableData"
  24. :loading="tableLoading"
  25. :index-style="{ width: 60 }"
  26. is-check
  27. :check-style="{ width: 29 }"
  28. @selection-change="tableSelectionChange"
  29. >
  30. <template #action="{ row }">
  31. <el-link
  32. v-loading="row.rowViewLoading"
  33. type="primary"
  34. :disabled="!row.rawUrl"
  35. @click="rowViewRawPdf(row)"
  36. >
  37. 查看电签报表
  38. </el-link>
  39. <el-link type="primary" @click="rowViewPdf(row)">
  40. 查看报表
  41. </el-link>
  42. <el-link
  43. type="primary"
  44. :disabled="row.approveStatus === 0"
  45. @click="eVisaRowClick(row)"
  46. >
  47. 查看电签流程
  48. </el-link>
  49. <el-link
  50. type="success"
  51. :disabled="row.isLock === 1"
  52. @click="rowEditClick(row)"
  53. >
  54. 修改
  55. </el-link>
  56. <el-link
  57. type="danger"
  58. :disabled="row.isLock === 1 || row.approveStatus === 2"
  59. @click="rowDelClick(row)"
  60. >
  61. 删除
  62. </el-link>
  63. <el-link
  64. v-loading="row?.recalculateLoading"
  65. :disabled="row.isLock === 1 || row.approveStatus !== 0"
  66. @click="rowRecalculateClick(row)"
  67. >
  68. 重新计算
  69. </el-link>
  70. <el-link type="warning" @click="rowLockingClick(row)">
  71. {{
  72. row.isLock === 1 ? "取消锁定" : "锁定"
  73. }}
  74. </el-link>
  75. </template>
  76. </hc-table>
  77. <template #action>
  78. <hc-pages :pages="searchForm" @change="pageChange" />
  79. </template>
  80. </hc-new-card>
  81. <!-- 中间计量新增 -->
  82. <HcAddModal v-model="addModalShow" @finish="addModalFinish" />
  83. <!-- 中间计量编辑 -->
  84. <HcEditModal
  85. v-model="editModalShow"
  86. :ids="editModalIds"
  87. @finish="editModalFinish"
  88. />
  89. <!-- 查看报表 -->
  90. <hc-view-report v-model="isReportDrawer" :datas="pdfList" />
  91. <!-- 任务流程 -->
  92. <HcTaskModal
  93. v-model="isTaskModal"
  94. :ids="taskDataId"
  95. @close="taskDataId = ''"
  96. />
  97. </div>
  98. </template>
  99. <script setup>
  100. import { onActivated, ref, watch } from 'vue'
  101. import { useAppStore } from '~src/store'
  102. import { delMessage } from '~uti/tools'
  103. import { getArrValue, isNullES } from 'js-fast-way'
  104. import HcAddModal from './components/certificate/addModal.vue'
  105. import HcEditModal from './components/certificate/editModal.vue'
  106. import HcTaskModal from '~src/components/task-modal/task-modal.vue'
  107. import mainApi from '~api/debit-pay/admin/certificate'
  108. import taskApi from '~api/tasks/hc-data'
  109. import { toPdfPage } from '~uti/btn-auth'
  110. import { useRoute } from 'vue-router'
  111. const useAppState = useAppStore()
  112. const useRoutes = useRoute()
  113. const projectId = ref(useAppState.getProjectId || '')
  114. const contractId = ref(useAppState.getContractId || '')
  115. defineOptions({
  116. name: 'DebitPayAdminCertificate',
  117. })
  118. //渲染完成
  119. onActivated(() => {
  120. getTableData()
  121. })
  122. const isReportDrawer = ref(false)
  123. watch(
  124. () => useRoutes,
  125. (val) => {
  126. if (val) {
  127. isReportDrawer.value = false
  128. }
  129. },
  130. { immediate: true, deep: true },
  131. )
  132. //搜索表单
  133. const searchForm = ref({ current: 1, size: 20, total: 0 })
  134. //分页
  135. const pageChange = ({ current, size }) => {
  136. searchForm.value.current = current
  137. searchForm.value.size = size
  138. getTableData()
  139. }
  140. //表格数据
  141. const tableLoading = ref(false)
  142. const tableColumn = ref([
  143. { key: 'periodNumber', name: '期号' },
  144. { key: 'certificateNumber', name: '证书编号' },
  145. { key: 'startDate', name: '开始日期' },
  146. { key: 'endDate', name: '结束日期' },
  147. { key: 'printDate', name: '打印日期' },
  148. { key: 'calculateDate', name: '重新计算时间' },
  149. // { key: 'payMoney', name: '支付金额' },
  150. { key: 'action', name: '操作', width: 440, align: 'center' },
  151. ])
  152. const tableData = ref([])
  153. const getTableData = async () => {
  154. tableData.value = []
  155. tableLoading.value = true
  156. const { data } = await mainApi.getPage({
  157. ...searchForm.value,
  158. projectId: projectId.value,
  159. contractId: contractId.value,
  160. })
  161. tableData.value = getArrValue(data['records'])
  162. searchForm.value.total = data.total || 0
  163. tableLoading.value = false
  164. }
  165. //新增
  166. const addModalShow = ref(false)
  167. const addModalClick = () => {
  168. addModalShow.value = true
  169. }
  170. const addModalFinish = () => {
  171. getTableData()
  172. }
  173. //多选
  174. const tableCheckedKeys = ref([])
  175. const tableSelectionChange = (rows) => {
  176. tableCheckedKeys.value = rows
  177. }
  178. //修改
  179. const editModalShow = ref(false)
  180. const editModalIds = ref('')
  181. const rowEditClick = (row) => {
  182. editModalIds.value = row.id
  183. editModalShow.value = true
  184. }
  185. const editModalFinish = () => {
  186. getTableData()
  187. editModalIds.value = false
  188. }
  189. //删除
  190. const rowDelClick = (row) => {
  191. delMessage(async () => {
  192. const { error, code, msg } = await mainApi.remove({ ids: row.id })
  193. if (!error && code === 200) {
  194. window.$message.success('删除成功')
  195. getTableData().then()
  196. } else {
  197. window.$message.error(msg ?? '删除失败')
  198. }
  199. })
  200. }
  201. //锁定还是解锁
  202. const rowLockingClick = async (row) => {
  203. //isLock,是否锁定:0未锁定,1锁定
  204. const { error, code, msg } = await mainApi.setLocking({
  205. id: row.id,
  206. isLock: row.isLock,
  207. })
  208. if (!error && code === 200) {
  209. window.$message.success('操作成功')
  210. getTableData().then()
  211. } else {
  212. window.$message.error(msg ?? '操作失败')
  213. }
  214. }
  215. //重新计算
  216. const recalculateLoading = ref(false)
  217. const recalculateClick = async () => {
  218. const rows = tableCheckedKeys.value
  219. if (rows.length <= 0) {
  220. window.$message.warning('请先勾选一条数据')
  221. return
  222. }
  223. if (rows.length > 1) {
  224. window.$message.warning('目前仅支持选择一条数据')
  225. return
  226. }
  227. recalculateLoading.value = true
  228. const isRes = await postRecalculateApi(rows[0])
  229. recalculateLoading.value = false
  230. if (isRes) {
  231. editModalIds.value = false
  232. getTableData().then()
  233. }
  234. }
  235. //重新计算报表
  236. const rowRecalculateClick = async (row) => {
  237. row.recalculateLoading = true
  238. const isRes = await postRecalculateApi(row)
  239. row.recalculateLoading = false
  240. if (isRes) {
  241. editModalIds.value = false
  242. getTableData().then()
  243. }
  244. }
  245. //发起重新计算请求
  246. const postRecalculateApi = async ({ id }) => {
  247. const { error, code, msg } = await mainApi.recalculate({
  248. reportId: id,
  249. type: 0,
  250. taskType: 1,
  251. })
  252. if (!error && code === 200) {
  253. window.$message.success('操作成功')
  254. return true
  255. } else {
  256. window.$message.error(msg ?? '操作失败')
  257. return false
  258. }
  259. }
  260. //查看报表
  261. const pdfList = ref([])
  262. const rowViewPdf = (row) => {
  263. pdfList.value = []
  264. if (getArrValue(row?.urlListData).length > 0) {
  265. pdfList.value = getArrValue(row?.urlListData)
  266. console.log(pdfList.value, 'pdfList.value')
  267. isReportDrawer.value = true
  268. } else {
  269. window.$message.warning('暂无报表数据')
  270. }
  271. }
  272. const rowViewRawPdf = (row) => {
  273. const { status } = row
  274. if (status === 1) {
  275. viewPdf(row)
  276. } else {
  277. toPdfPage(row?.rawUrl)
  278. }
  279. }
  280. //查看报表
  281. const rowViewLoading = ref(false)
  282. const viewPdf = async (row) => {
  283. const { id, taskId } = row
  284. row.rowViewLoading = true
  285. const { code, msg, data } = await taskApi.taskMeterPdfInfo({
  286. reportId: id,
  287. type: 0,
  288. taskType: 10,
  289. taskId: taskId,
  290. })
  291. row.rowViewLoading = false
  292. if (code === 200 && !isNullES(data)) {
  293. window.$message.success('操作成功')
  294. toPdfPage(data)
  295. } else {
  296. window.$message.error(msg ?? '操作失败')
  297. }
  298. }
  299. //查看电签流程
  300. const isTaskModal = ref(false)
  301. const taskDataId = ref('')
  302. const eVisaRowClick = ({ taskId }) => {
  303. if (isNullES(taskId)) {
  304. window.$message.warning('暂无电签数据')
  305. return
  306. }
  307. taskDataId.value = taskId
  308. setTimeout(() => {
  309. isTaskModal.value = true
  310. }, 200)
  311. }
  312. </script>
  313. <style scoped lang="scss"></style>