addModal.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <template>
  2. <hc-new-dialog is-table widths="95%" :show="isShow" title="中间收方新增" @save="addModalSave" @close="addModalClose">
  3. <div class="relative h-full flex">
  4. <div :id="`hc_tree_card_${uuid}`" class="hc_tree_card_border relative">
  5. <hc-body scrollbar padding="0px">
  6. <hc-lazy-tree :h-props="treeProps" @load="treeLoadNode" />
  7. </hc-body>
  8. </div>
  9. <div :id="`hc_table_card_${uuid}`" class="relative flex-1">
  10. <hc-body scrollbar padding="0px">
  11. <!-- 基础表单 -->
  12. <hc-card-item title="基础表单">
  13. <el-form ref="baseFormRef" :model="baseForm" :rules="baseFormRules" label-position="left" label-width="auto">
  14. <el-row :gutter="20">
  15. <el-col :span="8">
  16. <el-form-item label="收方期:">
  17. <el-input v-model="baseForm.key1" disabled />
  18. </el-form-item>
  19. </el-col>
  20. <el-col :span="8">
  21. <el-form-item label="收方单编号:">
  22. <el-input v-model="baseForm.key2" disabled />
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="8">
  26. <el-form-item label="收方日期:">
  27. <el-date-picker v-model="baseForm.key3" class="block" format="YYYY-MM-DD" type="date" value-format="YYYY-MM-DD" disabled />
  28. </el-form-item>
  29. </el-col>
  30. <el-col :span="16">
  31. <el-form-item label="工程划分:">
  32. <el-input v-model="baseForm.key4" disabled />
  33. </el-form-item>
  34. </el-col>
  35. <el-col :span="8">
  36. <el-form-item label="部位名称:">
  37. <el-input v-model="baseForm.key5" />
  38. </el-form-item>
  39. </el-col>
  40. <el-col :span="8">
  41. <el-form-item label="收方金额:">
  42. <el-input v-model="baseForm.key6" disabled />
  43. </el-form-item>
  44. </el-col>
  45. <el-col :span="8">
  46. <el-form-item label="交工证书编号:">
  47. <el-input v-model="baseForm.key7" />
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="8">
  51. <el-form-item label="排序号:">
  52. <el-input v-model="baseForm.key8" />
  53. </el-form-item>
  54. </el-col>
  55. <el-col :span="24">
  56. <el-form-item label="草图文件:">
  57. <hc-form-upload v-model="baseForm.key9" @item="uploadFileItem" />
  58. </el-form-item>
  59. </el-col>
  60. <el-col :span="24">
  61. <el-form-item label="计算式:">
  62. <el-input v-model="baseForm.key10" :autosize="{ minRows: 4, maxRows: 8 }" type="textarea" />
  63. </el-form-item>
  64. </el-col>
  65. </el-row>
  66. </el-form>
  67. </hc-card-item>
  68. <!-- 收方清单列表 -->
  69. <hc-card-item class="mt-3">
  70. <template #header>
  71. <span class="mr-3">收方清单列表</span>
  72. <span class="text-orange font-400">温馨提示:超计,累计收方量> 变更后数量,分解清单超计整行红色</span>
  73. </template>
  74. <template #extra>
  75. <el-button type="primary" text @click="addBillBaseModalClick">
  76. <HcIcon name="add" />
  77. <span>添加</span>
  78. </el-button>
  79. </template>
  80. <hc-table is-new :index-style="{ width: 60 }" :column="addTableColumn" :datas="addTableData">
  81. <template #key3="{ row }">
  82. <hc-table-input v-model="row.key3" disabled />
  83. </template>
  84. <template #key5="{ row }">
  85. <hc-table-input v-model="row.key5" disabled />
  86. </template>
  87. <template #key6="{ row }">
  88. <hc-table-input v-model="row.key6" />
  89. </template>
  90. <template #key7="{ row }">
  91. <hc-table-input v-model="row.key7" />
  92. </template>
  93. <template #key8="{ row }">
  94. <hc-table-input v-model="row.key8" />
  95. </template>
  96. <template #key9="{ row }">
  97. <hc-table-input v-model="row.key9" disabled />
  98. </template>
  99. <template #key10="{ row }">
  100. <hc-table-input v-model="row.key10" disabled />
  101. </template>
  102. <template #action="{ row }">
  103. <el-link type="danger">删除</el-link>
  104. </template>
  105. </hc-table>
  106. </hc-card-item>
  107. <!-- 附件列表 -->
  108. <hc-card-item class="mt-3" title="附件列表">
  109. <template #extra>
  110. <span class="text-orange font-400">可上传 图片(png、jpg、jpeg)、Excel(xls、xlsx)、PDF、Word(doc、docx)文件</span>
  111. </template>
  112. <el-form :model="baseForm" label-position="left" label-width="auto">
  113. <el-form-item label="上传附件">
  114. <hc-form-upload v-model="baseForm.key11" :options="{ type: 'list', num: 99 }" @item="uploadFileItem" />
  115. </el-form-item>
  116. </el-form>
  117. </hc-card-item>
  118. </hc-body>
  119. </div>
  120. </div>
  121. </hc-new-dialog>
  122. <!-- 添加分解清单 -->
  123. <HcBillBaseModal v-model="addBillBaseModalShow" />
  124. </template>
  125. <script setup>
  126. import { nextTick, ref, watch } from 'vue'
  127. import { toPdfPage } from '~uti/btn-auth'
  128. import HcBillBaseModal from '../addBillBaseModal.vue'
  129. import { getObjValue, getRandom, isNullES } from 'js-fast-way'
  130. const props = defineProps({
  131. ids: {
  132. type: [String, Number],
  133. default: '',
  134. },
  135. })
  136. //事件
  137. const emit = defineEmits(['finish', 'close'])
  138. const uuid = getRandom(4)
  139. //双向绑定
  140. // eslint-disable-next-line no-undef
  141. const isShow = defineModel('modelValue', {
  142. default: false,
  143. })
  144. //监听
  145. watch(() => [
  146. props.ids,
  147. ], ([ids]) => {
  148. console.log('ids', ids)
  149. }, { immediate: true })
  150. //监听
  151. watch(isShow, (val) => {
  152. if (val) {
  153. setSplitRef()
  154. }
  155. })
  156. //初始化设置拖动分割线
  157. const setSplitRef = () => {
  158. //配置参考: https://split.js.org/#/?direction=vertical&snapOffset=0
  159. nextTick(() => {
  160. window.$split(['#hc_tree_card_' + uuid, '#hc_table_card_' + uuid], {
  161. sizes: [20, 80],
  162. snapOffset: 0,
  163. minSize: [50, 500],
  164. })
  165. })
  166. }
  167. //基础表单
  168. const baseFormRef = ref(null)
  169. const baseForm = ref({})
  170. const baseFormRules = {}
  171. //数据格式
  172. const treeProps = {
  173. label: 'name',
  174. children: 'children',
  175. isLeaf: 'leaf',
  176. }
  177. //懒加载的数据
  178. const treeLoadNode = ({ level }, resolve) => {
  179. if (level === 0) {
  180. return resolve([{ name: 'region' }])
  181. }
  182. if (level > 3) {
  183. return resolve([])
  184. }
  185. setTimeout(() => {
  186. resolve([
  187. { name: 'leaf', leaf: true },
  188. { name: 'zone' },
  189. ])
  190. }, 500)
  191. }
  192. //收方清单列表
  193. const addTableColumn = ref([
  194. { key: 'key1', name: '清单编号', width: '120' },
  195. { key: 'key2', name: '清单名称', minWidth: '280' },
  196. { key: 'key3', name: '单价(元)', width: '100' },
  197. { key: 'key4', name: '分解数量', width: '100' },
  198. { key: 'key5', name: '变更后数量', width: '100' },
  199. { key: 'key6', name: '本期计划收方数量', width: '140' },
  200. { key: 'key7', name: '本期实际收方数量', width: '140' },
  201. { key: 'key8', name: '含变更数量', width: '100' },
  202. { key: 'key9', name: '本期收方金额', width: '120' },
  203. { key: 'key10', name: '累计收方量', width: '100' },
  204. { key: 'action', name: '操作', fixed: 'right', width: 80, align: 'center' },
  205. ])
  206. const addTableData = ref([
  207. { key1: '101-1-a', key2: '按合同条款规定,提供建筑工程一切险' },
  208. ])
  209. //添加分解单
  210. const addBillBaseModalShow = ref(false)
  211. const addBillBaseModalClick = () => {
  212. addBillBaseModalShow.value = true
  213. }
  214. //文件被点击
  215. const uploadFileItem = ({ file }) => {
  216. const { url } = getObjValue(file)
  217. if (isNullES(url)) return
  218. toPdfPage(url)
  219. }
  220. const addModalSave = () => {
  221. emit('finish')
  222. addModalClose()
  223. }
  224. //关闭弹窗
  225. const addModalClose = () => {
  226. isShow.value = false
  227. emit('close')
  228. }
  229. </script>
  230. <style scoped lang="scss">
  231. </style>