代码更新

This commit is contained in:
jia 2024-01-11 09:36:04 +08:00
parent fd5a2a013e
commit 237ce05d04
14 changed files with 1303 additions and 651 deletions

View File

@ -0,0 +1,69 @@
<template>
<div>
<el-card class="!border-none" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="查询" prop="material_purchase_request_code">
<el-input class="w-[280px]" v-model="queryParams.material_purchase_request_code" clearable placeholder="请输入内容" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<div class="mt-4">
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
<el-table-column label="序号" type="index" />
<el-table-column label="材料大类" prop="material_first_level" show-overflow-tooltip />
<el-table-column label="材料中类" prop="material_second_level" show-overflow-tooltip />
<el-table-column label="材料小类" prop="material_three_level" show-overflow-tooltip />
<el-table-column label="材料名称" prop="material_name" show-overflow-tooltip />
<el-table-column label="材料编码" prop="material_code" show-overflow-tooltip />
<el-table-column label="品牌" prop="material_brand" show-overflow-tooltip />
<el-table-column label="单位" prop="material_unit" show-overflow-tooltip />
<el-table-column label="规格型号" prop="material_specs" show-overflow-tooltip />
<el-table-column label="参数说明" prop="material_parameter_description" show-overflow-tooltip />
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
</div>
</template>
<script lang="ts" setup>
import { usePaging } from "@/hooks/usePaging"
import { useDictData } from "@/hooks/useDictOptions"
import { materialrequestDetailLists } from '@/api/material_purchase_request_detail'
import { defineEmits } from "vue"
const props = defineProps({
project_id: {
type: String
}
})
//
const queryParams = reactive({
material_purchase_request_code: '',
project_id: props.project_id
});
//
const emits = defineEmits(["customEvent"]);
//
const handleCurrentChange = (value: any) => {
emits("customEvent", value);
};
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: materialrequestDetailLists,
params: queryParams,
});
getLists();
</script>

View File

@ -0,0 +1,117 @@
<template>
<div>
<!-- <el-card class="!border-none" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="查询" prop="name">
<el-input class="w-[280px]" v-model="queryParams.name" clearable placeholder="请输入内容" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card> -->
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<div class="mt-4">
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="流程编号" prop="" show-overflow-tooltip />
<el-table-column label="客户名称" prop="custom_name" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="合同名称" prop="contract_name" show-overflow-tooltip />
<el-table-column label="合同编号" prop="contract_code" show-overflow-tooltip />
<el-table-column label="合同类型" prop="contract_type">
<template #default="{ row }">
<dict-value :options="dictData.contract_type" :value="row.contract_type" />
</template>
</el-table-column>
<el-table-column label="甲方" prop="party_a" show-overflow-tooltip />
<el-table-column label="甲方通讯地址" prop="party_a_contact_address" show-overflow-tooltip />
<el-table-column label="甲方主要负责人" prop="party_a_diretor" show-overflow-tooltip />
<el-table-column label="甲方电话" prop="party_a_phone" show-overflow-tooltip />
<el-table-column label="甲方手机" prop="party_a_mobile" show-overflow-tooltip />
<el-table-column label="甲方邮箱" prop="party_a_email" show-overflow-tooltip />
<el-table-column label="乙方" prop="party_b" show-overflow-tooltip />
<el-table-column label="乙方通讯地址" prop="party_b_contact_address" show-overflow-tooltip />
<el-table-column label="乙方主要负责人" prop="party_b_diretor" show-overflow-tooltip />
<el-table-column label="乙方电话 " prop="party_b_phone" show-overflow-tooltip />
<el-table-column label="乙方手机 " prop="party_b_mobile" show-overflow-tooltip />
<el-table-column label="乙方邮箱 " prop="party_b_email" show-overflow-tooltip />
<el-table-column label="合同金额" prop="amount" show-overflow-tooltip />
<el-table-column label="金额大写 " prop="amount_daxie" show-overflow-tooltip />
<el-table-column label="合同有效期" prop="expire" show-overflow-tooltip />
<el-table-column label="状态" prop="contract_status" show-overflow-tooltip>
<template #default="{ row }">
<dict-value :options="dictData.contract_status" :value="row.contract_status" />
</template>
</el-table-column>
<el-table-column label="主要条款" prop="" show-overflow-tooltip />
<el-table-column label="备注" prop="" show-overflow-tooltip />
<el-table-column label="已回款" prop="" show-overflow-tooltip />
<el-table-column label="未回款" prop="" show-overflow-tooltip />
<el-table-column label="已开票" prop="" show-overflow-tooltip />
<el-table-column label="未开票" prop="" show-overflow-tooltip />
<el-table-column label="实际合同金额" prop="business_director" show-overflow-tooltip />
<el-table-column label="已退款金额" prop="contract_status" show-overflow-tooltip />
<el-table-column label="合同附件" prop="expire" show-overflow-tooltip>
<template #default="{ row }">
<div v-if="row.annex && row.annex.length > 0">
<div v-for="(item, index) in row.annex" :key="index" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item" target="_blank">文件{{ index + 1 }}查看</a>
</div>
</div>
<div v-else>暂无文件</div>
</template>
</el-table-column>
<el-table-column label="投标编号" prop="contract_date" show-overflow-tooltip />
<el-table-column label="签约日期" prop="contract_date" show-overflow-tooltip />
<el-table-column label="业务负责人" prop="contract_date" show-overflow-tooltip />
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
</div>
</template>
<script lang="ts" setup>
import { usePaging } from "@/hooks/usePaging"
import { useDictData } from "@/hooks/useDictOptions"
import { apiContractLists } from '@/api/contract'
import { defineEmits } from "vue"
import { timeFormat } from '@/utils/util'
const props = defineProps({
productid: {
type: String
}
})
console.log(props.productid)
//
const queryParams = reactive({
project_id: props.productid,
});
const { dictData } = useDictData('contract_type,contract_pricing_method,contract_status')
//
const emits = defineEmits(["customEvent"]);
//
const handleCurrentChange = (value: any) => {
emits("customEvent", value);
};
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiContractLists,
params: queryParams,
});
getLists();
</script>

View File

@ -24,21 +24,20 @@
<el-table-column label="所属行业" prop="industry" show-overflow-tooltip />
<el-table-column label="单位性质" prop="unit_nature" show-overflow-tooltip />
<el-table-column label="招标方式" prop="bidding_method" show-overflow-tooltip />
<el-table-column label="投标时间" property="master_phone" />
<el-table-column label="预计工期" property="master_phone" />
<el-table-column label="项目估算(万元)" property="master_phone" />
<el-table-column label="项目估算(外币)" property="master_phone" />
<el-table-column label="联系人" property="master_phone" />
<el-table-column label="联系电话" property="master_phone" />
<el-table-column label="联系人部门" property="master_phone" />
<el-table-column label="联系人职位" property="master_phone" />
<el-table-column label="关系度" property="master_phone" />
<el-table-column label="发现时间" property="master_phone" />
<el-table-column label="投标时间" property="bidding_time" />
<el-table-column label="预计工期" property="estimated_construction" />
<el-table-column label="项目估算(万元)" property="project_estimation" />
<!-- <el-table-column label="项目估算(外币)" property="master_phone" /> -->
<el-table-column label="联系人" property="contacts" />
<el-table-column label="联系电话" property="telephone" />
<el-table-column label="联系人部门" property="department" />
<el-table-column label="联系人职位" property="position" />
<el-table-column label="关系度" property="relationship" />
<el-table-column label="发现时间" property="discovery_time" />
<el-table-column label="信息来源" prop="information_sources" show-overflow-tooltip />
<el-table-column label="负责人" property="person" />
<el-table-column label="项目内容" property="name" />
<el-table-column label="竞争对手" property="master_phone" />
<el-table-column label="项目内容" property="project_content" />
<el-table-column label="竞争对手" property="competitor" />
</el-table>
</div>

View File

@ -18,8 +18,7 @@
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="流程编号" prop="approve_id" show-overflow-tooltip />
<el-table-column label="客户名称" prop="customer_id" show-overflow-tooltip />
<el-table-column label="客户名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="客户名称" prop="custom_name" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="合同名称" prop="contract_name" show-overflow-tooltip />

View File

@ -16,34 +16,17 @@
<div class="mt-4">
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
<el-table-column label="序号" type="index" />
<el-table-column label="建档人" property="create_user" />
<el-table-column label="建档人" property="create_user_name" />
<el-table-column label="供应商名称" property="supplier_name" />
<el-table-column label="供应商编码" property="supplier_code" />
<el-table-column label="供应商分组" prop="group_id">
<template #default="{ row }">
<dict-value :options="dictData.supplier_group" :value="row.group_id" />
</template>
</el-table-column>
<el-table-column label="供应商分类" prop="category_id">
<template #default="{ row }">
<dict-value :options="dictData.supplier_category" :value="row.category_id" />
</template>
</el-table-column>
<el-table-column label="供应商等级" prop="grade">
<template #default="{ row }">
<dict-value :options="dictData.supplier_grade" :value="row.grade" />
</template>
</el-table-column>
<el-table-column label="供应商分组" prop="supplier_group" />
<el-table-column label="供应商分类" prop="supplier_category" />
<el-table-column label="供应商等级" prop="supplier_grade" />
<el-table-column label="联系人" property="contacts" />
<el-table-column label="性别" property="contacts_sex" />
<el-table-column label="电话号码" property="phone" />
<el-table-column label="性别" property="contacts_sex">
<template #default="{ row }">
<dict-value :options="dictData.sex" :value="row.contacts_sex" />
</template>
</el-table-column>
<el-table-column label="邮箱地址" property="email" />
<el-table-column label="性别" property="contacts_sex" />
<!-- <el-table-column label="邮箱地址" property="email" /> -->
</el-table>

View File

@ -3,240 +3,122 @@
<div class="detail-popup">
<popup ref="popupRef" title="项目合同详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px">
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane label="合同信息" name="demo-tabs-1">
<el-descriptions :column="2" border>
<el-descriptions-item label="客户名称" label-align="left" align="left" label-class-name="my-label">{{ formData.custom_name }}</el-descriptions-item>
<el-descriptions-item label="投标编号" label-align="left" align="left" label-class-name="my-label">{{ formData.bid_document_no }}</el-descriptions-item>
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label"> {{ formData.project_name }}</el-descriptions-item>
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label"> {{ formData.project_code }}</el-descriptions-item>
<el-descriptions-item label="合同名称" label-align="left" align="left" label-class-name="my-label">{{ formData.contract_code }}</el-descriptions-item>
<el-descriptions-item label="合同编号" label-align="left" align="left" label-class-name="my-label">{{ formData.custom_name }}</el-descriptions-item>
<el-descriptions-item label="合同类型" label-align="left" align="left" label-class-name="my-label">
{{ formData.contract_type_text }}
</el-descriptions-item>
<el-descriptions-item label="合同计价方式" label-align="left" align="left" label-class-name="my-label"> {{ formData.contract_pricing_method_text
}}</el-descriptions-item>
<el-descriptions-item label="甲方" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_a
}}</el-descriptions-item>
<el-descriptions title="基本信息" :column="2" border>
<el-descriptions-item label="乙方" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_b }}</el-descriptions-item>
<el-descriptions-item label="客户名称" label-align="left" align="left" label-class-name="my-label">{{ formData.custom_name }}</el-descriptions-item>
<el-descriptions-item label="投标编号" label-align="left" align="left" label-class-name="my-label">{{ formData.bid_document_no }}</el-descriptions-item>
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label"> {{ formData.project_name }}</el-descriptions-item>
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label"> {{ formData.project_code }}</el-descriptions-item>
<el-descriptions-item label="合同名称" label-align="left" align="left" label-class-name="my-label">{{ formData.contract_code }}</el-descriptions-item>
<el-descriptions-item label="合同编号" label-align="left" align="left" label-class-name="my-label">{{ formData.custom_name }}</el-descriptions-item>
<el-descriptions-item label="合同类型" label-align="left" align="left" label-class-name="my-label">
{{ formData.contract_type_text }}
</el-descriptions-item>
<el-descriptions-item label="合同计价方式" label-align="left" align="left" label-class-name="my-label"> {{ formData.contract_pricing_method_text
}}</el-descriptions-item>
<el-descriptions-item label="甲方" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_a
<el-descriptions-item label="通讯地址" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_a_contact_address
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="通讯地址" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_b_contact_address
<el-descriptions-item label="乙方" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_b }}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="通讯地址" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_a_contact_address
<el-descriptions-item label="主要负责人" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_a_diretor
}}</el-descriptions-item>
<el-descriptions-item label="通讯地址" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_b_contact_address
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="主要负责人" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_b_diretor
<el-descriptions-item label="主要负责人" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_a_diretor
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="主要负责人" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_b_diretor
}}</el-descriptions-item>
<el-descriptions-item label="电话" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_a_phone
<el-descriptions-item label="电话" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_a_phone
}}</el-descriptions-item>
<el-descriptions-item label="电话" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_b_phone
}}</el-descriptions-item>
<el-descriptions-item label="电话" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_b_phone
}}</el-descriptions-item>
<el-descriptions-item label="手机" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_a_mobile
}}</el-descriptions-item>
<el-descriptions-item label="手机" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_a_mobile
}}</el-descriptions-item>
<el-descriptions-item label="手机" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_b_mobile
}}</el-descriptions-item>
<el-descriptions-item label="手机" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_b_mobile
}}</el-descriptions-item>
<el-descriptions-item label="邮箱" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_a_email
}}</el-descriptions-item>
<el-descriptions-item label="邮箱" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_a_email
}}</el-descriptions-item>
<el-descriptions-item label="邮箱" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_b_email
}}</el-descriptions-item>
<el-descriptions-item label="邮箱" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_b_email
}}</el-descriptions-item>
<el-descriptions-item label="金额" label-align="left" align="left" label-class-name="my-label"> {{ formData.amount
}}</el-descriptions-item>
<el-descriptions-item label="金额" label-align="left" align="left" label-class-name="my-label"> {{ formData.amount
}}</el-descriptions-item>
<!-- <el-descriptions-item label="金额大写" label-align="left" align="left" label-class-name="my-label"> {{ formData.amount
}}</el-descriptions-item>
<!-- <el-descriptions-item label="金额大写" label-align="left" align="left" label-class-name="my-label"> {{ formData.amount
}}</el-descriptions-item> -->
<el-descriptions-item label="业务负责人" label-align="left" align="left" label-class-name="my-label"> {{ formData.business_director_name
<el-descriptions-item label="业务负责人" label-align="left" align="left" label-class-name="my-label"> {{ formData.business_director_name
}}</el-descriptions-item>
<el-descriptions-item label="状态" label-align="left" align="left" label-class-name="my-label"> {{ formData.contract_status_text
}}</el-descriptions-item>
<el-descriptions-item label="状态" label-align="left" align="left" label-class-name="my-label"> {{ formData.contract_status_text
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="合同有效期" label-align="left" align="left" label-class-name="my-label"> {{ formData.expire
<el-descriptions-item label="合同有效期" label-align="left" align="left" label-class-name="my-label"> {{ formData.expire
}}</el-descriptions-item>
<el-descriptions-item label="签约日期" label-align="left" align="left" label-class-name="my-label"> {{ formData.contract_date
}}</el-descriptions-item>
<el-descriptions-item label="签约日期" label-align="left" align="left" label-class-name="my-label"> {{ formData.contract_date
}}</el-descriptions-item>
<el-descriptions-item label="主要条款" label-align="left" align="left" label-class-name="my-label"> {{ formData.main_content
}}</el-descriptions-item>
<el-descriptions-item label="主要条款" label-align="left" align="left" label-class-name="my-label"> {{ formData.main_content
}}</el-descriptions-item>
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label"> {{ formData.remark
}}</el-descriptions-item>
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label"> {{ formData.remark
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="合同附件" label-align="left" align="left" label-class-name="my-label">
<div v-if="formData.annex.length > 0">
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
<el-link style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item" target="_blank">文件{{ index + 1 }}查看</el-link>
<el-descriptions-item label="合同附件" label-align="left" align="left" label-class-name="my-label">
<div v-if="formData.annex.length > 0">
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
<el-link style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item" target="_blank">文件{{ index + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无附件
</div>
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="洽商" name="demo-tabs-2">
<div>
<el-table :data="tableData" stripe style="width: 100%">
<el-table-column label="解决方案主题" prop='customer_demand_name' width="180" />
<el-table-column label="提交时间" prop='submission_time' width="180" />
<el-table-column label="方案内容" prop='solution_content' />
<el-table-column label="客户反馈" prop='customer_feedback' />
<el-table-column label="附件" prop="annex" show-overflow-tooltip>
<template #default="{ row }">
<div v-if="row.annex && row.annex.length > 0">
<div v-for="(item, i) in row.annex " :key='i'>
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无文件
</div>
</template>
</el-table-column>
</el-table>
</div>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager1.page_no" v-model:page-size="pager1.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
<div v-else>
暂无附件
</div>
</el-tab-pane>
<el-tab-pane label="发票" name="demo-tabs-3">
<div>
<el-table :data="tableData1" stripe style="width: 100%">
<el-table-column label="概算来源" prop='estimate_source_text' width="180" />
<el-table-column label="制单人" prop='create_user' width="180" />
<el-table-column label="报价日期" prop='quotation_date' />
<el-table-column label="技术人员" prop='technician_name' width="180" />
<el-table-column label="概算金额(万元)" prop='estimate_amount' width="180" />
<el-table-column label="要求" prop='ask' />
<el-table-column label="附件" prop="annex" show-overflow-tooltip>
<template #default="{ row }">
<div v-if="row.annex && row.annex.length > 0">
<div v-for="(item, i) in row.annex " :key='i'>
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无文件
</div>
</template>
</el-table-column>
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager2.page_no" v-model:page-size="pager2.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total1" @size-change="handleSizeChange2" @current-change="handleCurrentChange2" />
</div>
</el-tab-pane>
<el-tab-pane label="回款" name="demo-tabs-4">
<div>
<el-table :data="tableData2" stripe style="width: 100%">
<el-table-column label="竞争对手名称" prop='competitor_name' width="180" />
<el-table-column label="竞争对手联系人" prop='competitor_contacts' width="180" />
<el-table-column label="联系人电话" prop='competitor_contacts_phone' />
<el-table-column label="竞争能力" prop='competitive_power' />
<el-table-column label="竞争对手优势" prop='competitor_advantages' />
<el-table-column label="竞争对手劣势" prop='competitor_disadvantages' />
<el-table-column label="备注" prop='remark' />
<el-table-column label="附件" prop="annex" show-overflow-tooltip>
<template #default="{ row }">
<div v-if="row.annex && row.annex.length > 0">
<div v-for="(item, i) in row.annex " :key='i'>
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无文件
</div>
</template>
</el-table-column>
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager3.page_no" v-model:page-size="pager3.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total2" @size-change="handleSizeChange3" @current-change="handleCurrentChange3" />
</div>
</el-tab-pane>
<el-tab-pane label="退款" name="demo-tabs-5">
<div>
<el-table :data="tableData2" stripe style="width: 100%">
<el-table-column label="竞争对手名称" prop='competitor_name' width="180" />
<el-table-column label="竞争对手联系人" prop='competitor_contacts' width="180" />
<el-table-column label="联系人电话" prop='competitor_contacts_phone' />
<el-table-column label="竞争能力" prop='competitive_power' />
<el-table-column label="竞争对手优势" prop='competitor_advantages' />
<el-table-column label="竞争对手劣势" prop='competitor_disadvantages' />
<el-table-column label="备注" prop='remark' />
<el-table-column label="附件" prop="annex" show-overflow-tooltip>
<template #default="{ row }">
<div v-if="row.annex && row.annex.length > 0">
<div v-for="(item, i) in row.annex " :key='i'>
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无文件
</div>
</template>
</el-table-column>
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager3.page_no" v-model:page-size="pager3.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total2" @size-change="handleSizeChange3" @current-change="handleCurrentChange3" />
</div>
</el-tab-pane>
<el-tab-pane label="结算" name="demo-tabs-6">
<div>
<el-table :data="tableData2" stripe style="width: 100%">
<el-table-column label="竞争对手名称" prop='competitor_name' width="180" />
<el-table-column label="竞争对手联系人" prop='competitor_contacts' width="180" />
<el-table-column label="联系人电话" prop='competitor_contacts_phone' />
<el-table-column label="竞争能力" prop='competitive_power' />
<el-table-column label="竞争对手优势" prop='competitor_advantages' />
<el-table-column label="竞争对手劣势" prop='competitor_disadvantages' />
<el-table-column label="备注" prop='remark' />
<el-table-column label="附件" prop="annex" show-overflow-tooltip>
<template #default="{ row }">
<div v-if="row.annex && row.annex.length > 0">
<div v-for="(item, i) in row.annex " :key='i'>
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无文件
</div>
</template>
</el-table-column>
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager3.page_no" v-model:page-size="pager3.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total2" @size-change="handleSizeChange3" @current-change="handleCurrentChange3" />
</div>
</el-tab-pane>
</el-tabs>
</el-descriptions-item>
</el-descriptions>
<div name="demo-tabs-2" style="margin:20px 0">
回款计划
</div>
<div>
<el-table :data="tableData" stripe style="width: 100%">
<el-table-column label="期次" prop='customer_demand_name' width="180" />
<el-table-column label="计划回款日期" prop='submission_time' width="180" />
<el-table-column label="金额" prop='solution_content' />
<el-table-column label="备注" prop="annex" show-overflow-tooltip />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager1.page_no" v-model:page-size="pager1.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
</div>
</el-form>
</popup>
</div>
@ -253,7 +135,6 @@ import { apiCompetitorLists } from '@/api/competitor'
import { timeFormat } from '@/utils/util'
import type { TabsPaneContext } from 'element-plus'
const activeName = ref('demo-tabs-1')
import type { PropType } from 'vue'
defineProps({
@ -268,20 +149,9 @@ const pager1 = reactive({
page_no: 1,
customer_demand_id: ""
})
const pager2 = reactive({
page_size: 10,
page_no: 1,
customer_demand_id: ""
})
const pager3 = reactive({
page_size: 10,
page_no: 1,
customer_demand_id: ""
})
const total = ref(0)
const total1 = ref(0)
const total2 = ref(0)
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
@ -292,8 +162,7 @@ const datas = reactive({
areaOptions: [],
});
const tableData = ref([])
const tableData1 = ref([])
const tableData2 = ref([])
const handleClick = (tab: TabsPaneContext, event: Event) => {
console.log(tab, event)
}
@ -309,32 +178,14 @@ const handleSizeChange1 = (val: number) => {
pager1.page_size = val
solutionLists()
}
const handleSizeChange2 = (val: number) => {
pager2.page_size = val
estimateLists()
}
const handleSizeChange3 = (val: number) => {
pager3.page_size = val
competitorLists()
}
//
const handleCurrentChange1 = (val: number) => {
console.log(`current page: ${val}`)
pager1.page_no = val
solutionLists()
}
const handleCurrentChange2 = (val: number) => {
console.log(`current page: ${val}`)
pager2.page_no = val
estimateLists()
}
const handleCurrentChange3 = (val: number) => {
pager3.page_no = val
console.log(`current page: ${val}`)
competitorLists()
}
//
const solutionLists = () => {
apiCustomerDemandSolutionLists(pager1).then((res) => {
@ -345,31 +196,13 @@ const solutionLists = () => {
})
}
//
const estimateLists = () => {
apiProjectEstimateLists(pager2).then((res) => {
tableData1.value = res.lists
total1.value = res.count
})
}
//
const competitorLists = () => {
apiCompetitorLists(pager3).then((res) => {
tableData2.value = res.lists
total2.value = res.count
})
}
//
const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data)
pager1.customer_demand_id = data.id
pager2.customer_demand_id = data.id
pager3.customer_demand_id = data.id
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
@ -380,8 +213,7 @@ const setFormData = async (data: Record<any, any>) => {
Object.assign(formDataannex, arry1)
}
competitorLists()
solutionLists()
estimateLists()
}
const getDetail = async (row: Record<string, any>) => {

View File

@ -1,86 +1,97 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="项目合同详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<popup ref="popupRef" title="合同洽商详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px">
<el-card class="mb-2">
<el-row>
<el-col :span="12">
<el-form-item label="合同名称">
{{ formData.contract_name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同编号">
{{ formData.contract_code }}
</el-form-item>
</el-col> <el-col :span="12">
<el-form-item label="合同类型">
<dict-value :options="dictData.contract_type" :value="formData.contract_type" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="洽商类别">
<dict-value :options="dictData.negotiation_type" :value="formData.negotiation_type" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="洽商金额">
{{ formData.negotiation_amount }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="洽商编号">
{{ formData.negotiation_no }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="成本金额(人工)">
{{ formData.labor_costs }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="成本金额(材料">
{{ formData.material_costs }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="洽商质保到期时间">
{{ formData.Warranty_expire_date }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="利润率">
{{ formData.profit_rate }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="利润">
{{ formData.profit }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="具体说明">
{{ formData.negotiation_content }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="签证报价表">
{{ formData.negotiation_quotation }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="洽商依据">
{{ formData.negotiation_basis }}
</el-form-item>
</el-col>
<el-descriptions :column="2" border>
<el-descriptions-item label="合同名称" label-align="left" align="left" label-class-name="my-label"> {{ formData.contract_name
}}</el-descriptions-item>
<el-descriptions-item label="合同编号" label-align="left" align="left" label-class-name="my-label"> {{ formData.contract_code
}}</el-descriptions-item>
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label"> {{ formData.project_name
</el-row>
</el-card>
}}</el-descriptions-item>
<el-descriptions-item label="客户名称" label-align="left" align="left" label-class-name="my-label"> {{ formData.custom_name
}}</el-descriptions-item>
<el-descriptions-item label="合同类型" label-align="left" align="left" label-class-name="my-label"> {{ formData.contract_type
}}</el-descriptions-item>
<el-descriptions-item label="合同计价方式" label-align="left" align="left" label-class-name="my-label"> {{ formData.contract_pricing_method
}}</el-descriptions-item>
<el-descriptions-item label="签约日期" label-align="left" align="left" label-class-name="my-label"> {{ formData.contract_date
}}</el-descriptions-item>
<el-descriptions-item label="业务负责人" label-align="left" align="left" label-class-name="my-label"> {{ formData.business_director
}}</el-descriptions-item>
<el-descriptions-item label="洽商单名称" label-align="left" align="left" label-class-name="my-label"> {{ formData.negotiation_name
}}</el-descriptions-item>
<el-descriptions-item label="洽商编号" label-align="left" align="left" label-class-name="my-label"> {{ formData.negotiation_no
}}</el-descriptions-item>
<el-descriptions-item label="洽商类别" label-align="left" align="left" label-class-name="my-label"> {{ formData.negotiation_type_text
}}</el-descriptions-item>
<el-descriptions-item label="成本金额(人工)" label-align="left" align="left" label-class-name="my-label"> {{ formData.labor_costs
}}</el-descriptions-item>
<el-descriptions-item label="成本金额(材料)" label-align="left" align="left" label-class-name="my-label"> {{ formData.material_costs
}}</el-descriptions-item>
<el-descriptions-item label="洽商质保金额" label-align="left" align="left" label-class-name="my-label"> {{ formData.warranty_amount
}}</el-descriptions-item>
<el-descriptions-item label="洽商质保到期时间" label-align="left" align="left" label-class-name="my-label"> {{ formData.warranty_expire_date
}}</el-descriptions-item>
<el-descriptions-item label="利润" label-align="left" align="left" label-class-name="my-label"> {{ formData.profit
}}</el-descriptions-item>
<el-descriptions-item label="利润率(%)" label-align="left" align="left" label-class-name="my-label"> {{ formData.profit_rate
}}</el-descriptions-item>
<el-descriptions-item label="洽商内容" label-align="left" align="left" label-class-name="my-label"> {{ formData.negotiation_content
}}</el-descriptions-item>
<el-descriptions-item label="具体说明" label-align="left" align="left" label-class-name="my-label"> {{ formData.negotiation_detail
}}</el-descriptions-item>
<el-descriptions-item label="签证报价表" label-align="left" align="left" label-class-name="my-label">
<div v-if="formData.negotiation_quotation.length > 0">
<div v-for="(item, index) in formData.negotiation_quotation" style="margin-left: 5px;display: block;">
<el-link style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item" target="_blank">文件{{ index + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无附件
</div>
</el-descriptions-item>
<el-descriptions-item label="洽商依据" label-align="left" align="left" label-class-name="my-label">
<div v-if="formData.negotiation_basis.length > 0">
<div v-for="(item, index) in formData.negotiation_basis" style="margin-left: 5px;display: block;">
<el-link style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item" target="_blank">文件{{ index + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无附件
</div>
</el-descriptions-item>
</el-descriptions>
</el-form>
</popup>
</div>

View File

@ -17,26 +17,26 @@
<el-form-item label="合同名称" prop="contract_id" @click="showDialog = true" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="contract_name" readonly clearable placeholder="请选择项目合同" />
</el-form-item></el-col><el-col :span="8">
<el-form-item label="合同编号" prop="contract_id" @click="showDialog = true" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="contract_code" clearable placeholder="请选择合同" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" />
<el-form-item label="合同编号" prop="contract_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="contract_code" disabled clearable placeholder="请选择合同" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" />
</el-form-item></el-col><el-col :span="8">
<el-form-item label="项目名称" prop="contract_id" @click="showDialog = true">
<el-input v-model="project_name" clearable placeholder="请选择合同" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" />
<el-form-item label="项目名称" prop="contract_id">
<el-input v-model="project_name" clearable disabled placeholder="请选择合同" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" />
</el-form-item></el-col><el-col :span="8">
<el-form-item label="客户名称" prop="contract_id" @click="showDialog = true">
<el-input v-model="custom_name" clearable placeholder="请选择合同" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" />
<el-form-item label="客户名称" prop="contract_id">
<el-input v-model="custom_name" clearable disabled placeholder="请选择合同" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="合同类型" prop="contract_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select v-model="contract_type" clearable placeholder="请选择合同类型">
<el-select v-model="contract_type" clearable disabled placeholder="请选择合同类型">
<el-option v-for="(item, index) in dictData.contract_type" :key="index" :label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合同计价方式" prop="contract_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select class="flex-1" v-model="contract_pricing_method" clearable placeholder="请选择合同计价方式">
<el-select class="flex-1" v-model="contract_pricing_method" disabled clearable placeholder="请选择合同计价方式">
<el-option v-for="(item, index) in dictData.contract_pricing_method" :key="index" :label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item>
@ -44,18 +44,15 @@
<el-col :span="8">
<el-form-item label="业务负责人" prop="contract_id" @click="showDialog = true">
<el-form-item label="业务负责人" prop="contract_id">
<el-input v-model="business_director" readonly clearable placeholder="请选择人员" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" />
</el-form-item></el-col><el-col :span="8">
<el-form-item label="审批id" prop="approve_id">
<el-input v-model="formData.approve_id" clearable placeholder="请输入审批id" />
</el-form-item></el-col><el-col :span="8">
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="洽商单名称" prop="negotiation_name">
<el-input v-model="formData.negotiation_name" clearable placeholder="请输入洽商单名称" />
</el-form-item></el-col><el-col :span="8">
<el-form-item label="洽商编号" prop="negotiation_no">
<el-input v-model="formData.negotiation_no" clearable placeholder="请输入洽商编号" />
<el-input v-model="negotiation_no" disabled clearable placeholder="系统自动生成" />
</el-form-item></el-col><el-col :span="8">
<el-form-item label="洽商金额" prop="negotiation_amount">
<el-input v-model="formData.negotiation_amount" clearable placeholder="请输入洽商金额" />
@ -76,28 +73,52 @@
<el-form-item label="洽商质保金额" prop="warranty_amount">
<el-input v-model="formData.warranty_amount" clearable placeholder="请输入洽商质保金额" />
</el-form-item></el-col><el-col :span="8">
<el-form-item label="洽商质保到期时间" prop="Warranty_expire_date">
<el-date-picker class="flex-1 !flex" v-model="formData.Warranty_expire_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择洽商质保到期时间">
<el-form-item label="洽商质保到期时间" prop="warranty_expire_date">
<el-date-picker class="flex-1 !flex" v-model="formData.warranty_expire_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择洽商质保到期时间">
</el-date-picker>
</el-form-item></el-col><el-col :span="8">
<el-form-item label="利润" prop="profit">
<el-input v-model="formData.profit" clearable placeholder="请输入利润" />
<el-input v-model="profit" clearable disabled placeholder="请输入利润" />
</el-form-item></el-col><el-col :span="8">
<el-form-item label="利润率" prop="profit_rate">
<el-input v-model="formData.profit_rate" clearable placeholder="请输入利润率" />
<el-input v-model="profit_rate" disabled clearable placeholder="请输入利润率" />
</el-form-item></el-col><el-col :span="8">
<el-form-item label="洽商内容" prop="negotiation_content">
<el-input v-model="formData.negotiation_content" clearable placeholder="请输入洽商内容" />
</el-form-item></el-col><el-col :span="8">
<el-form-item label="具体说明" prop="negotiation_detail">
<el-input v-model="formData.negotiation_detail" clearable placeholder="请输入具体说明" />
</el-form-item></el-col><el-col :span="8">
</el-form-item></el-col><el-col :span="24">
<el-form-item label="签证报价表" prop="negotiation_quotation">
<el-input v-model="formData.negotiation_quotation" clearable placeholder="请输入签证报价表" />
</el-form-item></el-col><el-col :span="8">
<!-- <el-input v-model="formData.negotiation_quotation" clearable placeholder="请输入签证报价表" /> -->
<el-upload accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv" class="upload-demo" :show-file-list="false" aria-hidden="true" :headers="{ Token: userStore.token }" :action="base_url + '/upload/file'" :on-success="handleAvatarSuccess_four1" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formDataannex1" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn1(index)">x</span>
</div>
</div>
</el-form-item></el-col><el-col :span="24">
<el-form-item label="洽商依据" prop="negotiation_basis">
<el-input v-model="formData.negotiation_basis" clearable placeholder="请输入洽商依据" />
<!-- <el-input v-model="formData.negotiation_basis" clearable placeholder="请输入洽商依据" /> -->
<el-upload accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv" class="upload-demo" :show-file-list="false" aria-hidden="true" :headers="{ Token: userStore.token }" :action="base_url + '/upload/file'" :on-success="handleAvatarSuccess_four2" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formDataannex2" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn2(index)">x</span>
</div>
</div>
</el-form-item></el-col>
</el-row>
</el-form>
@ -114,7 +135,7 @@ import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiContractNegotiationAdd, apiContractNegotiationEdit, apiContractNegotiationDetail } from '@/api/contract_negotiation'
import { timeFormat } from '@/utils/util'
import proontractTable from "@/components/project_contract/index.vue"
import proontractTable from "@/components/contract/index.vue"
import type { PropType } from 'vue'
defineProps({
dictData: {
@ -125,6 +146,11 @@ defineProps({
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
import configs from "@/config"
const base_url = configs.baseUrl + configs.urlPrefix
import useUserStore from "@/stores/modules/user";
const userStore = useUserStore();
const mode = ref('add')
const showDialog = ref(false)
const contract_name = ref('')
@ -133,6 +159,11 @@ const project_name = ref('')
const custom_name = ref('')
const business_director = ref('')
const contract_type = ref('')
const profit_rate = ref(0)
const negotiation_no = ref('')
const profit = ref(0)
const formDataannex1 = reactive([])
const formDataannex2 = reactive([])
const contract_pricing_method = ref('')
const list1 = reactive([])
const list2 = reactive([])
@ -142,14 +173,49 @@ import { getAll } from '@/api/org/organization'
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑合同洽商' : '新增合同洽商'
})
//
const handleAvatarSuccess_four1 = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex1.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn1 = (index: number) => {
formDataannex1.splice(index, 1)
}
//
const handleAvatarSuccess_four2 = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex2.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn2 = (index: number) => {
formDataannex2.splice(index, 1)
}
//
const formData = reactive({
id: '',
dept_id: '',
org_id: '',
contract_id: '',
approve_id: '',
// approve_id: '',
negotiation_name: '',
negotiation_no: '',
negotiation_amount: '',
@ -157,9 +223,8 @@ const formData = reactive({
labor_costs: '',
material_costs: '',
warranty_amount: '',
Warranty_expire_date: '',
profit: '',
profit_rate: '',
warranty_expire_date: '',
negotiation_content: '',
negotiation_detail: '',
negotiation_quotation: '',
@ -171,19 +236,63 @@ const customEvent = (e: any) => {
formData.contract_id = e.id;
contract_name.value = e.contract_name;
contract_code.value = e.contract_code
custom_name.value = e.customer_name
business_director.value = e.business_director
business_director.value = e.business_director
custom_name.value = e.custom_name
business_director.value = e.business_director_name
contract_type.value = e.contract_type
project_name.value = e.project_name
contract_pricing_method.value = e.contract_pricing_method
showDialog.value = false;
};
//
const formRules = reactive<any>({
})
watch(
() => formData.negotiation_amount,
() => {
const laborCosts = Number(formData.labor_costs) || 0;
const materialCosts = Number(formData.material_costs) || 0;;
const negotiationAmount = Number(formData.negotiation_amount) || 0;;
// console.log("");
profit.value = negotiationAmount - (laborCosts + materialCosts);
profit_rate.value = (profit.value / negotiationAmount).toFixed(2)
},
{
//
deep: true,
}
)
watch(
() => formData.labor_costs,
() => {
const laborCosts = Number(formData.labor_costs) || 0;
const materialCosts = Number(formData.material_costs) || 0;;
const negotiationAmount = Number(formData.negotiation_amount) || 0;;
// console.log("");
profit.value = negotiationAmount - (laborCosts + materialCosts);
profit_rate.value = (profit.value / negotiationAmount).toFixed(2)
},
{
//
deep: true,
}
)
watch(
() => formData.material_costs,
() => {
const laborCosts = Number(formData.labor_costs) || 0;
const materialCosts = Number(formData.material_costs) || 0;;
const negotiationAmount = Number(formData.negotiation_amount) || 0;;
// console.log("");
profit.value = negotiationAmount - (laborCosts + materialCosts);
profit_rate.value = (profit.value / negotiationAmount).toFixed(2)
},
{
//
deep: true,
}
)
//
const getlist = () => {
getAll().then((res) => {
@ -214,6 +323,28 @@ const getlist1 = (id: any) => {
}
//
const setFormData = async (data: Record<any, any>) => {
if (data.negotiation_quotation && data.negotiation_quotation.length > 0) {
const arry1 = data.negotiation_quotation.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex1, arry1)
}
if (data.negotiation_basis && data.negotiation_basis.length > 0) {
const arry1 = data.negotiation_basis.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex2, arry1)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
@ -232,8 +363,7 @@ const setFormData = async (data: Record<any, any>) => {
custom_name.value = data.custom_name
contract_type.value = data.contract_type
contract_pricing_method.value = data.contract_pricing_method
//@ts-ignore
formData.Warranty_expire_date = timeFormat(formData.Warranty_expire_date, 'yyyy-mm-dd hh:MM:ss')
}
const getDetail = async (row: Record<string, any>) => {
@ -246,6 +376,12 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex1.length > 0) {
formData.negotiation_quotation = JSON.stringify(formDataannex1.map((item) => item.uri))
}
if (formDataannex2.length > 0) {
formData.negotiation_basis = JSON.stringify(formDataannex2.map((item) => item.uri))
}
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'

View File

@ -2,12 +2,20 @@
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="合同id" prop="contract_id">
<el-input class="w-[280px]" v-model="queryParams.contract_id" clearable placeholder="请输入合同id" />
<el-form-item label="洽商编号" prop="negotiation_no">
<el-input class="w-[280px]" v-model="queryParams.negotiation_no" clearable placeholder="请输入洽商编号" />
</el-form-item>
<el-form-item label="项目名称" prop="project_name">
<el-input class="w-[280px]" v-model="queryParams.project_name" clearable placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="洽商单名称" prop="negotiation_name">
<el-input class="w-[280px]" v-model="queryParams.negotiation_name" clearable placeholder="请输入洽商单名称" />
</el-form-item>
<el-form-item label="洽商单名称" prop="negotiation_type">
<el-select class="w-[280px]" v-model="queryParams.negotiation_type" clearable placeholder="请选择洽商类别">
<el-option v-for="(item, index) in dictData.negotiation_type" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
@ -28,24 +36,17 @@
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="合同id" prop="contract_id" show-overflow-tooltip />
<el-table-column label="审批id" prop="approve_id" show-overflow-tooltip />
<el-table-column label="洽商单名称" prop="negotiation_name" show-overflow-tooltip />
<el-table-column label="处理流程" prop="" show-overflow-tooltip />
<el-table-column label="流程步骤" prop="" show-overflow-tooltip />
<el-table-column label="流程编号" prop="" show-overflow-tooltip />
<el-table-column label="洽商编号" prop="negotiation_no" show-overflow-tooltip />
<el-table-column label="洽商金额" prop="negotiation_amount" show-overflow-tooltip />
<el-table-column label="洽商类别" prop="negotiation_type">
<template #default="{ row }">
<dict-value :options="dictData.negotiation_type" :value="row.negotiation_type" />
</template>
</el-table-column>
<el-table-column label="成本金额(人工)" prop="labor_costs" show-overflow-tooltip />
<el-table-column label="成本金额(材料" prop="material_costs" show-overflow-tooltip />
<el-table-column label="洽商质保金额" prop="warranty_amount" show-overflow-tooltip />
<el-table-column label="洽商质保到期时间" prop="Warranty_expire_date">
<template #default="{ row }">
<span>{{ row.Warranty_expire_date ? timeFormat(row.Warranty_expire_date, 'yyyy-mm-dd hh:MM:ss') : '' }}</span>
</template>
</el-table-column>
<el-table-column label="合同编号" prop="contract_code" show-overflow-tooltip />
<el-table-column label="客户名称" prop="custom_name" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="洽商报价金额" prop="negotiation_amount" show-overflow-tooltip />
<el-table-column label="洽商类别" prop="negotiation_type" show-overflow-tooltip />
<el-table-column label="签约日期" prop="contract_date" show-overflow-tooltip />
<el-table-column label="业务负责人" prop="business_director" show-overflow-tooltip />
<el-table-column label="利润" prop="profit" show-overflow-tooltip />
<el-table-column label="利润率" prop="profit_rate" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
@ -89,8 +90,10 @@ const showDtail = ref(false)
//
const queryParams = reactive({
contract_id: '',
negotiation_name: ''
project_name: '',
negotiation_name: '',
negotiation_no: '',
negotiation_type: ''
})
//
@ -119,10 +122,13 @@ const handleAdd = async () => {
//
const handleEdit = async (data: any) => {
let res = await apiContractNegotiationDetail({
id: data.id
})
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
editRef.value?.setFormData(res)
}
//

View File

@ -1,110 +1,161 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="采购合同详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<popup ref="popupRef" title="采购合同详情详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px">
<el-card class="mb-2">
<el-row>
<el-col :span="12">
<el-form-item label="项目名称">
{{ formData.project.name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="客户名称">
{{ formData.custom.name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同编号">
{{ formData.contract_no }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="供应商合同号">
{{ formData.supplier_contract_no }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同类型">
<dict-value :options="dictData.procurement_contract_type" :value="formData.contract_type" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="签订日期">
{{ formData.signing_date }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="付款方式">
<dict-value :options="dictData.pay_type" :value="formData.pay_type" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="账期">
<dict-value :options="dictData.account_period" :value="formData.account_period" />
</el-form-item>
</el-col>
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane label="基本信息" name="demo-tabs-1">
<el-descriptions :column="2" border>
<el-col :span="12">
<el-form-item label="合同金额">
{{ formData.amount }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="不含税金额">
{{ formData.amount_excluding_tax }}
</el-form-item>
</el-col>
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label"> {{ formData.project_name }}</el-descriptions-item>
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label"> {{ formData.project_code }}</el-descriptions-item>
<el-descriptions-item label="合同名称" label-align="left" align="left" label-class-name="my-label">{{ formData.contract_code }}</el-descriptions-item>
<el-descriptions-item label="合同编号" label-align="left" align="left" label-class-name="my-label">{{ formData.custom_name }}</el-descriptions-item>
<el-descriptions-item label="供应商编码" label-align="left" align="left" label-class-name="my-label">{{ formData.contract_code }}</el-descriptions-item>
<el-descriptions-item label="供应商名称" label-align="left" align="left" label-class-name="my-label">{{ formData.custom_name }}</el-descriptions-item>
<el-descriptions-item label="合同类型" label-align="left" align="left" label-class-name="my-label">
{{ formData.contract_type_text }}
</el-descriptions-item>
<el-col :span="12">
<el-form-item label="金额大写">
{{ formData.amount_daxie }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同金额">
{{ formData.amount }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="质保金比例">
{{ formData.retention_money_rate }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="质保金">
{{ formData.retention_money }}
</el-form-item>
</el-col> <el-col :span="12">
<el-form-item label="备注">
{{ formData.remark }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="附件" prop="field127">
<el-descriptions-item label=" 签订日期" label-align="left" align="left" label-class-name="my-label">
{{ formData.contract_type_text }}
</el-descriptions-item>
<el-descriptions-item label="付款方式" label-align="left" align="left" label-class-name="my-label">
{{ formData.contract_type_text }}
</el-descriptions-item>
<el-descriptions-item label="账期" label-align="left" align="left" label-class-name="my-label">
{{ formData.contract_type_text }}
</el-descriptions-item>
<el-descriptions-item label="合同金额" label-align="left" align="left" label-class-name="my-label">
{{ formData.contract_type_text }}
</el-descriptions-item>
<el-descriptions-item label="税率" label-align="left" align="left" label-class-name="my-label">
{{ formData.contract_type_text }}
</el-descriptions-item>
<el-descriptions-item label="不含税金额" label-align="left" align="left" label-class-name="my-label">
{{ formData.contract_type_text }}
</el-descriptions-item>
<el-descriptions-item label="质保金比例()" label-align="left" align="left" label-class-name="my-label">
{{ formData.contract_type_text }}
</el-descriptions-item>
<el-descriptions-item label="质保金" label-align="left" align="left" label-class-name="my-label">
{{ formData.contract_type_text }}
</el-descriptions-item>
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label">
{{ formData.contract_type_text }}
</el-descriptions-item>
<el-descriptions-item label="合同附件" label-align="left" align="left" label-class-name="my-label">
<div v-if="formDataannex.length > 0">
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
<!-- <span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span> -->
<el-link style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">文件{{ index + 1 }}查看</el-link>
</div>
</div>
<div v-else>暂无附件</div>
<div v-else>
暂无附件
</div>
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="采购明细" name="demo-tabs-2">
<div>
<el-table :data="tableData" stripe style="width: 100%">
<el-table-column label="采购申请单号" prop='customer_demand_name' width="180" />
<el-table-column label="材料名称" prop='submission_time' width="180" />
<el-table-column label="材料编码" prop='solution_content' />
<el-table-column label="规格型号" prop='solution_content' />
<el-table-column label="品牌" prop='solution_content' />
<el-table-column label="参数说明" prop='solution_content' />
<el-table-column label="单位" prop='solution_content' />
<el-table-column label="数量" prop='solution_content' />
<el-table-column label="合税单价" prop='solution_content' />
<el-table-column label="不含税金额" prop='solution_content' />
<el-table-column label="含税金额" prop='solution_content' />
<el-table-column label="已入库数量" prop='solution_content' />
<el-table-column label="未入库数量" prop='solution_content' />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager1.page_no" v-model:page-size="pager1.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
</div>
</el-tab-pane>
<el-tab-pane label="收票记录" name="demo-tabs-3">
<div>
<el-table :data="tableData1" stripe style="width: 100%">
<el-table-column label="开票日期" prop='estimate_source_text' width="180" />
<el-table-column label="提交人" prop='create_user' width="180" />
<el-table-column label="发票类型" prop='quotation_date' />
<el-table-column label="发票编号" prop='technician_name' width="180" />
<el-table-column label="发票税率" prop='estimate_amount' width="180" />
<el-table-column label="发票金额" prop='ask' />
<el-table-column label="不含税金额" prop='ask' />
<el-table-column label="税额" prop='ask' />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager2.page_no" v-model:page-size="pager2.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total1" @size-change="handleSizeChange2" @current-change="handleCurrentChange2" />
</div>
</el-tab-pane>
<el-tab-pane label="付款计划" name="demo-tabs-4">
<div>
<el-table :data="tableData2" stripe style="width: 100%">
<el-table-column label="计划付款日期" prop='competitor_name' width="180" />
<el-table-column label="期次" prop='competitor_contacts' width="180" />
<el-table-column label="状态" prop='competitor_contacts_phone' />
<el-table-column label="金额" prop='competitive_power' />
<el-table-column label="已付款" prop='competitor_advantages' />
<el-table-column label="未付款" prop='competitor_disadvantages' />
<el-table-column label="备注" prop='remark' />
</el-form-item></el-col>
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager3.page_no" v-model:page-size="pager3.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total2" @size-change="handleSizeChange3" @current-change="handleCurrentChange3" />
</div>
</el-tab-pane>
<el-tab-pane label="付款记录" name="demo-tabs-5">
<div>
<el-table :data="tableData3" stripe style="width: 100%">
<el-table-column label="付款单号" prop='competitor_name' width="180" />
<el-table-column label="期次" prop='competitor_contacts' width="180" />
<el-table-column label="付款日期" prop='competitor_contacts_phone' />
<el-table-column label="申请人" prop='competitive_power' />
<el-table-column label="开票状态" prop='competitor_advantages' />
<el-table-column label="款项说明" prop='competitor_disadvantages' />
<el-table-column label="付款方式" prop='competitor_disadvantages' />
<el-table-column label="付款性质" prop='competitor_disadvantages' />
<el-table-column label="付款金额" prop='competitor_disadvantages' />
</el-row>
</el-card>
<el-table-column label="备注" prop='remark' />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager4.page_no" v-model:page-size="pager4.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total3" @size-change="handleSizeChange4" @current-change="handleCurrentChange4" />
</div>
</el-tab-pane>
<el-tab-pane label="退款记录" name="demo-tabs-6">
<div>
<el-table :data="tableData4" stripe style="width: 100%">
<el-table-column label="项目名称" prop='competitor_name' width="180" />
<el-table-column label="退款日期" prop='competitor_contacts' width="180" />
<el-table-column label="退款原因" prop='competitor_contacts_phone' />
<el-table-column label="退款方式" prop='competitive_power' />
<el-table-column label="退款金额" prop='competitor_advantages' />
<el-table-column label="备注" prop='remark' />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager5.page_no" v-model:page-size="pager5.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total4" @size-change="handleSizeChange5" @current-change="handleCurrentChange5" />
</div>
</el-tab-pane>
</el-tabs>
</el-form>
</popup>
</div>
@ -115,37 +166,164 @@
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCustomDetail } from '@/api/custom'
import { apiCustomerDemandSolutionLists } from '@/api/customer_demand_solution'
import { apiProjectEstimateLists } from '@/api/project_estimate'
import { apiCompetitorLists } from '@/api/competitor'
import { timeFormat } from '@/utils/util'
import type { TabsPaneContext } from 'element-plus'
const activeName = ref('demo-tabs-1')
import type { PropType } from 'vue'
const formDataannex = reactive([])
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const pager1 = reactive({
page_size: 10,
page_no: 1,
customer_demand_id: ""
})
const pager2 = reactive({
page_size: 10,
page_no: 1,
customer_demand_id: ""
})
const pager3 = reactive({
page_size: 10,
page_no: 1,
customer_demand_id: ""
})
const pager4 = reactive({
page_size: 10,
page_no: 1,
customer_demand_id: ""
})
const pager5 = reactive({
page_size: 10,
page_no: 1,
customer_demand_id: ""
})
const total = ref(0)
const total1 = ref(0)
const total2 = ref(0)
const total3 = ref(0)
const total4 = ref(0)
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const formDataannex = reactive([])
const datas = reactive({
provinceOptions: [],
cityOptions: [],
areaOptions: [],
});
const tableData = ref([])
const tableData1 = ref([])
const tableData2 = ref([])
const tableData3 = ref([])
const tableData4 = ref([])
const handleClick = (tab: TabsPaneContext, event: Event) => {
console.log(tab, event)
}
//
const formData = reactive({
})
//
const handleSizeChange1 = (val: number) => {
pager1.page_size = val
solutionLists()
}
const handleSizeChange2 = (val: number) => {
pager2.page_size = val
estimateLists()
}
const handleSizeChange3 = (val: number) => {
pager3.page_size = val
competitorLists()
}
const handleSizeChange4 = (val: number) => {
pager4.page_size = val
competitorLists()
}
const handleSizeChange5 = (val: number) => {
pager5.page_size = val
competitorLists()
}
//
const handleCurrentChange1 = (val: number) => {
console.log(`current page: ${val}`)
pager1.page_no = val
solutionLists()
}
const handleCurrentChange2 = (val: number) => {
console.log(`current page: ${val}`)
pager2.page_no = val
estimateLists()
}
const handleCurrentChange3 = (val: number) => {
pager3.page_no = val
console.log(`current page: ${val}`)
competitorLists()
}
const handleCurrentChange4 = (val: number) => {
pager4.page_no = val
console.log(`current page: ${val}`)
competitorLists()
}
const handleCurrentChange5 = (val: number) => {
pager5.page_no = val
console.log(`current page: ${val}`)
competitorLists()
}
//
const solutionLists = () => {
apiCustomerDemandSolutionLists(pager1).then((res) => {
tableData.value = res.lists
total.value = res.count
})
}
//
const estimateLists = () => {
apiProjectEstimateLists(pager2).then((res) => {
tableData1.value = res.lists
total1.value = res.count
})
}
//
const competitorLists = () => {
apiCompetitorLists(pager3).then((res) => {
tableData2.value = res.lists
total2.value = res.count
})
}
//
const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data)
pager1.customer_demand_id = data.id
pager2.customer_demand_id = data.id
pager3.customer_demand_id = data.id
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
@ -155,8 +333,9 @@ const setFormData = async (data: Record<any, any>) => {
});
Object.assign(formDataannex, arry1)
}
competitorLists()
solutionLists()
estimateLists()
}
const getDetail = async (row: Record<string, any>) => {

View File

@ -24,9 +24,6 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="审批id" prop="approve_id">
<el-input v-model="formData.approve_id" clearable placeholder="请输入审批id" />
</el-form-item> </el-col> <el-col :span="8">
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true" :rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-input v-model="project_name" readonly clearable placeholder="请选择项目" />
</el-form-item> </el-col>
@ -36,10 +33,10 @@
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="合同编号" prop="contract_no">
<el-input v-model="formData.contract_no" clearable disabled placeholder="系统自动编号" />
<el-input v-model="contract_no" clearable disabled placeholder="系统自动编号" />
</el-form-item> </el-col> <el-col :span="8">
<el-form-item label="供应商合同号" prop="supplier_id">
<el-input v-model="supplier_contract_no" clearable placeholder="请输入供应商合同号" />
<el-form-item label="合同名称" prop="supplier_id">
<el-input v-model="formData.contract_name" clearable placeholder="请输入合同名称" />
</el-form-item> </el-col> <el-col :span="24">
<el-form-item label="合同类型" prop="contract_type">
<el-radio-group v-model="formData.contract_type" placeholder="请选择合同类型" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
@ -49,7 +46,7 @@
</el-radio-group>
</el-form-item> </el-col> <el-col :span="8">
<el-form-item label="签订日期" prop="signing_date" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-date-picker class="flex-1 !flex" v-model="formData.signing_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择签订日期">
<el-date-picker class="flex-1 !flex" v-model="formData.signing_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择签订日期">
</el-date-picker>
</el-form-item>
</el-col> <el-col :span="24">
@ -68,20 +65,22 @@
</el-radio-group>
</el-form-item> </el-col> <el-col :span="8">
<el-form-item label="合同金额" prop="amount">
<el-input v-model="formData.amount" clearable placeholder="请输入合同金额" />
<el-input v-model="amount" clearable placeholder="请输入合同金额" />
</el-form-item> </el-col> <el-col :span="8">
<el-form-item label="不含税金额" prop="amount_excluding_tax">
<el-input v-model="formData.amount_excluding_tax" clearable placeholder="请输入不含税金额" />
<el-input v-model="amount_excluding_tax" disabled clearable placeholder="请输入不含税金额" />
</el-form-item> </el-col> <el-col :span="8">
<el-form-item label="金额大写" prop="amount_daxie" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.amount_daxie" clearable placeholder="请输入金额大写" />
<el-form-item label="金额大写" prop="project_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="amount_daxie" clearable disabled placeholder="请输入金额大写" />
</el-form-item> </el-col> <el-col :span="8">
<el-form-item label="质保金比例" prop="retention_money_rate">
<el-input v-model="formData.retention_money_rate" clearable placeholder="请输入质保金比例" />
</el-form-item> </el-col> <el-col :span="8">
<el-form-item label="质保金" prop="retention_money" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.retention_money" clearable placeholder="请输入质保金" />
</el-form-item> </el-col> <el-col :span="8">
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="质保金" prop="project_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="retention_money" disabled clearable placeholder="请输入质保金" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item> </el-col> <el-col :span="8">
@ -106,76 +105,77 @@
</el-col>
</el-row>
<div style=" display: flex;justify-content: flex-end;margin-bottom: 30px;">
<el-button @click="showDialog1 = true" type="primary" plain>选择项目MRP缺口</el-button>
<el-button @click="showDialog1 = true" type="primary" plain>选择订单MRP缺口</el-button>
<el-button @click="showDialog2 = true" type="primary" plain>添加产品</el-button>
<el-button @click="showDialog1 = true" type="primary" plain>下载导入表</el-button>
<el-button @click="showDialog2 = true" type="primary" plain>选择项目MRP缺口</el-button>
<el-button @click="showDialog1 = true" type="primary" plain>导入产品</el-button>
</div>
<el-row>
<el-col :span="24">
<div style="margin-bottom: 30px;">采购合同明细</div>
<div style="margin-bottom: 30px;">
<el-table :data="formData.material">
<el-table :data="materialList">
<el-table-column label="序号">
<template #default="{ row }">
<el-button @click="handleAdd1(row)">+</el-button>
<el-button @click="handleDelete1(row)">-</el-button>
</template>
</el-table-column>
<el-table-column label="采购申请单号" prop="material_procurement_application_id">
<el-table-column label="采购申请单号" prop="material_purchase_request_code">
<template #default="{ row }">
<el-input v-model="row.material_procurement_application_id" />
<el-input v-model="row.material_purchase_request_code" disabled />
</template>
</el-table-column>
<el-table-column label="材料名称" prop="material_procurement_application_id">
<template #default="{ row }"> <el-input v-model="row.material_procurement_application_id" /> </template></el-table-column>
<el-table-column label="材料编码" prop="material_procurement_application_id">
<template #default="{ row }"> <el-input v-model="row.material_procurement_application_id" /> </template></el-table-column>
<el-table-column label="材料名称" prop="material_name">
<template #default="{ row }"> <el-input v-model="row.material_name" disabled /> </template></el-table-column>
<el-table-column label="材料编码" prop="material_code">
<template #default="{ row }"> <el-input v-model="row.material_code" disabled /> </template></el-table-column>
<el-table-column label="规格型号" prop="material_procurement_application_id">
<el-table-column label="规格型号" prop="material_specs">
<template #default="{ row }">
<el-input v-model="row.material_procurement_application_id" />
<el-input v-model="row.material_specs" />
</template>
</el-table-column>
<el-table-column label="数量" prop="product_num">
<el-table-column label="品牌" prop="material_brand">
<template #default="{ row }">
<el-input v-model="row.product_num" />
<el-input v-model="row.material_brand" disabled />
</template>
</el-table-column>
<el-table-column label="单位" prop="tax_rate">
<el-table-column label="单位" prop="material_unit">
<template #default="{ row }">
<el-input v-model="row.tax_rate" />
<el-input v-model="row.material_unit" disabled />
</template>
</el-table-column>
<el-table-column label="数量" prop="num">
<template #default="{ row }">
<el-input v-model="row.num" />
<template #default="{ row, $index }">
<el-input v-model="row.num" @input="materialji1(row, $index)" />
</template>
</el-table-column>
<el-table-column label="含税单价" prop="unit_price_including_tax">
<template #default="{ row }">
<el-input v-model="row.unit_price_including_tax" />
<el-table-column label="含税单价" prop="price">
<template #default="{ row, $index }">
<el-input v-model="row.price" @input="materialji1(row, $index)" />
</template>
</el-table-column>
<el-table-column label="税率" prop="tax_rate">
<template #default="{ row }">
<el-input v-model="row.tax_rate" />
<el-table-column label="税率(%)" prop="tax_rate">
<template #default="{ row, $index }">
<el-select v-model="row.tax_rate" clearable placeholder="请选择税率" value-key="name" @change="materialji2(row, $index, $event)">
<el-option label="全部" value=""></el-option>
<el-option v-for="(item, index) in dictData.tax_rate" :key="index" :label="item.name" :value="item" />
</el-select>
</template>
</el-table-column>
<el-table-column label="不含税金额" prop="amount_excluding_tax">
<template #default="{ row }">
<el-input v-model="row.amount_excluding_tax" />
<el-input v-model="row.amount_excluding_tax" prop="num" disabled />
</template>
</el-table-column>
<el-table-column label="含税金额" prop="amount_including_tax">
<template #default="{ row }">
<el-input v-model="row.amount_including_tax" />
<el-input v-model="row.amount_including_tax" prop="num" disabled />
</template>
</el-table-column>
@ -183,7 +183,7 @@
</div>
<div style="margin-bottom: 30px;">付款计划</div>
<div style="margin-bottom: 30px;">
<el-table :data="formData.pay_plan">
<el-table :data="paymentList">
<el-table-column label="序号">
<template #default="{ row }">
<el-button @click="handleAdd(row)">+</el-button>
@ -193,17 +193,17 @@
<el-table-column label="期次" prop="name1">
<template #default="{ row }">
<el-select v-model="row.period" clearable placeholder="请选择期次">
<el-option v-for="(item, index) in dictData.pay_period " :key="index" :label="item.name" :value="item.id" />
<el-option v-for="(item, index) in dictData.pay_period " :key="index" :label="item.name" :value="item.value" />
</el-select>
</template>
</el-table-column>
<el-table-column label="计划付款日期" prop="pay_date">
<template #default="{ row }">
<el-date-picker v-model="row.pay_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择签订日期">
<el-date-picker v-model="row.pay_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择签订日期">
</el-date-picker>
</template></el-table-column>
<el-table-column label="金额" prop="pay_amount">
<template #default="{ row }"> <el-input v-model="row.pay_amount" /> </template></el-table-column>
<el-table-column label="金额" prop="amount">
<template #default="{ row }"> <el-input v-model="row.amount" /> </template></el-table-column>
<el-table-column label="备注" prop="remark">
<template #default="{ row }">
@ -225,7 +225,7 @@
<suppliertable @customEvent="customEvent1"></suppliertable>
</el-dialog>
<el-dialog v-model="showDialog2" title="选择产品" width="70%">
<prodctTable @customEvent="customEvent2"></prodctTable>
<prodctTable @customEvent="customEvent2" :project_id="formData.project_id"></prodctTable>
</el-dialog>
</div>
</template>
@ -235,20 +235,27 @@ import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import projectTable from '@/components/project/index.vue'
import suppliertable from '@/components/supplier/index.vue'
import prodctTable from '@/components/product/index.vue'
import prodctTable from '@/components/Materialprocurement_details/index.vue'
const list1 = reactive([])
const list2 = reactive([])
import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
import { paymentplanLists } from '@/api/paymentplan'
import { apiProcurementContractDetailLists } from '@/api/procurement_contract_detail'
import { apiProcurementContractAdd, apiProcurementContractEdit, apiProcurementContractDetail } from '@/api/procurement_contract'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
let props = defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
},
})
import { toChinesNum } from "@/utils/util";
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
@ -260,7 +267,12 @@ const project_name = ref('')
const project_code = ref('')
const supplier_name = ref('')
const supplier_code = ref('')
const supplier_contract_no = ref('')
const amount = ref('')
const amount_excluding_tax = ref('')
const amount_daxie = ref('')
const retention_money = ref('')
const materialList = reactive([])
const paymentList = reactive([])
const formDataannex = reactive([])
import feedback from '@/utils/feedback'
import configs from "@/config"
@ -287,31 +299,68 @@ const delFileFn = (index: number) => {
}
const handleAdd = (row: any) => {
// row
const index = formData.pay_plan.indexOf(row);
formData.pay_plan.splice(index + 1, 0, {});
const index = paymentList.indexOf(row);
paymentList.splice(index + 1, 0, {});
};
const handleDelete = (row: any) => {
// row
const index = formData.pay_plan.indexOf(row);
formData.pay_plan.splice(index, 1);
const index = paymentList.indexOf(row);
paymentList.splice(index, 1);
};
const handleAdd1 = (row: any) => {
// row
const index = formData.pay_plan.indexOf(row);
formData.material.splice(index + 1, 0, {});
const index = materialList.indexOf(row);
materialList.splice(index + 1, 0, {});
};
const handleDelete1 = (row: any) => {
// row
const index = formData.pay_plan.indexOf(row);
formData.material.splice(index, 1);
const index = materialList.indexOf(row);
materialList.splice(index, 1);
};
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑采购合同' : '新增采购合同'
})
//
const procurementList = (id) => {
apiProcurementContractDetailLists({ 'page_no': 1, 'page_size': 5000, 'contract_id': id }).then((res) => {
const data = res.lists.map((item: any) => ({
'id': res.lists[0].id,
'material_purchase_request_detail_id': res.lists[0].material_purchase_request_detail_id,
'material_name': res.lists[0].material_name,
'material_code': res.lists[0].material_code,
'material_unit': res.lists[0].material_unit,
'material_brand': res.lists[0].material_brand,
'material_purchase_request_code': res.lists[0].material_purchase_request_code,
'material_specs': res.lists[0].material_specs,
'num': res.lists[0].num,
'price': res.lists[0].price,
'tax_rate': props.dictData.tax_rate.find((item) => item.name == res.lists[0].tax_rate)
}))
materialList.splice(0, materialList.length, ...data);
})
}
//
const paymentplanList = (id: any) => {
paymentplanLists({ 'page_no': 1, 'page_size': 5000, 'contract_type': 1, 'contract_id': id }).then((res) => {
const data = res.lists.map((item: any) => ({
'period': res.lists[0].period,
'pay_date': res.lists[0].pay_date,
'amount': res.lists[0].amount,
'remark': res.lists[0].remark,
}))
paymentList.splice(0, paymentList.length, ...data);
})
}
//
const getlist = () => {
getAll().then((res) => {
@ -346,34 +395,17 @@ const formData = reactive({
dept_id: '',
org_id: '',
supplier_id: '',
approve_id: '',
project_id: '',
contract_no: '',
contract_type: '',
signing_date: '',
pay_type: '',
account_period: '',
amount: '',
amount_excluding_tax: '',
amount_daxie: '',
retention_money_rate: '',
retention_money: '',
remark: '',
annex: '',
material: [{
material_procurement_application_id: 2222,
num: 0,
unit_price_including_tax: 0,
tax_rate: "",
amount_excluding_tax: 0,
amount_including_tax: 0
}],
pay_plan: [{
period: '',
pay_date: '',
pay_amount: '',
remark: ''
}]
material: [],
payment_plan: []
})
const customEvent = (e: any) => {
project_name.value = e.name
@ -389,9 +421,56 @@ const customEvent1 = (e: any) => {
showDialog1.value = false;
};
const customEvent2 = (e: any) => {
materialList.splice(0, materialList.length, {
'material_purchase_request_detail_id': e.id,
'material_name': e.material_name,
'material_code': e.material_code,
'material_unit': e.material_unit,
'material_brand': e.material_brand,
'material_purchase_request_code': e.material_purchase_request_code,
'material_specs': e.material_specs,
});
showDialog2.value = false;
}
//
const materialji1 = (row: any, index: any) => {
// console.log(row)
const num = Number(row.num) || 0
const price = Number(row.price) || 0
const tax_rate = Number(row.tax_rate ? row.tax_rate.name : 0) || 0
row.amount_excluding_tax = num * price
row.amount_including_tax = num * price * (tax_rate / 100)
amount.value = num * price
amount_excluding_tax.value = num * price * (tax_rate / 100)
};
const materialji2 = (row: any, index: any, e) => {
console.log(e, row)
const num = Number(row.num) || 0
const price = Number(row.price) || 0
const tax_rate = Number(row.tax_rate.name) || 0
row.amount_excluding_tax = num * price
row.amount_including_tax = num * price * (tax_rate / 100)
amount.value = num * price
amount_excluding_tax.value = num * price * (tax_rate / 100)
};
watch(
() => amount.value,
() => {
if (amount.value && amount.value > 0) {
amount_daxie.value = toChinesNum(amount.value)
}
}
)
//
watch(
() => formData.retention_money_rate,
() => {
const money_rate = Number(formData.retention_money_rate) || 0
const total = Number(amount.value) || 0
console.log(money_rate, total)
retention_money.value = (money_rate / 100) * total
}
)
//
const formRules = reactive<any>({
@ -418,11 +497,12 @@ const setFormData = async (data: Record<any, any>) => {
formData[key] = data[key]
}
}
procurementList(data.id)
paymentplanList(data.id)
project_name.value = data.project.name
project_code.value = data.project.project_code
//@ts-ignore
formData.signing_date = timeFormat(formData.signing_date, 'yyyy-mm-dd hh:MM:ss')
}
const getDetail = async (row: Record<string, any>) => {
@ -435,6 +515,26 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (materialList.length > 0) {
formData.procurement_contract_detail = JSON.stringify(materialList.map((item) => ({
'id': item.id,
'material_purchase_request_detail_id': item.material_purchase_request_detail_id,
'num': item.num,
'price': item.price,
'tax_rate': item.tax_rate.value,
})))
}
if (paymentList.length > 0) {
formData.payment_plan = JSON.stringify(JSON.stringify(paymentList.map((item) => ({
'id': item.id,
'period': item.period,
'remark': item.remark,
'amount': item.amount,
'pay_date': item.pay_date,
}))))
}
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
@ -446,6 +546,7 @@ const handleSubmit = async () => {
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
getlist()

View File

@ -35,43 +35,23 @@
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="序号" type="index" width="55" show-overflow-tooltip />
<el-table-column label="处理流程" prop="supplier_id" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="合同名称" prop="contract_name" show-overflow-tooltip />
<el-table-column label="合同编号" prop="contract_no" show-overflow-tooltip />
<el-table-column label="供应商名称" prop="supplier_name" show-overflow-tooltip />
<el-table-column label="供应商合同号" prop="supplier_contract_no" show-overflow-tooltip />
<el-table-column label="合同类型" prop="contract_type">
<template #default="{ row }">
<dict-value :options="dictData.procurement_contract_type" :value="row.contract_type" />
</template>
</el-table-column>
<el-table-column label="签订日期" prop="signing_date">
<template #default="{ row }">
<span>{{ row.signing_date ? timeFormat(row.signing_date, 'yyyy-mm-dd hh:MM:ss') : '' }}</span>
</template>
</el-table-column>
<el-table-column label="付款方式" prop="pay_type">
<template #default="{ row }">
<dict-value :options="dictData.pay_type" :value="row.pay_type" />
</template>
</el-table-column>
<el-table-column label="账期" prop="account_period">
<template #default="{ row }">
<dict-value :options="dictData.account_period" :value="row.account_period" />
</template>
</el-table-column>
<el-table-column label="合同类型" prop="contract_type" show-overflow-tooltip />
<el-table-column label="签订日期" prop="signing_date" show-overflow-tooltip />
<el-table-column label="合同金额" prop="amount" show-overflow-tooltip />
<el-table-column label="已付款金额" prop="" show-overflow-tooltip />
<el-table-column label="实际合同金额" prop="" show-overflow-tooltip />
<el-table-column label="已开票金额" prop="" show-overflow-tooltip />
<el-table-column label="未付款金额" prop="" show-overflow-tooltip />
<el-table-column label="未开票金额" prop="" show-overflow-tooltip />
<el-table-column label="退款金额" prop="" show-overflow-tooltip />
<el-table-column label="已入库数量" prop="" show-overflow-tooltip />
<el-table-column label="未入库数量" prop="" show-overflow-tooltip />
<el-table-column label="已付款金额" prop="has_pay_amount" show-overflow-tooltip />
<el-table-column label="已开票金额" prop="has_invoice_amount" show-overflow-tooltip />
<el-table-column label="未付款金额" prop="not_pay_amount" show-overflow-tooltip />
<el-table-column label="未开票金额" prop="not_invoice_amount" show-overflow-tooltip />
<el-table-column label="退款金额" prop="refund_amount" show-overflow-tooltip />
<el-table-column label="已入库数量" prop="has_storage_num" show-overflow-tooltip />
<el-table-column label="未入库数量" prop="not_storage_num" show-overflow-tooltip />
<el-table-column label="数量" prop="retention_money" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
@ -130,7 +110,7 @@ const handleSelectionChange = (val: any[]) => {
}
//
const { dictData } = useDictData('procurement_contract_type,pay_type,account_period,pay_period')
const { dictData } = useDictData('procurement_contract_type,pay_type,tax_rate,account_period,pay_period')
//
const { pager, getLists, resetParams, resetPage } = usePaging({

View File

@ -44,14 +44,14 @@
<dict-value :options="dictData.tax_rate" :value="row.tax_rate" />
</template>
</el-table-column>
<el-table-column label="材料类别" prop="unit_price_including_tax" show-overflow-tooltip />
<el-table-column label="材料中类" prop="unit_price_including_tax" show-overflow-tooltip />
<el-table-column label="材料小类" prop="unit_price_including_tax" show-overflow-tooltip />
<el-table-column label="材料名称" prop="unit_price_including_tax" show-overflow-tooltip />
<el-table-column label="材料编码" prop="unit_price_including_tax" show-overflow-tooltip />
<el-table-column label="规格型号" prop="unit_price_including_tax" show-overflow-tooltip />
<el-table-column label="品牌" prop="unit_price_including_tax" show-overflow-tooltip />
<el-table-column label="参数说明" prop="unit_price_including_tax" show-overflow-tooltip />
<el-table-column label="材料类别" prop="material_first_level" show-overflow-tooltip />
<el-table-column label="材料中类" prop="material_second_level" show-overflow-tooltip />
<el-table-column label="材料小类" prop="material_three_level" show-overflow-tooltip />
<el-table-column label="材料名称" prop="material_name" show-overflow-tooltip />
<el-table-column label="材料编码" prop="material_code" show-overflow-tooltip />
<el-table-column label="规格型号" prop="material_specs" show-overflow-tooltip />
<el-table-column label="品牌" prop="material_brand" show-overflow-tooltip />
<el-table-column label="参数说明" prop="material_parameter_description" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['procurement_contract_detail/edit']" type="primary" link @click="handleEdit(row)">

View File

@ -285,7 +285,41 @@
<el-pagination v-model:current-page="pager11.page_no" v-model:page-size="pager11.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total10" @size-change="handleSizeChange11" @current-change="handleCurrentChange11" />
</div>
</el-tab-pane>
<el-tab-pane label="合同" name="demo-4">Task</el-tab-pane>
<el-tab-pane label="合同" name="demo-4">
<div>
<el-table :data="tableData19" stripe style="width: 100%">
<el-table-column label="合同编号" prop='contract_name' width="180" />
<el-table-column label="合同名称" prop='contract_code' width="180" />
<el-table-column label="合同类型" prop='contract_type_text' />
<el-table-column label="负责人" prop='business_director_name' />
<el-table-column label="签约日期" prop='contract_date' />
<el-table-column label="合同金额" prop='amount' />
<el-table-column label="洽商金额" prop='negotiation_amount' />
<el-table-column label="实际合同金额" prop='reality_contract_amount' />
<el-table-column label="已回款" prop='returned_amount' />
<el-table-column label="未回款" prop='not_returned_amount' />
<el-table-column label="已开票" prop='invoicing_amount' />
<el-table-column label="未开票" prop='not_invoicing_amount' />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager19.page_no" v-model:page-size="pager19.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total18" @size-change="handleSizeChange19" @current-change="handleCurrentChange19" />
</div>
<div>
<el-table :data="tableData20" stripe style="width: 100%">
<el-table-column label="洽商编号" prop='negotiation_no' width="180" />
<el-table-column label="洽商单名称" prop='negotiation_name' width="180" />
<el-table-column label="合同编号" prop='contract_code' />
<el-table-column label="洽商类别" prop='negotiation_type' />
<el-table-column label="签约日期" prop='contract_date' />
<el-table-column label="业务负责人" prop='business_director' />
<el-table-column label="洽商金额" prop='negotiation_amount' />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager20.page_no" v-model:page-size="pager20.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total19" @size-change="handleSizeChange20" @current-change="handleCurrentChange20" />
</div>
</el-tab-pane>
<el-tab-pane label="预算" name="demo-5">User</el-tab-pane>
<el-tab-pane label="计划" name="demo-6">Config</el-tab-pane>
<el-tab-pane label="材料" name="demo-7">Role</el-tab-pane>
@ -499,6 +533,9 @@ import { attendanceRecordLists } from '@/api/project_attendance_record'
import { attendancedetailLists } from '@/api/project_attendance_detail'
import { projectsalaryDetailLists } from '@/api/project_salary_detail'
import { apiCustomServiceLists } from '@/api/custom_service'
import { apiContractLists } from '@/api/contract'
import { apiContractNegotiationLists } from '@/api/contract_negotiation'
import { paymentplanLists } from '@/api/paymentplan'
const active = ref('first-1')
const activeName = ref('demo-1')
const handleClick = (tab: TabsPaneContext, event: Event) => {
@ -612,6 +649,53 @@ const pager18 = reactive({
page_no: 1,
project_id: ""
})
const pager19 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager20 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager21 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager22 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager23 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager24 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager25 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const total = ref(0)
const total1 = ref(0)
const total2 = ref(0)
@ -631,6 +715,19 @@ const total15 = ref(0)
const total16 = ref(0)
const total17 = ref(0)
const total18 = ref(0)
const total19 = ref(0)
const total20 = ref(0)
const total21 = ref(0)
const total22 = ref(0)
const total23 = ref(0)
const total24 = ref(0)
const total25 = ref(0)
const total26 = ref(0)
const total27 = ref(0)
const total28 = ref(0)
const tableData1 = ref([])
const tableData2 = ref([])
const tableData3 = ref([])
@ -649,6 +746,19 @@ const tableData15 = ref([])
const tableData16 = ref([])
const tableData17 = ref([])
const tableData18 = ref([])
const tableData19 = ref([])
const tableData20 = ref([])
const tableData21 = ref([])
const tableData22 = ref([])
const tableData23 = ref([])
const tableData24 = ref([])
const tableData25 = ref([])
const tableData26 = ref([])
//
const formData = reactive({
@ -747,23 +857,67 @@ const handleSizeChange16 = (val: number) => {
attendancedetail()
}
const handleSizeChange17 = (val: number) => {
pager16.page_size = val
attendancedetail()
}
const handleSizeChange18 = (val: number) => {
pager17.page_size = val
pager18.page_size = val
salarypaymentLists()
customServiceLists()
}
const handleSizeChange17 = (val: number) => {
const handleSizeChange19 = (val: number) => {
pager18.page_size = val
pager19.page_size = val
contractLists()
}
const handleSizeChange20 = (val: number) => {
pager20.page_size = val
contcractNegotiationLists()
}
const handleSizeChange21 = (val: number) => {
pager21.page_size = val
customServiceLists()
}
const handleSizeChange22 = (val: number) => {
pager22.page_size = val
customServiceLists()
}
const handleSizeChange23 = (val: number) => {
pager23.page_size = val
customServiceLists()
}
const handleSizeChange24 = (val: number) => {
pager24.page_size = val
customServiceLists()
}
const handleSizeChange25 = (val: number) => {
pager25.page_size = val
customServiceLists()
}
//
const handleCurrentChange1 = (val: number) => {
@ -869,6 +1023,65 @@ const handleCurrentChange18 = (val: number) => {
customServiceLists()
}
const handleCurrentChange19 = (val: number) => {
pager19.page_no = val
console.log(`current page: ${val}`)
contractLists()
}
const handleCurrentChange20 = (val: number) => {
pager20.page_no = val
console.log(`current page: ${val}`)
contcractNegotiationLists()
}
const handleCurrentChange21 = (val: number) => {
pager21.page_no = val
console.log(`current page: ${val}`)
customServiceLists()
}
const handleCurrentChange22 = (val: number) => {
pager22.page_no = val
console.log(`current page: ${val}`)
customServiceLists()
}
const handleCurrentChange23 = (val: number) => {
pager23.page_no = val
console.log(`current page: ${val}`)
customServiceLists()
}
const handleCurrentChange24 = (val: number) => {
pager24.page_no = val
console.log(`current page: ${val}`)
customServiceLists()
}
const handleCurrentChange25 = (val: number) => {
pager25.page_no = val
console.log(`current page: ${val}`)
customServiceLists()
}
//
const followUpLists = () => {
apiProjectFollowUpLists(pager5).then((res) => {
@ -1008,12 +1221,35 @@ const salarypaymentLists = () => {
//
const customServiceLists = () => {
apiCustomServiceLists(pager3).then((res) => {
apiCustomServiceLists(pager18).then((res) => {
tableData18.value = res.lists
total17.value = res.count
})
}
//
const contractLists = () => {
apiContractLists(pager19).then((res) => {
tableData19.value = res.lists
total18.value = res.count
})
}
//
const contcractNegotiationLists = () => {
apiContractNegotiationLists(pager20).then((res) => {
tableData20.value = res.lists
total19.value = res.count
})
}
//
const paymentplanList = (id: any) => {
paymentplanLists(pager21).then((res) => {
tableData21.value = res.lists
total20.value = res.count
})
}
//
const setFormData = async (data: Record<any, any>) => {
@ -1046,6 +1282,8 @@ const setFormData = async (data: Record<any, any>) => {
pager16.project_id = data.id
pager17.project_id = data.id
pager18.project_id = data.id
pager19.project_id = data.id
pager20.project_id = data.id
Object.assign(formData, data)
if (data.annex && data.annex.length > 0) {
@ -1075,6 +1313,8 @@ const setFormData = async (data: Record<any, any>) => {
attendancedetail()
salarypaymentLists()
customServiceLists()
contractLists()
contcractNegotiationLists()
}
const getDetail = async (row: Record<string, any>) => {