This commit is contained in:
zmj 2024-01-15 00:51:03 +08:00
parent dce022f174
commit be9fefb9dc
15 changed files with 3190 additions and 1035 deletions

View File

@ -1,12 +1,8 @@
<template> <template>
<div class="flex pl-4 app-tabs bg-body"> <div class="flex pl-4 app-tabs bg-body">
<div class="flex-1 min-w-0 menu"> <div class="flex-1 min-w-0 menu">
<div <div v-for="(item, index) in tabsLists" class="tab-pan" :class="{ act: (currentRoute == item.path) }">
v-for="(item,index) in tabsLists" <span v-show="currentRoute == item.path" class="dot"></span>
class="tab-pan"
:class="{act:(currentRoute==item.path)}"
>
<span v-show="currentRoute==item.path" class="dot"></span>
<span @click="handleChanges(item.fullPath)">{{ item.title }}</span> <span @click="handleChanges(item.fullPath)">{{ item.title }}</span>
<el-icon @click="delTab(item.fullPath)"> <el-icon @click="delTab(item.fullPath)">
<Close /> <Close />
@ -26,56 +22,55 @@
</template> </template>
</el-dropdown> </el-dropdown>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import useMultipleTabs from "@/hooks/useMultipleTabs"; import useMultipleTabs from "@/hooks/useMultipleTabs";
import { useWatchRoute } from "@/hooks/useWatchRoute"; import { useWatchRoute } from "@/hooks/useWatchRoute";
import useTabsStore, { getRouteParams } from "@/stores/modules/multipleTabs"; import useTabsStore, { getRouteParams } from "@/stores/modules/multipleTabs";
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
const tabsStore = useTabsStore(); const tabsStore = useTabsStore();
const { const {
removeOtherTab, removeOtherTab,
addTab, addTab,
removeAllTab, removeAllTab,
removeTab, removeTab,
tabsLists, tabsLists,
currentTab, currentTab,
} = useMultipleTabs(); } = useMultipleTabs();
useWatchRoute(() => { useWatchRoute(() => {
addTab(); addTab();
}); });
const handleChange = (fullPath: any) => { const handleChange = (fullPath: any) => {
const tabItem = tabsStore.tasMap[fullPath]; const tabItem = tabsStore.tasMap[fullPath];
router.push(getRouteParams(tabItem)); router.push(getRouteParams(tabItem));
}; };
const handleChanges = (fullPath: any) => { const handleChanges = (fullPath: any) => {
const tabItem = tabsStore.tasMap[fullPath]; const tabItem = tabsStore.tasMap[fullPath];
router.push(getRouteParams(tabItem)); router.push(getRouteParams(tabItem));
}; };
const delTab = (fullPath, index) => { const delTab = (fullPath, index) => {
removeTab(fullPath); removeTab(fullPath);
if (fullPath.includes(route.path)) { if (fullPath.includes(route.path)) {
handleChanges(tabsLists.value[index].fullPath); handleChanges(tabsLists.value[index].fullPath);
} }
}; };
const currentRoute = ref(""); const currentRoute = ref("");
watch( watch(
() => route.path, () => route.path,
(newCount, oldCount) => { (newCount, oldCount) => {
currentRoute.value = newCount; currentRoute.value = newCount;
console.log(currentRoute);
}, },
{ {
immediate: true, immediate: true,
deep: true, deep: true,
} }
); );
const handleCommand = (command: any) => { const handleCommand = (command: any) => {
switch (command) { switch (command) {
case "closeCurrent": case "closeCurrent":
removeTab(); removeTab();
@ -87,25 +82,28 @@
removeAllTab(); removeAllTab();
break; break;
} }
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.menu { .menu {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
} }
.tab-pan {
.tab-pan {
padding: 5px 20px; padding: 5px 20px;
cursor: pointer; cursor: pointer;
margin-bottom: 10px; margin-bottom: 10px;
display: flex; display: flex;
align-items: center; align-items: center;
} }
.act {
.act {
background-color: #edefff; background-color: #edefff;
color: rgb(128, 142, 255); color: rgb(128, 142, 255);
} }
.dot {
.dot {
display: inline-block; display: inline-block;
width: 5px; width: 5px;
height: 5px; height: 5px;
@ -113,6 +111,6 @@
border-radius: 5px; border-radius: 5px;
margin-right: 5px; margin-right: 5px;
// font-size: 30px; // font-size: 30px;
} }
</style> </style>

2030
src/views/project/aaaa.vue Normal file

File diff suppressed because it is too large Load Diff

View File

@ -12,10 +12,10 @@
<el-table-column label="项目把握度" prop='project_assurance_text' /> <el-table-column label="项目把握度" prop='project_assurance_text' />
</el-table> </el-table>
</div> </div>
<!-- <div style="margin: 20px 0;"> <div style="margin: 20px 0;">
<el-pagination v-model:current-page="pager1.page_no" v-model:page-size="pager1.page_size" <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" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total"
@size-change="handleSizeChange1" @current-change="handleCurrentChange1" /> @current-change="handleCurrentChange1" />
</div> </div>
<div class="tit">客户需求</div> <div class="tit">客户需求</div>
@ -45,8 +45,8 @@
@size-change="handleSizeChange2" @current-change="handleCurrentChange2" /> @size-change="handleSizeChange2" @current-change="handleCurrentChange2" />
</div> </div>
<div class="tit">解决方案</div> --> <div class="tit">解决方案</div>
<!-- <div> <div>
<el-table :data="tableData3" stripe style="width: 100%"> <el-table :data="tableData3" stripe style="width: 100%">
<el-table-column label="解决方案主题" prop='customer_demand_name' width="180" /> <el-table-column label="解决方案主题" prop='customer_demand_name' width="180" />
<el-table-column label="提交时间" prop='submission_time' width="180" /> <el-table-column label="提交时间" prop='submission_time' width="180" />
@ -65,8 +65,8 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> --> </div>
<!-- <div style="margin: 20px 0;"> <div style="margin: 20px 0;">
<el-pagination v-model:current-page="pager3.page_no" v-model:page-size="pager3.page_size" <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" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total2"
@size-change="handleSizeChange3" @current-change="handleCurrentChange3" /> @size-change="handleSizeChange3" @current-change="handleCurrentChange3" />
@ -129,7 +129,7 @@
<el-pagination v-model:current-page="pager5.page_no" v-model:page-size="pager5.page_size" <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" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total4"
@size-change="handleSizeChange5" @current-change="handleCurrentChange5" /> @size-change="handleSizeChange5" @current-change="handleCurrentChange5" />
</div> --> </div>
</template> </template>
@ -144,37 +144,50 @@ import { apiProjectEstimateLists } from '@/api/project_estimate'
import { apiCompetitorLists } from '@/api/competitor' import { apiCompetitorLists } from '@/api/competitor'
const props = defineProps({
project_id: Number
})
const tableData1 = ref([]) const tableData1 = ref([])
const tableData2 = ref([]) const tableData2 = ref([])
const tableData3 = ref([]) const tableData3 = ref([])
const tableData4 = ref([]) const tableData4 = ref([])
const tableData5 = 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({ const pager1 = reactive({
page_size: 10, page_size: 10,
page_no: 1, page_no: 1,
project_id: "" project_id: props.project_id
})
const pager2 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
})
const pager3 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
})
const pager4 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
}) })
// const pager2 = reactive({
// page_size: 10,
// page_no: 1,
// project_id: ""
// })
// const pager3 = reactive({
// page_size: 10,
// page_no: 1,
// project_id: ""
// })
// const pager4 = reactive({
// page_size: 10,
// page_no: 1,
// project_id: ""
// })
const pager5 = reactive({ const pager5 = reactive({
page_size: 10, page_size: 10,
page_no: 1, page_no: 1,
project_id: "" project_id: props.project_id
}) })
@ -195,36 +208,35 @@ const demandList = () => {
}) })
} }
// const handleSizeChange1 = (val: number) => {
// // pager1.page_size = val
// // followUpLists()
// }
// //
// const solutionLists = () => { const solutionLists = () => {
// apiCustomerDemandSolutionLists(pager5).then((res) => { apiCustomerDemandSolutionLists(pager5).then((res) => {
// tableData3.value = res.lists tableData3.value = res.lists
// total2.value = res.count total2.value = res.count
// }) })
// } }
// const estimateLists = () => {
// const estimateLists = () => { apiProjectEstimateLists(pager4).then((res) => {
// apiProjectEstimateLists(pager4).then((res) => { tableData4.value = res.lists
// tableData4.value = res.lists total3.value = res.count
// total3.value = res.count })
// }) }
// }
// const competitorLists = () => {
// const competitorLists = () => { apiCompetitorLists(pager5).then((res) => {
// apiCompetitorLists(pager5).then((res) => { tableData5.value = res.lists
// tableData5.value = res.lists total4.value = res.count
// total4.value = res.count })
// }) }
// }
// const handleSizeChange1 = (val: number) => {
// pager1.page_size = val
// followUpLists()
// }
// const handleSizeChange2 = (val: number) => { // const handleSizeChange2 = (val: number) => {
// pager2.page_size = val // pager2.page_size = val
// demandList() // demandList()
@ -243,17 +255,16 @@ const demandList = () => {
// } // }
// //
// const demandList = () => {
// apiCustomerDemandLists(pager5).then((res) => {
// tableData1.value = res.lists
// total1.value = res.count
// })
// }
followUpLists() followUpLists()
// demandList() demandList()
// competitorLists() competitorLists()
// solutionLists() solutionLists()
// estimateLists() estimateLists()
</script> </script>
<style lang="scss">
.tit {
font-size: 1.2em;
margin-bottom: 10px;
}
</style>

View File

@ -0,0 +1,36 @@
<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

@ -1,11 +1,36 @@
<template></template> <template>
<myTable :baseData="baseData"></myTable>
</template>
<script setup> <script setup>
import { ref, reactive, defineProps } from "vue" import { ref, reactive, defineProps } from "vue"
import myTable from "./myTable.vue"
import { subpackagdetailLists } from '@/api/project_subpackage_budget_detail'
const props = defineProps({ const props = defineProps({
// formData: Object 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> </script>

View File

@ -0,0 +1,44 @@
<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

@ -0,0 +1,99 @@
<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>
</template>
<script setup>
import { ref, reactive, defineProps } from "vue"
import { apiContractLists } from '@/api/contract'
import { apiContractNegotiationLists } from '@/api/contract_negotiation'
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 pager20 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
})
//
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>

View File

@ -0,0 +1,187 @@
<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

@ -0,0 +1,39 @@
<template>
<div class="tit" v-if="baseData.tit">{{ baseData.tit }}</div>
<el-table :data="pager.lists" style="width: 100%">
<el-table-column :label="item.label" :prop='item.prop' width="180" 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>
</template>
<script setup>
import { ref, reactive, defineProps, toRaw } from "vue"
import { usePaging } from '@/hooks/usePaging'
const props = defineProps({
baseData: Object,
})
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: props.baseData.fetchFun,
params: props.baseData.queryParams || ""
})
getLists()
</script>
<style lang="scss" scoped>
.tit {
font-size: 1.2em;
margin-bottom: 10px;
}
:deep(.my-label) {
width: 150px;
}
</style>

View File

@ -0,0 +1,62 @@
<template>
<myTable :baseData="baseData"></myTable>
</template>
<!-- <div>
<el-table :data="tableData26" stripe style="width: 100%">
<el-table-column label="合同编号" prop="contract_no" show-overflow-tooltip />
<el-table-column label="供应商名称" prop="contract_name" show-overflow-tooltip />
<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="contract_amount" show-overflow-tooltip />
<el-table-column label="已付款金额" prop="has_pay_amount" show-overflow-tooltip />
<el-table-column label="未付款金额" prop="not_pay_amount" show-overflow-tooltip />
<el-table-column label="已开票金额" prop="invoice_amount" show-overflow-tooltip />
<el-table-column label="未开票金额" prop="not_invoice_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="num" show-overflow-tooltip />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager26.page_no" v-model:page-size="pager26.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper"
:total="total25" @size-change="handleSizeChange26"
@current-change="handleCurrentChange26" />
</div> -->
<script setup>
import { ref, reactive, defineProps } from "vue"
import myTable from "./myTable.vue"
import { apiProcurementContractLists } from '@/api/procurement_contract'
const props = defineProps({
project_id: Number
})
const baseData = reactive({
fetchFun: apiProcurementContractLists,
tit: "采购合同",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '合同编号', prop: 'contract_no' },
{ label: '供应商名称', prop: 'contract_name' },
{ label: '合同类型', prop: 'contract_type' },
{ label: '签订日期', prop: 'signing_date' },
{ label: '合同金额', prop: 'contract_amount' },
{ label: '已付款金额', prop: 'has_pay_amount' },
{ label: '未付款金额', prop: 'not_pay_amount' },
{ label: '已开票金额', prop: 'invoice_amount' },
{ label: '未开票金额', prop: 'not_invoice_amount' },
{ label: '已入库数量', prop: 'has_storage_num' },
{ label: '未入库数量', prop: 'not_storage_num' },
{ label: '数量', prop: 'num' },
]
})
</script>
<style ></style>

View File

@ -0,0 +1,64 @@
<template>
<myTable :baseData="baseData"></myTable>
<myTable :baseData="baseData1"></myTable>
</template>
<script setup>
import { ref, reactive, defineProps } from "vue"
import myTable from "./myTable.vue"
import { apiSubcontractingContractLists } from '@/api/subcontracting_contract'
import { apinegotiationLists } from '@/api/subcontractor'
const props = defineProps({
project_id: Number
})
const baseData1 = reactive({
fetchFun: apinegotiationLists,
tit: "分包洽商",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '洽商编号', prop: 'negotiation_no' },
{ label: '合同编号', prop: 'contract_no' },
{ label: '洽商单名称', prop: 'negotiation_name' },
{ label: '项目名称', prop: 'project_name' },
{ label: '项目编号', prop: 'project_code' },
{ label: '供应商', prop: 'supplier_name' },
{ label: '洽商类别', prop: 'negotiation_type_text' },
{ label: '洽商报价金额', prop: 'warranty_amount' },
{ label: '洽商质保金额', prop: 'negotiation_amount' },
]
})
const baseData = reactive({
fetchFun: apiSubcontractingContractLists,
tit: "分包合同",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '项目名称', prop: 'project_name' },
{ label: '合同编号', prop: 'contract_no' },
{ label: '合同名称', prop: 'contract_name' },
{ label: '供应商名称', prop: 'supplier_name' },
{ label: '合同类型', prop: 'contract_type' },
{ label: '合同金额', prop: 'contract_amount' },
{ label: '洽商金额', prop: 'negotiation_amount' },
{ label: '不含税金额', prop: 'excluding_tax_amount' },
{ label: '实际合同金额', prop: 'reality_contract_amount' },
{ label: '已付款金额', prop: 'has_pay_amount' },
{ label: '已开票金额', prop: 'invoice_amount' },
{ label: '未开票金额', prop: 'not_invoice_amount' },
{ label: '已退款金额', prop: 'refund_amount' },
{ label: '结算差异', prop: 'settlement_difference' },
]
})
</script>

View File

@ -0,0 +1,268 @@
<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>
</template>
<script setup>
import { ref, reactive, defineProps } from "vue"
import { apiBidBiddingDecisionLists } from '@/api/bid_bidding_decision'
import { apiBidBuyBiddingDocumentLists } from '@/api/bid_buy_bidding_document'
import { apiBidDocumentExaminationLists } from '@/api/bid_document_examination'
import { apiBidResultLists } from '@/api/bid_result'
import { bidapplyLists } from '@/api/bidbbond'
import { bidrefundLists } from '@/api/refundbidDeposit'
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 pager6 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
})
const pager7 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
})
const pager8 = reactive({
page_size: 10,
page_no: 1,
project_id: props.project_id
})
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 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 {
font-size: 1.2em;
margin-bottom: 10px;
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -119,7 +119,7 @@
删除 删除
</el-button> </el-button>
<el-button v-perms="['project.project/detail']" link @click="handledetail(row)"> <el-button v-perms="['project.project/detail']" link @click="handledetail(row)">
详情 详情22
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>