274 lines
11 KiB
Vue
274 lines
11 KiB
Vue
<template>
|
|
<div class="tit">项目跟进</div>
|
|
<div>
|
|
<el-button v-perms="['project.project/add']" type="primary" @click="handleAdd" style="float: right;">
|
|
<template #icon>
|
|
<icon name="el-icon-Plus" />
|
|
</template>
|
|
新增
|
|
</el-button>
|
|
<el-table :data="tableData1" stripe style="width: 100%">
|
|
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
|
|
<el-table-column label="客户名称" prop="custom_name" show-overflow-tooltip />
|
|
<el-table-column label="执行人" prop="executor" show-overflow-tooltip />
|
|
<el-table-column label="日期" prop="follow_date">
|
|
<template #default="{ row }">
|
|
<span>{{ row.follow_date ? row.follow_date : '' }}</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="类型" prop="follow_type_text">
|
|
</el-table-column>
|
|
<el-table-column label="主题" prop="theme" show-overflow-tooltip />
|
|
<el-table-column label="项目把握度" prop="project_assurance_text">
|
|
</el-table-column>
|
|
<el-table-column label="状态" prop="follow_status_text">
|
|
</el-table-column>
|
|
<el-table-column label="阶段" prop="follow_stage_text">
|
|
</el-table-column>
|
|
<el-table-column label="下次回访日期" prop="next_follow_up_date">
|
|
<template #default="{ row }">
|
|
<span>{{ row.next_follow_up_date ? row.next_follow_up_date :
|
|
'' }}</span>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
<edit-popup v-if="showEdit" ref="editRef" @close="showEdit = false" :dict-data="dictData" @success="followUpLists"
|
|
:project="formData" />
|
|
</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>
|
|
</template>
|
|
|
|
<script setup>
|
|
|
|
import { ref, reactive, defineProps } from "vue"
|
|
import { apiProjectFollowUpLists } from '@/api/project_follow_up'
|
|
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 EditPopup from '@/views/project_follow_up/edit.vue'
|
|
import { useDictData } from '@/hooks/useDictOptions'
|
|
const props = defineProps({
|
|
project_id: Number,
|
|
formData: Object
|
|
})
|
|
const { dictData } = useDictData('project_assurance,follow_status,follow_type,follow_stage')
|
|
const showEdit = ref(false)
|
|
const editRef = ref(null)
|
|
// 添加
|
|
const handleAdd = async () => {
|
|
showEdit.value = true
|
|
await nextTick()
|
|
editRef.value?.open('add')
|
|
}
|
|
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 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 pager5 = reactive({
|
|
page_size: 10,
|
|
page_no: 1,
|
|
project_id: props.project_id
|
|
})
|
|
|
|
|
|
// //获取客户跟进进路
|
|
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 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
|
|
})
|
|
}
|
|
|
|
|
|
followUpLists()
|
|
demandList()
|
|
competitorLists()
|
|
solutionLists()
|
|
estimateLists()
|
|
</script>
|
|
<style lang="scss">
|
|
.tit {
|
|
font-size: 1.2em;
|
|
margin-bottom: 10px;
|
|
}
|
|
</style> |