商机管理功能

This commit is contained in:
jia 2024-01-03 18:38:55 +08:00
parent 6731063518
commit 70877102b3
9 changed files with 447 additions and 244 deletions

View File

@ -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
});

View File

@ -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,
});

View File

@ -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>) => {

View File

@ -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>) => {

View File

@ -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">

View File

@ -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[]>>,

View File

@ -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,

View File

@ -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>) => {

View File

@ -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" />