商机管理功能
This commit is contained in:
parent
6731063518
commit
70877102b3
@ -40,10 +40,15 @@ import { usePaging } from "@/hooks/usePaging"
|
|||||||
import { useDictData } from "@/hooks/useDictOptions"
|
import { useDictData } from "@/hooks/useDictOptions"
|
||||||
import { apiCustomContactsLists } from '@/api/custom_contacts'
|
import { apiCustomContactsLists } from '@/api/custom_contacts'
|
||||||
import { defineEmits } from "vue"
|
import { defineEmits } from "vue"
|
||||||
|
const props = defineProps({
|
||||||
|
custom_id: {
|
||||||
|
type: String
|
||||||
|
}
|
||||||
|
})
|
||||||
// 查询条件
|
// 查询条件
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
name: ''
|
name: '',
|
||||||
|
custom_id: props.custom_id
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<el-table-column label="序号" type="index" />
|
<el-table-column label="序号" type="index" />
|
||||||
<el-table-column label="客户名称" prop="custom_name" show-overflow-tooltip />
|
<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_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="theme" show-overflow-tooltip />
|
||||||
<el-table-column label="客户需求提供人" prop="supplier" show-overflow-tooltip />
|
<el-table-column label="客户需求提供人" prop="supplier" show-overflow-tooltip />
|
||||||
<el-table-column label="提供人联系方式" prop="supplier_contacts" show-overflow-tooltip />
|
<el-table-column label="提供人联系方式" prop="supplier_contacts" show-overflow-tooltip />
|
||||||
@ -50,8 +50,8 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { usePaging } from "@/hooks/usePaging"
|
import { usePaging } from "@/hooks/usePaging"
|
||||||
import { useDictData } from "@/hooks/useDictOptions"
|
import { useDictData } from "@/hooks/useDictOptions"
|
||||||
import { getListByProjectId } from '@/api/customer_demand_solution'
|
|
||||||
|
|
||||||
|
import { apiCustomerDemandLists } from '@/api/customer_demand'
|
||||||
import { defineEmits } from "vue"
|
import { defineEmits } from "vue"
|
||||||
import { timeFormat } from '@/utils/util'
|
import { timeFormat } from '@/utils/util'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@ -76,7 +76,7 @@ const handleCurrentChange = (value: any) => {
|
|||||||
|
|
||||||
// 分页相关
|
// 分页相关
|
||||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||||
fetchFun: getListByProjectId,
|
fetchFun: apiCustomerDemandLists,
|
||||||
params: queryParams,
|
params: queryParams,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
<div class="detail-popup">
|
<div class="detail-popup">
|
||||||
<popup ref="popupRef" title="客户需求详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
<popup ref="popupRef" title="客户需求详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||||
<el-form ref="formRef" :model="formData" label-width="120px">
|
<el-form ref="formRef" :model="formData" label-width="120px">
|
||||||
|
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
|
||||||
|
<el-tab-pane label="需求详情" name="first">
|
||||||
<el-card class="mb-2">
|
<el-card class="mb-2">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
@ -81,6 +83,88 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-card>
|
</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>
|
</el-form>
|
||||||
</popup>
|
</popup>
|
||||||
</div>
|
</div>
|
||||||
@ -91,7 +175,14 @@
|
|||||||
import type { FormInstance } from 'element-plus'
|
import type { FormInstance } from 'element-plus'
|
||||||
import Popup from '@/components/popup/index.vue'
|
import Popup from '@/components/popup/index.vue'
|
||||||
import { apiCustomDetail } from '@/api/custom'
|
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 { timeFormat } from '@/utils/util'
|
||||||
|
import type { TabsPaneContext } from 'element-plus'
|
||||||
|
|
||||||
|
const activeName = ref('first')
|
||||||
|
|
||||||
import type { PropType } from 'vue'
|
import type { PropType } from 'vue'
|
||||||
defineProps({
|
defineProps({
|
||||||
dictData: {
|
dictData: {
|
||||||
@ -99,6 +190,26 @@ defineProps({
|
|||||||
default: () => ({})
|
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 emit = defineEmits(['success', 'close'])
|
||||||
const formRef = shallowRef<FormInstance>()
|
const formRef = shallowRef<FormInstance>()
|
||||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||||
@ -108,19 +219,82 @@ const datas = reactive({
|
|||||||
cityOptions: [],
|
cityOptions: [],
|
||||||
areaOptions: [],
|
areaOptions: [],
|
||||||
});
|
});
|
||||||
|
const tableData = ref([])
|
||||||
|
const tableData1 = ref([])
|
||||||
|
const tableData2 = ref([])
|
||||||
|
const handleClick = (tab: TabsPaneContext, event: Event) => {
|
||||||
|
console.log(tab, event)
|
||||||
|
}
|
||||||
// 表单数据
|
// 表单数据
|
||||||
const formData = reactive({
|
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>) => {
|
const setFormData = async (data: Record<any, any>) => {
|
||||||
Object.assign(formData, data)
|
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) {
|
if (data.annex && data.annex.length > 0) {
|
||||||
const arry1 = data.annex.map((item: any, index: any) => {
|
const arry1 = data.annex.map((item: any, index: any) => {
|
||||||
return {
|
return {
|
||||||
@ -130,7 +304,9 @@ const setFormData = async (data: Record<any, any>) => {
|
|||||||
});
|
});
|
||||||
Object.assign(formDataannex, arry1)
|
Object.assign(formDataannex, arry1)
|
||||||
}
|
}
|
||||||
|
competitorLists()
|
||||||
|
solutionLists()
|
||||||
|
estimateLists()
|
||||||
}
|
}
|
||||||
|
|
||||||
const getDetail = async (row: Record<string, any>) => {
|
const getDetail = async (row: Record<string, any>) => {
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="记录时间" prop="recording_time">
|
<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-date-picker>
|
||||||
</el-form-item>
|
</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>) => {
|
const getDetail = async (row: Record<string, any>) => {
|
||||||
|
@ -3,33 +3,31 @@
|
|||||||
<el-card class="!border-none mb-4" shadow="never">
|
<el-card class="!border-none mb-4" shadow="never">
|
||||||
<el-form class="mb-[-16px]" :model="queryParams" label-width="auto" inline>
|
<el-form class="mb-[-16px]" :model="queryParams" label-width="auto" inline>
|
||||||
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="6">
|
|
||||||
<el-form-item label="需求主题" prop="theme">
|
<el-form-item label="需求主题" prop="theme">
|
||||||
<el-input class="w-[280px]" v-model="queryParams.theme" clearable placeholder="请输入需求主题" />
|
<el-input class="w-[250px]" 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-form-item>
|
||||||
</el-col>
|
<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 type="primary" @click="resetPage">查询</el-button>
|
||||||
<el-button @click="resetParams">重置</el-button>
|
<el-button @click="resetParams">重置</el-button>
|
||||||
</el-row>
|
</el-form-item>
|
||||||
|
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-card>
|
</el-card>
|
||||||
@ -57,12 +55,8 @@
|
|||||||
<dict-value :options="dictData.importance" :value="row.importance" />
|
<dict-value :options="dictData.importance" :value="row.importance" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="记录时间" prop="recording_time">
|
<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="demand_content" show-overflow-tooltip />
|
<el-table-column label="需求内容" prop="demand_content" show-overflow-tooltip />
|
||||||
|
|
||||||
<el-table-column label="操作" width="160" fixed="right">
|
<el-table-column label="操作" width="160" fixed="right">
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
<div class="detail-popup">
|
<div class="detail-popup">
|
||||||
<popup ref="popupRef" title="项目立项详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
<popup ref="popupRef" title="项目立项详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||||
|
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
|
||||||
|
<el-tab-pane label="概况" name="demo-1">
|
||||||
<el-card class="mb-2">
|
<el-card class="mb-2">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
@ -128,6 +130,25 @@
|
|||||||
|
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-card>
|
</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>
|
</el-form>
|
||||||
</popup>
|
</popup>
|
||||||
</div>
|
</div>
|
||||||
@ -140,6 +161,13 @@ import Popup from '@/components/popup/index.vue'
|
|||||||
import { apiCustomDetail } from '@/api/custom'
|
import { apiCustomDetail } from '@/api/custom'
|
||||||
import { timeFormat } from '@/utils/util'
|
import { timeFormat } from '@/utils/util'
|
||||||
import type { PropType } from 'vue'
|
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({
|
defineProps({
|
||||||
dictData: {
|
dictData: {
|
||||||
type: Object as PropType<Record<string, any[]>>,
|
type: Object as PropType<Record<string, any[]>>,
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
<div class="edit-popup">
|
<div class="edit-popup">
|
||||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
<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-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||||
|
|
||||||
<el-row :gutter="10">
|
<el-row :gutter="10">
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="客户名称" prop="custom_name" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
<el-form-item label="客户名称" prop="custom_name" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||||
@ -207,12 +208,12 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
|
</el-form>
|
||||||
|
</popup>
|
||||||
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||||
<customDialog @customEvent="customEvent"></customDialog>
|
<customDialog @customEvent="customEvent"></customDialog>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</el-form>
|
|
||||||
</popup>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -231,6 +232,7 @@ const protype = reactive([])
|
|||||||
const base_url = configs.baseUrl + configs.urlPrefix
|
const base_url = configs.baseUrl + configs.urlPrefix
|
||||||
const formDataannex = reactive([])
|
const formDataannex = reactive([])
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
|
|
||||||
// 上传文件
|
// 上传文件
|
||||||
const handleAvatarSuccess_four = (
|
const handleAvatarSuccess_four = (
|
||||||
response,
|
response,
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
<el-input v-model="formData.create_user" clearable placeholder="请输入制单人" />
|
<el-input v-model="formData.create_user" clearable placeholder="请输入制单人" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="报价日期" prop="quotation_date">
|
<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-date-picker>
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
@ -96,8 +96,8 @@
|
|||||||
<el-dialog v-model="showDialog1" title="选择需求" width="70%">
|
<el-dialog v-model="showDialog1" title="选择需求" width="70%">
|
||||||
<customerdemand @customEvent="customEvent1" :productid="formData.project_id"></customerdemand>
|
<customerdemand @customEvent="customEvent1" :productid="formData.project_id"></customerdemand>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<el-dialog v-model="showDialog2" title="选择需求" width="70%">
|
<el-dialog v-model="showDialog2" title="选择联系人" width="70%">
|
||||||
<contactsTable @customEvent="customEvent2"></contactsTable>
|
<contactsTable @customEvent="customEvent2" :custom_id="customid"></contactsTable>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -135,6 +135,7 @@ const custom_name
|
|||||||
const customer_demand_name = ref('')
|
const customer_demand_name = ref('')
|
||||||
const contact_name = ref('')
|
const contact_name = ref('')
|
||||||
const contact_phone = ref('')
|
const contact_phone = ref('')
|
||||||
|
const customid = ref('')
|
||||||
const formDataannex = reactive([])
|
const formDataannex = reactive([])
|
||||||
import configs from "@/config"
|
import configs from "@/config"
|
||||||
const base_url = configs.baseUrl + configs.urlPrefix
|
const base_url = configs.baseUrl + configs.urlPrefix
|
||||||
@ -168,6 +169,7 @@ const showDialog1 = ref(false)
|
|||||||
const showDialog2 = ref(false)
|
const showDialog2 = ref(false)
|
||||||
const customEvent = (e: any) => {
|
const customEvent = (e: any) => {
|
||||||
formData.project_id = e.id;
|
formData.project_id = e.id;
|
||||||
|
customid.value = e.custom_id
|
||||||
project_name.value = e.name;
|
project_name.value = e.name;
|
||||||
project_code
|
project_code
|
||||||
.value = e.project_code;
|
.value = e.project_code;
|
||||||
@ -176,7 +178,7 @@ const customEvent = (e: any) => {
|
|||||||
showDialog.value = false;
|
showDialog.value = false;
|
||||||
};
|
};
|
||||||
const customEvent1 = (e: any) => {
|
const customEvent1 = (e: any) => {
|
||||||
console.log(e.theme)
|
// console.log(e.theme)
|
||||||
formData.customer_demand_id = e.id;
|
formData.customer_demand_id = e.id;
|
||||||
customer_demand_name.value = e.theme
|
customer_demand_name.value = e.theme
|
||||||
showDialog1.value = false;
|
showDialog1.value = false;
|
||||||
@ -269,7 +271,10 @@ const setFormData = async (data: Record<any, any>) => {
|
|||||||
Object.assign(jobs, res)
|
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
|
project_name.value = data.project_name
|
||||||
custom_name.value = data.custom_name
|
custom_name.value = data.custom_name
|
||||||
project_code.value = data.project_code
|
project_code.value = data.project_code
|
||||||
@ -290,7 +295,7 @@ const setFormData = async (data: Record<any, any>) => {
|
|||||||
Object.assign(formDataannex, arry1)
|
Object.assign(formDataannex, arry1)
|
||||||
}
|
}
|
||||||
//@ts-ignore
|
//@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>) => {
|
const getDetail = async (row: Record<string, any>) => {
|
||||||
|
@ -51,12 +51,7 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="制单人" prop="create_user" show-overflow-tooltip />
|
<el-table-column label="制单人" prop="create_user" show-overflow-tooltip />
|
||||||
<el-table-column label="报价日期" prop="quotation_date">
|
<el-table-column label="报价日期" prop="quotation_date" show-overflow-tooltip />
|
||||||
<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="invoice_type">
|
<el-table-column label="发票类型" prop="invoice_type">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<dict-value :options="dictData.invoice_type" :value="row.invoice_type" />
|
<dict-value :options="dictData.invoice_type" :value="row.invoice_type" />
|
||||||
|
Loading…
x
Reference in New Issue
Block a user