Commit 20ea96f0 authored by MyName's avatar MyName

项目管理

parent e0e9b4c5
import request from '@/utils/request'
//新增项目
export function addProject(param) {
return request({
url: '/business/info/add',
method: 'POST',
data: param
})
}
//商机列表
export function getProjectlist(param) {
return request({
url: '/business/info/list',
method: 'GET',
params: param
})
}
......@@ -85,7 +85,7 @@
<div>水利项目</div>
</div>
</div>
<div class="addnew"><div class="img"></div>新建项目</div>
<div class="addnew" @click="addNew(true)"><div class="img"></div>新建项目</div>
</el-card>
</div>
......@@ -121,14 +121,17 @@
</div>
</el-card>
</div>
<addproject v-if="isshow" @addproject="add" @cancel="addNew"></addproject>
</div>
</template>
<script>
import "@/assets/styles/project.scss"
import * as echarts from 'echarts'
import addproject from '../projectList/component/addProject'
export default {
name: 'Overview',
components:{addproject},
data() {
return {
chartDom: '',
......@@ -203,11 +206,11 @@ export default {
visitMode:"线下拜访",
},
]},
dialogVisible:false,
isshow:false,
}
},
created() {
console.log()
// this.$route.push({ path: "/projectList" })
},
mounted(){
this.$nextTick(()=>{
......@@ -432,6 +435,13 @@ export default {
let minute = times.getMinutes()
let second = times.getSeconds()
return year+'-'+month+'-'+day+' '+hour+":"+minute+":"+second
},
addNew(isshow){
this.isshow = isshow
},
add(){
this.isshow = false
this.$router.push({ path: '/project/projectList' })
}
}
}
......
......@@ -2,7 +2,7 @@
<el-dialog
class="popups"
width="534px"
:visible.sync="dialogVisible"
:visible.sync="isshow"
@close="resetForm('ruleForm')"
>
<div class="poptitle">
......@@ -10,10 +10,10 @@
<span>添加客户</span>
</div>
<el-form class="popform j" :model="queryParam" :rules="rules" ref="ruleForm" label-width="130px">
<el-form-item label="项目名称:" class="row" prop="name">
<el-input type="text" placeholder="请输入" v-model="queryParam.projectName" @input="getCompany"></el-input>
<el-form-item label="项目名称:" class="row" prop="projectName">
<el-input type="text" placeholder="请输入" v-model="queryParam.projectName"></el-input>
</el-form-item>
<el-form-item label="业主单位:" class="row" prop="company">
<el-form-item label="业主单位:" class="row" prop="ownerCompany">
<el-input type="text" placeholder="请输入" v-model="queryParam.ownerCompany" @input="getCompany"></el-input>
<div class="resultlist" v-if="showlist">
<div v-for="(item,index) in companData" @click="selCompany(item)"><span v-html="item.name"></span></div>
......@@ -21,21 +21,21 @@
</el-form-item>
<el-form-item label="项目阶段:" class="row">
<el-select placeholder="请选择" v-model="queryParam.projectStage">
<el-option v-for="(item,index) in customerLevel" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option>
<el-option v-for="(item,index) in projectStage" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option>
</el-select>
</el-form-item>
<el-form-item label="项目类型:" class="row">
<el-select placeholder="请选择" v-model="queryParam.projectType">
<el-option v-for="(item,index) in customerLevel" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option>
<el-option v-for="(item,index) in projectType" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option>
</el-select>
</el-form-item>
<el-form-item label="项目类别:" class="row">
<el-select placeholder="请选择" v-model="queryParam.projectCategory">
<el-option v-for="(item,index) in customerLevel" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option>
<el-option v-for="(item,index) in projectCategory" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option>
</el-select>
</el-form-item>
<el-form-item label="投资估算:" class="row">
<el-input type="text" placeholder="请输入" v-model="queryParam.investmentAmount"></el-input>
<el-input type="text" placeholder="请输入金额" @input="number" v-model="queryParam.investmentAmount"></el-input>
</el-form-item>
<el-form-item label="可见范围:" class="row">
<el-select placeholder="请选择" v-model="queryParam.isPrivate">
......@@ -52,6 +52,8 @@
</template>
<script>
import {getEnterprise,getDictType,} from '@/api/main'
import {addProject} from '@/api/project/project'
export default {
name: 'addProject',
data(){
......@@ -65,23 +67,9 @@
label:'他人可见'
}
],//可见范围
dialogVisible:true,
isshow:true,
queryParam:{
companyId:'',//jsk企业id
companyName:'',//客户名称(企业名称
customerLevel:'',//客户等级
legalPerson:'',//法定代表人
registerCapital:'',//注册资本
registerAddress:'',//企业注册地址
creditCode:'',//社会统一信用代码
address:'',//选择的地址
provinceId:'',
cityId:'',
districtId:'',
},
xmjd:[],//项目阶段
queryParam:{
userId:this.$store.state.user,//用户id
userId:'',//用户id
projectName:'',// 项目名称
companyId:'',//企业id
ownerCompany:'',//业主单位
......@@ -91,32 +79,67 @@
investmentAmount:'',//投资估算
isPrivate:0,//可见范围(0 仅自己可见,1 他人可见)
},
rules:{
projectName:[{ required: true, message: '请输入非空格字符!', trigger: 'blur' },],
ownerCompany:[{ required: true, message: '请输入非空格字符!', trigger: 'blur' },],
},
showlist:false,
companData:[],//联想企业列表
projectStage:[],//项目阶段
projectType:[],//项目类型
projectCategory:[],//项目类别
}
},
mounted(){
},
created(){
//项目阶段
// project_stage_type
getDictType('project_stage_type').then(result=>{
this.projectStage = result.code == 200 ? result.data:[]
})
//项目类型
getDictType('project_type').then(result=>{
this.projectType = result.code == 200 ? result.data:[]
})
//项目类别
getDictType('project_category').then(result=>{
this.projectCategory = result.code == 200 ? result.data:[]
})
},
methods:{
//获取建设库客户
getCompany(value){
if (value.length>=2){
let param = {
keyword:value,
page:{
limit:20,
page:1
}
}
getEnterprise(JSON.stringify(param)).then(result=>{
if(result.code != 200)
return
this.showlist = true
this.companData = result.data.list
})
}
},
selCompany(item){
this.queryParam.companyId = item.jskEid
this.queryParam.ownerCompany = item.name.replace(/<[^>]+>/g, '')
this.showlist = false
},
//添加客户
submitForm(formName) {
if(this.queryParam.companyId=="" || this.queryParam.companyId == null){
this.$message.error({message:'请选择企业!',showClose:true})
return;
}
this.queryParam.userId = this.$store.state.user.userId
this.$refs[formName].validate((valid) => {
if (valid) {
addCustomer(this.queryParam).then(result=>{
addProject(this.queryParam).then(result=>{
if(result.code == 200){
this.$message.success('添加成功!')
this.dialogVisible = false
this.handleCurrentChange(1)
this.resetForm('ruleForm')
this.$emit('addproject')
}else{
this.$message.error(result.msg)
}
......@@ -127,25 +150,34 @@
},
resetForm(formName) {
this.queryParam = {
companyId:'',//jsk企业id
companyName:'',//客户名称(企业名称
customerLevel:'',//客户等级
legalPerson:'',//法定代表人
registerCapital:'',//注册资本
registerAddress:'',//企业注册地址
creditCode:'',//社会统一信用代码
address:'',//选择的地址
provinceId:'',
cityId:'',
districtId:'',
projectName:'',// 项目名称
companyId:'',//企业id
ownerCompany:'',//业主单位
projectStage:'',//项目阶段
projectType:'',//项目类型
projectCategory:'',//项目类别
investmentAmount:'',//投资估算
isPrivate:0,//可见范围(0 仅自己可见,1 他人可见)
},
this.dialogVisible = false
this.showlist = false
this.$emit("cancel",false)
},
//输入数字
number(value){
this.queryParam.investmentAmount = value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g, '$1')//输入2位小数
}
}
}
</script>
<style scoped>
.wordprimary{
display: inline;
padding-right: 26px;
}
.btn_primary{
padding: 0;
}
</style>
......@@ -2,7 +2,7 @@
<div class="app-container">
<el-card class="box-card noborder">
<div class="btns">
<div class="btn btn_default h28" @click="showNew"><div class="img img1"></div>新建项目商机</div>
<div class="btn btn_default h28" @click="addNew(true)"><div class="img img1"></div>新建项目商机</div>
<div class="btn btn_primary h28"><div class="img img2"></div>批量导入</div>
</div>
<el-tabs v-model="activeName" @tab-click="handleClick" class="tabpane w100">
......@@ -18,22 +18,79 @@
<span>
地区团队
</span>
<div class="selectInput" @click="getxmdq"><span class="selecttext">{{xmdqlabel}}<i class="el-icon-caret-bottom"></i></span>
<el-cascader class="input"
<div class="select-popper">
<span :class="{ color_text:searchParam.province.length ||searchParam.city.length ||searchParam.area.length,}">
项目地区{{searchParam.province.length ||searchParam.city.length ||searchParam.area.length? searchParam.province.length +searchParam.city.length +searchParam.area.length +"项": ""}}
<i class="el-icon-caret-bottom"></i>
</span>
<el-cascader class="cascader-region select-location"
ref="myCascader"
:props='props' :options="options"
:props='props' :options="addressList"
@change="handleChange"></el-cascader>
</div>
</div>
<div class="selli">
<span>
项目信息
</span>aaa
</span>
<div class="select-popper">
<span class="color_text">
项目类型{{searchParam.projectType.length? searchParam.projectType.length + "项": ""}}
<i class="el-icon-caret-bottom"></i>
</span>
<el-select placeholder="请选择" v-model="searchParam.projectType" multiple class="select-multiple">
<el-option v-for="(item,index) in projectType" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option>
</el-select>
</div>
<div class="select-popper">
<el-dropdown @command="transactionPricehandleCommand" trigger="click" ref="transactionPriceShowPopper" :hide-on-click="false">
<span class="el-dropdown-link" :class="searchParam.minAmount ||searchParam.maxAmount ? 'color_text': ''">
投资估算{{searchParam.minAmount ||searchParam.maxAmount? " 1项": ""}}<i class="el-icon-caret-bottom"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-for="(item, i) in amountOptions" :class="searchParam.minAmount == item.value[0] &&searchParam.maxAmount == item.value[1] &&
!minAmount &&!maxAmount? 'color_text': '' " :key="i" :command="item.value">{{ item.label }}</el-dropdown-item>
<el-dropdown-item command="" style="padding: 0; text-indent: 20px">
<div @mouseenter="transactionPriceShowPopper = true" @mouseleave="transactionPriceShowPopper = false">
<span :class="(minAmount || maxAmount) &&searchParam.minAmount ==minAmount &&
searchParam.maxAmount == maxAmount? 'color_text': '' ">
自定义<i class="el-icon-arrow-right"></i>
</span>
<div class="jabph_popper_box" style="position: absolute" v-if="transactionPriceShowPopper">
<div class="jabph_popper_wrap">
<el-input class="jabph_popper_input" v-limit-num clearable v-model="minAmount"></el-input>
</div>
<div class="jabph_popper_wrap">
<el-input class="jabph_popper_input" v-limit-num clearable v-model="maxAmount"></el-input>
</div>
<div style="">
<el-button size="mini" @click="transactionPriceCancel">取消</el-button>
<el-button type="primary" size="mini" @click="transactionPricePopperConfirm">确定</el-button>
</div>
</div>
</div>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<div class="select-popper">
<span class="color_text">
项目阶段{{searchParam.projectStage.length? searchParam.projectStage.length + "项": ""}}
<i class="el-icon-caret-bottom"></i>
</span>
<el-select v-model="searchParam.projectStage" class="select-multiple" multiple placeholder="请选择">
<el-option v-for="(item,index) in projectStage" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option>
</el-select>
</div>
</div>
</div>
<div class="scbtns">
<div class="btn btn_primary h34">查询</div>
<div class="btn btn_cancel h34">重置</div>
<div class="btn btn_primary h34" @click="getList(1)">查询</div>
<div class="btn btn_cancel h34" @click="reset">重置</div>
</div>
</el-tabs>
</el-card>
......@@ -82,287 +139,150 @@
</div>
</div>
</div>
<el-dialog
class="popups"
:visible.sync="dialogVisible"
width="464px">
<div class="poptitle">
<img src="@/assets/images/economies/icon.png">
<span>新建商机</span>
</div>
<el-form class="popform i" label-width="85px">
<div class="row">
<span class="left"><i>*</i>项目名称:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
<div class="row">
<span class="left"><i>*</i>业主单位:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
<div class="row">
<span class="left">项目阶段:</span>
<el-select placeholder="请选择">
<el-option label="cccc" value="11"></el-option>
<el-option label="cccc" value="121"></el-option>
</el-select>
</div>
<div class="row">
<span class="left">项目类型:</span>
<el-select placeholder="请选择">
<el-option label="cccc" value="11"></el-option>
<el-option label="cccc" value="121"></el-option>
</el-select>
</div>
<div class="row">
<span class="left">项目类别:</span>
<el-select placeholder="请选择">
<el-option label="cccc" value="11"></el-option>
<el-option label="cccc" value="121"></el-option>
</el-select>
</div>
<div class="row">
<span class="left">投资估算:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
<div class="row">
<span class="left">可见范围:</span>
<el-select placeholder="请选择">
<el-option label="cccc" value="11"></el-option>
<el-option label="cccc" value="121"></el-option>
</el-select>
</div>
<div class="popbot">
<div class="wordprimary">前往商机雷达寻找项目线索></div>
<div class="btn btn_cancel h32" @click="cancel">取消</div>
<div class="btn btn_primary h32">新建商机</div>
</div>
</el-form>
</el-dialog>
</el-card>
<addproject v-if="isshow" @addproject="add" @cancel="addNew"></addproject>
</div>
</template>
<script>
import "@/assets/styles/project.scss"
import prvinceTree from '@/assets/json/provinceTree'
import {getProjectlist} from '@/api/project/project'
import {getDictType,} from '@/api/main'
import addproject from './component/addProject'
export default {
name: 'ProjectList',
components:{addproject},
data() {
return {
props:{
multiple: true},
xmdq: [],
xmdqlabel:'项目地区',
props:{multiple: true},
activeName:'first',
options: [
projectStage:[],//项目阶段
isshow:false,//新增商机
//项目地区
addressList:[],
addressType: [],
// 查询参数
minAmount:'',//投资估算最小值
maxAmount:'',//投资估算最大值
searchParam: {
projectName:'',//项目名称
ownerCompany:'',//业主单位
projectType:'',//项目类型
projectStage:'',//项目阶段
minAmount:'',//投资估算最小值
maxAmount:'',//投资估算最大值
Amount:'',//投资估算
province: [],
city: [],
area: [],
pageNum:1,
pageSize:10,
},
domicile:[],
projectType:[],//项目类型
projectCategory:[],//项目类别
amountOptions:[
{
value: 'zhinan',
label: '指南',
children: [{
value: 'shejiyuanze',
label: '设计原则',
children: [{
value: 'yizhi',
label: '一致'
}, {
value: 'fankui',
label: '反馈'
}, {
value: 'xiaolv',
label: '效率'
}, {
value: 'kekong',
label: '可控'
}]
}, {
value: 'daohang',
label: '导航',
children: [{
value: 'cexiangdaohang',
label: '侧向导航'
}, {
value: 'dingbudaohang',
label: '顶部导航'
}]
}]
}, {
value: 'zujian',
label: '组件',
children: [{
value: 'basic',
label: 'Basic',
children: [{
value: 'layout',
label: 'Layout 布局'
}, {
value: 'color',
label: 'Color 色彩'
}, {
value: 'typography',
label: 'Typography 字体'
}, {
value: 'icon',
label: 'Icon 图标'
}, {
value: 'button',
label: 'Button 按钮'
}]
}, {
value: 'form',
label: 'Form',
children: [{
value: 'radio',
label: 'Radio 单选框'
}, {
value: 'checkbox',
label: 'Checkbox 多选框'
}, {
value: 'input',
label: 'Input 输入框'
}, {
value: 'input-number',
label: 'InputNumber 计数器'
}, {
value: 'select',
label: 'Select 选择器'
}, {
value: 'cascader',
label: 'Cascader 级联选择器'
}, {
value: 'switch',
label: 'Switch 开关'
}, {
value: 'slider',
label: 'Slider 滑块'
}, {
value: 'time-picker',
label: 'TimePicker 时间选择器'
}, {
value: 'date-picker',
label: 'DatePicker 日期选择器'
}, {
value: 'datetime-picker',
label: 'DateTimePicker 日期时间选择器'
}, {
value: 'upload',
label: 'Upload 上传'
}, {
value: 'rate',
label: 'Rate 评分'
}, {
value: 'form',
label: 'Form 表单'
}]
}, {
value: 'data',
label: 'Data',
children: [{
value: 'table',
label: 'Table 表格'
}, {
value: 'tag',
label: 'Tag 标签'
}, {
value: 'progress',
label: 'Progress 进度条'
}, {
value: 'tree',
label: 'Tree 树形控件'
}, {
value: 'pagination',
label: 'Pagination 分页'
}, {
value: 'badge',
label: 'Badge 标记'
}]
}, {
value: 'notice',
label: 'Notice',
children: [{
value: 'alert',
label: 'Alert 警告'
}, {
value: 'loading',
label: 'Loading 加载'
}, {
value: 'message',
label: 'Message 消息提示'
}, {
value: 'message-box',
label: 'MessageBox 弹框'
}, {
value: 'notification',
label: 'Notification 通知'
}]
}, {
value: 'navigation',
label: 'Navigation',
children: [{
value: 'menu',
label: 'NavMenu 导航菜单'
}, {
value: 'tabs',
label: 'Tabs 标签页'
}, {
value: 'breadcrumb',
label: 'Breadcrumb 面包屑'
}, {
value: 'dropdown',
label: 'Dropdown 下拉菜单'
}, {
value: 'steps',
label: 'Steps 步骤条'
}]
}, {
value: 'others',
label: 'Others',
children: [{
value: 'dialog',
label: 'Dialog 对话框'
}, {
value: 'tooltip',
label: 'Tooltip 文字提示'
}, {
value: 'popover',
label: 'Popover 弹出框'
}, {
value: 'card',
label: 'Card 卡片'
}, {
value: 'carousel',
label: 'Carousel 走马灯'
}, {
value: 'collapse',
label: 'Collapse 折叠面板'
}]
}]
}, {
value: 'ziyuan',
label: '资源',
children: [{
value: 'axure',
label: 'Axure Components'
}, {
value: 'sketch',
label: 'Sketch Templates'
}, {
value: 'jiaohu',
label: '组件交互文档'
}]
}],
dialogVisible:false,
label: "5000万以下",
value: [0,5000],
},
{
label: "5000万-1亿",
value: [5000,10000],
},
{
label: "1亿-3亿",
value: [10000,30000],
},
{
label: "3亿以上",
value: [30000,''],
},
],
contractSignTimeValue: "",
transactionPriceShowPopper: false,
}
},
created() {
this.prvinceTree()
// this.getList(1)
//项目阶段
getDictType('project_stage_type').then(result=>{
this.projectStage = result.code == 200 ? result.data:[]
})
//项目类型
getDictType('project_type').then(result=>{
this.projectType = result.code == 200 ? result.data:[]
})
//项目类别
getDictType('project_category').then(result=>{
this.projectCategory = result.code == 200 ? result.data:[]
})
},
methods: {
//获取商机列表
getList(pageNum){
this.searchParam.pageNum = pageNum
getProjectlist(this.searchParam).then(result=>{
console.log(result)
})
},
reset(){
this.searchParam ={
projectName:'',//项目名称
ownerCompany:'',//业主单位
projectType:'',//项目类型
projectStage:'',//项目阶段
minAmount:'',//投资估算最小值
maxAmount:'',//投资估算最大值
Amount:'',//投资估算
province: [],
city: [],
area: [],
pageNum:1,
pageSize:10,
}
},
//地区
async prvinceTree() {
// await axios.post("https://files.jiansheku.com/file/json/common/provinceTree.json", {}, {
// headers: {
// 'Content-Type': 'application/json'
// }
// }).then(res => {
// if (res.data.code == 200) {
// console.log(res.data.data)
// }
// })
// console.log(prvinceTree)
this.addressList = prvinceTree;
this.getadd(this.addressList)
},
//处理项目地区
getadd(row) {
this.addrcallback(row,this.getadd)
},
addrcallback(row,callback){
if(row){
row.forEach(item => {
item.value = item.id
callback && callback(item.children)
})
}
},
//新建项目
showNew(){
this.dialogVisible = true
this.isshow = true
},
addNew(isshow){
this.isshow = isshow
},
cancel(){
this.dialogVisible = false
add(){
this.isshow = false
this.getList(1)
},
toDetail(){
let Id = '111'
......@@ -375,27 +295,76 @@ export default {
},
handleChange(value) {
console.log(value);
this.xmdq = value
var labelString = this.$refs.myCascader.getCheckedNodes()[0].pathLabels;
console.log(labelString)
if(labelString.length>0){
let dq = ''
labelString.forEach((item,index)=>{
let str = ','
if(index == 0)
str = ''
dq += str + item
})
this.xmdqlabel = dq
}else{
this.xmdqlabel = '项目地区'
}
// console.log(value);
// var labelString = this.$refs.myCascader.getCheckedNodes()[0].pathLabels;
let arr = this.$refs.myCascader.getCheckedNodes();
// console.log(arr)
let province = [],
city = [],
area = [];
this.domicile = [];
for (var i in arr) {
if (arr[i].parent) {
if (!arr[i].parent.checked) {
arr[i].hasChildren && city.push(arr[i].value);
arr[i].hasChildren && this.domicile.push(arr[i].label);
!arr[i].hasChildren && area.push(arr[i].value);
!arr[i].hasChildren && this.domicile.push(arr[i].label);
}
} else {
province.push(arr[i].value);
this.domicile.push(arr[i].label);
}
}
var obj = JSON.parse(JSON.stringify(this.searchParam));
obj.province = province;
obj.city = city;
obj.area = area;
this.searchParam = obj;
},
transactionPricePopperConfirm() {
if (
this.minAmount &&
this.maxAmount &&
!(Number(this.maxAmount) > Number(this.minAmount))
) {
return this.$message.warning("最小值必须小于最大值,请重新输入!");
}
this.transactionPriceShowPopper = false;
var obj = JSON.parse(JSON.stringify(this.searchParam));
obj.minAmount = this.minAmount;
obj.maxAmount = this.maxAmount;
this.searchParam = obj;
this.$refs.transactionPriceShowPopper.hide();
},
transactionPriceCancel() {
this.transactionPriceShowPopper = false;
this.$refs.transactionPriceShowPopper.hide();
},
transactionPricehandleCommand(command) {
if (command) {
this.$refs.transactionPriceShowPopper.hide();
var obj = JSON.parse(JSON.stringify(this.searchParam));
this.minAmount = "";
this.maxAmount = "";
if (command == "不限") {
obj.minAmount = "";
obj.maxAmount = "";
} else {
obj.minAmount = command[0];
obj.maxAmount = command[1];
}
this.searchParam = obj;
}
},
}
}
</script>
<style lang="scss" scoped>
.jabph_popper_box{
left: 110px;
}
.noborder{
position: relative;
}
......@@ -562,26 +531,6 @@ export default {
}
}
}
.selectInput{
position: relative;
display: inline-block;
&:hover{
.selecttext{color: #0081FF;
i{color: #0081FF;}}
}
.selecttext{
i{
margin-left: 5px;
color: #a7a7a7;
}
}
.input{
position: absolute;
left: 0;
opacity: 0;
height: 20px;
}
}
.popbot{
.wordprimary{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment