Commit 10c340f3 authored by MyName's avatar MyName

项目管理

parent 6306f4e5
......@@ -15,4 +15,59 @@ export function getProjectlist(param) {
params: param
})
}
//删除项目
export function delProject(param) {
return request({
url: '/business/info/remove/'+param,
method: 'DELETE',
})
}
//建设内容
export function getJSNR(param) {
return request({
url: '/business/info/construction/'+param,
method: 'GET',
})
}
//项目速览
export function getXMSL(param) {
return request({
url: '/business/info/browse/'+param,
method: 'GET',
})
}
//项目速览修改
export function editXMSL(param) {
return request({
url: '/business/info/edit',
method: 'POST',
data:param
})
}
//查询项目联系人
export function getLXR(param) {
return request({
url: '/business/contacts/list',
method: 'GET',
params:param
})
}
//修改项目联系人
export function editLXR(param) {
return request({
url: '/business/contacts/edit',
method: 'POST',
data:param
})
}
//新增项目联系人
export function addLXR(param) {
return request({
url: '/business/contacts/add',
method: 'POST',
data:param
})
}
......@@ -124,6 +124,7 @@
border-radius: 2px;
line-height: 28px;
cursor: pointer;
position: relative;
>span{
padding-left: 8px;
}
......@@ -131,6 +132,15 @@
color: rgba(35,35,32,0.4);
margin-left: 4px;
}
.timeinput{
opacity: 0;
position: absolute;
.el-input__inner{
padding: 0;
margin: 0;
border: 0;
}
}
}
}
}
......@@ -570,7 +580,7 @@
.el-input__prefix{
left: 8px;
top: -2px;
top: 3px;
}
.el-input__suffix{
height: 32px;
......@@ -988,7 +998,7 @@
background: rgba(0, 129, 255, 0.16);
font-size: 12px;
line-height: 22px;
top: 149px;
top: 148px;
right: 61px;
cursor: pointer;
.img{
......@@ -1067,3 +1077,5 @@
white-space: nowrap;
padding-right: 10px;
}
.none{display: none}
......@@ -10,7 +10,7 @@
<div class="empty" v-if="tableData.total==0 && isNew == true">
<img src="@/assets/images/project/empty.png">
<div class="p1">添加你的第一位客户吧</div>
<div class="p2">抱歉,你还未添加客户,快去添加吧</div>
<div class="p2">抱歉你还未添加客户,快去添加吧</div>
<div class="btn btn_primary h36 w88" @click="opennew">添加客户</div>
<div class="btn btn_primary btn_shallow h36 w88" @click="pldrs">批量导入</div>
</div>
......@@ -227,56 +227,7 @@
</el-dialog>
</el-card>
</div>
<div class="uploadwin" v-if="pldr">
<div class="upload" v-if="addfile==false">
<div class="up_title">批量导入客户</div>
<div class="up_box">
<el-upload :class="{'none':isUpload == true}"
class="upload-demo"
:action="action"
:multiple="false"
accept=".xls,.xlsx"
drag
ref="upload"
:auto-upload="false"
:file-list="fileList"
:on-change="handleFileListChange"
:headers="headers"
:on-success="onSuccess">
<img class="up_img" src="@/assets/images/project/upload.png">
<div class="up_text">点击选择或将文件(xls,xlsx)拖拽至此上传成员名录</div>
<div class="up_tip">导入的文件内容必须依照下载模板的要求填写</div>
<div class="up_tip">上传文件最大为2M,仅支持Excel表格文件(xls,xlsx)</div>
<div class="up_tip">导入已存在的客户将自动跳过</div>
</el-upload>
<div class="up_success" v-if="isUpload == true">
<img src="@/assets/images/project/success.png">上传成功
</div>
<div class="btn_download" v-if="isUpload == false" @click="downloadClick"><div class="img"></div>点击下载</div>
</div>
<div class="btns">
<div class="btn btn_primary btn_disabled h34" v-if="isUpload==false">确定导入</div>
<div class="btn btn_primary h34" @click="importConfirmClick" v-else>确定导入</div>
<div class="btn btn_default h34">取消</div>
</div>
</div>
<div class="success" v-if="addfile==true">
<div v-if="addsuccess==false">
<img class="img" src="@/assets/images/project/clock.png">
<div class="p1">查询客户中...</div>
<div class="p2">请耐心等待,过程大概30秒</div>
</div>
<div v-if="addsuccess == true">
<div class="p3">
<img src="@/assets/images/project/success.png">查询成功
</div>
<div class="p2">成功导入客户信息</div>
<div class="btns">
<div class="btn btn_primary h32" @click="handleCurrentChange(1)">查看</div>
</div>
</div>
</div>
</div>
<batchimport v-if="pldr" :importtype="types" @cancels="importCancel" @getdatas="handleCurrentChange(1)"></batchimport>
</div>
</template>
......@@ -286,12 +237,15 @@
import {getCustomerList,importData,addCustomer} from '@/api/custom/custom'
import {getEnterprise,getDictType,} from '@/api/main'
import prvinceTree from '@/assets/json/provinceTree'
import batchimport from '../../project/projectList/component/batchImport'
import axios from 'axios'
export default {
name: 'CustomList',
components:{batchimport},
data() {
return{
pldr: false,
types:'custom',
searchParam:{
companyName:'',
pageNum:1,
......@@ -304,9 +258,6 @@ export default {
tipslit:[],//项目标签
tipsvalue:"",//标签填写内容
tableData: [],//列表
isUpload:false,//有上传的文件
addfile:false,//已上传文件
addsuccess:false,//已成功加入数据
companData:[],//联想企业列表
customerLevel:[],//客户等级
......@@ -352,9 +303,9 @@ export default {
},
pldrs(){
this.pldr = true
this.addfile = false
this.isUpload = false
this.addsuccess = false
},
importCancel(){
this.pldr = false
},
//获取客户列表
getCustomerList(){
......@@ -372,6 +323,7 @@ export default {
},
//翻页
handleCurrentChange(val) {
this.pldr=false
this.isNew = false
this.searchParam.pageNum=val
this.getCustomerList()
......@@ -472,35 +424,6 @@ export default {
this.dialogVisible = false
this.showlist = false
},
// 批量导入
importConfirmClick() {
if (this.fileList.length > 0) {
this.$refs["upload"].submit();
this.getCustomerList();
this.addfile = true
} else {
this.$message("请先选择文件");
}
},
downloadClick() {
let a = document.createElement("a");
a.setAttribute("href", "/file/Template.xlsx");
a.setAttribute("download", "批量导入模版.xlsx");
document.body.appendChild(a);
a.click();
},
handleFileListChange(file, fileList) {
if (fileList.length > 0) {
this.fileList = [fileList[fileList.length - 1]];
this.isUpload = true
}
},
onSuccess(res, file, fileList) {
if(res.code == 200 )
this.addsuccess = true
else
this.$message.error({message:res.msg,showClose:true})
},
//地区
async prvinceTree() {
......@@ -617,5 +540,4 @@ export default {
padding-right: 26px;
}
}
.none{display: none}
</style>
......@@ -7,7 +7,7 @@
>
<div class="poptitle">
<img src="@/assets/images/economies/icon.png">
<span>添加客户</span>
<span>添加项目</span>
</div>
<el-form class="popform j" :model="queryParam" :rules="rules" ref="ruleForm" label-width="130px">
<el-form-item label="项目名称:" class="row" prop="projectName">
......
<template>
<div class="uploadwin">
<div class="upload" v-if="addfile==false">
<div class="up_title">批量导入{{titletext}}</div>
<div class="up_box">
<el-upload :class="{'none':isUpload == true}"
class="upload-demo"
:action="action"
:multiple="false"
accept=".xls,.xlsx"
drag
ref="upload"
:auto-upload="false"
:file-list="fileList"
:on-change="handleFileListChange"
:headers="headers"
:on-success="onSuccess">
<img class="up_img" src="@/assets/images/project/upload.png">
<div class="up_text">点击选择或将文件(xls,xlsx)拖拽至此上传成员名录</div>
<div class="up_tip">导入的文件内容必须依照下载模板的要求填写</div>
<div class="up_tip">上传文件最大为2M,仅支持Excel表格文件(xls,xlsx)</div>
<div class="up_tip">导入已存在的客户将自动跳过</div>
</el-upload>
<div class="up_success" v-if="isUpload == true">
<img src="@/assets/images/project/success.png">上传成功
</div>
<div class="btn_download" v-if="isUpload == false" @click="downloadClick"><div class="img"></div>点击下载</div>
</div>
<div class="btns">
<div class="btn btn_primary btn_disabled h34" v-if="isUpload==false">确定导入</div>
<div class="btn btn_primary h34" @click="importConfirmClick" v-else>确定导入</div>
<div class="btn btn_default h34" @click="importCancel">取消</div>
</div>
</div>
<div class="success" v-if="addfile==true">
<div v-if="addsuccess==false">
<img class="img" src="@/assets/images/project/clock.png">
<div class="p1">查询客户中...</div>
<div class="p2">请耐心等待,过程大概30秒</div>
</div>
<div v-if="addsuccess == true">
<div class="p3">
<img src="@/assets/images/project/success.png">查询成功
</div>
<div class="p2">成功导入客户信息</div>
<div class="btns">
<div class="btn btn_primary h32" @click="getmsg">查看</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { getToken } from "@/utils/auth";
import "@/assets/styles/project.scss"
import {importData} from '@/api/custom/custom'
export default {
name: 'batchImport',
props:{
importtype:''
},
data(){
return{
isUpload:false,//有上传的文件
addfile:false,//已上传文件
addsuccess:false,//已成功加入数据
//批量导入
action:"",
fileList: [],
headers: {
Authorization: "Bearer " + getToken(),
},
downloadhref:'',//样例地址
titletext:'',
}
},
created(){
console.log(this.importtype )
if(this.importtype == 'project'){//项目管理
this.downloadhref = '/file/projectTemplate.xlsx'
this.titletext = '项目'
this.action = process.env.VUE_APP_BASE_API + '/business/info/upload'
}
if(this.importtype == 'custom'){//客户管理
this.downloadhref = '/file/Template.xlsx'
this.titletext = '客户'
this.action = process.env.VUE_APP_BASE_API + "/customer/importData"
}
},
methods:{
getmsg(){
this.$emit('getdatas')
},
handleFileListChange(file, fileList) {
if (fileList.length > 0) {
this.fileList = [fileList[fileList.length - 1]];
this.isUpload = true
}
},
onSuccess(res, file, fileList) {
if(res.code == 200 )
this.addsuccess = true
else
this.$message.error({message:res.msg,showClose:true})
},
downloadClick() {
let a = document.createElement("a");
a.setAttribute("href", this.downloadhref);
a.setAttribute("download", "批量导入模版.xlsx");
document.body.appendChild(a);
a.click();
},
// 批量导入
importConfirmClick() {
if (this.fileList.length > 0) {
this.$refs["upload"].submit();
this.addfile = true
} else {
this.$message("请先选择文件");
}
},
importCancel(){
this.addfile = false
this.isUpload = false
this.addsuccess = false
this.$emit('cancels')
},
}
}
</script>
<style scoped>
</style>
......@@ -13,12 +13,12 @@
<div class="empty">
<img src="@/assets/images/project/empty.png">
<div class="p1">暂无数据展示</div>
<div class="p2">抱歉,你还未添加相关数据,快去添加吧</div>
<div class="p2">抱歉你还未添加相关数据,快去添加吧</div>
<div class="btn btn_primary h36 w102" @click="opennew">新增联系人</div>
</div>
</template>
<el-table-column
prop="date"
prop="name"
label="姓名"
width="113">
</el-table-column>
......@@ -27,34 +27,34 @@
label="操作"
width="118">
<template slot-scope="scope">
<div class="edit">
<div class="edit" @click="getDetail(scope.row)">
<img src="@/assets/images/project/edit.png">
<span>编辑</span>
</div>
</template>
</el-table-column>
<el-table-column
prop="name"
prop="role"
label="角色"
sortable
width="146">
</el-table-column>
<el-table-column
prop="address"
prop="office"
label="公司/机关">
</el-table-column>
<el-table-column
prop="name"
prop="position"
label="职位"
width="125">
</el-table-column>
<el-table-column
prop="name"
prop="phone"
label="联系方式"
width="175">
</el-table-column>
<el-table-column
prop="name"
prop="accendant"
label="内部维护人"
width="146">
</el-table-column>
......@@ -63,11 +63,11 @@
<div class="btn btn_primary h28" @click="opennew"><div class="img img1"></div>新增联系人</div>
<el-pagination
background
:page-size="20"
:current-page="1"
:page-size="searchParam.pageSize"
:current-page="searchParam.pageNum"
@current-change="handleCurrentChange"
layout="prev, pager, next"
:total="1000">
:total="total">
</el-pagination>
</div>
</div>
......@@ -77,33 +77,30 @@
width="464px">
<div class="poptitle">
<img src="@/assets/images/economies/icon.png">
<span>重庆市轨道交通3号线二期工程4标段施工总承包</span>
<span>{{projectname}}</span>
</div>
<el-form class="popform" label-width="137px">
<el-form-item label="联系人姓名:" class="row">
<el-input type="text" placeholder="请输入"></el-input>
<el-input type="text" v-model="queryParam.name" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="联系人角色:" class="row">
<el-select placeholder="请选择">
<el-option label="cccc" value="11"></el-option>
<el-option label="cccc" value="121"></el-option>
</el-select>
<el-input type="text" v-model="queryParam.role" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="联系人职位:" class="row">
<el-input type="text" placeholder="请输入"></el-input>
<el-input type="text" v-model="queryParam.position" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="联系人公司/机关:" class="row">
<el-input type="text" placeholder="请输入"></el-input>
<el-input type="text" v-model="queryParam.office" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="内部维护人:" class="row">
<el-input type="text" placeholder="请输入"></el-input>
<el-input type="text" v-model="queryParam.accendant" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="联系方式:" class="row">
<el-input type="text" placeholder="请输入"></el-input>
<el-input type="text" v-model="queryParam.phone" placeholder="请输入"></el-input>
</el-form-item>
<div class="popbot">
<div class="btn btn_cancel h32" @click="cancel">返回</div>
<div class="btn btn_primary h32">保存</div>
<div class="btn btn_primary h32" @click="save">保存</div>
</div>
</el-form>
</el-dialog>
......@@ -113,40 +110,68 @@
<script>
import "@/assets/styles/project.scss"
import {getLXR,editLXR,addLXR} from '@/api/project/project'
export default {
name: 'lxr',
data(){
return{
dialogVisible:false,
isnew:true,//是否新增
textarea:"",
nowedit:-1,//当前正在编辑的文本
tipslit:[],//项目标签
tipsvalue:"",//标签填写内容
tableData: [
{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄'
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1516 弄'
}
]
tableData: [],
searchParam:{
pageNum:1,
pageSize:20,
businessId:this.$route.query.id
},
id:this.$route.query.id,
total:0,
projectname:this.$route.query.projectname,
queryParam:[],
}
},
created(){
this.getList()
},
methods:{
getDetail(item){
this.dialogVisible = true
this.queryParam = item
this.isnew = false
},
getList(){
getLXR(this.searchParam).then(result=>{
this.tableData = result.code == 200?result.rows:[]
this.total = result.code == 200?result.total:0
})
},
save(){
if(this.isnew == false){
editLXR(this.queryParam).then(result=>{
if(result.code == 200){
this.$message.success('保存成功!')
this.getList()
this.dialogVisible = false
}
})
}
if(this.isnew == true){
addLXR(this.queryParam).then(result=>{
if(result.code == 200){
this.$message.success('新增成功!')
this.getList()
this.dialogVisible = false
}
})
}
},
//翻页
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.searchParam.pageNum = val
this.getList()
},
cancel(){
this.dialogVisible = false
......@@ -154,6 +179,16 @@
//打开新建窗口
opennew(){
this.dialogVisible = true
this.isnew = true
this.queryParam = {
businessId:this.id,
name:"",
role:"",
office:"",
position:"",
phone:"",
accendant:"",
}
},
}
}
......
......@@ -22,7 +22,7 @@
<div class="empty">
<img src="@/assets/images/project/empty.png">
<div class="p1">暂无数据展示</div>
<div class="p2">抱歉,你还未添加相关数据,快去添加吧</div>
<div class="p2">抱歉你还未添加相关数据,快去添加吧</div>
<div class="btn btn_primary h36 w102" @click="opennew">新增联系人</div>
</div>
</template>
......
......@@ -169,8 +169,12 @@
<script>
import "@/assets/styles/project.scss"
import {getDictType,} from '@/api/main'
import {} from '@/api/project/project'
export default {
name: 'xmsl',
props:{
datas:'',
},
data(){
return{
nowedit:-1,//当前正在编辑的文本
......@@ -178,10 +182,10 @@
tipsvalue:"",//标签填写内容
xmjd:'待添加',
projectStage:[],//项目阶段
sldata:this.datas,
}
},
created(){
//项目阶段
getDictType('project_stage_type').then(result=>{
this.projectStage = result.code == 200 ? result.data:[]
......
......@@ -49,7 +49,7 @@
<div class="empty">
<img src="@/assets/images/project/empty.png">
<div class="p1">暂无数据展示</div>
<div class="p2">抱歉,你还未添加相关数据,快去添加吧</div>
<div class="p2">抱歉你还未添加相关数据,快去添加吧</div>
<div class="btn btn_primary h36 w102" @click="opennew">新增联系人</div>
</div>
</template>
......
......@@ -103,7 +103,7 @@
</div>
</el-card>
<!--项目概览-->
<xmsl v-if="thistag == 'xmsl'"></xmsl>
<xmsl v-if="thistag == 'xmsl'" :datas="ProjectData"></xmsl>
<!--建设内容-->
<jsnr v-if="thistag == 'jsnr'"></jsnr>
<!--联系人-->
......@@ -132,6 +132,7 @@
import zlwd from './component/zlwd.vue'
import xgqy from './component/xgqy.vue'
import prvinceTree from '@/assets/json/provinceTree'
import {getXMSL} from '@/api/project/project'
export default {
name: 'detail',
components: {xmsl,jsnr,lxr,gjjl,gzdb,zlwd,xgqy},
......@@ -161,10 +162,13 @@
addressList:[],
domicile:[],
props:{ checkStrictly: true, expandTrigger: 'hover' },
id:'',
ProjectData:null,
}
},
created(){
this.prvinceTree()
this.id = this.$route.query.id
//项目阶段
getDictType('project_stage_type').then(result=>{
this.projectStage = result.code == 200 ? result.data:[]
......@@ -177,6 +181,12 @@
getDictType('project_category').then(result=>{
this.projectCategory = result.code == 200 ? result.data:[]
})
//获取基本信息
getXMSL(this.id).then(result=>{
this.ProjectData = result.code==200?result.data:[]
this.$route.query.projectname = result.data.projectName
})
},
methods: {
//地区
......
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