form.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <template>
  2. <HcCard action-ui="text-center">
  3. <el-scrollbar ref="listItemScrollRef">
  4. <CollapseForm
  5. v-if="ListItemDatas.length > 0"
  6. ref="ListItemRef"
  7. v-loading="ListItemLoading"
  8. :classify="dataType"
  9. :contract-id="0"
  10. :datas="ListItemDatas"
  11. :primary-key-id="0"
  12. :status="0"
  13. :area-id="areaId"
  14. :agreement-id="agreementId"
  15. @renew="updateGetTablesData(agreementId)"
  16. />
  17. <HcStatus v-else text="暂无表单" />
  18. </el-scrollbar>
  19. <template #action>
  20. <el-button size="large" type="primary" hc-btn :loading="tableFormSaveLoading" @click="tableFormSaveClick">
  21. <HcIcon name="check-double" />
  22. <span>提交保存</span>
  23. </el-button>
  24. <el-button size="large" type="primary" hc-btn>
  25. <HcIcon name="draft" />
  26. <span>一键生成协议</span>
  27. </el-button>
  28. <el-button size="large" type="warning" hc-btn :loading="bussPdfsLoading" @click="bussPdfsClick">
  29. <HcIcon name="eye" />
  30. <span>预览</span>
  31. </el-button>
  32. <el-button size="large" type="success" hc-btn @click="addFile">
  33. <HcIcon name="upload" />
  34. <span>上传附件协议</span>
  35. </el-button>
  36. <el-button size="large" type="info" hc-btn @click="goBackClick">
  37. <HcIcon name="arrow-go-back" />
  38. <span>取消并返回</span>
  39. </el-button>
  40. </template>
  41. <HcDialog is-to-body :show="addModal" title="上传附件协议" @close="testModalClose">
  42. <HcUpload :datas="uploadData" :file-list="fileListData" :is-canupload="false" action="/api/blade-manager/exceltab/add-bussfile-node" accept="application/pdf" accept-tip="允许格式:pdf" @change="uploadChange" />
  43. </HcDialog>
  44. </HcCard>
  45. </template>
  46. <script setup>
  47. import { onActivated, ref } from 'vue'
  48. import { useRoute, useRouter } from 'vue-router'
  49. import CollapseForm from './collapse-form/index.vue'
  50. import landApi from '~api/agree/land.js'
  51. import { useAppStore } from '~src/store'
  52. import { getArrValue, getObjVal } from 'js-fast-way'
  53. import HcUpload from './components/HcUpload.vue'
  54. const useAppState = useAppStore()
  55. const projectId = ref(useAppState.getProjectId)
  56. const router = useRouter()
  57. const useRoutes = useRoute()
  58. //初始变量
  59. const dataType = ref(useRoutes?.query?.type ?? 'view')
  60. const agreementId = ref(useRoutes?.query?.id ?? '')
  61. const areaId = ref(useRoutes?.query?.areaId ?? '')
  62. //缓存页面被激活时
  63. onActivated(() => {
  64. dataType.value = useRoutes?.query?.type ?? 'view'
  65. agreementId.value = useRoutes?.query?.id ?? ''
  66. areaId.value = useRoutes?.query?.areaId ?? ''
  67. if (agreementId.value.length > 0) {
  68. updateGetTablesData( agreementId.value)
  69. } else {
  70. searchNodeAllTable()
  71. }
  72. })
  73. const listItemScrollRef = ref(null)
  74. //返回
  75. const goBackClick = () => {
  76. router.back()
  77. }
  78. //获取数据列表
  79. const ListItemsRef = ref(null)
  80. const ListItemDatas = ref([])
  81. const ListItemLoading = ref(false)
  82. //新增获取表单列表id
  83. const searchNodeAllTable = async () => {
  84. const { error, code, data } = await landApi.addGetTables({
  85. projectId: projectId.value,
  86. type: 2,
  87. areaId:areaId.value,
  88. })
  89. //处理数据
  90. if (!error && code === 200) {
  91. agreementId.value = data
  92. updateGetTablesData(data)
  93. } else {
  94. agreementId.value = ''
  95. }
  96. }
  97. //编辑获取表单列表
  98. const updateGetTablesData = async (id) => {
  99. ListItemDatas.value = []
  100. ListItemLoading.value = true
  101. const { error, code, data } = await landApi.updateGetTables({
  102. agreementId:id,
  103. })
  104. //处理数据
  105. ListItemLoading.value = false
  106. if (!error && code === 200) {
  107. ListItemDatas.value = getArrValue(data)
  108. } else {
  109. ListItemDatas.value = []
  110. }
  111. }
  112. //保存
  113. const ListItemRef = ref(null)
  114. const tableFormSaveLoading = ref(false)
  115. const tableFormSaveClick = async () => {
  116. //获取数据
  117. let FormData = []
  118. FormData = await ListItemRef.value?.getFormData()
  119. //效验数据
  120. if (FormData.length > 0) {
  121. tableFormSaveLoading.value = true
  122. FormData.forEach(ele => {
  123. delete ele['pkeyId']
  124. })
  125. const { error, code, data } = await landApi.saveBussData({
  126. dataInfo: { orderList: FormData },
  127. })
  128. tableFormSaveLoading.value = false
  129. if (!error && code === 200) {
  130. window?.$message?.success('保存成功')
  131. dataType.value = 2
  132. await bussPdfsClick()
  133. updateGetTablesData(agreementId.value)
  134. }
  135. } else {
  136. console.log('预览')
  137. // await bussPdfsClick()
  138. }
  139. }
  140. //多表预览
  141. const bussPdfsLoading = ref(false)
  142. const bussPdfsClick = async () => {
  143. bussPdfsLoading.value = true
  144. const { error, code, data } = await landApi.getBussPdfs({
  145. agreementId:agreementId.value,
  146. })
  147. tableFormSaveLoading.value = false
  148. bussPdfsLoading.value = false
  149. if (!error && code === 200) {
  150. window.open(data, '_blank')
  151. } else {
  152. window.$message?.warning('获取PDF失败')
  153. }
  154. }
  155. //上传附件
  156. const addModal = ref(false)
  157. const testModalClose = ()=>{
  158. addModal.value = false
  159. }
  160. const addFile = ()=>{
  161. addModal.value = true
  162. }
  163. const uploadData = ref({})
  164. const fileListData = ref([])
  165. //上传文件
  166. const uploadChange = async ({ type }) => {
  167. if (type === 'success') {
  168. // getBussFileList(primaryKeyId.value)
  169. } else if (type === 'del') {
  170. // getBussFileList(primaryKeyId.value)
  171. }
  172. }
  173. </script>
  174. <style lang="scss" scoped>
  175. </style>