Преглед на файлове

合同工程清单调接口

duy преди 1 година
родител
ревизия
ae79229685
променени са 2 файла, в които са добавени 145 реда и са изтрити 54 реда
  1. 24 0
      src/api/modules/project/debit/contract.js
  2. 121 54
      src/views/project/debit/contract/check-list.vue

+ 24 - 0
src/api/modules/project/debit/contract.js

@@ -17,4 +17,28 @@ export const importExcel = (form, msg = true) => HcApi({
     url: '/api/blade-meter/contractInventoryForm/importExcel',
     method: 'post',
     data: form,
+}, msg)
+//新增节点
+export const addNode = (form, msg = true) => HcApi({
+    url: '/api/blade-meter/contractInventoryForm/add',
+    method: 'post',
+    data: form,
+}, msg)
+//修改节点
+export const updateForm = (form, msg = true) => HcApi({
+    url: '/api/blade-meter/contractInventoryForm/updateForm',
+    method: 'post',
+    data: form,
+}, msg)
+//排序节点
+export const sortForm = (form, msg = true) => HcApi({
+    url: '/api/blade-meter/contractInventoryForm/sort',
+    method: 'post',
+    params: form,
+}, msg)
+//删除节点
+export const deleteNode = (form = {}, msg = true) => HcApi({
+    url: '/api/blade-meter/contractInventoryForm/delete',
+    method: 'get',
+    params: form,
 }, msg)

+ 121 - 54
src/views/project/debit/contract/check-list.vue

@@ -24,57 +24,58 @@
         </div>
 
         <!-- 节点数据 -->
-        <hc-new-dialog v-model="treeModalShow" widths="1100px" :title="treeModalTitle" @save="treeModalSave">
+        <hc-new-dialog v-model="treeModalShow" widths="1100px" :title="treeModalTitle" :loading="addNodeLoading" @save="treeModalSave">
             <el-form ref="formRef" class="p-4" label-position="left" label-width="auto" :model="formModel" :rules="formRules">
                 <el-row :gutter="20">
                     <el-col :span="8">
                         <el-form-item label="清单编号:">
-                            <el-input v-model="formModel.key1" />
+                            <el-input v-model="formModel.formNumber" />
                         </el-form-item>
                     </el-col>
                     <el-col :span="8">
                         <el-form-item label="清单名称:">
-                            <el-input v-model="formModel.key2" />
+                            <el-input v-model="formModel.formName" />
                         </el-form-item>
                     </el-col>
                     <el-col :span="8">
                         <el-form-item label="单位:">
-                            <el-input v-model="formModel.key3" />
+                            <el-input v-model="formModel.unit" />
                         </el-form-item>
                     </el-col>
                     <!-- 新增 -->
                     <template v-if="menuType === 'add'">
                         <el-col :span="8">
                             <el-form-item label="清单节点:">
-                                <el-select v-model="formModel.key4" block>
+                                <el-select v-model="formModel.isFormNode" block>
                                     <el-option label="是" :value="1" />
+                                    <el-option label="否" :value="0" />
                                 </el-select>
                             </el-form-item>
                         </el-col>
                         <el-col :span="8">
                             <el-form-item label="中标单价:">
-                                <el-input v-model="formModel.key5" :disabled="treeItem.isFormNode === 0" />
+                                <el-input v-model="formModel.bidPrice" :disabled="treeItem.isFormNode === 0" />
                             </el-form-item>
                         </el-col>
                         <el-col :span="8">
                             <el-form-item label="合同数量:">
-                                <el-input v-model="formModel.key6" :disabled="treeItem.isFormNode === 0" />
+                                <el-input v-model="formModel.contractTotal" :disabled="treeItem.isFormNode === 0" />
                             </el-form-item>
                         </el-col>
                         <el-col :span="8">
                             <el-form-item label="章编号:">
-                                <el-input v-model="formModel.key7" />
+                                <el-input v-model="formModel.chapterNumber" />
                             </el-form-item>
                         </el-col>
                         <el-col :span="8">
                             <el-form-item label="清单标识:">
-                                <el-input v-model="formModel.key8" />
+                                <el-input v-model="formModel.formTag" />
                             </el-form-item>
                         </el-col>
                         <el-col :span="8">
                             <el-form-item label="清单类型:">
-                                <el-select v-model="formModel.key9" block>
-                                    <el-option label="普通清单" :value="1" />
+                                <el-select v-model="formModel.formType" block placeholder="请选择">
+                                    <el-option v-for="item in formtypeOptions" :key="item.id" :label="item.dictValue" :value="item.dictKey" />
                                 </el-select>
                             </el-form-item>
                         </el-col>
@@ -83,32 +84,32 @@
                     <template v-if="menuType === 'edit' && treeItem.isFormNode === 1">
                         <el-col :span="8">
                             <el-form-item label="中标单价:">
-                                <el-input v-model="formModel.key5" />
+                                <el-input v-model="formModel.bidPrice" />
                             </el-form-item>
                         </el-col>
                         <el-col :span="8">
                             <el-form-item label="现行单价:">
-                                <el-input v-model="formModel.key14" disabled />
+                                <el-input v-model="formModel.currentPrice" disabled />
                             </el-form-item>
                         </el-col>
                         <el-col :span="8">
                             <el-form-item label="变更后单价:">
-                                <el-input v-model="formModel.key8" disabled />
+                                <el-input v-model="formModel.changePrice" disabled />
                             </el-form-item>
                         </el-col>
                         <el-col :span="8">
                             <el-form-item label="合同数量:">
-                                <el-input v-model="formModel.key6" />
+                                <el-input v-model="formModel.contractTotal" />
                             </el-form-item>
                         </el-col>
                         <el-col :span="8">
                             <el-form-item label="变更后数量:">
-                                <el-input v-model="formModel.key15" disabled />
+                                <el-input v-model="formModel.changeTotal" disabled />
                             </el-form-item>
                         </el-col>
                         <el-col :span="8">
                             <el-form-item label="章编号:">
-                                <el-input v-model="formModel.key7" disabled />
+                                <el-input v-model="formModel.chapterNumber" disabled />
                             </el-form-item>
                         </el-col>
                     </template>
@@ -116,30 +117,31 @@
                     <template v-if="menuType === 'edit'">
                         <el-col :span="8">
                             <el-form-item label="合同金额:">
-                                <el-input v-model="formModel.key11" disabled />
+                                <el-input v-model="formModel.contractMoney" disabled />
                             </el-form-item>
                         </el-col>
                         <el-col :span="8">
                             <el-form-item label="变更后金额:">
-                                <el-input v-model="formModel.key12" disabled />
+                                <el-input v-model="formModel.changeMoney" disabled />
                             </el-form-item>
                         </el-col>
                         <el-col :span="8">
                             <el-form-item label="清单标识:">
-                                <el-input v-model="formModel.key8" />
+                                <el-input v-model="formModel.formTag" />
                             </el-form-item>
                         </el-col>
                         <el-col :span="24">
                             <el-form-item label="清单节点:">
-                                <el-select v-model="formModel.key4" block>
+                                <el-select v-model="formModel.isFormNode" block>
                                     <el-option label="是" :value="1" />
+                                    <el-option label="否" :value="0" />
                                 </el-select>
                             </el-form-item>
                         </el-col>
                     </template>
                     <el-col :span="24">
                         <el-form-item label="备注:">
-                            <el-input v-model="formModel.key10" :autosize="{ minRows: 4, maxRows: 8 }" type="textarea" />
+                            <el-input v-model="formModel.remark" :autosize="{ minRows: 4, maxRows: 8 }" type="textarea" />
                         </el-form-item>
                     </el-col>
                 </el-row>
@@ -191,58 +193,58 @@
                 <el-row :gutter="20">
                     <el-col :span="8">
                         <el-form-item label="清单编号:">
-                            <el-input v-model="supplementsFormModel.key1" />
+                            <el-input v-model="supplementsFormModel.formNumber" />
                         </el-form-item>
                     </el-col>
                     <el-col :span="8">
                         <el-form-item label="清单名称:">
-                            <el-input v-model="supplementsFormModel.key2" />
+                            <el-input v-model="supplementsFormModel.formName" />
                         </el-form-item>
                     </el-col>
                     <el-col :span="8">
                         <el-form-item label="单位:">
-                            <el-input v-model="supplementsFormModel.key3" />
+                            <el-input v-model="supplementsFormModel.unit" />
                         </el-form-item>
                     </el-col>
                     <el-col :span="8">
                         <el-form-item label="现行单价:">
-                            <el-input v-model="supplementsFormModel.key4" />
+                            <el-input v-model="supplementsFormModel.currentPrice" />
                         </el-form-item>
                     </el-col>
                     <el-col :span="8">
                         <el-form-item label="清单类型:">
-                            <el-select v-model="supplementsFormModel.key5" block>
+                            <el-select v-model="supplementsFormModel.formType" block>
                                 <el-option label="普通清单" :value="1" />
                             </el-select>
                         </el-form-item>
                     </el-col>
                     <el-col :span="8">
                         <el-form-item label="章编号:">
-                            <el-input v-model="supplementsFormModel.key6" disabled />
+                            <el-input v-model="supplementsFormModel.chapterNumber" disabled />
                         </el-form-item>
                     </el-col>
                     <el-col :span="8">
                         <el-form-item label="清单节点:">
-                            <el-select v-model="supplementsFormModel.key7" disabled block>
+                            <el-select v-model="supplementsFormModel.isFormNode" disabled block>
                                 <el-option label="是" :value="1" />
                             </el-select>
                         </el-form-item>
                     </el-col>
                     <el-col :span="8">
                         <el-form-item label="增补清单:">
-                            <el-select v-model="supplementsFormModel.key8" disabled block>
+                            <el-select v-model="supplementsFormModel.isSupplement" disabled block>
                                 <el-option label="是" :value="1" />
                             </el-select>
                         </el-form-item>
                     </el-col>
                     <el-col :span="8">
                         <el-form-item label="清单标识:">
-                            <el-input v-model="supplementsFormModel.key9" />
+                            <el-input v-model="supplementsFormModel.formTag" />
                         </el-form-item>
                     </el-col>
                     <el-col :span="24">
                         <el-form-item label="备注:">
-                            <el-input v-model="supplementsFormModel.key10" :autosize="{ minRows: 4, maxRows: 8 }" type="textarea" />
+                            <el-input v-model="supplementsFormModel.remark" :autosize="{ minRows: 4, maxRows: 8 }" type="textarea" />
                         </el-form-item>
                     </el-col>
                 </el-row>
@@ -250,21 +252,21 @@
         </hc-new-dialog>
 
         <!-- 调整排序 -->
-        <hc-new-dialog v-model="sortModalShow" is-table widths="1100px" title="调整排序" @save="sortModalSave">
+        <hc-new-dialog v-model="sortModalShow" is-table widths="1100px" title="调整排序" :loading="sortNodeLoading" @save="sortModalSave">
             <hc-table
                 ui="hc-table-row-drop"
                 :column="sortTableColumn" :datas="sortTableData" :loading="sortTableLoading"
                 is-row-drop quick-sort is-new :index-style="{ width: 80 }"
                 @row-drop="sortTableRowDrop" @row-sort="sortTableRowDrop"
             >
-                <template #key2="{ row }">
-                    <span class="text-link">{{ row?.key2 }}</span>
+                <template #formName="{ row }">
+                    <span class="text-link">{{ row?.formName }}</span>
                 </template>
-                <template #action="{ index }">
-                    <span class="text-link text-xl" @click="upSortClick(index)">
+                <template #action="{ row, index }">
+                    <span class="text-link text-xl" @click="upSortClick(row, index)">
                         <HcIcon name="arrow-up" fill />
                     </span>
-                    <span class="text-link ml-2 text-xl" @click="downSortClick(index)">
+                    <span class="text-link ml-2 text-xl" @click="downSortClick(row, index)">
                         <HcIcon name="arrow-down" fill />
                     </span>
                 </template>
@@ -275,12 +277,13 @@
 
 <script setup>
 import { nextTick, onMounted, ref } from 'vue'
-import { getArrValue, getObjValue, getRandom } from 'js-fast-way'
+import { arrToId, getArrValue, getObjValue, getRandom } from 'js-fast-way'
 import { getHeader } from 'hc-vue3-ui'
 import { useAppStore } from '~src/store'
 import infoTable from './components/check-list/info-table.vue'
 import infoTable1 from './components/check-list/info-table1.vue'
-import { getDetail, getFormTree, importExcel } from '~api/project/debit/contract.js'
+import { addNode, deleteNode, getDetail, getFormTree, sortForm, updateForm } from '~api/project/debit/contract.js'
+import { getDictionary } from '~api/other'
 
 //变量
 const useAppState = useAppStore()
@@ -296,6 +299,7 @@ const uuid = getRandom(4)
 onMounted(() => {
     setSplitRef()
     treeLoadNode()
+    getFormType()
 })
 
 //初始化设置拖动分割线
@@ -309,7 +313,14 @@ const setSplitRef = () => {
         })
     })
 }
-
+//获取表但类型数据
+const formtypeOptions = ref([])
+const getFormType = async () => {
+    const { data } = await getDictionary({
+        code: 'meter_form_type',
+    })
+    formtypeOptions.value = getArrValue(data)
+}
 //搜索表单
 const searchForm = ref({})
 
@@ -382,20 +393,40 @@ const treeLoadMenu = ({ item, level }, resolve) => {
 
 const menuType = ref('')
 const treeItem = ref({})
-const treeMenuTap = ({ key, data }) => {
+const treeMenuTap = ({ key, data, node }) => {
     treeItem.value = data
     if (key === 'add') {
         menuType.value = 'add'
         treeModalTitle.value = '新增合同工程清单'
         treeModalShow.value = true
+        formModel.value = {
+            isFormNode:1,
+            formType:node.parent.data?.formType,
+            contractId:contractId.value,
+            projectId:projectId.value,
+            parentId:data.id,
+        }
     }
     if (key === 'edit') {
         menuType.value = 'edit'
-        treeModalTitle.value = data.name + ' - 修改合同工程清单'
+        treeModalTitle.value = data.formName + ' - 修改合同工程清单'
         treeModalShow.value = true
+        formModel.value = data
     }
     if (key === 'sort') {
+        let nodes = [], childNodes = []
+         childNodes = node?.parent?.childNodes || node?.parent?.children || []
+        
+        for (let i = 0; i < childNodes.length; i++) {
+            const res = childNodes[i]?.data
+            nodes.push({
+                formName:res?.formName,
+                id:res?.id,
+            })
+        }
+        sortTableData.value = nodes
         sortModalShow.value = true
+        // sortTableData.value = data.children
     }
 }
 
@@ -423,10 +454,36 @@ const treeModalTitle = ref('')
 const formRef = ref(null)
 const formModel = ref({})
 const formRules = ref({})
-
+const addNodeLoading = ref(false)
 //弹窗保存
-const treeModalSave = () => {
-
+const treeModalSave = async () => {
+    console.log(formModel.value, 'form')
+    console.log(menuType.value, 'val')
+    if (menuType.value === 'add') {
+        const { error, code } = await addNode({
+            ...formModel.value,
+            isSupplement:0,
+        })
+        //判断状态
+        addNodeLoading.value = false
+        if (!error && code === 200) {
+            window?.$message?.success('新增成功')
+            treeModalShow.value = false
+            window?.location?.reload() //刷新页面
+        }
+    } else if (menuType.value === 'edit') {
+        const { error, code } = await updateForm({
+            ...formModel.value,
+            isSupplement:0,
+        })
+        //判断状态
+        addNodeLoading.value = false
+        if (!error && code === 200) {
+            window?.$message?.success('修改成功')
+            treeModalShow.value = false
+            window?.location?.reload() //刷新页面
+        }
+    }
 }
 
 //合同工程清单导入
@@ -465,13 +522,11 @@ const supplementsModalSave = () => {
 const sortModalShow = ref(false)
 //表格数据
 const sortTableColumn = ref([
-    { key:'key1', name: '节点名称' },
+    { key:'formName', name: '节点名称' },
     { key:'action', name: '排序', width: 90 },
 ])
 const sortTableLoading = ref(false)
-const sortTableData = ref([
-    { key1: '1' }, { key1: '2' }, { key1: '3' },
-])
+const sortTableData = ref([])
 //拖动完成
 const sortTableRowDrop = (rows) => {
     sortTableData.value = [] // 先清空,否则排序会异常
@@ -481,7 +536,7 @@ const sortTableRowDrop = (rows) => {
 }
 
 //向下
-const downSortClick = (index) => {
+const downSortClick = (row, index) => {
     const indexs = index + 1
     const data = sortTableData.value
     if (indexs !== data.length) {
@@ -493,7 +548,7 @@ const downSortClick = (index) => {
 }
 
 //向上
-const upSortClick = (index) => {
+const upSortClick = (row, index) => {
     const data = sortTableData.value || []
     if (index !== 0) {
         const tmp = data.splice(index - 1, 1)
@@ -502,7 +557,19 @@ const upSortClick = (index) => {
         window?.$message?.warning('已经处于置顶,无法上移')
     }
 }
-const sortModalSave = () => {
-    sortModalShow.value = false
+const sortNodeLoading = ref(false)
+const sortModalSave = async () => {
+    const ids = arrToId(sortTableData.value)
+  //发起请求
+  sortNodeLoading.value = true
+    const { error, code } = await sortForm({ ids })
+    sortNodeLoading.value = false
+    //判断状态
+    if (!error && code === 200) {
+        window?.$message?.success('保存成功')
+        sortModalShow.value = false
+        window?.location?.reload() //刷新页面
+    }
+   
 }
 </script>