|
|
@@ -8,9 +8,13 @@
|
|
|
width="80%"
|
|
|
@close="cancel"
|
|
|
>
|
|
|
-
|
|
|
+ <el-card
|
|
|
+ shadow="never"
|
|
|
+ header="基本信息"
|
|
|
+ body-style="padding: 22px 20px 0 0;"
|
|
|
+ >
|
|
|
<el-form
|
|
|
- label-width="100px"
|
|
|
+ label-width="120px"
|
|
|
ref="form"
|
|
|
:model="form"
|
|
|
:rules="rules"
|
|
|
@@ -32,16 +36,45 @@
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
<el-form-item label="选择负责人" prop="responsibleName">
|
|
|
- <el-input placeholder="请选择" v-model="form.responsibleName" @click.native="handHead" maxlength="50"></el-input>
|
|
|
+ <el-input placeholder="请选择" v-model="userInfo.name" disabled maxlength="50"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
- <el-form-item label=" 商机来源" prop="source">
|
|
|
- <el-input
|
|
|
- placeholder="请输入"
|
|
|
- v-model="form.source"
|
|
|
- maxlength="100"
|
|
|
- ></el-input>
|
|
|
+ <el-form-item label="商机来源" prop="sourceCode">
|
|
|
+ <DictSelection dictName="商机来源" clearable v-model="form.sourceCode">
|
|
|
+ </DictSelection>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="赢单率" prop="winRate">
|
|
|
+ <el-input placeholder="请输入内容" v-model="form.winRate">
|
|
|
+ <template slot="append">%</template>
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="预算" prop="budget">
|
|
|
+ <el-input placeholder="请输入内容" v-model="form.budget">
|
|
|
+ <template slot="append">万元</template>
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="预计结单日期" prop="expectedClosingDate">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="form.expectedClosingDate"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ placeholder="请选择"
|
|
|
+ type="date"
|
|
|
+ style="width: 200px"
|
|
|
+ class="filter-item"
|
|
|
+ ></el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="商机阶段" prop="stageCode">
|
|
|
+ <DictSelection dictName="商机阶段" clearable v-model="form.stageCode">
|
|
|
+ </DictSelection>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="16">
|
|
|
@@ -59,7 +92,30 @@
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
</el-form>
|
|
|
-
|
|
|
+ </el-card>
|
|
|
+ <el-card
|
|
|
+ shadow="never"
|
|
|
+ header="竞品"
|
|
|
+ body-style="padding: 22px 20px 0 20px;"
|
|
|
+ >
|
|
|
+ <businessAddTable
|
|
|
+ ref="businessAddTable"
|
|
|
+ @timeAll="getDetailTable"
|
|
|
+ :delDetailIds="delDetailIds"
|
|
|
+ ></businessAddTable>
|
|
|
+ </el-card>
|
|
|
+ <el-card
|
|
|
+ shadow="never"
|
|
|
+ header="关键人信息"
|
|
|
+ body-style="padding: 22px 20px 0 20px;"
|
|
|
+ >
|
|
|
+ <personnelAddTable
|
|
|
+ ref="personnelAddTable"
|
|
|
+ :contactId="form.contactId"
|
|
|
+ @timeAll="getPersonnelAddTable"
|
|
|
+ :delDetailIds="PersonnelDetailIds"
|
|
|
+ ></personnelAddTable>
|
|
|
+ </el-card>
|
|
|
<div slot="footer" class="footer">
|
|
|
<el-button type="primary" @click="save">保存</el-button>
|
|
|
<el-button @click="cancel">返回</el-button>
|
|
|
@@ -70,10 +126,13 @@
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+import store from '@/store';
|
|
|
import {categoryData} from 'element-china-category-data';
|
|
|
import fileUpload from '@/components/upload/fileUpload';
|
|
|
import {cityData} from 'ele-admin/packages/utils/regions';
|
|
|
import dictMixins from '@/mixins/dictMixins';
|
|
|
+import businessAddTable from './businessAddTable.vue'
|
|
|
+import personnelAddTable from './personnelAddTable.vue'
|
|
|
import deptSelect from '@/components/CommomSelect/dept-select.vue';
|
|
|
import personSelect from '@/components/CommomSelect/person-select.vue';
|
|
|
import {listOrganizations} from '@/api/system/organization';
|
|
|
@@ -90,6 +149,8 @@ export default {
|
|
|
mixins: [dictMixins],
|
|
|
components: {
|
|
|
fileUpload,
|
|
|
+ businessAddTable,
|
|
|
+ personnelAddTable,
|
|
|
deptSelect,
|
|
|
headList,
|
|
|
parentList,
|
|
|
@@ -99,7 +160,14 @@ export default {
|
|
|
let formDef = {
|
|
|
id:'',
|
|
|
contactName: '',
|
|
|
- contactId: 0,
|
|
|
+ contactId: '',
|
|
|
+ budget:null,
|
|
|
+ expectedClosingDate:'',
|
|
|
+ sourceCode:'',
|
|
|
+ sourceName:'',
|
|
|
+ stageCode:'',
|
|
|
+ stageName:'',
|
|
|
+ winRate:null,
|
|
|
name: '',
|
|
|
remark: '',
|
|
|
responsibleName: '',
|
|
|
@@ -109,9 +177,12 @@ export default {
|
|
|
};
|
|
|
|
|
|
return {
|
|
|
+ delDetailIds: [],
|
|
|
+ PersonnelDetailIds:[],
|
|
|
visible: false,
|
|
|
title: '',
|
|
|
row: {},
|
|
|
+ userInfo:{},
|
|
|
activeName: 'base',
|
|
|
formDef,
|
|
|
form: copyObj(formDef),
|
|
|
@@ -125,10 +196,16 @@ export default {
|
|
|
{ required: true, message: '请选择客户', trigger: 'change' }
|
|
|
],
|
|
|
name: [
|
|
|
- { required: true, message: '请输入客户名称', trigger: 'blur' }
|
|
|
+ { required: true, message: '请输入商机名称', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ expectedClosingDate:[
|
|
|
+ { required: true, message: '请选择预计结单日期', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ sourceCode:[
|
|
|
+ { required: true, message: '请选择商机来源名称', trigger: 'change' }
|
|
|
],
|
|
|
- responsibleName: [
|
|
|
- { required: true, message: '请选择负责人', trigger: 'change' }
|
|
|
+ stageCode:[
|
|
|
+ { required: true, message: '请选择商机阶段名称', trigger: 'change' }
|
|
|
]
|
|
|
},
|
|
|
|
|
|
@@ -147,7 +224,21 @@ export default {
|
|
|
groupData: [],
|
|
|
};
|
|
|
},
|
|
|
+ mounted(){
|
|
|
+ this.$nextTick(()=>{
|
|
|
+ this.userInfo=store.state.user.info
|
|
|
+ })
|
|
|
+
|
|
|
+ },
|
|
|
methods: {
|
|
|
+ //获取竞品
|
|
|
+ getDetailTable (val) {
|
|
|
+ this.form.competAnalysisList = val;
|
|
|
+ },
|
|
|
+ //获取关键人信息
|
|
|
+ getPersonnelAddTable(val){
|
|
|
+ this.form.partyList = val;
|
|
|
+ },
|
|
|
//选择客户回调
|
|
|
changeParent(obj) {
|
|
|
this.$set( this.form, 'contactId', obj.id)
|
|
|
@@ -179,7 +270,23 @@ export default {
|
|
|
this.isUpdate = false;
|
|
|
} else {
|
|
|
this.isUpdate = true;
|
|
|
- this.form=row
|
|
|
+ this.getDetailData(row.id)
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ //获取详情
|
|
|
+ async getDetailData (id) {
|
|
|
+ this.loading = true;
|
|
|
+ const data = await getDetail(id);
|
|
|
+ this.loading = false;
|
|
|
+ if (data) {
|
|
|
+ this.$nextTick(()=>{
|
|
|
+ this.form = data;
|
|
|
+ this.$refs.businessAddTable&&this.$refs.businessAddTable.putTableValue(data.competAnalysisList)
|
|
|
+ this.$refs.personnelAddTable&&this.$refs.personnelAddTable.putTableValue(data.partyList)
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
},
|
|
|
|
|
|
@@ -199,7 +306,8 @@ export default {
|
|
|
|
|
|
|
|
|
getValidate() {
|
|
|
- return new Promise((resolve, reject) => {
|
|
|
+ return Promise.all([
|
|
|
+ new Promise((resolve, reject) => {
|
|
|
this.$refs.form.validate((valid) => {
|
|
|
if (!valid) {
|
|
|
reject(false);
|
|
|
@@ -207,10 +315,31 @@ export default {
|
|
|
resolve(true);
|
|
|
}
|
|
|
});
|
|
|
- })
|
|
|
+ }),
|
|
|
+ new Promise((resolve, reject) => {
|
|
|
+ this.$refs.businessAddTable.validateForm((valid) => {
|
|
|
+ if (!valid) {
|
|
|
+ reject(false);
|
|
|
+ } else {
|
|
|
+ resolve(true);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }),
|
|
|
+ new Promise((resolve, reject) => {
|
|
|
+ this.$refs.personnelAddTable.validateForm((valid) => {
|
|
|
+ if (!valid) {
|
|
|
+ reject(false);
|
|
|
+ } else {
|
|
|
+ resolve(true);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }),
|
|
|
+
|
|
|
+ ]);
|
|
|
},
|
|
|
async save() {
|
|
|
try {
|
|
|
+
|
|
|
await this.getValidate();
|
|
|
// 表单验证通过,执行保存操作
|
|
|
this.loading = true;
|
|
|
@@ -218,9 +347,11 @@ export default {
|
|
|
if (!this.isUpdate) {
|
|
|
delete this.form.id;
|
|
|
}
|
|
|
-
|
|
|
+ let _sourceName=this.getDictValue('商机来源', this.form.sourceCode),_stageName=this.getDictValue('商机阶段', this.form.stageCode)
|
|
|
+ this.form=Object.assign({},this.form,{responsibleId:this.userInfo.userId,responsibleName:this.userInfo.name,sourceName:_sourceName,stageName:_stageName})
|
|
|
+ const commitData={opportunity:this.form,competAnalysisList:this.$refs.businessAddTable.getTableValue(),partyList:this.$refs.personnelAddTable.getTableValue()}
|
|
|
if (this.isUpdate) {
|
|
|
- UpdateInformation(this.form)
|
|
|
+ UpdateInformation(commitData)
|
|
|
.then((res) => {
|
|
|
this.loading = false;
|
|
|
this.$message.success("修改成功");
|
|
|
@@ -231,7 +362,7 @@ export default {
|
|
|
//this.loading = false;
|
|
|
});
|
|
|
} else {
|
|
|
- addInformation(this.form)
|
|
|
+ addInformation(commitData)
|
|
|
.then((res) => {
|
|
|
this.loading = false;
|
|
|
this.$message.success("新增成功");
|