ZaiZai 1 жил өмнө
parent
commit
1ff36b9215

+ 20 - 5
src/api/modules/debit-pay/admin/middlepay.js

@@ -17,7 +17,6 @@ export default {
             data: form,
         }, msg)
     },
-    
     //新增
     async add(form, msg = true) {
         return HcApi({
@@ -34,6 +33,22 @@ export default {
             params: form,
         }, msg)
     },
+    //获取详情
+    async getDetail(form, msg = true) {
+        return HcApi({
+            url: '/api/blade-meter/middleMeterApply/detail',
+            method: 'get',
+            params: form,
+        }, msg)
+    },
+    //获取清单明细
+    async getFormDetail(form, msg = true) {
+        return HcApi({
+            url: '/api/blade-meter/middleMeterApply/formDetail',
+            method: 'get',
+            params: form,
+        }, msg)
+    },
     //添加清单
     async addFormList(form, msg = true) {
         return HcApi({
@@ -58,12 +73,12 @@ export default {
             params: form,
         }, msg)
     },
-    //获取当前节点工程划分
-    async formDetail(form, msg = true) {
+    //获取当前节点变更令
+    async getNodeToken(form, msg = true) {
         return HcApi({
-            url: '/api/blade-meter/middleMeterApply/formDetail',
+            url: '/api/blade-meter/middleMeterApply/getNodeToken',
             method: 'get',
             params: form,
         }, msg)
     },
-}
+}

+ 74 - 0
src/views/debit-pay/admin/components/middlepay/addBillBaseModal.vue

@@ -0,0 +1,74 @@
+<template>
+    <hc-new-dialog is-table widths="1200px" :show="isShow" title="添加分解清单" @save="modalSave" @close="modalClose">
+        <hc-table
+            :column="tableColumn" :datas="tableData" :loading="tableLoading"
+            is-new is-check :check-style="{ width: 29 }" :index-style="{ width: 60 }"
+            @selection-change="tableCheckChange"
+        />
+    </hc-new-dialog>
+</template>
+
+<script setup>
+import { ref, watch } from 'vue'
+
+const props = defineProps({
+    ids: {
+        type: [String, Number],
+        default: '',
+    },
+})
+
+//事件
+const emit = defineEmits(['finish', 'close'])
+
+//双向绑定
+// eslint-disable-next-line no-undef
+const isShow = defineModel('modelValue', {
+    default: false,
+})
+
+//监听
+watch(() => [
+    props.ids,
+], ([ids]) => {
+    console.log('ids', ids)
+}, { immediate: true })
+
+//监听
+watch(isShow, (val) => {
+    if (val) {
+        console.log('处理数据')
+    }
+})
+//表格数据
+const tableLoading = ref(false)
+const tableColumn = [
+    { key: 'key1', name: '清单编号' },
+    { key: 'key2', name: '清单名称' },
+    { key: 'key3', name: '单价(元)' },
+    { key: 'key4', name: '合同数量' },
+    { key: 'key5', name: '合同变更后数量' },
+    { key: 'key6', name: '施工图变更后数量' },
+    { key: 'key7', name: '分解剩余量' },
+]
+const tableData = ref([
+    { key1: '1111' },
+])
+
+//表格选择
+const tableCheckChange = (checks) => {
+    console.log(checks)
+}
+const modalSave = () => {
+    emit('finish')
+    modalClose()
+}
+const modalClose = () => {
+    isShow.value = false
+    emit('close')
+}
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 136 - 87
src/views/debit-pay/admin/components/middlepay/addModal.vue

@@ -3,7 +3,7 @@
         <div class="relative h-full flex">
             <div :id="`hc_tree_card_${uuid}`" class="hc_tree_card_border relative">
                 <hc-body scrollbar padding="0px">
-                    <hc-lazy-tree :h-props="treeProps" @load="treeLoadNode" />
+                    <hc-lazy-tree :h-props="treeProps" tree-key="id" :auto-expand-keys="treeAutoExpandKeys" @load="treeLoadNode" @nodeTap="treeNodeTap" />
                 </hc-body>
             </div>
             <div :id="`hc_table_card_${uuid}`" class="relative flex-1">
@@ -14,57 +14,59 @@
                             <el-row :gutter="20">
                                 <el-col :span="8">
                                     <el-form-item label="计量期:">
-                                        <el-input v-model="baseForm.key1" disabled />
+                                        <el-select v-model="baseForm.contractPeriodId" placeholder="选择计量期" filterable block @change="periodChange">
+                                            <el-option v-for="item in period" :key="item.id" :label="item.periodName" :value="item.id" />
+                                        </el-select>
                                     </el-form-item>
                                 </el-col>
                                 <el-col :span="8">
                                     <el-form-item label="计量单编号:">
-                                        <el-input v-model="baseForm.key2" disabled />
+                                        <el-input v-model="baseForm.meterNumber" disabled />
                                     </el-form-item>
                                 </el-col>
                                 <el-col :span="8">
                                     <el-form-item label="业务日期:">
-                                        <el-date-picker v-model="baseForm.key3" class="block" format="YYYY-MM-DD" type="date" value-format="YYYY-MM-DD" disabled />
+                                        <el-date-picker v-model="baseForm.businessDate" class="block" format="YYYY-MM-DD" type="date" value-format="YYYY-MM-DD" />
                                     </el-form-item>
                                 </el-col>
                                 <el-col :span="16">
                                     <el-form-item label="工程划分:">
-                                        <el-input v-model="baseForm.key4" disabled />
+                                        <el-input v-model="baseForm.engineerDivide" disabled />
                                     </el-form-item>
                                 </el-col>
                                 <el-col :span="8">
                                     <el-form-item label="部位名称:">
-                                        <el-input v-model="baseForm.key5" />
+                                        <el-input v-model="baseForm.partName" />
                                     </el-form-item>
                                 </el-col>
                                 <el-col :span="8">
                                     <el-form-item label="交工证书编号:">
-                                        <el-input v-model="baseForm.key7" />
+                                        <el-input v-model="baseForm.certificateNumber" />
                                     </el-form-item>
                                 </el-col>
                                 <el-col :span="8">
                                     <el-form-item label="计量金额:">
-                                        <el-input v-model="baseForm.key6" disabled />
+                                        <el-input v-model="baseForm.meterMoney" disabled />
                                     </el-form-item>
                                 </el-col>
                                 <el-col :span="8">
                                     <el-form-item label="变更令:">
-                                        <el-input v-model="baseForm.key6" disabled />
+                                        <el-input v-model="baseForm.kchangeTokenNumberey6" disabled />
                                     </el-form-item>
                                 </el-col>
                                 <el-col :span="8">
                                     <el-form-item label="收方单:">
-                                        <el-input v-model="baseForm.key6" disabled />
+                                        <el-input v-model="baseForm.debitFormId" disabled />
                                     </el-form-item>
                                 </el-col>
                                 <el-col :span="16">
                                     <el-form-item label="草图文件:">
-                                        <hc-form-upload :src="baseForm.key9" />
+                                        <hc-form-upload :src="baseForm.pictureUrl" />
                                     </el-form-item>
                                 </el-col>
                                 <el-col :span="24">
                                     <el-form-item label="计算式:">
-                                        <el-input v-model="baseForm.key10" :autosize="{ minRows: 4, maxRows: 8 }" type="textarea" />
+                                        <el-input v-model="baseForm.calculateFormula" :autosize="{ minRows: 4, maxRows: 8 }" type="textarea" />
                                     </el-form-item>
                                 </el-col>
                             </el-row>
@@ -83,23 +85,23 @@
                             </el-button>
                         </template>
                         <hc-table is-new :index-style="{ width: 60 }" :column="addTableColumn" :datas="addTableData">
-                            <template #key3="{ row }">
-                                <hc-table-input v-model="row.key3" disabled />
+                            <template #currentPrice="{ row }">
+                                <hc-table-input v-model="row.currentPrice" disabled />
                             </template>
-                            <template #key5="{ row }">
-                                <hc-table-input v-model="row.key5" disabled />
+                            <template #changeTotal="{ row }">
+                                <hc-table-input v-model="row.changeTotal" disabled />
                             </template>
-                            <template #key6="{ row }">
-                                <hc-table-input v-model="row.key6" />
+                            <template #currentMeterTotal="{ row }">
+                                <hc-table-input v-model="row.currentMeterTotal" />
                             </template>
-                            <template #key7="{ row }">
-                                <hc-table-input v-model="row.key7" />
+                            <template #containChangeTotal="{ row }">
+                                <hc-table-input v-model="row.containChangeTotal" />
                             </template>
-                            <template #key8="{ row }">
-                                <hc-table-input v-model="row.key8" disabled />
+                            <template #currentMeterMoney="{ row }">
+                                <hc-table-input v-model="row.currentMeterMoney" disabled />
                             </template>
-                            <template #key9="{ row }">
-                                <hc-table-input v-model="row.key9" disabled />
+                            <template #allMeterTotal="{ row }">
+                                <hc-table-input v-model="row.allMeterTotal" disabled />
                             </template>
                             <template #action="{ row }">
                                 <el-link type="danger">删除</el-link>
@@ -123,16 +125,7 @@
     </hc-new-dialog>
 
     <!-- 添加分解清单 -->
-    <HcBillBaseModal v-model="addBillBaseModalShow" />
-
-    <!-- 关联变更令 -->
-    <HcLinkAlterModal v-model="linkAlterModal" />
-
-    <!-- 关联收方单 -->
-    <HcLinkDebitModal v-model="linkDebitModal" />
-
-    <!-- 关联质保资料 -->
-    <HcLinkWarranty v-model="linkWarrantyModal" />
+    <HcBillBaseModal v-model="addBillBaseModalShow" :ids="billBaseIds" />
 
     <!-- 文件上传组件 -->
     <hc-upload-file ref="HcUploadFileRef" />
@@ -140,13 +133,34 @@
 
 <script setup>
 import { nextTick, ref, watch } from 'vue'
-import HcBillBaseModal from '../addBillBaseModal.vue'
-import HcLinkAlterModal from './linkAlterModal.vue'
-import HcLinkDebitModal from './linkDebitModal.vue'
-import HcLinkWarranty from './linkWarranty.vue'
-import { getRandom } from 'js-fast-way'
+import { getStoreValue } from '~src/utils/storage'
+import HcBillBaseModal from './addBillBaseModal.vue'
+import { arrToId, getArrValue, getObjValue, getRandom } from 'js-fast-way'
+
+import unitApi from '~api/project/debit/contract/unit'
+import mainApi from '~api/debit-pay/admin/middlepay'
 
 const props = defineProps({
+    type: {
+        type: String,
+        default: 'add',
+    },
+    projectId: {
+        type: [String, Number],
+        default: '',
+    },
+    contractId: {
+        type: [String, Number],
+        default: '',
+    },
+    allPeriods: {
+        type: Array,
+        default: () => ([]),
+    },
+    periodId: {
+        type: [String, Number],
+        default: '',
+    },
     ids: {
         type: [String, Number],
         default: '',
@@ -157,6 +171,12 @@ const props = defineProps({
 const emit = defineEmits(['finish', 'close'])
 
 const uuid = getRandom(4)
+const dataId = ref(props.ids)
+const dataType = ref(props.type)
+const period = ref(props.allPeriods)
+const period_id = ref(props.periodId)
+const pid = ref(props.projectId)
+const cid = ref(props.contractId)
 
 //双向绑定
 // eslint-disable-next-line no-undef
@@ -167,14 +187,26 @@ const isShow = defineModel('modelValue', {
 //监听
 watch(() => [
     props.ids,
-], ([ids]) => {
-    console.log('ids', ids)
-}, { immediate: true })
+    props.type,
+    props.projectId,
+    props.contractId,
+    props.allPeriods,
+    props.periodId,
+], ([id, type, projectId, contractId, periods, periodId]) => {
+    dataId.value = id
+    dataType.value = type
+    period.value = periods
+    pid.value = projectId
+    cid.value = contractId
+    period_id.value = periodId
+    setBasePeriodForm(periodId)
+}, { deep: true })
 
 //监听
 watch(isShow, (val) => {
     if (val) {
         setSplitRef()
+        setBasePeriodForm(period_id.value)
     }
 })
 
@@ -190,9 +222,6 @@ const setSplitRef = () => {
     })
 }
 
-//文件上传
-const HcUploadFileRef = ref(null)
-
 //基础表单
 const baseFormRef = ref(null)
 const baseForm = ref({})
@@ -200,68 +229,88 @@ const baseFormRules = {}
 
 //数据格式
 const treeProps = {
-    label: 'name',
+    label: 'nodeName',
     children: 'children',
-    isLeaf: 'leaf',
+    isLeaf: 'notExsitChild',
 }
 
 //懒加载的数据
-const treeLoadNode = ({ level }, resolve) => {
-    if (level === 0) {
-        return resolve([{ name: 'region' }])
-    }
-    if (level > 3) {
-        return resolve([])
+const treeAutoExpandKeys = ref(getStoreValue('middlepay-tree-auto-expand-keys') || [])
+const treeLoadNode = async ({ item, level }, resolve) => {
+    let id = 0
+    if (level !== 0) {
+        const nodeData = getObjValue(item)
+        id = nodeData?.id || ''
     }
-    setTimeout(() => {
-        resolve([
-            { name: 'leaf', leaf: true },
-            { name: 'zone' },
-        ])
-    }, 500)
+    //获取数据
+    const { data } = await unitApi.lazyTree({
+        id: id,
+        contractId: cid.value,
+        contractPeriodId: period_id.value,
+    })
+    resolve(getArrValue(data))
 }
 
-//收方清单列表
-const addTableColumn = ref([
-    { key: 'key1', name: '清单编号', width: '120' },
-    { key: 'key2', name: '清单名称', minWidth: '280' },
-    { key: 'key3', name: '单价(元)', width: '100' },
-    { key: 'key4', name: '分解数量', width: '100' },
-    { key: 'key5', name: '变更后数量', width: '100' },
-    { key: 'key6', name: '本期计量数量', width: '140' },
-    { key: 'key7', name: '含变更数量', width: '100' },
-    { key: 'key8', name: '本期计量金额', width: '120' },
-    { key: 'key9', name: '累计计量量', width: '100' },
-    { key: 'action', name: '操作', fixed: 'right', width: 80, align: 'center' },
-])
-const addTableData = ref([
-    { key1: '101-1-a', key2: '按合同条款规定,提供建筑工程一切险' },
-])
+const treeNodeTap = ({ data }) => {
+    baseForm.value.contractUnitId = data.id
+    getNodeDivide(data.id)
+    getNodeToken(data.id)
+}
+
+//获取工程划分
+const getNodeDivide = async (nodeId) => {
+    const { data } = await mainApi.getNodeDivide({ nodeId: nodeId })
+    baseForm.value.engineerDivide = data ?? ''
+}
 
-//关联变更令
-const linkAlterModal = ref(false)
-const linkAlterClick = () => {
-    linkAlterModal.value = true
+//获取变更令
+const getNodeToken = async (nodeId) => {
+    const { data } = await mainApi.getNodeToken({ nodeId: nodeId })
+    //baseForm.value.engineerDivide = data ?? ''
+    console.log(data)
 }
 
-//关联质保资料
-const linkWarrantyModal = ref(false)
-const linkWarrantyClick = () => {
-    linkWarrantyModal.value = true
+//计量期被改变
+const periodChange = () => {
+    setBasePeriodForm(baseForm.value.contractPeriodId)
 }
 
-//关联收方单
-const linkDebitModal = ref(false)
-const linkDebitClick = () => {
-    linkDebitModal.value = true
+//计量期相关的数据
+const setBasePeriodForm = (periodId) => {
+    const periods = period.value
+    baseForm.value.contractPeriodId = periodId
+    const periodData = periods.find((item) => item.id === periodId)
+    baseForm.value.meterNumber = ''
+    baseForm.value.businessDate = periodData.endDate ?? null
 }
 
+//收方清单列表
+const addTableColumn = ref([
+    { key: 'formNumber', name: '清单编号', width: '120' },
+    { key: 'formName', name: '清单名称', minWidth: '280' },
+    { key: 'currentPrice', name: '单价(元)', width: '100' },
+    { key: 'resolveTotal', name: '分解数量', width: '100' },
+    { key: 'changeTotal', name: '变更后数量', width: '100' },
+    { key: 'currentMeterTotal', name: '本期计量数量', width: '140' },
+    { key: 'containChangeTotal', name: '含变更数量', width: '100' },
+    { key: 'currentMeterMoney', name: '本期计量金额', width: '120' },
+    { key: 'allMeterTotal', name: '累计计量量', width: '100' },
+    { key: 'action', name: '操作', fixed: 'right', width: 80, align: 'center' },
+])
+const addTableData = ref([])
+
 //添加分解单
 const addBillBaseModalShow = ref(false)
+const billBaseIds = ref('')
 const addBillBaseModalClick = () => {
     addBillBaseModalShow.value = true
+    billBaseIds.value = arrToId(addTableData.value)
 }
 
+//文件上传
+const HcUploadFileRef = ref(null)
+
+
 const addModalSave = () => {
     emit('finish')
     addModalClose()

+ 9 - 8
src/views/debit-pay/admin/middlepay.vue

@@ -39,7 +39,7 @@
             </hc-new-card>
         </div>
         <!-- 中间计量新增 -->
-        <HcAddModal v-model="addModalShow" />
+        <HcAddModal v-model="addModalShow" :project-id="projectId" :contract-id="contractId" :type="isAddModalType" :all-periods="key1Data" :period-id="searchForm.contractPeriodId" />
 
         <!-- 清单明细 -->
         <HcDetailsModal v-model="detailsModalShow" />
@@ -57,7 +57,7 @@ import { nextTick, onMounted, ref } from 'vue'
 import { useAppStore } from '~src/store'
 import HcAddModal from './components/middlepay/addModal.vue'
 import HcDetailsModal from './components/middlepay/detailsModal.vue'
-import { arrToId, getArrValue, getObjValue, getRandom } from 'js-fast-way'
+import { getArrValue, getObjValue, getRandom } from 'js-fast-way'
 import { getStoreValue, setStoreValue } from '~src/utils/storage'
 
 import periodApi from '~api/debit-pay/material/periods'
@@ -124,28 +124,27 @@ const treeProps = {
     children: 'children',
     isLeaf: 'notExsitChild',
 }
-const TreeAutoExpandKeys = ref(getStoreValue('wbsTreeExpandKeys') || [])
+const TreeAutoExpandKeys = ref(getStoreValue('middlepay-tree-auto-expand-keys') || [])
 //懒加载的数据
-const treeLoadNode = async ({ node, item, level }, resolve) => {
+const treeLoadNode = async ({ item, level }, resolve) => {
     let id = 0
     if (level !== 0) {
         const nodeData = getObjValue(item)
         id = nodeData?.id || ''
     }
     //获取数据
-    const { error, code, data } = await unitApi.lazyTree({
+    const { data } = await unitApi.lazyTree({
         contractId: contractId.value,
         id:id,
         contractPeriodId:searchForm.value.contractPeriodId,
     })
-
     resolve(getArrValue(data))
 }
-const treeNodeTap = ({data, keys }) => {
+const treeNodeTap = ({ data, keys }) => {
     searchForm.value.current = 1
     searchForm.value.contractUnitId = data.id
     TreeAutoExpandKeys.value = keys || []
-    setStoreValue('wbsTreeExpandKeys', keys)
+    setStoreValue('middlepay-tree-auto-expand-keys', keys)
     getTableData()
 }
 //分页
@@ -186,7 +185,9 @@ const tableCheckChange = () => {
 
 //中间收方新增
 const addModalShow = ref(false)
+const isAddModalType = ref('add')
 const addModalClick = () => {
+    isAddModalType.value = 'add'
     addModalShow.value = true
 }