|
@@ -7,52 +7,54 @@
|
|
|
<h3>
|
|
<h3>
|
|
|
{{ details.nboName }}
|
|
{{ details.nboName }}
|
|
|
<span>
|
|
<span>
|
|
|
- <business-gradation :bus-id="id" :nbo-type="details.nboType" @fetch-data="init" />
|
|
|
|
|
|
|
+ <!--升级、降级-->
|
|
|
|
|
+ <business-gradation :bus-id="id" :business-info="details" @fetch-data="init" />
|
|
|
<el-button @click="handleTransfer">转移项目</el-button>
|
|
<el-button @click="handleTransfer">转移项目</el-button>
|
|
|
|
|
+ <el-button :disabled="details.nboType === '40' || details.nboType === '50'" @click="handleToReserve">
|
|
|
|
|
+ 转为储备
|
|
|
|
|
+ </el-button>
|
|
|
<el-button>创建工单</el-button>
|
|
<el-button>创建工单</el-button>
|
|
|
<el-button @click="createContract">创建合同</el-button>
|
|
<el-button @click="createContract">创建合同</el-button>
|
|
|
</span>
|
|
</span>
|
|
|
</h3>
|
|
</h3>
|
|
|
</div>
|
|
</div>
|
|
|
<header>
|
|
<header>
|
|
|
- <el-descriptions :colon="false" :column="6" direction="vertical">
|
|
|
|
|
|
|
+ <el-descriptions :colon="false" :column="7" direction="vertical">
|
|
|
<el-descriptions-item content-class-name="my-content" label="项目编码" label-class-name="my-label">
|
|
<el-descriptions-item content-class-name="my-content" label="项目编码" label-class-name="my-label">
|
|
|
{{ details.nboCode }}
|
|
{{ details.nboCode }}
|
|
|
</el-descriptions-item>
|
|
</el-descriptions-item>
|
|
|
<el-descriptions-item content-class-name="my-content" label="客户名称" label-class-name="my-label">
|
|
<el-descriptions-item content-class-name="my-content" label="客户名称" label-class-name="my-label">
|
|
|
{{ details.custName }}
|
|
{{ details.custName }}
|
|
|
</el-descriptions-item>
|
|
</el-descriptions-item>
|
|
|
- <el-descriptions-item content-class-name="my-content" label="项目预算" label-class-name="my-label">
|
|
|
|
|
- {{ details.nboBudget }}
|
|
|
|
|
- </el-descriptions-item>
|
|
|
|
|
<el-descriptions-item content-class-name="my-content" label="销售工程师" label-class-name="my-label">
|
|
<el-descriptions-item content-class-name="my-content" label="销售工程师" label-class-name="my-label">
|
|
|
{{ details.saleName }}
|
|
{{ details.saleName }}
|
|
|
</el-descriptions-item>
|
|
</el-descriptions-item>
|
|
|
- <el-descriptions-item content-class-name="my-content" label="项目类型" label-class-name="my-label">
|
|
|
|
|
- {{ details.nboType }} 类
|
|
|
|
|
|
|
+ <el-descriptions-item content-class-name="my-content" label="项目级别" label-class-name="my-label">
|
|
|
|
|
+ {{ selectDictLabel(nboTypeOptions, details.nboType) }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item content-class-name="my-content" label="产品线" label-class-name="my-label">
|
|
|
|
|
+ {{ selectDictLabel(productLineOptions, details.productLine) }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item content-class-name="my-content" label="项目预算" label-class-name="my-label">
|
|
|
|
|
+ ¥{{ details.nboBudget }}
|
|
|
</el-descriptions-item>
|
|
</el-descriptions-item>
|
|
|
- <el-descriptions-item content-class-name="my-content" label="最后跟进时间" label-class-name="my-label">
|
|
|
|
|
- {{ details.finalFollowTime }}
|
|
|
|
|
|
|
+ <el-descriptions-item content-class-name="my-content" label="最新跟进时间" label-class-name="my-label">
|
|
|
|
|
+ {{ parseTime(details.finalFollowTime, '{y}-{m}-{d} {h}:{i}') }}
|
|
|
</el-descriptions-item>
|
|
</el-descriptions-item>
|
|
|
</el-descriptions>
|
|
</el-descriptions>
|
|
|
</header>
|
|
</header>
|
|
|
<el-tabs v-model="activeName" @tab-click="handleClick">
|
|
<el-tabs v-model="activeName" @tab-click="handleClick">
|
|
|
- <el-tab-pane label="跟进记录" name="follow">
|
|
|
|
|
- <details-follow ref="follow" :bus-id="id" />
|
|
|
|
|
- </el-tab-pane>
|
|
|
|
|
<el-tab-pane label="详细信息" name="details">
|
|
<el-tab-pane label="详细信息" name="details">
|
|
|
- <el-descriptions border :column="2" size="medium">
|
|
|
|
|
|
|
+ <el-descriptions border :column="2" size="small">
|
|
|
<el-descriptions-item label="项目名称">
|
|
<el-descriptions-item label="项目名称">
|
|
|
{{ details.nboName }}
|
|
{{ details.nboName }}
|
|
|
</el-descriptions-item>
|
|
</el-descriptions-item>
|
|
|
<el-descriptions-item label="客户名称">
|
|
<el-descriptions-item label="客户名称">
|
|
|
{{ details.custName }}
|
|
{{ details.custName }}
|
|
|
</el-descriptions-item>
|
|
</el-descriptions-item>
|
|
|
- <el-descriptions-item label="预计成交价格">
|
|
|
|
|
- {{ details.estTransPrice }}
|
|
|
|
|
- </el-descriptions-item>
|
|
|
|
|
|
|
+ <el-descriptions-item label="预计成交价格">¥{{ details.estTransPrice }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="预计成交日期">
|
|
<el-descriptions-item label="预计成交日期">
|
|
|
- {{ details.estTransTime }}
|
|
|
|
|
|
|
+ {{ parseTime(details.estTransTime, '{y}-{m}-{d}') }}
|
|
|
</el-descriptions-item>
|
|
</el-descriptions-item>
|
|
|
<el-descriptions-item label="主要联系人">
|
|
<el-descriptions-item label="主要联系人">
|
|
|
{{ details.contactName }}
|
|
{{ details.contactName }}
|
|
@@ -67,14 +69,13 @@
|
|
|
{{ details.distributorName }}
|
|
{{ details.distributorName }}
|
|
|
</el-descriptions-item>
|
|
</el-descriptions-item>
|
|
|
<el-descriptions-item label="下次联系时间">
|
|
<el-descriptions-item label="下次联系时间">
|
|
|
- {{ details.nextFollowTime }}
|
|
|
|
|
|
|
+ {{ parseTime(details.nextFollowTime, '{y}-{m}-{d} {h}:{i}') }}
|
|
|
</el-descriptions-item>
|
|
</el-descriptions-item>
|
|
|
- <el-descriptions-item label="最后跟进时间">
|
|
|
|
|
- {{ details.finalFollowTime }}
|
|
|
|
|
|
|
+ <el-descriptions-item label="最新跟进时间">
|
|
|
|
|
+ {{ parseTime(details.finalFollowTime, '{y}-{m}-{d} {h}:{i}') }}
|
|
|
</el-descriptions-item>
|
|
</el-descriptions-item>
|
|
|
-
|
|
|
|
|
<el-descriptions-item label="计划采购时间">
|
|
<el-descriptions-item label="计划采购时间">
|
|
|
- {{ details.planPurchaseTime }}
|
|
|
|
|
|
|
+ {{ parseTime(details.planPurchaseTime, '{y}-{m}-{d}') }}
|
|
|
</el-descriptions-item>
|
|
</el-descriptions-item>
|
|
|
<el-descriptions-item label="风险情况">
|
|
<el-descriptions-item label="风险情况">
|
|
|
{{ details.riskProfile }}
|
|
{{ details.riskProfile }}
|
|
@@ -88,6 +89,52 @@
|
|
|
<el-descriptions-item label="介入情况">
|
|
<el-descriptions-item label="介入情况">
|
|
|
{{ details.intervention }}
|
|
{{ details.intervention }}
|
|
|
</el-descriptions-item>
|
|
</el-descriptions-item>
|
|
|
|
|
+
|
|
|
|
|
+ <!-- C-B -->
|
|
|
|
|
+ <el-descriptions-item label="技术支持时间">
|
|
|
|
|
+ {{ parseTime(details.technicalSupportTime, '{y}-{m}-{d} {h}:{i}') }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item label="技术支持人员">
|
|
|
|
|
+ {{ details.technicalSupportName }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item label="技术支持内容">
|
|
|
|
|
+ {{ details.technicalSupportContent }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item label="总部对接人">
|
|
|
|
|
+ {{ details.parentReceiver }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item label="项目预算期限">
|
|
|
|
|
+ {{ parseTime(details.nboBudgetTime, '{y}-{m}-{d} {h}:{i}') }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item label="资金来源">
|
|
|
|
|
+ {{ details.capitalSource }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item label="产品/方案满足情况">
|
|
|
|
|
+ {{ details.productSatisfaction }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+
|
|
|
|
|
+ <!-- B-A -->
|
|
|
|
|
+ <el-descriptions-item label="采购方式">
|
|
|
|
|
+ {{ details.purchasingWay }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item label="采购时间">
|
|
|
|
|
+ {{ parseTime(details.purchasingTime, '{y}-{m}-{d} {h}:{i}') }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item label="决策人员">
|
|
|
|
|
+ {{ details.makerName }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item label="决策部门">
|
|
|
|
|
+ {{ details.makerDept }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item label="经销商销售人员">
|
|
|
|
|
+ {{ details.dealerSalesName }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item label="维护部门及人员">
|
|
|
|
|
+ {{ details.accendant }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
|
|
+ <el-descriptions-item label="是否采纳大数技术参数">
|
|
|
|
|
+ {{ selectDictLabel(yesOrNoOptions, details.isAdoptDashoo) }}
|
|
|
|
|
+ </el-descriptions-item>
|
|
|
<el-descriptions-item label="创建人">
|
|
<el-descriptions-item label="创建人">
|
|
|
{{ details.createdName }}
|
|
{{ details.createdName }}
|
|
|
</el-descriptions-item>
|
|
</el-descriptions-item>
|
|
@@ -102,6 +149,9 @@
|
|
|
</el-descriptions-item>
|
|
</el-descriptions-item>
|
|
|
</el-descriptions>
|
|
</el-descriptions>
|
|
|
</el-tab-pane>
|
|
</el-tab-pane>
|
|
|
|
|
+ <el-tab-pane label="跟进记录" name="follow">
|
|
|
|
|
+ <details-follow ref="follow" :bus-id="id" />
|
|
|
|
|
+ </el-tab-pane>
|
|
|
<el-tab-pane label="联系人" name="contact">
|
|
<el-tab-pane label="联系人" name="contact">
|
|
|
<details-contact
|
|
<details-contact
|
|
|
ref="contact"
|
|
ref="contact"
|
|
@@ -143,6 +193,8 @@
|
|
|
<edit ref="edit" @fetch-data="init" />
|
|
<edit ref="edit" @fetch-data="init" />
|
|
|
<!-- 转移 -->
|
|
<!-- 转移 -->
|
|
|
<transfer ref="transfer" @fetch-data="init" />
|
|
<transfer ref="transfer" @fetch-data="init" />
|
|
|
|
|
+ <!-- 转储备项目 -->
|
|
|
|
|
+ <to-reserve ref="toReserve" @fetch-data="init" />
|
|
|
<!-- 合同 -->
|
|
<!-- 合同 -->
|
|
|
<contract-edit ref="contract" :business-data="[details]" />
|
|
<contract-edit ref="contract" :business-data="[details]" />
|
|
|
</div>
|
|
</div>
|
|
@@ -159,6 +211,7 @@
|
|
|
import DetailsContract from './components/DetailsContract'
|
|
import DetailsContract from './components/DetailsContract'
|
|
|
import DetailsRecords from './components/DetailsRecords'
|
|
import DetailsRecords from './components/DetailsRecords'
|
|
|
import DetailsFollow from './components/DetailsFollow'
|
|
import DetailsFollow from './components/DetailsFollow'
|
|
|
|
|
+ import ToReserve from './components/ToReserve.vue'
|
|
|
import ContractEdit from '@/views/contract/components/Edit'
|
|
import ContractEdit from '@/views/contract/components/Edit'
|
|
|
|
|
|
|
|
export default {
|
|
export default {
|
|
@@ -167,6 +220,7 @@
|
|
|
BusinessGradation,
|
|
BusinessGradation,
|
|
|
Edit,
|
|
Edit,
|
|
|
Transfer,
|
|
Transfer,
|
|
|
|
|
+ ToReserve,
|
|
|
DetailsContact,
|
|
DetailsContact,
|
|
|
DetailsContract,
|
|
DetailsContract,
|
|
|
DetailsRecords,
|
|
DetailsRecords,
|
|
@@ -179,7 +233,7 @@
|
|
|
details: { nboType: '' },
|
|
details: { nboType: '' },
|
|
|
product: [],
|
|
product: [],
|
|
|
abstract: {},
|
|
abstract: {},
|
|
|
- activeName: 'follow',
|
|
|
|
|
|
|
+ activeName: 'details',
|
|
|
selectRows: [],
|
|
selectRows: [],
|
|
|
followList: [],
|
|
followList: [],
|
|
|
contactList: [],
|
|
contactList: [],
|
|
@@ -187,7 +241,14 @@
|
|
|
belongLoading: false,
|
|
belongLoading: false,
|
|
|
belongTotal: 0,
|
|
belongTotal: 0,
|
|
|
belongs: [],
|
|
belongs: [],
|
|
|
|
|
+ yesOrNoOptions: [],
|
|
|
|
|
+ nboTypeOptions: [],
|
|
|
|
|
+ nboSourceOptions: [],
|
|
|
salesModelOptions: [],
|
|
salesModelOptions: [],
|
|
|
|
|
+ productLineOptions: [],
|
|
|
|
|
+ nboPhaseOptions: [],
|
|
|
|
|
+ nboStatusOptions: [],
|
|
|
|
|
+ approStatusOptions: [],
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
computed: {
|
|
computed: {
|
|
@@ -198,21 +259,26 @@
|
|
|
},
|
|
},
|
|
|
created() {
|
|
created() {
|
|
|
this.id = parseInt(this.$route.query.id)
|
|
this.id = parseInt(this.$route.query.id)
|
|
|
- },
|
|
|
|
|
- mounted() {
|
|
|
|
|
this.init()
|
|
this.init()
|
|
|
- this.getDicts('proj_sales_model').then((response) => {
|
|
|
|
|
- this.salesModelOptions = response.data.values || []
|
|
|
|
|
- })
|
|
|
|
|
},
|
|
},
|
|
|
|
|
+ mounted() {},
|
|
|
methods: {
|
|
methods: {
|
|
|
init() {
|
|
init() {
|
|
|
Promise.all([
|
|
Promise.all([
|
|
|
businessApi.getEntityById({ id: this.id }),
|
|
businessApi.getEntityById({ id: this.id }),
|
|
|
|
|
+ this.getDicts('proj_nbo_type'),
|
|
|
|
|
+ this.getDicts('proj_nbo_source'),
|
|
|
|
|
+ this.getDicts('proj_sales_model'),
|
|
|
|
|
+ this.getDicts('sys_product_line'),
|
|
|
|
|
+ this.getDicts('sys_yes_no'),
|
|
|
this.getRecord(),
|
|
this.getRecord(),
|
|
|
- this.handleClick({ name: this.activeName }),
|
|
|
|
|
- ]).then(([details]) => {
|
|
|
|
|
|
|
+ ]).then(([details, nboType, nboSource, salesModel, productLine, yesOrNo]) => {
|
|
|
if (details.data) this.details = details.data
|
|
if (details.data) this.details = details.data
|
|
|
|
|
+ this.nboTypeOptions = nboType.data.values || []
|
|
|
|
|
+ this.nboSourceOptions = nboSource.data.values || []
|
|
|
|
|
+ this.salesModelOptions = salesModel.data.values || []
|
|
|
|
|
+ this.productLineOptions = productLine.data.values || []
|
|
|
|
|
+ this.yesOrNoOptions = yesOrNo.data.values || []
|
|
|
})
|
|
})
|
|
|
},
|
|
},
|
|
|
async getRecord() {
|
|
async getRecord() {
|
|
@@ -227,7 +293,7 @@
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
this.dynamicsList = records
|
|
this.dynamicsList = records
|
|
|
- console.log(this.dynamicsList)
|
|
|
|
|
|
|
+ // console.log(this.dynamicsList)
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
async handleClick(tab) {
|
|
async handleClick(tab) {
|
|
@@ -252,6 +318,11 @@
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
|
|
+ // 转为储备项目
|
|
|
|
|
+ handleToReserve() {
|
|
|
|
|
+ this.$refs.toReserve.open(this.id)
|
|
|
|
|
+ },
|
|
|
|
|
+ // 转移项目
|
|
|
handleTransfer() {
|
|
handleTransfer() {
|
|
|
this.$refs.transfer.open(this.details)
|
|
this.$refs.transfer.open(this.details)
|
|
|
},
|
|
},
|
|
@@ -272,19 +343,19 @@
|
|
|
this.$refs.contract.init()
|
|
this.$refs.contract.init()
|
|
|
},
|
|
},
|
|
|
// 业务调级(升级、降级)
|
|
// 业务调级(升级、降级)
|
|
|
- handleBusinessGradation(type) {
|
|
|
|
|
- let data = { id: this.id, nboType: '' }
|
|
|
|
|
- if ((type === '降级' && this.details.nboType === 'A') || (type === '升级' && this.details.nboType === 'C')) {
|
|
|
|
|
- data.nboType = 'B'
|
|
|
|
|
- } else {
|
|
|
|
|
- data.nboType = type === '升级' ? 'A' : 'C'
|
|
|
|
|
- }
|
|
|
|
|
- this.$baseConfirm('你确定要对当前项目' + type + '吗', null, async () => {
|
|
|
|
|
- const { msg } = await businessApi.businessGradation(data)
|
|
|
|
|
- this.$baseMessage(msg, 'success')
|
|
|
|
|
- await this.init()
|
|
|
|
|
- })
|
|
|
|
|
- },
|
|
|
|
|
|
|
+ // handleBusinessGradation(type) {
|
|
|
|
|
+ // let data = { id: this.id, nboType: '' }
|
|
|
|
|
+ // if ((type === '降级' && this.details.nboType === 'A') || (type === '升级' && this.details.nboType === 'C')) {
|
|
|
|
|
+ // data.nboType = 'B'
|
|
|
|
|
+ // } else {
|
|
|
|
|
+ // data.nboType = type === '升级' ? 'A' : 'C'
|
|
|
|
|
+ // }
|
|
|
|
|
+ // this.$baseConfirm('你确定要对当前项目' + type + '吗', null, async () => {
|
|
|
|
|
+ // const { msg } = await businessApi.businessGradation(data)
|
|
|
|
|
+ // this.$baseMessage(msg, 'success')
|
|
|
|
|
+ // await this.init()
|
|
|
|
|
+ // })
|
|
|
|
|
+ // },
|
|
|
back() {
|
|
back() {
|
|
|
this.$router.go(-1)
|
|
this.$router.go(-1)
|
|
|
},
|
|
},
|