ZaiZai 1 rok temu
rodzic
commit
53c7f042ae

+ 20 - 0
src/api/modules/tasks/hc-data.js

@@ -0,0 +1,20 @@
+import { HcApi } from '../../request/index'
+
+export default {
+    //合同计量期列表-全部
+    async getAllPeriod(form, msg = false) {
+        return HcApi({
+            url: '/api/blade-meter/contractMeterPeriod/allPeriod',
+            method: 'get',
+            params: form,
+        }, msg)
+    },
+    //材料计量期列表-已审批
+    async getMeterPeriod(form, msg = false) {
+        return HcApi({
+            url: '/api/blade-meter/meterPeriod/approvalPeriod',
+            method: 'get',
+            params: form,
+        }, msg)
+    },
+}

+ 327 - 0
src/views/tasks/components/hc-data/alter-form.vue

@@ -0,0 +1,327 @@
+<template>
+    <div class="hc-task-form">
+        <!-- 基础表单 -->
+        <hc-card-item>
+            <el-form ref="baseFormRef" :model="baseForm" :rules="baseFormRules" label-position="left" label-width="auto">
+                <el-row :gutter="20">
+                    <el-col :span="8">
+                        <el-form-item label="变更令编号:" prop="changeNumber">
+                            <el-input v-model="baseForm.changeNumber" />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="8">
+                        <el-form-item label="变更令名称:" prop="changeName">
+                            <el-input v-model="baseForm.changeName" />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="8">
+                        <el-form-item label="变更发起单位:">
+                            <el-input v-model="baseForm.changeUnit" />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="8">
+                        <el-form-item label="业务日期:" prop="businessDate">
+                            <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="8">
+                        <el-form-item label="变更类型:">
+                            <el-select v-model="baseForm.changeType" filterable block>
+                                <el-option v-for="item in typeData" :key="item.value" :label="item.label" :value="item.value" />
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="8">
+                        <el-form-item label="延长工期:">
+                            <el-input v-model="baseForm.lengthenDays" />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="8">
+                        <el-form-item label="变更申请金额:">
+                            <el-input v-model="baseForm.changeMoney" disabled />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="8">
+                        <el-form-item label="设计完成时间:" prop="designDate">
+                            <el-date-picker v-model="baseForm.designDate" class="block" format="YYYY-MM-DD" type="date" value-format="YYYY-MM-DD" />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="8">
+                        <el-form-item label="实际变更桩号:">
+                            <el-input v-model="baseForm.realityChangeNumber" />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="8">
+                        <el-form-item label="变更归类:">
+                            <el-select v-model="baseForm.changeClassify" filterable block>
+                                <el-option v-for="item in classifyData" :key="item.value" :label="item.label" :value="item.value" />
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="8">
+                        <el-form-item label="变更批复文号:">
+                            <el-input v-model="baseForm.changeApprovalNumber" />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="8">
+                        <el-form-item label="变更批复日期:" prop="changeApprovalDate">
+                            <el-date-picker v-model="baseForm.changeApprovalDate" class="block" format="YYYY-MM-DD" type="date" value-format="YYYY-MM-DD" />
+                        </el-form-item>
+                    </el-col>
+                    <!-- el-col :span="24">
+                        <el-form-item class="input-link-item" label="引用预变更:">
+                            <el-input v-model="baseForm.key6" disabled />
+                            <el-link type="primary" @click="quoteClick">引用</el-link>
+                            <el-link type="danger">删除引用</el-link>
+                        </el-form-item>
+                    </el-col -->
+                    <el-col :span="24">
+                        <el-form-item label="变更原因:">
+                            <el-input v-model="baseForm.changeCause" :autosize="{ minRows: 4, maxRows: 8 }" type="textarea" />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+            </el-form>
+        </hc-card-item>
+        <!-- 变更申请部位 -->
+        <hc-card-item title="变更申请部位" class="mt-3">
+            <hc-table :column="tableColumn" :datas="tableData" is-new is-current-row :index-style="{ width: 60 }" @row-click="rowChangeNodeClick">
+                <template #contractPicture="{ row }">
+                    <hc-table-input v-model="row.contractPicture" />
+                </template>
+                <template #action="{ index }">
+                    <el-link type="danger" @click="delChangeNode(index)">删除</el-link>
+                </template>
+            </hc-table>
+        </hc-card-item>
+        <!-- 变更申请清单 -->
+        <hc-card-item title="变更申请清单" class="mt-3">
+            <template #extra>
+                <el-link type="primary" @click="changeShowClick">添加</el-link>
+            </template>
+            <div class="hc-table-ref-box no-border">
+                <el-table class="w-full" :data="tableData[tableIndex]?.formList" row-key="id" height="100%" highlight-current-row border>
+                    <el-table-column type="index" label="序号" />
+                    <el-table-column prop="formNumber" label="清单编号" />
+                    <el-table-column prop="formName" label="清单名称" />
+                    <el-table-column prop="currentPrice" label="单价" />
+                    <el-table-column label="数量" align="center">
+                        <el-table-column prop="contractTotal" label="变更前" />
+                        <el-table-column prop="currentChangeTotal" label="变更增减">
+                            <template #default="{ row }">
+                                <hc-table-input v-model="row.currentChangeTotal" @blur="currentChangeTotalBlur(row)" />
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="changeTotal" label="变更后" />
+                    </el-table-column>
+                    <el-table-column label="金额" align="center">
+                        <el-table-column prop="contractMoney" label="变更前" />
+                        <el-table-column prop="currentChangeMoney" label="变更增减" />
+                        <el-table-column prop="changeMoney" label="变更后" />
+                    </el-table-column>
+                    <el-table-column prop="action" label="操作" width="80" align="center">
+                        <template #default="scope">
+                            <el-link type="danger" @click="tableFormListDel(scope.$index)">删除</el-link>
+                        </template>
+                    </el-table-column>
+                </el-table>
+            </div>
+        </hc-card-item>
+        <!-- 附件列表 -->
+        <hc-card-item class="mt-3" title="附件列表">
+            <template #extra>
+                <span class="text-[13px] text-orange font-400">可上传 图片(png、jpg、jpeg)、Excel(xls、xlsx)、PDF、Word(doc、docx)文件</span>
+            </template>
+            <el-form :model="baseForm" label-position="left" label-width="auto">
+                <el-form-item label="上传附件">
+                    <hc-form-upload type="list" :src="baseForm.fileList" :h-props="uploadFormProps" @upload="attachmentUpload" @change="attachmentUploadChange" />
+                </el-form-item>
+            </el-form>
+        </hc-card-item>
+        <!-- 变更申请清单 -->
+        <ChangeRequest v-model="isChangeShow" :ids="changeIds" :tree-id="changeNodeItem.id" :contract-id="contractId" @finish="changeNodeFinish" />
+        <!-- 文件上传组件 -->
+        <hc-upload-file ref="uploadFileRef" :echo-params="uploadFileParams" :options="uploadFileOptions" @success="uploadFileSuccess" />
+    </div>
+</template>
+
+<script setup>
+import { onMounted, ref, watch } from 'vue'
+import ChangeRequest from '~src/views/alter/admin/components/order/changeRequest.vue'
+import { getDictionaryData, isNumberReg } from '~uti/tools'
+import { arrToKey, isArray, isNullES } from 'js-fast-way'
+import BigNumber from 'bignumber.js'
+import { getHeader } from 'hc-vue3-ui'
+
+import mainApi from '~api/tasks/hc-data'
+
+const props = defineProps({
+    isEdit: {
+        type: Boolean,
+        default: true,
+    },
+    type: {
+        type: [String, Number],
+        default: '',
+    },
+})
+
+//双向绑定
+// eslint-disable-next-line no-undef
+const rowInfo = defineModel('modelValue', {
+    default: () => ({}),
+})
+
+const contractId = ref('')
+
+//监听可否编辑
+const isEdits = ref(props.isEdit)
+watch(() => props.isEdit, (val) => {
+    isEdits.value = val
+}, { immediate: true, deep: true })
+
+//监听类型
+const isType = ref(props.type)
+watch(() => props.type, (val) => {
+    isType.value = val
+}, { immediate: true, deep: true })
+
+//监听数据
+watch(() => rowInfo, (val) => {
+    setTaskInfo(val.value)
+}, { deep: true })
+
+//渲染完成
+onMounted(() => {
+    setTaskInfo(rowInfo.value)
+})
+
+//设置任务信息
+const taskInfo = ref({})
+const setTaskInfo = async (info) => {
+    taskInfo.value = info
+    getMeterChangeClassify().then()
+    getMeterChangeType().then()
+}
+
+//计量变更归类
+const classifyData = ref([])
+const getMeterChangeClassify = async () => {
+    classifyData.value = await getDictionaryData('meter_change_classify')
+}
+
+//计量变更类型
+const typeData = ref([])
+const getMeterChangeType = async () => {
+    typeData.value = await getDictionaryData('meter_change_type')
+}
+
+//基础表单
+const baseFormRef = ref(null)
+const baseForm = ref({ fileList: [], pictureUrl: '' })
+const baseFormRules = {}
+
+//清单表格
+const tableColumn = ref([
+    { key: 'nodeName', name: '工程名称' },
+    { key: 'nodeUrl', name: '节点路径' },
+    { key: 'contractPicture', name: '合同图号' },
+    { key: 'changeMoney', name: '变更后金额(元)' },
+    { key: 'isSupplementName', name: '是否增补' },
+    { key: 'action', name: '操作', width: 80, align: 'center' },
+])
+const tableData = ref([])
+
+//删除变更申请部位
+const delChangeNode = (index) => {
+    tableData.value.splice(index, 1)
+    tableIndex.value = -1
+}
+
+//变更申请部位 行被点击
+const changeNodeItem = ref({})
+const tableIndex = ref(-1)
+const rowChangeNodeClick = ({ row, index }) => {
+    if (!isArray(row.formList)) {
+        tableData.value[index].formList = []
+    }
+    tableIndex.value = index
+    changeNodeItem.value = row
+}
+
+//删除变更申请清单
+const tableFormListDel = (index) => {
+    tableData.value[tableIndex.value].formList.splice(index, 1)
+    getFormList()
+}
+//变更清单的添加弹窗
+const isChangeShow = ref(false)
+const changeIds = ref('')
+const changeShowClick = () => {
+    if (isNullES(changeNodeItem.value['id'])) {
+        window.$message.warning('请先选择变更申请部位')
+        return false
+    }
+    changeIds.value = arrToKey(tableData.value[tableIndex.value].formList, 'id')
+    isChangeShow.value = true
+}
+
+//确认选择完成
+const changeNodeFinish = (data) => {
+    tableData.value[tableIndex.value].formList.push(...data)
+    getFormList()
+}
+
+//变更清单增减
+const currentChangeTotalBlur = (row) => {
+    //如果为空
+    let val = row.currentChangeTotal
+    const isMeter = isNumberReg(val)
+    if (isNullES(val) || !isMeter) {
+        val = 0
+    }
+}
+
+//获取变更清单总额
+const getFormList = () => {
+
+}
+
+//附件上传
+const uploadFormProps = {
+    url: 'fileUrl',
+    name: 'fileName',
+}
+
+const attachmentUpload = () => {
+    //uploadFileRef.value?.selectFile()
+}
+const attachmentUploadChange = (a, b, fileList) => {
+    //baseForm.value.fileList = getArrValue(fileList)
+}
+
+//文件上传
+const uploadFileRef = ref(null)
+const uploadFileParams = ref({})
+const uploadFileOptions = ref({
+    headers: getHeader(),
+    multiple: false,
+})
+
+// 文件上传成功的回调
+const uploadFileSuccess = ({ resData }) => {
+    baseForm.value.fileList.push({
+        /*contractId: contractId.value,
+        fileName: resData.originalName ?? '',
+        filePdfUrl: resData.pdfUrl ?? '',
+        fileUrl: resData.link ?? '',*/
+    })
+    //uploadFileRef.value?.setModalShow(false)
+}
+</script>
+
+<style lang="scss" scoped>
+.hc-task-form {
+
+}
+</style>

+ 147 - 0
src/views/tasks/components/hc-data/material-form.vue

@@ -0,0 +1,147 @@
+<template>
+    <div class="hc-task-form">
+        <!-- 基础表单 -->
+        <hc-card-item>
+            <hc-info-table>
+                <tr>
+                    <hc-info-table-td center is-title>合同材料:</hc-info-table-td>
+                    <hc-info-table-td width="120px">{{ baseForm?.contractMaterialName }}</hc-info-table-td>
+                    <hc-info-table-td center is-title>材料到场编号:</hc-info-table-td>
+                    <hc-info-table-td width="120px">{{ baseForm?.materialArriveNumber }}</hc-info-table-td>
+                </tr>
+                <tr>
+                    <hc-info-table-td center is-title>计量期:</hc-info-table-td>
+                    <hc-info-table-td width="120px">{{ baseForm?.meterPeriodName }}</hc-info-table-td>
+                    <hc-info-table-td center is-title>业务日期:</hc-info-table-td>
+                    <hc-info-table-td width="120px">{{ baseForm?.businessDate }}</hc-info-table-td>
+                </tr>
+                <tr>
+                    <hc-info-table-td center is-title>单价:</hc-info-table-td>
+                    <hc-info-table-td width="120px">
+                        <el-input v-model="baseForm.price" />
+                    </hc-info-table-td>
+                    <hc-info-table-td center is-title>计量数量:</hc-info-table-td>
+                    <hc-info-table-td width="120px">
+                        <el-input v-model="baseForm.meterAmount" />
+                    </hc-info-table-td>
+                </tr>
+                <tr>
+                    <hc-info-table-td center is-title>计量金额:</hc-info-table-td>
+                    <hc-info-table-td width="120px">{{ baseForm?.meterMoney }}</hc-info-table-td>
+                    <hc-info-table-td center is-title>备料堆放地点:</hc-info-table-td>
+                    <hc-info-table-td width="120px">{{ baseForm?.storagePlace }}</hc-info-table-td>
+                </tr>
+                <tr>
+                    <hc-info-table-td center is-title>存储情况:</hc-info-table-td>
+                    <hc-info-table-td width="120px">{{ baseForm?.storageStatus }}</hc-info-table-td>
+                    <hc-info-table-td center is-title>材料来源:</hc-info-table-td>
+                    <hc-info-table-td width="120px">{{ baseForm?.materialSource }}</hc-info-table-td>
+                </tr>
+                <tr>
+                    <hc-info-table-td center is-title>材料是否符合要求:</hc-info-table-td>
+                    <hc-info-table-td width="120px">{{ baseForm?.materialConformName }}</hc-info-table-td>
+                    <hc-info-table-td center is-title>存储方法是否符合要求:</hc-info-table-td>
+                    <hc-info-table-td width="120px">{{ baseForm?.storageConformName }}</hc-info-table-td>
+                </tr>
+                <tr>
+                    <hc-info-table-td center is-title>合格证号:</hc-info-table-td>
+                    <hc-info-table-td width="auto" colspan="3">{{ baseForm?.certificate }}</hc-info-table-td>
+                </tr>
+                <tr>
+                    <hc-info-table-td center is-title>备注:</hc-info-table-td>
+                    <hc-info-table-td width="auto" colspan="3">{{ baseForm?.remark }}</hc-info-table-td>
+                </tr>
+            </hc-info-table>
+        </hc-card-item>
+        <!-- 附件列表 -->
+        <hc-card-item class="mt-3" title="附件列表">
+            <template #extra>
+                <span class="text-[13px] text-orange font-400">可上传 图片(png、jpg、jpeg)、Excel(xls、xlsx)、PDF、Word(doc、docx)文件</span>
+            </template>
+            <el-form :model="baseForm" label-position="left" label-width="auto">
+                <el-form-item label="上传附件">
+                    <hc-form-upload type="list" :src="baseForm.fileList" :h-props="uploadFormProps" @upload="attachmentUpload" @change="attachmentUploadChange" />
+                </el-form-item>
+            </el-form>
+        </hc-card-item>
+        <!-- 文件上传组件 -->
+        <hc-upload-file ref="uploadFileRef" :echo-params="uploadFileParams" :options="uploadFileOptions" @success="uploadFileSuccess" />
+    </div>
+</template>
+
+<script setup>
+import { onMounted, ref, watch } from 'vue'
+import { getHeader } from 'hc-vue3-ui'
+
+const props = defineProps({
+    isEdit: {
+        type: Boolean,
+        default: true,
+    },
+    type: {
+        type: [String, Number],
+        default: '',
+    },
+})
+
+//双向绑定
+// eslint-disable-next-line no-undef
+const rowInfo = defineModel('modelValue', {
+    default: () => ({}),
+})
+
+//监听可否编辑
+const isEdits = ref(props.isEdit)
+watch(() => props.isEdit, (val) => {
+    isEdits.value = val
+}, { immediate: true, deep: true })
+
+//监听类型
+const isType = ref(props.type)
+watch(() => props.type, (val) => {
+    isType.value = val
+}, { immediate: true, deep: true })
+
+//监听数据
+watch(() => rowInfo, (val) => {
+    setTaskInfo(val.value)
+}, { deep: true })
+
+//渲染完成
+onMounted(() => {
+    setTaskInfo(rowInfo.value)
+})
+
+//设置任务信息
+const taskInfo = ref({})
+const setTaskInfo = async (info) => {
+    taskInfo.value = info
+}
+
+//基础表单
+const baseForm = ref({ fileList: [] })
+
+const uploadFormProps = ref({})
+
+const attachmentUpload = () => {
+
+}
+
+const attachmentUploadChange = () => {
+
+}
+
+//文件上传
+const uploadFileRef = ref(null)
+const uploadFileParams = ref({})
+const uploadFileOptions = ref({})
+const uploadFileSuccess = () => {
+
+}
+</script>
+
+<style lang="scss" scoped>
+.hc-task-form {
+
+}
+</style>

+ 264 - 0
src/views/tasks/components/hc-data/middlepay-form.vue

@@ -0,0 +1,264 @@
+<template>
+    <div class="hc-task-form">
+        <!-- 基础表单 -->
+        <hc-card-item>
+            <el-form ref="baseFormRef" :model="baseForm" :rules="baseFormRules" label-position="left" label-width="auto">
+                <el-row :gutter="20">
+                    <el-col :span="8">
+                        <el-form-item label="计量期:">
+                            <el-select v-model="baseForm.contractPeriodId" placeholder="选择计量期" disabled block>
+                                <el-option v-for="item in periods" :key="item.id" :label="item.periodNumber" :value="item.id" />
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="8">
+                        <el-form-item label="计量编号:">
+                            <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.businessDate" class="block" format="YYYY-MM-DD" type="date" value-format="YYYY-MM-DD" disabled />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="16">
+                        <el-form-item label="工程划分:">
+                            <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.partName" disabled />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="8">
+                        <el-form-item label="交工证书:">
+                            <el-input v-model="baseForm.certificateNumber" disabled />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="8">
+                        <el-form-item label="计量金额:">
+                            <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.changeTokenNumber" disabled />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="8">
+                        <el-form-item label="收方单:">
+                            <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.pictureUrl" @upload="formUpload" @change="formUploadChange" / -->
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="24">
+                        <el-form-item label="计算式:">
+                            <el-input v-model="baseForm.calculateFormula" :autosize="{ minRows: 4, maxRows: 8 }" type="textarea" disabled />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+            </el-form>
+        </hc-card-item>
+        <!-- 收方清单列表 -->
+        <hc-card-item class="mt-3">
+            <template #header>
+                <span class="mr-3 text-[13px]">计量清单</span>
+                <span class="text-[13px] text-orange font-400">温馨提示:超计,累计计量量> 变更后数量,分解清单超计整行红色</span>
+            </template>
+            <template #extra>
+                <el-button type="primary" text @click="addBillModalClick">
+                    <hc-icon name="add" />
+                    <span>添加清单</span>
+                </el-button>
+            </template>
+            <hc-table is-new :index-style="{ width: 60 }" :is-stripe="false" :column="tableColumn" :datas="tableData" :row-style="tableRowStyle">
+                <template #currentPrice="{ row }">
+                    <hc-table-input v-model="row.currentPrice" disabled />
+                </template>
+                <template #changeTotal="{ row }">
+                    <hc-table-input v-model="row.changeTotal" disabled />
+                </template>
+                <template #currentMeterTotal="{ row }">
+                    <hc-table-input v-model="row.currentMeterTotal" @blur="currentMeterTotalBlur(row)" />
+                </template>
+                <template #containChangeTotal="{ row }">
+                    <hc-table-input v-model="row.containChangeTotal" @blur="containChangeTotalBlur(row)" />
+                </template>
+                <template #currentMeterMoney="{ row }">
+                    <hc-table-input v-model="row.currentMeterMoney" disabled />
+                </template>
+                <template #allMeterTotal="{ row }">
+                    <hc-table-input v-model="row.allMeterTotal" disabled />
+                </template>
+                <template #action="{ index }">
+                    <el-link type="danger" @click="delAddTableClick(index)">删除</el-link>
+                </template>
+            </hc-table>
+        </hc-card-item>
+        <!-- 附件列表 -->
+        <hc-card-item class="mt-3" title="附件列表">
+            <template #extra>
+                <span class="text-[13px] text-orange font-400">可上传 图片(png、jpg、jpeg)、Excel(xls、xlsx)、PDF、Word(doc、docx)文件</span>
+            </template>
+            <el-form :model="baseForm" label-position="left" label-width="auto">
+                <el-form-item label="上传附件">
+                    <hc-form-upload type="list" :src="baseForm.fileList" :h-props="uploadFormProps" @upload="attachmentUpload" @change="attachmentUploadChange" />
+                </el-form-item>
+            </el-form>
+        </hc-card-item>
+        <!-- 添加分解清单 -->
+        <HcBillBaseModal v-model="addBillBaseModalShow" :ids="billBaseIds" :idn="nodeId" :period-id="baseForm.contractPeriodId" :contract-id="cid" @finish="finishChange" />
+        <!-- 文件上传组件 -->
+        <hc-upload-file ref="uploadFileRef" :echo-params="uploadFileParams" :options="uploadFileOptions" @success="uploadFileSuccess" />
+    </div>
+</template>
+
+<script setup>
+import { getArrValue } from 'js-fast-way'
+import { onMounted, ref, watch } from 'vue'
+import HcBillBaseModal from '~src/views/debit-pay/admin/components/middlepay/addBillBaseModal.vue'
+import BigNumber from 'bignumber.js'
+import { getHeader } from 'hc-vue3-ui'
+
+import mainApi from '~api/tasks/hc-data'
+
+const props = defineProps({
+    isEdit: {
+        type: Boolean,
+        default: true,
+    },
+    type: {
+        type: [String, Number],
+        default: '',
+    },
+})
+
+//双向绑定
+// eslint-disable-next-line no-undef
+const rowInfo = defineModel('modelValue', {
+    default: () => ({}),
+})
+
+//监听可否编辑
+const isEdits = ref(props.isEdit)
+watch(() => props.isEdit, (val) => {
+    isEdits.value = val
+}, { immediate: true, deep: true })
+
+//监听类型
+const isType = ref(props.type)
+watch(() => props.type, (val) => {
+    isType.value = val
+}, { immediate: true, deep: true })
+
+//监听数据
+watch(() => rowInfo, (val) => {
+    setTaskInfo(val.value)
+}, { deep: true })
+
+//渲染完成
+onMounted(() => {
+    setTaskInfo(rowInfo.value)
+})
+
+//设置任务信息
+const taskInfo = ref({})
+const setTaskInfo = async (info) => {
+    taskInfo.value = info
+    getAllPeriod(info.contractId).then()
+    getMaterialPeriod(info.contractId).then()
+    getStartWorkPeriod(info.contractId).then()
+}
+
+//获取合同计量期列表
+const periods = ref([])
+const getAllPeriod = async (cid) => {
+    if (cid === '') return
+    const { data } = await mainApi.getAllPeriod({
+        contractId: cid,
+        type: 1,
+    })
+    periods.value = getArrValue(data)
+}
+
+//基础表单
+const baseFormRef = ref(null)
+const baseForm = ref({ fileList: [], pictureUrl: '' })
+const baseFormRules = {}
+
+//清单表格
+const tableColumn = 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 tableData = ref([])
+
+//清单样式
+const tableRowStyle = () => {
+
+}
+
+const currentMeterTotalBlur = (row) => {
+
+}
+
+const containChangeTotalBlur = (row) => {
+
+}
+
+//删除清单
+const delAddTableClick = (index) => {
+
+}
+
+//添加计量清单
+const billBaseIds = ref('')
+const nodeId = ref('')
+const cid = ref('')
+const addBillBaseModalShow = ref(false)
+const addBillModalClick = () => {
+
+}
+
+const finishChange = () => {
+
+}
+
+
+const uploadFormProps = ref({})
+
+const attachmentUpload = () => {
+
+}
+
+const attachmentUploadChange = () => {
+
+}
+
+//文件上传
+const uploadFileRef = ref(null)
+const uploadFileParams = ref({})
+const uploadFileOptions = ref({})
+const uploadFileSuccess = () => {
+
+}
+</script>
+
+<style lang="scss" scoped>
+.hc-task-form {
+
+}
+</style>

+ 145 - 0
src/views/tasks/components/hc-data/start-work-form.vue

@@ -0,0 +1,145 @@
+<template>
+    <div class="hc-task-form">
+        <!-- 基础表单 -->
+        <hc-card-item>
+            <el-form ref="baseFormRef" :model="baseForm" :rules="baseFormRules" label-position="left" label-width="auto">
+                <el-row :gutter="20">
+                    <el-col :span="12">
+                        <el-form-item label="计量期:">
+                            <el-select v-model="baseForm.contractPeriodId" placeholder="选择计量期" disabled block>
+                                <el-option v-for="item in periods" :key="item.id" :label="item.periodNumber" :value="item.id" />
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="12">
+                        <el-form-item label="业务日期:">
+                            <el-date-picker v-model="baseForm.businessDate" class="block" format="YYYY-MM-DD" type="date" value-format="YYYY-MM-DD" disabled />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="12">
+                        <el-form-item label="计量金额:">
+                            <el-input v-model="baseForm.meterMoney" />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="12">
+                        <el-form-item label="预付款总额:">
+                            <el-input v-model="baseForm.meterMoney1" placeholder="开工预付款总额" />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="24">
+                        <el-form-item label="申请依据:">
+                            <el-input v-model="baseForm.calculateFormula" :autosize="{ minRows: 4, maxRows: 8 }" type="textarea" />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+            </el-form>
+        </hc-card-item>
+        <!-- 附件列表 -->
+        <hc-card-item class="mt-3" title="附件列表">
+            <template #extra>
+                <span class="text-[13px] text-orange font-400">可上传 图片(png、jpg、jpeg)、Excel(xls、xlsx)、PDF、Word(doc、docx)文件</span>
+            </template>
+            <el-form :model="baseForm" label-position="left" label-width="auto">
+                <el-form-item label="上传附件">
+                    <hc-form-upload type="list" :src="baseForm.fileList" :h-props="uploadFormProps" @upload="attachmentUpload" @change="attachmentUploadChange" />
+                </el-form-item>
+            </el-form>
+        </hc-card-item>
+        <!-- 文件上传组件 -->
+        <hc-upload-file ref="uploadFileRef" :echo-params="uploadFileParams" :options="uploadFileOptions" @success="uploadFileSuccess" />
+    </div>
+</template>
+
+<script setup>
+import { getArrValue } from 'js-fast-way'
+import { onMounted, ref, watch } from 'vue'
+import { getHeader } from 'hc-vue3-ui'
+
+import mainApi from '~api/tasks/hc-data'
+
+const props = defineProps({
+    isEdit: {
+        type: Boolean,
+        default: true,
+    },
+    type: {
+        type: [String, Number],
+        default: '',
+    },
+})
+
+//双向绑定
+// eslint-disable-next-line no-undef
+const rowInfo = defineModel('modelValue', {
+    default: () => ({}),
+})
+
+//监听可否编辑
+const isEdits = ref(props.isEdit)
+watch(() => props.isEdit, (val) => {
+    isEdits.value = val
+}, { immediate: true, deep: true })
+
+//监听类型
+const isType = ref(props.type)
+watch(() => props.type, (val) => {
+    isType.value = val
+}, { immediate: true, deep: true })
+
+//监听数据
+watch(() => rowInfo, (val) => {
+    setTaskInfo(val.value)
+}, { deep: true })
+
+//渲染完成
+onMounted(() => {
+    setTaskInfo(rowInfo.value)
+})
+
+//设置任务信息
+const taskInfo = ref({})
+const setTaskInfo = async (info) => {
+    taskInfo.value = info
+    getStartWorkPeriod(info.contractId).then()
+}
+
+//获取开工计量期列表
+const periods = ref([])
+const getStartWorkPeriod = async (cid) => {
+    if (cid === '') return
+    const { data } = await mainApi.getMeterPeriod({
+        contractId: cid,
+        type: 2,
+    })
+    periods.value = getArrValue(data)
+}
+
+//基础表单
+const baseFormRef = ref(null)
+const baseForm = ref({ fileList: [] })
+const baseFormRules = {}
+
+const uploadFormProps = ref({})
+
+const attachmentUpload = () => {
+
+}
+
+const attachmentUploadChange = () => {
+
+}
+
+//文件上传
+const uploadFileRef = ref(null)
+const uploadFileParams = ref({})
+const uploadFileOptions = ref({})
+const uploadFileSuccess = () => {
+
+}
+</script>
+
+<style lang="scss" scoped>
+.hc-task-form {
+
+}
+</style>

+ 32 - 3
src/views/tasks/components/hc-data/task-form.vue

@@ -1,11 +1,29 @@
 <template>
-    <div>
-        11111
+    <div class="hc-task-form-body">
+        <HcMiddlepayForm v-if="isType === 1" />
+        <HcStartWorkForm v-if="isType === 2" />
+        <HcAlterForm v-if="isType === 3" />
+        <HcMaterialForm v-if="isType === 4" />
+        <hc-card-item class="mt-3">
+            <div class="relative">
+                <el-radio-group v-model="approval" size="large">
+                    <el-radio :label="1">同意</el-radio>
+                    <el-radio :label="2">驳回</el-radio>
+                </el-radio-group>
+            </div>
+            <div class="relative mt-2">
+                <el-input v-model="remark" :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" placeholder="请描述废除整条任务的原因" />
+            </div>
+        </hc-card-item>
     </div>
 </template>
 
 <script setup>
 import { onMounted, ref, watch } from 'vue'
+import HcMiddlepayForm from './middlepay-form.vue'
+import HcStartWorkForm from './start-work-form.vue'
+import HcAlterForm from './alter-form.vue'
+import HcMaterialForm from './material-form.vue'
 
 const props = defineProps({
     isEdit: {
@@ -50,10 +68,21 @@ onMounted(() => {
 const taskInfo = ref({})
 const setTaskInfo = async (info) => {
     taskInfo.value = info
-    console.log(info)
 }
+
+//同意还是驳回
+const approval = ref('')
+const remark = ref('')
 </script>
 
 <style lang="scss" scoped>
+.hc-task-form-body {
+    position: relative;
+}
+</style>
 
+<style lang="scss">
+.hc-task-form-body .hc-card-item-box {
+    background: white !important;
+}
 </style>

+ 3 - 0
src/views/tasks/components/hc-data/task-review.vue

@@ -290,5 +290,8 @@ const cancelClick = () => {
 <style lang="scss">
 .hc-task-body-card {
     background: #f7f7f7;
+    .el-scrollbar__bar.is-vertical {
+        right: -8px;
+    }
 }
 </style>