商机管理功能
This commit is contained in:
parent
6731063518
commit
70877102b3
@ -40,10 +40,15 @@ import { usePaging } from "@/hooks/usePaging"
|
||||
import { useDictData } from "@/hooks/useDictOptions"
|
||||
import { apiCustomContactsLists } from '@/api/custom_contacts'
|
||||
import { defineEmits } from "vue"
|
||||
|
||||
const props = defineProps({
|
||||
custom_id: {
|
||||
type: String
|
||||
}
|
||||
})
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
name: ''
|
||||
name: '',
|
||||
custom_id: props.custom_id
|
||||
});
|
||||
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
||||
<el-table-column label="序号" type="index" />
|
||||
<el-table-column label="客户名称" prop="custom_name" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
|
||||
<!-- <el-table-column label="项目编码" prop="project_code" show-overflow-tooltip /> -->
|
||||
<el-table-column label="需求主题" prop="theme" show-overflow-tooltip />
|
||||
<el-table-column label="客户需求提供人" prop="supplier" show-overflow-tooltip />
|
||||
<el-table-column label="提供人联系方式" prop="supplier_contacts" show-overflow-tooltip />
|
||||
@ -50,8 +50,8 @@
|
||||
<script lang="ts" setup>
|
||||
import { usePaging } from "@/hooks/usePaging"
|
||||
import { useDictData } from "@/hooks/useDictOptions"
|
||||
import { getListByProjectId } from '@/api/customer_demand_solution'
|
||||
|
||||
import { apiCustomerDemandLists } from '@/api/customer_demand'
|
||||
import { defineEmits } from "vue"
|
||||
import { timeFormat } from '@/utils/util'
|
||||
const props = defineProps({
|
||||
@ -76,7 +76,7 @@ const handleCurrentChange = (value: any) => {
|
||||
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: getListByProjectId,
|
||||
fetchFun: apiCustomerDemandLists,
|
||||
params: queryParams,
|
||||
});
|
||||
|
||||
|
@ -3,84 +3,168 @@
|
||||
<div class="detail-popup">
|
||||
<popup ref="popupRef" title="客户需求详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="120px">
|
||||
<el-card class="mb-2">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="组织">
|
||||
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
|
||||
<el-tab-pane label="需求详情" name="first">
|
||||
<el-card class="mb-2">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="组织">
|
||||
|
||||
{{ formData.org_name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="部门">
|
||||
{{ formData.dept_name }}
|
||||
{{ formData.org_name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="部门">
|
||||
{{ formData.dept_name }}
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目名称">
|
||||
{{ formData.project_name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目名称">
|
||||
{{ formData.project_name }}
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="客户名称">
|
||||
{{ formData.custom_name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目编码">
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="客户名称">
|
||||
{{ formData.custom_name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目编码">
|
||||
|
||||
{{ formData.project_code }}
|
||||
{{ formData.project_code }}
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="需求主题">
|
||||
{{ formData.theme }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="需求提供人">
|
||||
{{ formData.supplier }}
|
||||
</el-form-item>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="需求主题">
|
||||
{{ formData.theme }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="需求提供人">
|
||||
{{ formData.supplier }}
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="提供人联系方式">
|
||||
{{ formData.supplier_contacts }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="提供人联系方式">
|
||||
{{ formData.supplier_contacts }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="重要程度">
|
||||
<dict-value :options="dictData.importance" :value="formData.importance" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="记录时间">
|
||||
{{ formData.recording_time }}
|
||||
</el-form-item>
|
||||
</el-col> <el-col :span="12">
|
||||
<el-form-item label="需求内容">
|
||||
{{ formData.demand_content }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="附件">
|
||||
<div v-if="formDataannex.length > 0">
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
暂无附件
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="重要程度">
|
||||
<dict-value :options="dictData.importance" :value="formData.importance" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="记录时间">
|
||||
{{ formData.recording_time }}
|
||||
</el-form-item>
|
||||
</el-col> <el-col :span="12">
|
||||
<el-form-item label="需求内容">
|
||||
{{ formData.demand_content }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="附件">
|
||||
<div v-if="formDataannex.length > 0">
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
暂无附件
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="解决方案" name="second">
|
||||
<div>
|
||||
<el-table :data="tableData" stripe style="width: 100%">
|
||||
<el-table-column label="解决方案主题" prop='customer_demand_name' width="180" />
|
||||
<el-table-column label="提交时间" prop='submission_time' width="180" />
|
||||
<el-table-column label="方案内容" prop='solution_content' />
|
||||
<el-table-column label="客户反馈" prop='customer_feedback' />
|
||||
<el-table-column label="附件" prop="annex" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<div v-if="row.annex && row.annex.length > 0">
|
||||
<div v-for="(item, i) in row.annex " :key='i'>
|
||||
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
暂无文件
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div style="margin: 10px 0;">
|
||||
<el-pagination v-model:current-page="pager1.page_no" v-model:page-size="pager1.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="项目概算" name="third">
|
||||
<div>
|
||||
<el-table :data="tableData1" stripe style="width: 100%">
|
||||
<el-table-column label="概算来源" prop='estimate_source_text' width="180" />
|
||||
<el-table-column label="制单人" prop='create_user' width="180" />
|
||||
<el-table-column label="报价日期" prop='quotation_date' />
|
||||
<el-table-column label="技术人员" prop='technician_name' width="180" />
|
||||
<el-table-column label="概算金额(万元)" prop='estimate_amount' width="180" />
|
||||
<el-table-column label="要求" prop='ask' />
|
||||
<el-table-column label="附件" prop="annex" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<div v-if="row.annex && row.annex.length > 0">
|
||||
<div v-for="(item, i) in row.annex " :key='i'>
|
||||
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
暂无文件
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div style="margin: 10px 0;">
|
||||
<el-pagination v-model:current-page="pager2.page_no" v-model:page-size="pager2.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total1" @size-change="handleSizeChange2" @current-change="handleCurrentChange2" />
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="竞争对手" name="fourth">
|
||||
<div>
|
||||
<el-table :data="tableData2" stripe style="width: 100%">
|
||||
<el-table-column label="竞争对手名称" prop='competitor_name' width="180" />
|
||||
<el-table-column label="竞争对手联系人" prop='competitor_contacts' width="180" />
|
||||
<el-table-column label="联系人电话" prop='competitor_contacts_phone' />
|
||||
<el-table-column label="竞争能力" prop='competitive_power' />
|
||||
<el-table-column label="竞争对手优势" prop='competitor_advantages' />
|
||||
<el-table-column label="竞争对手劣势" prop='competitor_disadvantages' />
|
||||
<el-table-column label="备注" prop='remark' />
|
||||
<el-table-column label="附件" prop="annex" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<div v-if="row.annex && row.annex.length > 0">
|
||||
<div v-for="(item, i) in row.annex " :key='i'>
|
||||
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
暂无文件
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div style="margin: 10px 0;">
|
||||
<el-pagination v-model:current-page="pager3.page_no" v-model:page-size="pager3.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total2" @size-change="handleSizeChange3" @current-change="handleCurrentChange3" />
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-form>
|
||||
</popup>
|
||||
</div>
|
||||
@ -91,7 +175,14 @@
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiCustomDetail } from '@/api/custom'
|
||||
import { apiCustomerDemandSolutionLists } from '@/api/customer_demand_solution'
|
||||
import { apiProjectEstimateLists } from '@/api/project_estimate'
|
||||
import { apiCompetitorLists } from '@/api/competitor'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { TabsPaneContext } from 'element-plus'
|
||||
|
||||
const activeName = ref('first')
|
||||
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
@ -99,6 +190,26 @@ defineProps({
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
|
||||
const pager1 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
customer_demand_id: ""
|
||||
})
|
||||
const pager2 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
customer_demand_id: ""
|
||||
})
|
||||
const pager3 = reactive({
|
||||
page_size: 10,
|
||||
page_no: 1,
|
||||
customer_demand_id: ""
|
||||
})
|
||||
|
||||
const total = ref(0)
|
||||
const total1 = ref(0)
|
||||
const total2 = ref(0)
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
@ -108,19 +219,82 @@ const datas = reactive({
|
||||
cityOptions: [],
|
||||
areaOptions: [],
|
||||
});
|
||||
|
||||
|
||||
const tableData = ref([])
|
||||
const tableData1 = ref([])
|
||||
const tableData2 = ref([])
|
||||
const handleClick = (tab: TabsPaneContext, event: Event) => {
|
||||
console.log(tab, event)
|
||||
}
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
|
||||
})
|
||||
|
||||
|
||||
//条数
|
||||
const handleSizeChange1 = (val: number) => {
|
||||
|
||||
pager1.page_size = val
|
||||
}
|
||||
const handleSizeChange2 = (val: number) => {
|
||||
|
||||
pager2.page_size = val
|
||||
}
|
||||
const handleSizeChange3 = (val: number) => {
|
||||
|
||||
pager3.page_size = val
|
||||
}
|
||||
//分页
|
||||
const handleCurrentChange1 = (val: number) => {
|
||||
console.log(`current page: ${val}`)
|
||||
pager1.page_no = val
|
||||
solutionLists()
|
||||
}
|
||||
const handleCurrentChange2 = (val: number) => {
|
||||
console.log(`current page: ${val}`)
|
||||
pager2.page_no = val
|
||||
estimateLists()
|
||||
}
|
||||
const handleCurrentChange3 = (val: number) => {
|
||||
pager3.page_no = val
|
||||
console.log(`current page: ${val}`)
|
||||
competitorLists()
|
||||
}
|
||||
// 解决方案列表
|
||||
const solutionLists = () => {
|
||||
apiCustomerDemandSolutionLists(pager1).then((res) => {
|
||||
tableData.value = res.lists
|
||||
|
||||
total.value = res.count
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
// 获取项目概算列表
|
||||
const estimateLists = () => {
|
||||
apiProjectEstimateLists(pager2).then((res) => {
|
||||
tableData1.value = res.lists
|
||||
total1.value = res.count
|
||||
})
|
||||
}
|
||||
|
||||
// 获取竞争对手列表
|
||||
const competitorLists = () => {
|
||||
apiCompetitorLists(pager3).then((res) => {
|
||||
tableData2.value = res.lists
|
||||
total2.value = res.count
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
Object.assign(formData, data)
|
||||
|
||||
pager1.customer_demand_id = data.id
|
||||
pager2.customer_demand_id = data.id
|
||||
pager3.customer_demand_id = data.id
|
||||
if (data.annex && data.annex.length > 0) {
|
||||
const arry1 = data.annex.map((item: any, index: any) => {
|
||||
return {
|
||||
@ -130,7 +304,9 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
}
|
||||
|
||||
competitorLists()
|
||||
solutionLists()
|
||||
estimateLists()
|
||||
}
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
|
@ -40,7 +40,7 @@
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="记录时间" prop="recording_time">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.recording_time" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择记录时间">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.recording_time" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择记录时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
@ -218,8 +218,6 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
}
|
||||
}
|
||||
|
||||
//@ts-ignore
|
||||
formData.recording_time = timeFormat(formData.recording_time, 'yyyy-mm-dd hh:MM:ss')
|
||||
}
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
|
@ -3,33 +3,31 @@
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" label-width="auto" inline>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="需求主题" prop="theme">
|
||||
<el-input class="w-[280px]" v-model="queryParams.theme" clearable placeholder="请输入需求主题" />
|
||||
</el-form-item></el-col><el-col :span="6">
|
||||
<el-form-item label="需求提供人" prop="supplier">
|
||||
<el-input class="w-[280px]" v-model="queryParams.supplier" clearable placeholder="请输入需求提供人" />
|
||||
</el-form-item></el-col><el-col :span="6">
|
||||
<el-form-item label="提供人联系方式" prop="supplier_contacts">
|
||||
<el-input class="w-[280px]" v-model="queryParams.supplier_contacts" clearable placeholder="请输入提供人联系方式" />
|
||||
</el-form-item></el-col><el-col :span="6">
|
||||
<el-form-item label="组织名称" prop="org_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.org_name" clearable placeholder="请输入组织名称" />
|
||||
</el-form-item></el-col><el-col :span="6">
|
||||
<el-form-item label="部门名称" prop="dept_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.dept_name" clearable placeholder="请输入部门名称" />
|
||||
</el-form-item></el-col><el-col :span="6">
|
||||
<el-form-item label="项目名称" prop="project_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item></el-col><el-col :span="6">
|
||||
<el-form-item label="客户名称" prop="custom_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.custom_name" clearable placeholder="请输入客户名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-form-item label="需求主题" prop="theme">
|
||||
<el-input class="w-[250px]" v-model="queryParams.theme" clearable placeholder="请输入需求主题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="需求提供人" prop="supplier">
|
||||
<el-input class="w-[250px]" v-model="queryParams.supplier" clearable placeholder="请输入需求提供人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="提供人联系方式" prop="supplier_contacts">
|
||||
<el-input class="w-[250px]" v-model="queryParams.supplier_contacts" clearable placeholder="请输入提供人联系方式" />
|
||||
</el-form-item>
|
||||
<el-form-item label="组织名称" prop="org_name">
|
||||
<el-input class="w-[250px]" v-model="queryParams.org_name" clearable placeholder="请输入组织名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="部门名称" prop="dept_name">
|
||||
<el-input class="w-[250px]" v-model="queryParams.dept_name" clearable placeholder="请输入部门名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目名称" prop="project_name">
|
||||
<el-input class="w-[250px]" v-model="queryParams.project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="客户名称" prop="custom_name">
|
||||
<el-input class="w-[250px]" v-model="queryParams.custom_name" clearable placeholder="请输入客户名称" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
</el-card>
|
||||
@ -57,12 +55,8 @@
|
||||
<dict-value :options="dictData.importance" :value="row.importance" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="记录时间" prop="recording_time">
|
||||
<template #default="{ row }">
|
||||
<span>{{ row.recording_time ? timeFormat(row.recording_time, 'yyyy-mm-dd hh:MM:ss') : ''
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="记录时间" prop="recording_time" />
|
||||
|
||||
<el-table-column label="需求内容" prop="demand_content" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="操作" width="160" fixed="right">
|
||||
|
@ -3,131 +3,152 @@
|
||||
<div class="detail-popup">
|
||||
<popup ref="popupRef" title="项目立项详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||
<el-card class="mb-2">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目名称">
|
||||
{{ formData.name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="客户名称">
|
||||
{{ formData.custom_name }}
|
||||
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
|
||||
<el-tab-pane label="概况" name="demo-1">
|
||||
<el-card class="mb-2">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目名称">
|
||||
{{ formData.name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="客户名称">
|
||||
{{ formData.custom_name }}
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目类型">
|
||||
<dict-value :options="dictData.project_type" :value="formData.project_type" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目类型">
|
||||
<dict-value :options="dictData.project_type" :value="formData.project_type" />
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系人">
|
||||
{{ formData.contacts }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系人职位">
|
||||
{{ formData.position }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系电话">
|
||||
{{ formData.telephone }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目所在地">
|
||||
{{ formData.project_address }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="信息来源">
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系人">
|
||||
{{ formData.contacts }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系人职位">
|
||||
{{ formData.position }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系电话">
|
||||
{{ formData.telephone }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目所在地">
|
||||
{{ formData.project_address }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="信息来源">
|
||||
|
||||
<dict-value :options="dictData.information_sources" :value="formData.information_sources" />
|
||||
<dict-value :options="dictData.information_sources" :value="formData.information_sources" />
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="负责人">
|
||||
{{ formData.person }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="战略意义">
|
||||
<dict-value :options="dictData.strategic_significance" :value="formData.strategic_significance" />
|
||||
</el-form-item>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="负责人">
|
||||
{{ formData.person }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="战略意义">
|
||||
<dict-value :options="dictData.strategic_significance" :value="formData.strategic_significance" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="招标方式" prop="notes">
|
||||
<dict-value :options="dictData.bidding_method" :value="formData.bidding_method" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属行业" prop="notes">
|
||||
<dict-value :options="dictData.industry" :value="formData.industry" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单位性质" prop="notes">
|
||||
<dict-value :options="dictData.unit_nature" :value="formData.unit_nature" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="竞争对手" prop="notes">
|
||||
{{ formData.competitor }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目建设资金来源" prop="notes">
|
||||
<dict-value :options="dictData.construction_funds_sources" :value="formData.construction_funds_sources" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="建设方付款方式" prop="notes">
|
||||
{{ formData.construction_payment_method }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="建设方财务状况" prop="notes">
|
||||
<dict-value :options="dictData.construction_financial_status" :value="formData.construction_financial_status" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="建设方对我方认可度" prop="notes">
|
||||
<dict-value :options="dictData.construction_recognition" :value="formData.construction_recognition" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="我方对建设方认可度" prop="notes">
|
||||
<dict-value :options="dictData.my_construction_recognition" :value="formData.my_construction_recognition" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="关系度" prop="notes">
|
||||
<dict-value :options="dictData.relationship" :value="formData.relationship" />
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="招标方式" prop="notes">
|
||||
<dict-value :options="dictData.bidding_method" :value="formData.bidding_method" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属行业" prop="notes">
|
||||
<dict-value :options="dictData.industry" :value="formData.industry" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单位性质" prop="notes">
|
||||
<dict-value :options="dictData.unit_nature" :value="formData.unit_nature" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="竞争对手" prop="notes">
|
||||
{{ formData.competitor }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目建设资金来源" prop="notes">
|
||||
<dict-value :options="dictData.construction_funds_sources" :value="formData.construction_funds_sources" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="建设方付款方式" prop="notes">
|
||||
{{ formData.construction_payment_method }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="建设方财务状况" prop="notes">
|
||||
<dict-value :options="dictData.construction_financial_status" :value="formData.construction_financial_status" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="建设方对我方认可度" prop="notes">
|
||||
<dict-value :options="dictData.construction_recognition" :value="formData.construction_recognition" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="我方对建设方认可度" prop="notes">
|
||||
<dict-value :options="dictData.my_construction_recognition" :value="formData.my_construction_recognition" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="关系度" prop="notes">
|
||||
<dict-value :options="dictData.relationship" :value="formData.relationship" />
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="附件" prop="field127">
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="附件" prop="field127">
|
||||
|
||||
<div v-if="formDataannex.length > 0">
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<!-- <span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span> -->
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>暂无附件</div>
|
||||
<div v-if="formDataannex.length > 0">
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<!-- <span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span> -->
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>暂无附件</div>
|
||||
|
||||
|
||||
|
||||
</el-form-item></el-col>
|
||||
</el-form-item></el-col>
|
||||
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="商机" name="demo-2">Config</el-tab-pane>
|
||||
<el-tab-pane label="投标" name="demo-3">Role</el-tab-pane>
|
||||
<el-tab-pane label="合同" name="demo-4">Task</el-tab-pane>
|
||||
<el-tab-pane label="预算" name="demo-5">User</el-tab-pane>
|
||||
<el-tab-pane label="计划" name="demo-6">Config</el-tab-pane>
|
||||
<el-tab-pane label="材料" name="demo-7">Role</el-tab-pane>
|
||||
<el-tab-pane label="采购" name="demo-8">Task</el-tab-pane>
|
||||
<el-tab-pane label="分包" name="demo-9">Config</el-tab-pane>
|
||||
<el-tab-pane label="进度" name="demo-10">Role</el-tab-pane>
|
||||
<el-tab-pane label="任务" name="demo-11">Task</el-tab-pane>
|
||||
<el-tab-pane label="人力" name="demo-12">Task</el-tab-pane>
|
||||
<el-tab-pane label="机具" name="demo-13">Task</el-tab-pane>
|
||||
<el-tab-pane label="收款" name="demo-14">Task</el-tab-pane>
|
||||
<el-tab-pane label="付款" name="demo-15">Task</el-tab-pane>
|
||||
<el-tab-pane label="费用" name="demo-16">Task</el-tab-pane>
|
||||
<el-tab-pane label="文档" name="demo-17">Task</el-tab-pane>
|
||||
<el-tab-pane label="统计" name="demo-18">Task</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-form>
|
||||
</popup>
|
||||
</div>
|
||||
@ -140,6 +161,13 @@ 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'
|
||||
|
||||
const activeName = ref('demo-1')
|
||||
|
||||
const handleClick = (tab: TabsPaneContext, event: Event) => {
|
||||
console.log(tab, event)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
|
@ -2,6 +2,7 @@
|
||||
<div class="edit-popup">
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="客户名称" prop="custom_name" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
@ -207,12 +208,12 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
</el-dialog>
|
||||
|
||||
</el-form>
|
||||
</popup>
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -231,6 +232,7 @@ const protype = reactive([])
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const formDataannex = reactive([])
|
||||
const userStore = useUserStore();
|
||||
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
|
@ -45,7 +45,7 @@
|
||||
<el-input v-model="formData.create_user" clearable placeholder="请输入制单人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="报价日期" prop="quotation_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.quotation_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择报价日期">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.quotation_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择报价日期">
|
||||
</el-date-picker>
|
||||
</el-form-item></el-col>
|
||||
<el-col :span="24">
|
||||
@ -96,8 +96,8 @@
|
||||
<el-dialog v-model="showDialog1" title="选择需求" width="70%">
|
||||
<customerdemand @customEvent="customEvent1" :productid="formData.project_id"></customerdemand>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="showDialog2" title="选择需求" width="70%">
|
||||
<contactsTable @customEvent="customEvent2"></contactsTable>
|
||||
<el-dialog v-model="showDialog2" title="选择联系人" width="70%">
|
||||
<contactsTable @customEvent="customEvent2" :custom_id="customid"></contactsTable>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
@ -135,6 +135,7 @@ const custom_name
|
||||
const customer_demand_name = ref('')
|
||||
const contact_name = ref('')
|
||||
const contact_phone = ref('')
|
||||
const customid = ref('')
|
||||
const formDataannex = reactive([])
|
||||
import configs from "@/config"
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
@ -168,6 +169,7 @@ const showDialog1 = ref(false)
|
||||
const showDialog2 = ref(false)
|
||||
const customEvent = (e: any) => {
|
||||
formData.project_id = e.id;
|
||||
customid.value = e.custom_id
|
||||
project_name.value = e.name;
|
||||
project_code
|
||||
.value = e.project_code;
|
||||
@ -176,7 +178,7 @@ const customEvent = (e: any) => {
|
||||
showDialog.value = false;
|
||||
};
|
||||
const customEvent1 = (e: any) => {
|
||||
console.log(e.theme)
|
||||
// console.log(e.theme)
|
||||
formData.customer_demand_id = e.id;
|
||||
customer_demand_name.value = e.theme
|
||||
showDialog1.value = false;
|
||||
@ -269,7 +271,10 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
Object.assign(jobs, res)
|
||||
})
|
||||
|
||||
console.log(jobs)
|
||||
// console.log(jobs)
|
||||
contact_name.value = data.contact_name
|
||||
contact_phone.value = data.contact_phone
|
||||
|
||||
project_name.value = data.project_name
|
||||
custom_name.value = data.custom_name
|
||||
project_code.value = data.project_code
|
||||
@ -290,7 +295,7 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
Object.assign(formDataannex, arry1)
|
||||
}
|
||||
//@ts-ignore
|
||||
formData.quotation_date = timeFormat(formData.quotation_date, 'yyyy-mm-dd hh:MM:ss')
|
||||
// formData.quotation_date = timeFormat(formData.quotation_date, 'yyyy-mm-dd hh:MM:ss')
|
||||
}
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
|
@ -51,12 +51,7 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="制单人" prop="create_user" show-overflow-tooltip />
|
||||
<el-table-column label="报价日期" prop="quotation_date">
|
||||
<template #default="{ row }">
|
||||
<span>{{ row.quotation_date ? timeFormat(row.quotation_date, 'yyyy-mm-dd hh:MM:ss') : ''
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="报价日期" prop="quotation_date" show-overflow-tooltip />
|
||||
<el-table-column label="发票类型" prop="invoice_type">
|
||||
<template #default="{ row }">
|
||||
<dict-value :options="dictData.invoice_type" :value="row.invoice_type" />
|
||||
|
Loading…
x
Reference in New Issue
Block a user