项目列表新增操作

This commit is contained in:
zmj 2024-01-28 18:00:25 +08:00
parent 930cb649dc
commit 3a1815b0fb
17 changed files with 415 additions and 1773 deletions

View File

@ -24,8 +24,7 @@
<el-input v-model="project_name" readonly clearable placeholder="请选择项目" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="项目编码" prop="project_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-form-item label="项目编码">
<el-input v-model="project_code" clearable disabled placeholder="系统自动填写" />
</el-form-item></el-col>
<el-col :span="8">
@ -369,10 +368,10 @@ const customEvent1 = (e: any) => {
};
const customEvent2 = (e: any) => {
project_id.value = e.id;
formData.project_id = e.id
formData.project_id = e.id;
project_name.value = e.name;
project_code.value = e.project_code
bidding_code.value = ''
project_code.value = e.project_code;
bidding_code.value = '';
showDialog2.value = false;
};

View File

@ -1,187 +0,0 @@
<template>
<el-tabs v-model="active" class="demo-tabs">
<el-tab-pane label="项目人员" name="first-1">
<myTable :baseData="baseData" v-if="active == 'first-1'"></myTable>
</el-tab-pane>
<el-tab-pane label="劳动合同" name="first-2">
<!-- <myTable :baseData="baseData1" v-if="active == 'first-2'"></myTable> -->
<el-table :data="tableData13" stripe style="width: 100%">
<el-table-column label="姓名" prop='project_name' width="180" />
<el-table-column label="身份证号" prop='person_idcard' width="180" />
<el-table-column label="合同状态" prop='contract_status_text' />
<el-table-column label="合同类别" prop='contract_type_text' />
<el-table-column label="合同名称" prop='contract_title_text' />
<el-table-column label="合同签定日期" prop='signing_date' />
<el-table-column label="起始时间" prop='start_date' />
<el-table-column label="终止时间" prop='end_date' />
<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>
</el-tab-pane>
<el-tab-pane label="保险记录" name="first-3">
<myTable :baseData="baseData1" v-if="active == 'first-3'"></myTable>
</el-tab-pane>
<el-tab-pane label="项目考勤" name="first-4">
<myTable :baseData="baseData2" v-if="active == 'first-4'"></myTable>
</el-tab-pane>
<el-tab-pane label="考勤明细" name="first-5">
<myTable :baseData="baseData3" v-if="active == 'first-5'"></myTable>
</el-tab-pane>
<el-tab-pane label="工资付款" name="first-6">
<myTable :baseData="baseData4" v-if="active == 'first-6'"></myTable>
</el-tab-pane>
</el-tabs>
</template>
<script setup>
import { ref, reactive, defineProps } from "vue"
import myTable from "./myTable.vue"
import { projectpersonnelLists } from '@/api/project_personnel'
import { projectlaborcontractLists } from '@/api/project_labor_contract'
import { insurancemanagementLists } from '@/api/project_insurance_management'
import { attendanceRecordLists } from '@/api/project_attendance_record'
import { attendancedetailLists } from '@/api/project_attendance_detail'
import { projectsalaryDetailLists } from '@/api/project_salary_detail'
const props = defineProps({
project_id: Number
})
const baseData = reactive({
fetchFun: projectpersonnelLists,
tit: "",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '姓名', prop: 'name' },
{ label: '身份证号', prop: 'idcard' },
{ label: '手机号', prop: 'mobile' },
{ label: '工种', prop: 'work_type_text' },
{ label: '人工单价', prop: 'unit_price' },
{ label: '每日生活费', prop: 'price' },
{ label: '期初收入', prop: 'opening_income' },
{ label: '日结收入', prop: 'daily_income' },
{ label: '完工量收入', prop: 'work_income' },
{ label: '总收入', prop: 'total_income' },
{ label: '总支出', prop: 'pay_out' },
{ label: '余额', prop: 'balance' },
]
})
const baseData1 = reactive({
fetchFun: insurancemanagementLists,
tit: "",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '姓名', prop: 'project_name' },
{ label: '身份证号', prop: 'person_idcard' },
{ label: '投保日期', prop: 'insurance_date' },
{ label: '到期日期', prop: 'due_date' },
{ label: '保险种类', prop: 'type_text' },
{ label: '保单号', prop: 'insurance_no' },
{ label: '投保金额(万元)', prop: 'insured_amount' },
{ label: '保险公司', prop: 'insurance_company' },
]
})
const baseData2 = reactive({
fetchFun: attendanceRecordLists,
tit: "",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '日记工单号', prop: 'attendance_code' },
{ label: '日期', prop: 'attendance_date' },
{ label: '出勤人数', prop: 'competitor_contacts_phone' },
{ label: '记工数量', prop: 'work_record_num_total' },
{ label: '日工资合计', prop: 'daily_salary_total' },
{ label: '日生活费合计', prop: 'daily_living_total' },
{ label: '日补贴合计', prop: 'daily_subsidy_total' },
{ label: '日其它合计', prop: 'daily_other_total' },
{ label: '日收入合计', prop: 'daily_income_total' },
{ label: '备注', prop: 'remark' },
]
})
const baseData3 = reactive({
fetchFun: attendancedetailLists,
tit: "",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '日记工单号', prop: 'attendance_code' },
{ label: '日期', prop: 'attendance_date' },
{ label: '姓名', prop: 'person_name' },
{ label: '身份证号', prop: 'person_idcard' },
{ label: '工种', prop: 'work_type_text' },
{ label: '上班时间', prop: 'work_start_time' },
{ label: '下班时间', prop: 'work_end_time' },
{ label: '记工数量', prop: 'work_record_num' },
{ label: '日工资', prop: 'daily_salary' },
{ label: '日生活费', prop: 'daily_living' },
{ label: '日补贴', prop: 'daily_subsidy' },
{ label: '日其它', prop: 'daily_other' },
{ label: '日收入', prop: 'daily_income' },
{ label: '备注', prop: 'remark' },
]
})
const baseData4 = reactive({
fetchFun: projectsalaryDetailLists,
tit: "",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '工资付款单号', prop: 'payment_code' },
{ label: '日期', prop: 'apply_date' },
{ label: '姓名', prop: 'person_name' },
{ label: '身份证号', prop: 'person_idcard' },
{ label: '工种', prop: 'person_work_type_text' },
{ label: '总收入', prop: 'total_income' },
{ label: '总支出', prop: 'total_pay_out' },
{ label: '未发放', prop: 'balance' },
{ label: '本次付款金额', prop: 'apply_amount' },
{ label: '备注', prop: 'remark' },
]
})
const pager13 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
})
const tableData13 = ref("")
const laborcontractLists = () => {
projectlaborcontractLists(pager13).then((res) => {
tableData13.value = res.lists
})
}
const active = ref('first-1')
laborcontractLists()
</script>

View File

@ -9,7 +9,7 @@
</el-tab-pane>
<el-tab-pane label="商机" name="demo-2">
<Business v-if="activeName == 'demo-2'" :formData="formData" :project_id="project_id"></Business>
<Business v-if="activeName == 'demo-2'" :project_id="project_id"></Business>
</el-tab-pane>
<el-tab-pane label="投标" name="demo-3">
@ -59,8 +59,11 @@
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCustomDetail } from '@/api/custom'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
import type { TabsPaneContext } from 'element-plus'
import { apiCustomServiceLists } from '@/api/custom_service'
import { subpackagdetailLists } from '@/api/project_subpackage_budget_detail'
import Overview from "./components/Overview.vue"
import Business from "./components/Business.vue"
import tender from "./components/tender.vue"
@ -74,6 +77,8 @@ import payment from "./components/payment.vue"
import documentation from "./components/documentation.vue"
const activeName = ref('demo-1')
const handleClick = (tab: TabsPaneContext, event: Event) => {
// console.log(tab, event)
@ -89,6 +94,114 @@ const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const pager12 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager13 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager14 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager15 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager16 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager17 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager18 = 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 pager26 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager27 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager28 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager29 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager30 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager31 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager32 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
//
const formData = reactive({

View File

@ -109,7 +109,7 @@ import type { FormInstance } from 'element-plus'
import projectTable from "@/components/project/index.vue"
import Popup from '@/components/popup/index.vue'
import { apiProjectFollowUpAdd, apiProjectFollowUpEdit, apiProjectFollowUpDetail } from '@/api/project_follow_up'
import type { PropType } from 'vue'
import { useDictData } from '@/hooks/useDictOptions'
//
import annexUpload from "@/components/annexUpload/index.vue"
@ -121,12 +121,9 @@ const handleAvatarSuccess_four = (response: any) => {
const delFileFn = (index: number) => { formData.annex.splice(index, 1) }
const props = defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
},
project: Object
})
const { dictData } = useDictData('project_assurance,follow_status,follow_type,follow_stage')
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
@ -138,8 +135,6 @@ const formDataannex = reactive([])
// dialog
const showDialog = ref(false)
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑项目跟进记录' : '新增项目跟进记录'

View File

@ -1,139 +1,11 @@
<template>
<div class="tit">项目跟进</div>
<div>
<el-table :data="tableData1" stripe style="width: 100%">
<el-table-column label="主题" prop='theme' width="180" />
<el-table-column label="日期" prop='follow_date' width="180" />
<el-table-column label="方案内容" prop='solution_content' />
<el-table-column label="类型" prop='follow_type_text' />
<el-table-column label="执行人" prop='executor' />
<el-table-column label="阶段" prop='follow_stage_text' />
<el-table-column label="状态" prop='follow_status_text' />
<el-table-column label="项目把握度" prop='project_assurance_text' />
</el-table>
</div>
<div style="margin: 20px 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"
@current-change="handleCurrentChange1" />
</div>
<div class="tit">客户需求</div>
<div>
<el-table :data="tableData2" stripe style="width: 100%">
<el-table-column label="需求主题" prop='theme' width="180" />
<el-table-column label="重要程度" prop='importance_text' width="180" />
<el-table-column label="记录时间" prop='recording_time' />
<el-table-column label="需求内容" prop='demand_content' />
<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: 20px 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>
<div class="tit">解决方案</div>
<div>
<el-table :data="tableData3" 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 style="margin: 20px 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>
<div class="tit">项目概算</div>
<div>
<el-table :data="tableData4" 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: 20px 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>
<div class="tit">竞争对手</div>
<div>
<el-table :data="tableData5" 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: 20px 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>
<myTable :baseData="baseData" :project="project" editPath="project_follow_up"></myTable>
<myTable :baseData="baseData1" :project="project" editPath="customer_demand"></myTable>
<myTable :baseData="baseData2" :project="project" editPath="customer_demand_solution"></myTable>
<myTable :baseData="baseData3" :project="project" editPath="project_estimate"></myTable>
<myTable :baseData="baseData4" :project="project" editPath="competitor"></myTable>
</template>
<script setup>
import { ref, reactive, defineProps } from "vue"
@ -142,125 +14,82 @@ import { apiCustomerDemandLists } from '@/api/customer_demand'
import { apiCustomerDemandSolutionLists } from '@/api/customer_demand_solution'
import { apiProjectEstimateLists } from '@/api/project_estimate'
import { apiCompetitorLists } from '@/api/competitor'
import myTable from "./myTable.vue"
const props = defineProps({
project_id: Number
project: Object
})
const tableData1 = ref([])
const tableData2 = ref([])
const tableData3 = ref([])
const tableData4 = ref([])
const tableData5 = ref([])
const total = ref(0)
const total1 = ref(0)
const total2 = ref(0)
const total3 = ref(0)
const total4 = ref(0)
const pager1 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
const baseData = reactive({
fetchFun: apiProjectFollowUpLists,
tit: "项目跟进",
queryParams: { project_id: props.project.id },
columnList: [
{ label: '项目名称', prop: 'project_name' },
{ label: '客户名称', prop: 'custom_name' },
{ label: '执行人', prop: 'executor' },
{ label: '类型', prop: 'follow_type_text' },
{ label: '主题', prop: 'theme' },
{ label: '项目把握度', prop: 'project_assurance_text' },
{ label: '状态', prop: 'follow_status_text' },
{ label: '阶段', prop: 'follow_stage_text' },
{ label: '下次回访日期', prop: 'next_follow_up_date' },
]
})
const pager2 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
const baseData1 = reactive({
fetchFun: apiCustomerDemandLists,
tit: "客户需求",
queryParams: { project_id: props.project.id },
columnList: [
{ label: '需求主题', prop: 'project_name' },
{ label: '重要程度', prop: 'custom_name' },
{ label: '记录时间', prop: 'executor' },
{ label: '需求内容', prop: 'theme' },
]
})
const pager3 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
const baseData2 = reactive({
fetchFun: apiCustomerDemandSolutionLists,
tit: "解决方案",
queryParams: { project_id: props.project.id },
columnList: [
{ label: '解决方案主题', prop: 'project_name' },
{ label: '提交时间', prop: 'custom_name' },
{ label: '方案内容', prop: 'executor' },
{ label: '客户反馈', prop: 'theme' },
]
})
const pager4 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
const baseData3 = reactive({
fetchFun: apiProjectEstimateLists,
tit: "项目概算",
queryParams: { project_id: props.project.id },
columnList: [
{ label: '概算来源', prop: 'estimate_source_text' },
{ label: '制单人', prop: 'create_user' },
{ label: '报价日期', prop: 'quotation_date' },
{ label: '技术人员', prop: 'technician_name' },
{ label: '概算金额(万元)', prop: 'estimate_amount' },
{ label: '要求', prop: 'ask' },
]
})
const pager5 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
const baseData4 = reactive({
fetchFun: apiCompetitorLists,
tit: "竞争对手",
queryParams: { project_id: props.project.id },
columnList: [
{ label: '竞争对手名称', prop: 'competitor_name' },
{ label: '竞争对手联系人', prop: 'competitor_contacts' },
{ label: '联系人电话', prop: 'competitor_contacts_phone' },
{ label: '竞争能力', prop: 'competitive_power' },
{ label: '竞争对手优势', prop: 'competitor_advantages' },
{ label: '竞争对手劣势', prop: 'competitor_disadvantages' },
{ label: '备注', prop: 'remark' },
]
})
// //
const followUpLists = () => {
apiProjectFollowUpLists(pager5).then((res) => {
tableData1.value = res.lists
total.value = res.count
})
}
//
const demandList = () => {
apiCustomerDemandLists(pager5).then((res) => {
tableData2.value = res.lists
total1.value = res.count
})
}
// const handleSizeChange1 = (val: number) => {
// // pager1.page_size = val
// // followUpLists()
// }
//
const solutionLists = () => {
apiCustomerDemandSolutionLists(pager5).then((res) => {
tableData3.value = res.lists
total2.value = res.count
})
}
const estimateLists = () => {
apiProjectEstimateLists(pager4).then((res) => {
tableData4.value = res.lists
total3.value = res.count
})
}
const competitorLists = () => {
apiCompetitorLists(pager5).then((res) => {
tableData5.value = res.lists
total4.value = res.count
})
}
// const handleSizeChange2 = (val: number) => {
// pager2.page_size = val
// demandList()
// }
// const handleSizeChange3 = (val: number) => {
// pager3.page_size = val
// solutionLists()
// }
// const handleSizeChange4 = (val: number) => {
// pager4.page_size = val
// estimateLists()
// }
// const handleSizeChange5 = (val: number) => {
// pager5.page_size = val
// competitorLists()
// }
followUpLists()
demandList()
competitorLists()
solutionLists()
estimateLists()
</script>
<style lang="scss">
.tit {

View File

@ -13,9 +13,11 @@ import { apiinvoiceapplyLists } from '@/api/InvoicingRequests'
import { apireturnedLists } from '@/api/remittance'
import { apireturnedrecordLists } from '@/api/recordsPayment'
import { apirefundapplyLists } from '@/api/refund'
import EditPopup from '@/views/project_follow_up/edit.vue'
const props = defineProps({
project_id: Number
project_id: Number,
components: EditPopup
})
const baseData = reactive({

View File

@ -0,0 +1,3 @@
<template>
项目统计页面
</template>

View File

@ -1,36 +0,0 @@
<template>
<myTable :baseData="baseData"></myTable>
</template>
<script setup>
import { ref, reactive, defineProps } from "vue"
import myTable from "./myTable.vue"
import { subpackagdetailLists } from '@/api/project_subpackage_budget_detail'
const props = defineProps({
project_id: Number
})
const baseData = reactive({
fetchFun: subpackagdetailLists,
tit: "竞争对手",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '工作类型', prop: 'work_type' },
{ label: '工作内容', prop: 'work_content' },
{ label: '项目特征', prop: 'project_features' },
{ label: '单位', prop: 'unit' },
{ label: '预算工作量', prop: 'num' },
{ label: '单价', prop: 'price' },
{ label: '金额', prop: 'amount' },
{ label: '已分包量', prop: 'has_subcontract_num' },
{ label: '剩余工作量', prop: 'residue_num' },
]
})
</script>

View File

@ -16,7 +16,6 @@ import { subpackagdetailLists } from '@/api/project_subpackage_budget_detail.ts'
import { apiProjectEquipmentBudgetDetailLists } from '@/api/project_equipment_budget_detail.ts'
import { apiProjectLaborBudgetDetailLists } from '@/api/project_labor_budget_detail.ts'
const props = defineProps({
project_id: Number
})
@ -97,9 +96,6 @@ const baseData3 = reactive({
]
})
const baseData4 = reactive({
fetchFun: apiProjectLaborBudgetDetailLists,
tit: "人工预算",

View File

@ -1,99 +1,52 @@
<template>
<div class='tit'>主合同</div>
<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 class='tit' style="margin: 20px 0;">合同洽商</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>
<myTable :baseData="baseData"></myTable>
<myTable :baseData="baseData1"></myTable>
</template>
<script setup>
import { ref, reactive, defineProps } from "vue"
import { apiContractLists } from '@/api/contract'
import { apiContractNegotiationLists } from '@/api/contract_negotiation'
import myTable from "./myTable.vue"
const props = defineProps({
project_id: Number
})
const tableData19 = ref([])
const tableData20 = ref([])
const total18 = ref(0)
const total19 = ref(0)
const total20 = ref(0)
const pager19 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
const baseData = reactive({
fetchFun: apiContractLists,
tit: "主合同",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '合同编号', prop: 'contract_name' },
{ label: '合同名称', prop: 'contract_code' },
{ label: '合同类型', prop: 'contract_type_text' },
{ label: '负责人', prop: 'business_director_name' },
{ label: '签约日期', prop: 'contract_date' },
{ label: '合同金额', prop: 'amount' },
{ label: '洽商金额', prop: 'negotiation_amount' },
{ label: '实际合同金额', prop: 'reality_contract_amount' },
{ label: '已回款', prop: 'returned_amount' },
{ label: '未回款', prop: 'not_returned_amount' },
{ label: '已开票', prop: 'invoicing_amount' },
{ label: '未开票', prop: 'not_invoicing_amount' },
]
})
const pager20 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
const baseData1 = reactive({
fetchFun: apiContractNegotiationLists,
tit: "合同洽商",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '洽商编号', prop: 'negotiation_no' },
{ label: '洽商单名称', prop: 'negotiation_name' },
{ label: '合同编号', prop: 'contract_code' },
{ label: '洽商类别', prop: 'negotiation_type' },
{ label: '签约日期', prop: 'contract_date' },
{ label: '业务负责人', prop: 'business_director' },
{ label: '洽商金额', prop: 'negotiation_amount' },
]
})
//
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
})
}
contractLists()
contcractNegotiationLists()
</script>
<style >
.tit {
font-size: 1.2em;
margin-bottom: 10px;
}
</style>
</script>

View File

@ -1,102 +0,0 @@
<template>
<myTable :baseData="baseData"></myTable>
<myTable :baseData="baseData2"></myTable>
<myTable :baseData="baseData3"></myTable>
<myTable :baseData="baseData4"></myTable>
<myTable :baseData="baseData5"></myTable>
</template>
<script setup>
import { ref, reactive, defineProps } from "vue"
import myTable from "./myTable.vue"
import { apiProjectTripApplyLists } from "@/api/project_trip_apply.ts"
import { apiProjectLoanApplyLists } from '@/api/project_loan_apply'
import { apiProjectCostAdjustmentLists } from '@/api/project_cost_adjustment'
import { apiProjectTravelReimbursementLists } from '@/api/project_travel_reimbursement'
import { apiProjectExpenseReimbursementLists } from '@/api/project_expense_reimbursement'
const props = defineProps({
project_id: Number
})
const baseData = reactive({
fetchFun: apiProjectTripApplyLists,
tit: "出差申请",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '申请单号', prop: 'trip_apply_code' },
{ label: '出差起始地', prop: 'origin_address' },
{ label: '出差目的地', prop: 'target_address' },
{ label: '交通工具', prop: 'traffic_text' },
{ label: '出差时间', prop: 'start_date' },
{ label: '结束时间', prop: 'end_date' },
{ label: '出差事由', prop: 'reason' },
{ label: '历时天数', prop: 'days' },
{ label: '备注', prop: 'remark' },
]
})
const baseData2 = reactive({
fetchFun: apiProjectLoanApplyLists,
tit: "借款申请",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '借款单号', prop: 'loan_apply_code' },
{ label: '借款人', prop: 'apply_user' },
{ label: '借款申请日期', prop: 'loan_date' },
{ label: '借款金额', prop: 'loan_amount' },
{ label: '收款人姓名', prop: 'payee_name' },
{ label: '收款银行', prop: 'payee_bank' },
{ label: '收款账号', prop: 'payee_account' },
{ label: '备注', prop: 'remark' },
]
})
const baseData3 = reactive({
fetchFun: apiProjectCostAdjustmentLists,
tit: "成本调整",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '项目名称', prop: 'project_name' },
{ label: '项目编码', prop: 'project_code' },
{ label: '调整日期', prop: 'adjust_date' },
{ label: '调整金额', prop: 'adjust_amount' },
{ label: '备注', prop: 'remark' },
]
})
const baseData4 = reactive({
fetchFun: apiProjectTravelReimbursementLists,
tit: "差旅报销",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '出差申请单编号', prop: 'trip_reimbursement_code' },
{ label: '报销类型', prop: 'reimbursement_type' },
{ label: '借款单编号', prop: 'loan_apply_code' },
{ label: '借款金额', prop: 'loan_amount' },
{ label: '冲抵借款金额', prop: 'offset_loan_amount' },
{ label: '付款金额', prop: 'pay_amount' },
{ label: '报销人', prop: 'apply_user' },
{ label: '报销日期', prop: 'apply_date' },
{ label: '备注', prop: 'remark' },
]
})
const baseData5 = reactive({
fetchFun: apiProjectExpenseReimbursementLists,
tit: "费用报销",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '费用报销单号', prop: 'expense_reimbursement_code' },
{ label: '报销人', prop: 'apply_user' },
{ label: '报销日期', prop: 'apply_date' },
{ label: '报销类型', prop: 'reimbursement_type' },
{ label: '借款单编号', prop: 'loan_apply_code' },
{ label: '借款金额', prop: 'loan_amount' },
{ label: '报销金额', prop: 'total_amount' },
{ label: '付款金额', prop: 'pay_amount' },
{ label: '本次冲抵借款金额', prop: 'offset_loan_amount' },
{ label: '备注', prop: 'remark' },
]
})
</script>

View File

@ -5,33 +5,7 @@
<myTable :baseData="baseData" v-if="active == 'first-1'"></myTable>
</el-tab-pane>
<el-tab-pane label="劳动合同" name="first-2">
<!-- <myTable :baseData="baseData1" v-if="active == 'first-2'"></myTable> -->
<el-table :data="tableData13" stripe style="width: 100%">
<el-table-column label="姓名" prop='project_name' width="180" />
<el-table-column label="身份证号" prop='person_idcard' width="180" />
<el-table-column label="合同状态" prop='contract_status_text' />
<el-table-column label="合同类别" prop='contract_type_text' />
<el-table-column label="合同名称" prop='contract_title_text' />
<el-table-column label="合同签定日期" prop='signing_date' />
<el-table-column label="起始时间" prop='start_date' />
<el-table-column label="终止时间" prop='end_date' />
<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>
<myTable :baseData="baseData5" v-if="active == 'first-2'"></myTable>
</el-tab-pane>
<el-tab-pane label="保险记录" name="first-3">
<myTable :baseData="baseData1" v-if="active == 'first-3'"></myTable>
@ -40,24 +14,14 @@
<myTable :baseData="baseData2" v-if="active == 'first-4'"></myTable>
</el-tab-pane>
<el-tab-pane label="考勤明细" name="first-5">
<myTable :baseData="baseData3" v-if="active == 'first-5'"></myTable>
</el-tab-pane>
<el-tab-pane label="工资付款" name="first-6">
<myTable :baseData="baseData4" v-if="active == 'first-6'"></myTable>
</el-tab-pane>
</el-tabs>
</template>
<script setup>
import { ref, reactive, defineProps } from "vue"
@ -69,7 +33,7 @@ import { attendanceRecordLists } from '@/api/project_attendance_record'
import { attendancedetailLists } from '@/api/project_attendance_detail'
import { projectsalaryDetailLists } from '@/api/project_salary_detail'
const active = ref('first-1')
const props = defineProps({
project_id: Number
})
@ -93,6 +57,7 @@ const baseData = reactive({
{ label: '余额', prop: 'balance' },
]
})
const baseData1 = reactive({
fetchFun: insurancemanagementLists,
tit: "",
@ -110,7 +75,6 @@ const baseData1 = reactive({
]
})
const baseData2 = reactive({
fetchFun: attendanceRecordLists,
tit: "",
@ -129,6 +93,7 @@ const baseData2 = reactive({
]
})
const baseData3 = reactive({
fetchFun: attendancedetailLists,
tit: "",
@ -151,6 +116,7 @@ const baseData3 = reactive({
]
})
const baseData4 = reactive({
fetchFun: projectsalaryDetailLists,
tit: "",
@ -169,19 +135,21 @@ const baseData4 = reactive({
]
})
const pager13 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
const baseData5 = reactive({
fetchFun: projectlaborcontractLists,
tit: "",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '项目名称', prop: 'project_name' },
{ label: '身份证号', prop: 'person_idcard' },
{ label: '合同状态', prop: 'contract_status_text' },
{ label: '合同类别', prop: 'contract_type_text' },
{ label: '合同名称', prop: 'contract_title_text' },
{ label: '合同签定日期', prop: 'signing_date' },
{ label: '起始时间', prop: 'start_date' },
{ label: '终止时间', prop: 'end_date' },
]
})
const tableData13 = ref("")
const laborcontractLists = () => {
projectlaborcontractLists(pager13).then((res) => {
tableData13.value = res.lists
})
}
const active = ref('first-1')
laborcontractLists()
</script>

View File

@ -1,26 +1,65 @@
<template>
<div class="tit" v-if="baseData.tit">{{ baseData.tit }}</div>
<el-table :data="pager.lists" style="width: 80vw">
<el-table-column :label="item.label" :prop='item.prop' width="180" v-for="(item, index) in baseData.columnList"
:key="index" />
<div style="float: right;"> <el-dropdown>
<span class="el-dropdown-link">
操作
<el-icon class="el-icon--right">
<arrow-down />
</el-icon>
</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="handleAdd"> 添加</el-dropdown-item>
<el-dropdown-item> 编辑</el-dropdown-item>
<el-dropdown-item> 删除</el-dropdown-item>
<el-dropdown-item> 导出</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
<el-table :data="pager.lists" style="width: 100%">
<el-table-column :label="item.label" :prop='item.prop' v-for="(item, index) in baseData.columnList" :key="index" />
</el-table>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
<EditPopup v-if="showEdit" ref="editRef" @success="getLists" @close="showEdit = false" :project="project" />
</template>
<script setup>
import { ref, reactive, defineProps, toRaw } from "vue"
import { ref, reactive, defineProps, toRaw, defineAsyncComponent } from "vue"
import { usePaging } from '@/hooks/usePaging'
import feedback from '@/utils/feedback'
import { useDictData } from '@/hooks/useDictOptions'
const props = defineProps({
baseData: Object,
project: Object,
editPath: String
})
const EditPopup = defineAsyncComponent(() => import(`../../${props.editPath}/edit.vue`));
// edit
const editRef = ref(null)
const showEdit = ref(false)
//
const handleAdd = async () => {
showEdit.value = true
setTimeout(() => {
editRef.value?.open('add')
console.log("执行了点击")
}, 100);
}
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: props.baseData.fetchFun,
params: props.baseData.queryParams || ""
})
getLists()
@ -33,7 +72,11 @@ getLists()
margin-bottom: 10px;
}
// :deep(.my-label) {
// width: 150px;
// }
.example-showcase .el-dropdown-link {
cursor: pointer;
color: var(--el-color-primary);
display: flex;
align-items: center;
}
</style>

View File

@ -0,0 +1,25 @@
<template>
<div style="float: right;margin-bottom: 10px;">
<el-dropdown>
<span class="el-dropdown-link">
操作
<el-icon class="el-icon--right">
<arrow-down />
</el-icon>
</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="emit('add')">新增</el-dropdown-item>
<el-dropdown-item>编辑</el-dropdown-item>
<el-dropdown-item>删除</el-dropdown-item>
<el-dropdown-item>导出</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
</template>
<script setup>
import { defineEmits } from "vue"
const emit = defineEmits(['add'])
</script>
<style lang="scss"></style>

View File

@ -1,115 +1,11 @@
<template>
<div class="tit">投标决策</div>
<div>
<el-table :data="tableData6" stripe style="width: 100%">
<el-table-column label="流程编号" prop='code' width="180" />
<el-table-column label="项目估算(万元)" prop='project_estimation' width="180" />
<el-table-column label="资金来源" prop='bidding_project_fund_source' />
<el-table-column label="投标时间" prop='bidding_time' />
<el-table-column label="招标方式" prop='bid_type' />
<el-table-column label="有无保证金" prop='is_margin' />
<el-table-column label="保证金金额" prop='margin_amount' />
<el-table-column label="开标日期" prop='bid_opening_date' />
<el-table-column label="项目把握度" prop='project_assurance' />
</el-table>
</div>
<div style="margin: 20px 0;">
<el-pagination v-model:current-page="pager6.page_no" v-model:page-size="pager6.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total5"
@size-change="handleSizeChange6" @current-change="handleCurrentChange6" />
</div>
<div class="tit">购买标书</div>
<div>
<el-table :data="tableData7" stripe style="width: 100%">
<el-table-column label="流程编号" prop='code' width="180" />
<el-table-column label="投标公司名称" prop='bid_company_name' width="180" />
<el-table-column label="招标公司名称" prop='invite_tenders_company_name' />
<el-table-column label="标书编号" prop='bid_document_no' />
<el-table-column label="购买人员" prop='buyer' />
<el-table-column label="购买标书金额" prop='amount' />
</el-table>
</div>
<div style="margin: 20px 0;">
<el-pagination v-model:current-page="pager7.page_no" v-model:page-size="pager7.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total6"
@size-change="handleSizeChange7" @current-change="handleCurrentChange7" />
</div>
<div class="tit">标书审查</div>
<div>
<el-table :data="tableData8" stripe style="width: 100%">
<el-table-column label="流程编号" prop='code' width="180" />
<el-table-column label="标书编号" prop='bid_document_no' width="180" />
<el-table-column label="购买人员" prop='buyer' />
<el-table-column label="投标公司名称" prop='bid_company_name' />
<el-table-column label="投标时间" prop='bidding_time' />
<el-table-column label="开标日期" prop='bid_opening_date' />
<el-table-column label="总金额" prop='total_amount' />
</el-table>
</div>
<div style="margin: 20px 0;">
<el-pagination v-model:current-page="pager8.page_no" v-model:page-size="pager8.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total7"
@size-change="handleSizeChange8" @current-change="handleCurrentChange8" />
</div>
<div class="tit">投标结果</div>
<div>
<el-table :data="tableData9" stripe style="width: 100%">
<el-table-column label="投标编号" prop='bid_document_examination_code' width="180" />
<el-table-column label="投标时间" prop='bidding_time' width="180" />
<el-table-column label="开标日期" prop='bid_opening_date' />
<el-table-column label="是否中标" prop='is_successful_text' width="180" />
<el-table-column label="中标单位" prop='bidder_company' width="180" />
<el-table-column label="中标金额" prop='bidder_amount' />
</el-table>
</div>
<div style="margin: 20px 0;">
<el-pagination v-model:current-page="pager9.page_no" v-model:page-size="pager9.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total8"
@size-change="handleSizeChang9" @current-change="handleCurrentChange9" />
</div>
<div class="tit">投标保证金</div>
<div>
<el-table :data="tableData10" stripe style="width: 100%">
<el-table-column label="流程编号" prop='bidding_decision_code' width="180" />
<el-table-column label="投标时间" prop='bidding_time' width="180" />
<el-table-column label="预计退还时间" prop='refund_date' />
<el-table-column label="申请人" prop='applier' />
<el-table-column label="保证金金额 " prop='margin_amount' />
<el-table-column label="已退金额" prop='refund_amount' />
<el-table-column label="未退金额" prop='not_refund_amount' />
</el-table>
</div>
<div style="margin: 20px 0;">
<el-pagination v-model:current-page="pager10.page_no" v-model:page-size="pager10.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total9"
@size-change="handleSizeChange10" @current-change="handleCurrentChange10" />
</div>
<div class="tit">退投标保证金</div>
<div>
<el-table :data="tableData11" stripe style="width: 100%">
<el-table-column label="投标时间" prop='bidding_time' width="180" />
<el-table-column label="退款日期" prop='refund_date' width="180" />
<el-table-column label="账户编码" prop='bank_account_info.account_sn' />
<el-table-column label="开户银行" prop='bank_account_info.deposit_bank' />
<el-table-column label="退款金额" prop='refund_amount' />
<el-table-column label="客户名称" prop='custom_name' />
<el-table-column label="创建日期" prop='create_time' />
</el-table>
</div>
<div style="margin: 20px 0;">
<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>
<myTable :baseData="baseData"></myTable>
<myTable :baseData="baseData1"></myTable>
<myTable :baseData="baseData2"></myTable>
<myTable :baseData="baseData3"></myTable>
<myTable :baseData="baseData4"></myTable>
</template>
<script setup>
import { ref, reactive, defineProps } from "vue"
@ -119,146 +15,91 @@ import { apiBidDocumentExaminationLists } from '@/api/bid_document_examination'
import { apiBidResultLists } from '@/api/bid_result'
import { bidapplyLists } from '@/api/bidbbond'
import { bidrefundLists } from '@/api/refundbidDeposit'
import myTable from "./myTable.vue"
const props = defineProps({
project_id: Number
})
const total5 = ref(0)
const total6 = ref(0)
const total7 = ref(0)
const total8 = ref(0)
const total9 = ref(0)
const total10 = ref(0)
const total11 = ref(0)
const tableData6 = ref([])
const tableData7 = ref([])
const tableData8 = ref([])
const tableData9 = ref([])
const tableData10 = ref([])
const tableData11 = ref([])
const baseData = reactive({
fetchFun: apiBidBiddingDecisionLists,
tit: "投标决策",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '流程编号', prop: 'code' },
{ label: '项目估算(万元)', prop: 'project_estimation' },
{ label: '资金来源', prop: 'bidding_project_fund_source' },
{ label: '投标时间', prop: 'bidding_time' },
{ label: '招标方式', prop: 'bid_type' },
{ label: '有无保证金', prop: 'is_margin' },
{ label: '保证金金额', prop: 'margin_amount' },
{ label: '开标日期', prop: 'bid_opening_date' },
{ label: '项目把握度', prop: 'project_assurance' },
]
})
const pager6 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
const baseData1 = reactive({
fetchFun: apiBidDocumentExaminationLists,
tit: "标书审查",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '流程编号', prop: 'code' },
{ label: '标书编号', prop: 'bid_document_no' },
{ label: '购买人员', prop: 'buyer' },
{ label: '投标公司名称', prop: 'bid_company_name' },
{ label: '投标时间', prop: 'bidding_time' },
{ label: '开标日期', prop: 'bid_opening_date' },
{ label: '总金额', prop: 'total_amount' },
]
})
const pager7 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
const baseData2 = reactive({
fetchFun: apiBidResultLists,
tit: "投标结果",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '投标编号', prop: 'bid_document_examination_code' },
{ label: '投标时间', prop: 'bidding_time' },
{ label: '开标日期', prop: 'bid_opening_date' },
{ label: '是否中标', prop: 'is_successful_text' },
{ label: '中标单位', prop: 'bidder_company' },
{ label: '中标金额', prop: 'bidder_amount' },
]
})
const pager8 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
const baseData3 = reactive({
fetchFun: bidapplyLists,
tit: "投标保证金",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '流程编号', prop: 'bidding_decision_code' },
{ label: '投标时间', prop: 'bidding_time' },
{ label: '预计退还时间', prop: 'refund_date' },
{ label: '申请人', prop: 'applier' },
{ label: '保证金金额', prop: 'margin_amount' },
{ label: '已退金额', prop: 'refund_amount' },
{ label: '未退金额', prop: 'not_refund_amount' },
]
})
const pager9 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
})
const pager10 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
})
const pager11 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
const baseData4 = reactive({
fetchFun: bidrefundLists,
tit: "退投标保证金",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '投标时间', prop: 'bidding_time' },
{ label: '退款日期', prop: 'refund_date' },
{ label: '账户编码', prop: 'bank_account_info' },
{ label: '开户银行', prop: 'bank_account_info' },
{ label: '退款金额', prop: 'refund_amount' },
{ label: '客户名称', prop: 'custom_name' },
{ label: '创建日期', prop: 'create_time' },
]
})
// const handleSizeChange6 = (val: number) => {
// pager6.page_size = val
// decisionLists()
// }
// const handleSizeChange7 = (val: number) => {
// pager7.page_size = val
// buydocumentLists()
// }
// const handleSizeChange8 = (val: number) => {
// pager8.page_size = val
// examinationLists()
// }
// const handleSizeChange9 = (val: number) => {
// pager9.page_size = val
// bidResultLists()
// }
// const handleSizeChange10 = (val: number) => {
// pager10.page_size = val
// applyLists()
// }
// const handleSizeChange11 = (val: number) => {
// pager11.page_size = val
// refundLists()
// }
//
const decisionLists = () => {
apiBidBiddingDecisionLists(pager6).then((res) => {
tableData6.value = res.lists
total5.value = res.count
})
}
//
const buydocumentLists = () => {
apiBidBuyBiddingDocumentLists(pager7).then((res) => {
tableData7.value = res.lists
total6.value = res.count
})
}
//
const examinationLists = () => {
apiBidDocumentExaminationLists(pager8).then((res) => {
tableData8.value = res.lists
total7.value = res.count
})
}
//
const bidResultLists = () => {
apiBidResultLists(pager9).then((res) => {
tableData9.value = res.lists
total8.value = res.count
})
}
//
const applyLists = () => {
bidapplyLists(pager10).then((res) => {
tableData10.value = res.lists
total9.value = res.count
})
}
//退
const refundLists = () => {
bidrefundLists(pager11).then((res) => {
tableData11.value = res.lists
total10.value = res.count
})
}
decisionLists()
buydocumentLists()
examinationLists()
applyLists()
bidResultLists()
refundLists()
</script>
<style >
.tit {

View File

@ -1,15 +1,14 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="项目立项详情" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<popup ref="popupRef" title="项目立项详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto">
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
<el-tabs v-model="activeName" class="demo-tabs">
<el-tab-pane label="概况" name="demo-1">
<Overview :formData="formData" v-if="activeName == 'demo-1'"></Overview>
</el-tab-pane>
<el-tab-pane label="商机" name="demo-2">
<Business v-if="activeName == 'demo-2'" :project_id="project_id"></Business>
<Business v-if="activeName == 'demo-2'" :project="formData"></Business>
</el-tab-pane>
<el-tab-pane label="投标" name="demo-3">
@ -43,17 +42,14 @@
<el-tab-pane label="付款" name="demo-15">
<payment v-if="activeName == 'demo-15'" :project_id="project_id"></payment>
</el-tab-pane>
<el-tab-pane label="文档" name="demo-16">
<documentation v-if="activeName == 'demo-16'" :project_id="project_id"></documentation>
</el-tab-pane>
<el-tab-pane label="费用" name="demo-17">
<expenses v-if="activeName == 'demo-17'" :project_id="project_id"></expenses>
<el-tab-pane label="统计" name="demo-17">
<Statistics v-if="activeName == 'demo-17'" :project_id="project_id"></Statistics>
</el-tab-pane>
</el-tabs>
</el-form>
</popup>
@ -65,16 +61,7 @@
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCustomDetail } from '@/api/custom'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
import type { TabsPaneContext } from 'element-plus'
import { apiCustomerDemandLists } from '@/api/customer_demand'
import { apiProjectFollowUpLists } from '@/api/project_follow_up'
import { apiCustomerDemandSolutionLists } from '@/api/customer_demand_solution'
import { apiProjectEstimateLists } from '@/api/project_estimate'
import { apiCompetitorLists } from '@/api/competitor'
import { apiCustomServiceLists } from '@/api/custom_service'
import { subpackagdetailLists } from '@/api/project_subpackage_budget_detail'
import Overview from "./components/Overview.vue"
import Business from "./components/Business.vue"
import tender from "./components/tender.vue"
@ -86,17 +73,10 @@ import manpower from "./components/manpower.vue"
import Collection from "./components/Collection.vue"
import payment from "./components/payment.vue"
import documentation from "./components/documentation.vue"
import expenses from "./components/expenses.vue"
// import manpower from "./components/manpower.vue"
import Statistics from "./components/Statistics.vue"
const active = ref('first-1')
const activeName = ref('demo-1')
const handleClick = (tab: TabsPaneContext, event: Event) => {
// console.log(tab, event)
}
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
@ -106,800 +86,22 @@ defineProps({
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 pager12 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager13 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager14 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager15 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager16 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager17 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager18 = 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 pager26 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager27 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager28 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager29 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager30 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager31 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager32 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const total12 = ref(0)
const total13 = ref(0)
const total14 = ref(0)
const total15 = ref(0)
const total16 = ref(0)
const total17 = ref(0)
const total18 = 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 total29 = ref(0)
const total30 = ref(0)
const total31 = ref(0)
const total32 = ref(0)
const total33 = ref(0)
const tableData12 = ref([])
const tableData13 = ref([])
const tableData15 = ref([])
const tableData16 = ref([])
const tableData17 = ref([])
const tableData18 = ref([])
const tableData21 = ref([])
const tableData22 = ref([])
const tableData23 = ref([])
const tableData24 = ref([])
const tableData25 = ref([])
const tableData26 = ref([])
const tableData27 = ref([])
const tableData28 = ref([])
const tableData29 = ref([])
const tableData30 = ref([])
const tableData31 = ref([])
const tableData32 = ref([])
//
const formData = reactive({
})
//
const handleSizeChange7 = (val: number) => {
pager7.page_size = val
buydocumentLists()
}
const handleSizeChange8 = (val: number) => {
pager8.page_size = val
examinationLists()
}
const handleSizeChange9 = (val: number) => {
pager9.page_size = val
bidResultLists()
}
const handleSizeChange10 = (val: number) => {
pager10.page_size = val
applyLists()
}
const handleSizeChange11 = (val: number) => {
pager11.page_size = val
refundLists()
}
const handleSizeChange12 = (val: number) => {
pager12.page_size = val
personnelLists()
}
const handleSizeChange13 = (val: number) => {
pager13.page_size = val
laborcontractLists()
}
const handleSizeChange14 = (val: number) => {
pager14.page_size = val
insurancemanagementlists()
}
const handleSizeChange15 = (val: number) => {
pager15.page_size = val
attendanceRecord()
}
const handleSizeChange16 = (val: number) => {
pager16.page_size = val
attendancedetail()
}
const handleSizeChange17 = (val: number) => {
pager16.page_size = val
attendancedetail()
}
const handleSizeChange18 = (val: number) => {
pager18.page_size = val
customServiceLists()
}
const handleSizeChange19 = (val: number) => {
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 handleSizeChange26 = (val: number) => {
pager26.page_size = val
customServiceLists()
}
const handleSizeChange27 = (val: number) => {
pager27.page_size = val
customServiceLists()
}
const handleSizeChange28 = (val: number) => {
pager28.page_size = val
customServiceLists()
}
const handleSizeChange29 = (val: number) => {
pager29.page_size = val
invoiceapplyLists()
}
const handleSizeChange30 = (val: number) => {
pager30.page_size = val
returnedLists()
}
const handleSizeChange31 = (val: number) => {
pager30.page_size = val
returnedrecordLists()
}
const handleSizeChange32 = (val: number) => {
pager30.page_size = val
refundapplyLists()
}
//
// const handleCurrentChange6 = (val: number) => {
// pager6.page_no = val
// console.log(`current page: ${val}`)
// decisionLists()
// }
// const handleCurrentChange7 = (val: number) => {
// pager7.page_no = val
// console.log(`current page: ${val}`)
// buydocumentLists()
// }
// const handleCurrentChange8 = (val: number) => {
// pager8.page_no = val
// console.log(`current page: ${val}`)
// examinationLists()
// }
// const handleCurrentChange9 = (val: number) => {
// pager9.page_no = val
// console.log(`current page: ${val}`)
// bidResultLists()
// }
// const handleCurrentChange10 = (val: number) => {
// pager10.page_no = val
// console.log(`current page: ${val}`)
// applyLists()
// }
// const handleCurrentChange11 = (val: number) => {
// pager11.page_no = val
// console.log(`current page: ${val}`)
// refundLists()
// }
const handleCurrentChange12 = (val: number) => {
pager12.page_no = val
console.log(`current page: ${val}`)
personnelLists()
}
const handleCurrentChange13 = (val: number) => {
pager13.page_no = val
console.log(`current page: ${val}`)
laborcontractLists()
}
const handleCurrentChange14 = (val: number) => {
pager14.page_no = val
console.log(`current page: ${val}`)
insurancemanagementlists()
}
const handleCurrentChange15 = (val: number) => {
pager15.page_no = val
console.log(`current page: ${val}`)
attendanceRecord()
}
const handleCurrentChange16 = (val: number) => {
pager16.page_no = val
console.log(`current page: ${val}`)
attendancedetail()
}
const handleCurrentChange17 = (val: number) => {
pager17.page_no = val
console.log(`current page: ${val}`)
salarypaymentLists()
}
const handleCurrentChange18 = (val: number) => {
pager18.page_no = val
console.log(`current page: ${val}`)
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 handleCurrentChange26 = (val: number) => {
pager26.page_no = val
console.log(`current page: ${val}`)
customServiceLists()
}
const handleCurrentChange27 = (val: number) => {
pager27.page_no = val
console.log(`current page: ${val}`)
customServiceLists()
}
const handleCurrentChange28 = (val: number) => {
pager28.page_no = val
console.log(`current page: ${val}`)
customServiceLists()
}
const handleCurrentChange29 = (val: number) => {
pager29.page_no = val
console.log(`current page: ${val}`)
invoiceapplyLists()
}
const handleCurrentChange30 = (val: number) => {
pager30.page_no = val
console.log(`current page: ${val}`)
returnedLists()
}
const handleCurrentChange31 = (val: number) => {
pager31.page_no = val
console.log(`current page: ${val}`)
returnedrecordLists()
}
const handleCurrentChange32 = (val: number) => {
pager32.page_no = val
console.log(`current page: ${val}`)
refundapplyLists()
}
//
const personnelLists = () => {
projectpersonnelLists(pager12).then((res) => {
tableData12.value = res.lists
total11.value = res.count
})
}
//
const insurancemanagementlists = () => {
insurancemanagementLists(pager14).then((res) => {
tableData14.value = res.lists
total13.value = res.count
})
}
//
const attendanceRecord = () => {
attendanceRecordLists(pager15).then((res) => {
tableData15.value = res.lists
total14.value = res.count
})
}
//
const attendancedetail = () => {
attendancedetailLists(pager16).then((res) => {
tableData16.value = res.lists
total15.value = res.count
})
}
//
const salarypaymentLists = () => {
projectsalaryDetailLists(pager17).then((res) => {
tableData17.value = res.lists
total16.value = res.count
})
}
//
const customServiceLists = () => {
apiCustomServiceLists(pager18).then((res) => {
tableData18.value = res.lists
total17.value = res.count
})
}
//
const subpackagList = () => {
subpackagdetailLists(pager21).then((res) => {
tableData21.value = res.lists
total20.value = res.count
})
}
//
const financereceiptLists = () => {
apifinancereceiptLists(pager22).then((res) => {
tableData22.value = res.lists
total21.value = res.count
})
}
//
const planLists = () => {
paymentplanLists(pager23).then((res) => {
tableData23.value = res.lists
total22.value = res.count
})
}
//
const payapplyLists = () => {
paymentapplyLists(pager24).then((res) => {
tableData24.value = res.lists
total22.value = res.count
})
}
//退
const financerefundLists = () => {
apiFinancerefundLists(pager25).then((res) => {
tableData25.value = res.lists
total24.value = res.count
})
}
//
const procurementContractLists = () => {
apiProcurementContractLists(pager26).then((res) => {
tableData26.value = res.lists
total25.value = res.count
})
}
//
const subcontractingContractLists = () => {
apiSubcontractingContractLists(pager27).then((res) => {
tableData27.value = res.lists
total26.value = res.count
})
}
//
const negotiationLists = () => {
apinegotiationLists(pager28).then((res) => {
tableData28.value = res.lists
total27.value = res.count
})
}
//
const invoiceapplyLists = () => {
apiinvoiceapplyLists(pager29).then((res) => {
tableData29.value = res.lists
total28.value = res.count
})
}
//
const returnedLists = () => {
apireturnedLists(pager30).then((res) => {
tableData30.value = res.lists
total29.value = res.count
})
}
//
const returnedrecordLists = () => {
apireturnedrecordLists(pager31).then((res) => {
tableData31.value = res.lists
total30.value = res.count
})
}
//退
const refundapplyLists = () => {
apirefundapplyLists(pager32).then((res) => {
tableData32.value = res.lists
total31.value = res.count
})
}
const project_id = ref(0)
//
const setFormData = async (data: Record<any, any>) => {
// for (const key in formData) {
// if (data[key] != null && data[key] != undefined) {
// //@ts-ignore
// formData[key] = data[key]
// }
// }
project_id.value = data.id
// pager11.project_id = data.id
// pager11.project_id = data.id
// pager12.project_id = data.id
// pager13.project_id = data.id
// pager14.project_id = data.id
// pager15.project_id = data.id
// 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
// pager21.project_id = data.id
// pager22.project_id = data.id
// pager23.project_id = data.id
// pager24.project_id = data.id
// pager20.project_id = data.id
// pager25.project_id = data.id
// pager26.project_id = data.id
// pager27.project_id = data.id
// pager28.project_id = data.id
// pager29.project_id = data.id
// pager30.project_id = data.id
// pager31.project_id = data.id
// pager32.project_id = data.id
Object.assign(formData, data)
// if (data.annex && data.annex.length > 0) {
// const arry1 = data.annex.map((item: any, index: any) => {
// return {
// name: `${index + 1}`,
// uri: item
// };
// });
// Object.assign(formDataannex, arry1)
// }
// followUpLists()
// demandList()
// // competitorLists()
// solutionLists()
// estimateLists()
// decisionLists()
// buydocumentLists()
// examinationLists()
// bidResultLists()
// applyLists()
// refundLists()
// personnelLists()
// laborcontractLists()
// insurancemanagementlists()
// attendanceRecord()
// attendancedetail()
// salarypaymentLists()
// customServiceLists()
// contractLists()
// contcractNegotiationLists()
// subpackagList()
// financereceiptLists()
// planLists()
// payapplyLists()
// financerefundLists()
// procurementContractLists()
// subcontractingContractLists()
// negotiationLists()
// invoiceapplyLists()
// returnedLists()
// returnedrecordLists()
// refundapplyLists()
}
const getDetail = async (row: Record<string, any>) => {
@ -927,12 +129,6 @@ const handleClose = () => {
}
defineExpose({
open,
setFormData,
@ -944,4 +140,8 @@ defineExpose({
font-size: 1.2em;
margin-bottom: 10px;
}
:deep(.my-label) {
width: 150px;
}
</style>