Commit 8318a9e1 by lixinming

版本1

parent 75049000
...@@ -64,9 +64,9 @@ Date.prototype.format = function(fmt) ...@@ -64,9 +64,9 @@ Date.prototype.format = function(fmt)
// 设置请求token // 设置请求token
Axios.interceptors.request.use(config => { Axios.interceptors.request.use(config => {
let token = sessionStorage.getItem('token') let token = sessionStorage.getItem('token')
let user = JSON.parse(sessionStorage.getItem('user')); //let user = JSON.parse(sessionStorage.getItem('user'));
config.headers['token'] = token; config.headers['token'] = token;
if (user) config.headers['userid'] = user.id; // if (user) config.headers['userid'] = user.id;
return config return config
}) })
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
</el-form> </el-form>
<div class="null40Div"></div> <div class="null40Div"></div>
<div class="createProjectButtonBox"> <div class="createProjectButtonBox">
<el-button size="mini" round>创建项目</el-button> <el-button @click="createProject" size="mini" round>创建项目</el-button>
</div> </div>
</el-card> </el-card>
</div> </div>
...@@ -41,17 +41,25 @@ export default { ...@@ -41,17 +41,25 @@ export default {
projectType:"", projectType:"",
projectDes:"", projectDes:"",
projectSelectList:[ projectSelectList:[
{label:"园区", value:1}, {label:"教育", value:1},
{label:"教育", value:2}, {label:"企业", value:2},
{label:"企业", value:3}, {label:"政府", value:3},
{label:"政府", value:4}, {label:"园区", value:4},
], ],
} }
}, },
components: { }, components: { },
methods:{ methods:{
async createProject() {
let addInfo = { pName:this.projectName, pType:this.projectType, pDescribe:this.projectDes };
let result = await this.$store.dispatch('project/createProject', addInfo);
if (result.data && result.data.isOk) {
this.$message.success("创建成功");
} else {
this.$message.error("创建失败");
}
}
} }
} }
</script> </script>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div class="taskInfoBox"> <div class="taskInfoBox">
<el-divider content-position="left">反馈描述</el-divider> <el-divider content-position="left">反馈描述</el-divider>
<div class="taskInfoMainBox"> <div class="taskInfoMainBox">
<el-input disabled="false" resize="none" type="textarea" :rows="8" placeholder="请输入内容" v-model="feedbackDsc"> <el-input :disabled="true" resize="none" type="textarea" :rows="8" v-model="feedbackDsc">
</el-input> </el-input>
</div> </div>
<el-divider content-position="left">解决方案</el-divider> <el-divider content-position="left">解决方案</el-divider>
...@@ -15,13 +15,10 @@ ...@@ -15,13 +15,10 @@
<div class="solveBox"> <div class="solveBox">
<el-form ref="form" label-width="80px"> <el-form ref="form" label-width="80px">
<el-form-item label="指派人"> <el-form-item label="指派人">
<el-select size="mini" v-model="editInfo.targetList" multiple collapse-tags style="margin-left: 20px;" placeholder="请选择"> <el-tag v-for="item in peopleList" disable-transitions :key="item"> {{item}} </el-tag>
<el-option v-for="item in peopleList" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="是否解决"> <el-form-item label="是否解决">
<el-radio-group v-model="editInfo.state"> <el-radio-group v-model="state">
<el-radio :label="1"></el-radio> <el-radio :label="1"></el-radio>
<el-radio :label="2"></el-radio> <el-radio :label="2"></el-radio>
</el-radio-group> </el-radio-group>
...@@ -30,24 +27,64 @@ ...@@ -30,24 +27,64 @@
</div> </div>
</div> </div>
<div class="solvButtonBox"> <div class="solvButtonBox">
<el-button size="mini" round>提交</el-button> <el-button size="mini" @click="editFeedback" round>提交</el-button>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
export default { export default {
props:["checkId"],
data() { data() {
return { return {
feedbackDsc:"问题描述描述描述 萨芬顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶 胜多负少辣椒粉撒娇", feedbackDsc:"",
feedbackSol:"", feedbackSol:"",
editInfo:{ state:1,
state:1,
targetList:[] lock:false,
}
qId:this.checkId,
peopleList:[],
} }
}, },
mounted:function() {
this.initTask(this.qId);
this.lock = false;
},
methods:{ methods:{
initTask:async function(qId) {
this.qId = qId;
this.lock = false;
let result = await this.$store.dispatch('feedback/feedbackInfo', {qId});
if (result.data && result.data.feedbackInfo) {
let { qDetails, assignUser } = result.data.feedbackInfo;
this.peopleList = assignUser;
this.feedbackDsc = qDetails;
} else {
this.$message.error("获取项目失败");
}
},
editFeedback:async function() {
if (!this.feedbackSol && !this.lock) {
this.$notify({
title: '提示',
message: '你提交了空的解决文案 如果确认这么做请再次点击提交按钮'
});
this.lock = true;
return;
}
let editInfo = {qId:this.qId, solution:this.feedbackSol, assignIsSolve:this.state};
let result = await this.$store.dispatch('feedback/solveFeedback', editInfo);
if (result.data && result.data.isOk) {
this.$message.success("提交成功");
this.$emit("editOkCallback");
} else {
this.$message.error("提交失败");
}
}
} }
} }
......
...@@ -2,17 +2,17 @@ ...@@ -2,17 +2,17 @@
<div class="initiateListBox"> <div class="initiateListBox">
<div class="initiateListTable"> <div class="initiateListTable">
<el-table :data="initiateList" height="750" :row-class-name="tableRowClassName" > <el-table :data="initiateList" height="750" :row-class-name="tableRowClassName" >
<el-table-column prop="projectName" align="center" width="220" label="项目名称"> <el-table-column prop="pName" align="center" width="220" label="项目名称">
</el-table-column> </el-table-column>
<el-table-column prop="type" align="center" width="80" label="类型"> <el-table-column prop="assignIsSolve" align="center" width="80" label="类型">
</el-table-column> </el-table-column>
<el-table-column prop="initiateUserTime" align="center" width="160" label="发起时间"> <el-table-column prop="initiateTime" align="center" width="160" label="发起时间">
</el-table-column> </el-table-column>
<el-table-column prop="targetUserName" align="center" width="80" label="指派人"> <el-table-column prop="targetUserName" align="center" width="180" label="指派人">
</el-table-column> </el-table-column>
<el-table-column prop="state" align="center" width="80" label="状态"> <el-table-column prop="qType" align="center" width="80" label="状态">
</el-table-column> </el-table-column>
<el-table-column prop="des" align="center" width="360" label="问题描述"> <el-table-column prop="qDetails" align="center" width="260" label="问题描述">
</el-table-column> </el-table-column>
<el-table-column align="center" width="80" label="操作"> <el-table-column align="center" width="80" label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
</div> </div>
<div class="initiateInfoDialog"> <div class="initiateInfoDialog">
<el-dialog width="60%" top="5vh" :visible.sync="initiateInfoDialogVisible"> <el-dialog width="60%" top="5vh" :visible.sync="initiateInfoDialogVisible">
<initiateInfo></initiateInfo> <initiateInfo @editOkCallback="editOkCallback" ref="initiate" :checkId="checkQid" ></initiateInfo>
</el-dialog> </el-dialog>
</div> </div>
</div> </div>
...@@ -34,29 +34,43 @@ import initiateInfo from "./initiateInfo.vue" ...@@ -34,29 +34,43 @@ import initiateInfo from "./initiateInfo.vue"
export default { export default {
data() { data() {
return { return {
initiateList:[ initiateList:[],
{projectName:"张江双创二期", state:"解决", initiateUserTime:'2022-06-31 00:00', targetUserName:'李某某',type:'投诉', des:"核心数据缺失"}, initiateInfoDialogVisible:false,
{projectName:"徐汇二期", state:"未解决", initiateUserTime:'2022-06-31 00:00', targetUserName:'王大小',type:'修改', des:"****页面数据修改"}, checkQid:0,
{projectName:"艺校三期", state:"未解决", initiateUserTime:'2022-06-31 00:00', targetUserName:'刘谋',type:'修改', des:"******页面重新设计"},
{projectName:"长三角", state:"未处理", initiateUserTime:'2022-06-32 00:00', targetUserName:'李某某',type:'修改', des:"对接数据"},
{projectName:"徐汇五期", state:"未处理", initiateUserTime:'2022-06-32 00:00', targetUserName:'王二小',type:'修改', des:"修改页面"},
{projectName:"艺校六期", state:"未处理", initiateUserTime:'2022-06-32 00:00', targetUserName:'王金橘',type:'修改', des:"修改页面"},
{projectName:"艺校六期", state:"未通过", initiateUserTime:'2022-06-32 00:00', targetUserName:'王金橘',type:'修改', des:"修改页面"}
],
initiateInfoDialogVisible:false
} }
}, },
components: { initiateInfo }, components: { initiateInfo },
mounted:async function() {
this.initInitiateList();
},
methods:{ methods:{
tableRowClassName:function({row, rowIndex}) { tableRowClassName:function({row, rowIndex}) {
if (row.state == "解决") return 'success-row'; if (row.assignIsSolve == "解决") return 'success-row';
else if (row.state == "未解决") return 'warning-row'; else if (row.assignIsSolve == "未解决") return 'warning-row';
else if (row.state == "未通过") return 'error-row' else if (row.assignIsSolve == "未通过") return 'error-row'
return ''; return '';
}, },
checkInitiateItem:function(row) { checkInitiateItem:function(row) {
this.initiateInfoDialogVisible = true this.initiateInfoDialogVisible = true;
this.checkQid = row.qId;
if (this.$refs.taskinfo) {
this.$refs.initiate.initProjectInfo(row.qId);
}
},
initInitiateList:async function() {
let result = await this.$store.dispatch('feedback/selfInitiateFeedbackList', {});
if (result.data && result.data.feedbackList) {
this.initiateList = result.data.feedbackList;
} else {
this.$message.error("获取列表失败");
}
},
editOkCallback:async function() {
this.initInitiateList();
this.initiateInfoDialogVisible = false;
} }
} }
} }
</script> </script>
......
...@@ -2,23 +2,20 @@ ...@@ -2,23 +2,20 @@
<div class="initiateInfoBox"> <div class="initiateInfoBox">
<el-divider content-position="left">反馈描述</el-divider> <el-divider content-position="left">反馈描述</el-divider>
<div class="initiateInfoMainBox"> <div class="initiateInfoMainBox">
<el-input :disabled="false" resize="none" type="textarea" :rows="8" v-model="feedbackDsc"> <el-input :disabled="true" resize="none" type="textarea" :rows="8" v-model="feedbackDsc">
</el-input> </el-input>
</div> </div>
<el-divider content-position="left">解决方案</el-divider> <el-divider content-position="left">解决方案</el-divider>
<div class="solveEditMainBox"> <div class="solveEditMainBox">
<div class="editTextAreaBox"> <div class="editTextAreaBox">
<el-input :disabled="false" resize="none" type="textarea" :rows="6" v-model="feedbackSol"> <el-input :disabled="true" resize="none" type="textarea" :rows="6" v-model="feedbackSol">
</el-input> </el-input>
</div> </div>
<div class="null40Div"></div> <div class="null40Div"></div>
<div class="solveBox"> <div class="solveBox">
<el-form ref="form" label-width="80px"> <el-form ref="form" label-width="80px">
<el-form-item label="指派人"> <el-form-item label="指派人">
<el-tag type=""> 张三 </el-tag> <el-tag v-for="item in peopleList" disable-transitions :key="item"> {{item}} </el-tag>
<el-tag type="info"> 李四 </el-tag>
<el-tag type="success"> 王五 </el-tag>
<el-tag type="warning"> 赵六 </el-tag>
</el-form-item> </el-form-item>
<el-form-item label="是否解决"> <el-form-item label="是否解决">
<el-radio-group v-model="isSolve"> <el-radio-group v-model="isSolve">
...@@ -30,21 +27,52 @@ ...@@ -30,21 +27,52 @@
</div> </div>
</div> </div>
<div class="solvButtonBox"> <div class="solvButtonBox">
<el-button size="mini" round>提交</el-button> <el-button @click="auditingFeedback" size="mini" round>提交</el-button>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
export default { export default {
props:["checkId"],
data() { data() {
return { return {
feedbackDsc:"", feedbackDsc:"",
feedbackSol:"", feedbackSol:"",
isSolve:2 isSolve:1,
} qId:this.checkId,
peopleList:[],
}
}, },
components: { }, components: { },
mounted:function() {
this.initInitiate(this.qId);
this.lock = false;
},
methods:{ methods:{
initInitiate:async function(qId) {
this.qId = qId;
let result = await this.$store.dispatch('feedback/feedbackInfo', {qId});
if (result.data && result.data.feedbackInfo) {
let { qDetails, assignUser, solution } = result.data.feedbackInfo;
this.feedbackDsc = qDetails;
this.feedbackSol = solution || "";
this.peopleList = assignUser;
} else {
this.$message.error("获取项目失败");
}
},
auditingFeedback:async function() {
let addInfo = {
qId:this.qId,
whetherToSolve:this.isSolve
};
let result = await this.$store.dispatch('feedback/auditingFeedback', addInfo );
if (result.data && result.data.isOk) {
this.$emit("editOkCallback");
} else {
this.$message.error("提交失败");
}
}
} }
} }
</script> </script>
......
...@@ -2,15 +2,15 @@ ...@@ -2,15 +2,15 @@
<div class="taskListBox"> <div class="taskListBox">
<div class="taskListTable"> <div class="taskListTable">
<el-table :data="myTaskList" height="750"> <el-table :data="myTaskList" height="750">
<el-table-column prop="projectName" align="center" width="220" label="项目名称"> <el-table-column prop="pName" align="center" width="220" label="项目名称">
</el-table-column> </el-table-column>
<el-table-column prop="initiateUserTime" align="center" width="180" label="发起时间"> <el-table-column prop="initiateTime" align="center" width="180" label="发起时间">
</el-table-column> </el-table-column>
<el-table-column prop="initiateUserName" align="center" width="80" label="发起人"> <el-table-column prop="initiateUser" align="center" width="80" label="发起人">
</el-table-column> </el-table-column>
<el-table-column prop="type" align="center" width="80" label="类型"> <el-table-column prop="qType" align="center" width="80" label="类型">
</el-table-column> </el-table-column>
<el-table-column prop="des" align="center" width="430" label="问题描述"> <el-table-column prop="qDetails" align="center" width="430" label="问题描述">
</el-table-column> </el-table-column>
<el-table-column align="center" width="100" label="操作"> <el-table-column align="center" width="100" label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
</div> </div>
<div class="taskInfoDialog"> <div class="taskInfoDialog">
<el-dialog width="60%" top="5vh" :visible.sync="taskInfoDialogVisible"> <el-dialog width="60%" top="5vh" :visible.sync="taskInfoDialogVisible">
<taskInfo></taskInfo> <taskInfo @editOkCallback="editOkCallback" ref="taskinfo" :checkId="checkQid"></taskInfo>
</el-dialog> </el-dialog>
</div> </div>
</div> </div>
...@@ -32,17 +32,36 @@ import taskInfo from "./editTask.vue" ...@@ -32,17 +32,36 @@ import taskInfo from "./editTask.vue"
export default { export default {
data() { data() {
return { return {
//指派给我的反馈列表
taskInfoDialogVisible:false, taskInfoDialogVisible:false,
myTaskList:[ myTaskList:[],
{projectName:"张江双创二期", initiateUserTime:'2022-06-31 00:00:00', initiateUserName:'李四',type:'投诉', des:"啊撒旦发生范德萨发空间是辣的开发技术飞洒防守反击萨拉"} checkQid:0,
]
} }
}, },
components: { taskInfo }, components: { taskInfo },
mounted:async function() {
await this.initList();
},
methods:{ methods:{
checkTaskItem:function(projectItem) {//点击详情 checkTaskItem:function(checkItem) {//点击详情
this.taskInfoDialogVisible = true; this.taskInfoDialogVisible = true;
this.checkQid = checkItem.qId;
if (this.$refs.taskinfo) {
this.$refs.taskinfo.initProjectInfo(checkItem.qId);
}
},
initList:async function() {
let result = await this.$store.dispatch('feedback/selfFeedbackList', {});
if (result.data && result.data.feedbackList) {
this.myTaskList = result.data.feedbackList;
} else {
this.$message.error("获取列表失败");
}
}, },
editOkCallback:function() {
this.initList();
this.taskInfoDialogVisible = false;
}
} }
} }
</script> </script>
......
...@@ -95,10 +95,10 @@ ...@@ -95,10 +95,10 @@
return; return;
} }
let result = await this.$store.dispatch('users/login', { loginId:this.loginId, pwd:this.pwd }); let result = await this.$store.dispatch('users/login', { loginId:this.loginId, pwd:this.pwd });
if (result.success) { if (!result.err) {
this.$router.push({path: '/home'}); this.$router.push({path: '/home'});
} else { } else {
this.$message.error(result.msg); this.$message.error("登录失败 ",result.errMsg);
} }
} }
} }
......
<template>
<div class="projectMaintain">
<div class="maintainBodyBox">
<el-card class="box-card">
<el-form ref="form" label-width="80px">
<el-form-item label="项目名称">
<el-input size="mini" style="width:400px" v-model="projectName"></el-input>
</el-form-item>
<el-form-item label="项目类型 ">
<el-select size="mini" v-model="projectType" placeholder="请选择">
<el-option
v-for="item in projectSelectList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="项目背景">
<el-input type="textarea" size="mini"
resize="none"
style="width:800px"
:rows="6"
v-model="projectDes"></el-input>
</el-form-item>
</el-form>
<div class="updateBodyButtonBox">
<el-button size="mini" round>修改基础信息</el-button>
</div>
</el-card>
</div>
<div class="null40Div"></div>
<div class="maintainBaseBox">
<el-card class="box-card">
<el-form ref="form" label-width="80px">
<el-form-item label="甲方名称">
<el-input size="mini" style="width:400px" v-model="firstParty"></el-input>
</el-form-item>
<el-form-item label="对接人 ">
<el-input size="mini" style="width:400px" v-model="dockingPerson"></el-input>
</el-form-item>
<el-form-item label="承包类型">
<el-radio-group v-model="contractType">
<el-radio :label="1">总包</el-radio>
<el-radio :label="2">转包</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="参与成员">
<el-tag closable type=""> 张三 </el-tag>
<el-tag closable type="info"> 李四 </el-tag>
<el-tag closable type="success"> 王五 </el-tag>
<el-tag closable type="warning"> 赵六 </el-tag>
</el-form-item>
</el-form>
<div class="updateBaseButtonBox">
<el-button size="mini" round>修改</el-button>
</div>
</el-card>
</div>
</div>
</template>
<script>
export default {
data() {
return {
projectName:"",
projectType:"",
projectDes:"",
projectSelectList:[
{label:"园区", value:1},
{label:"教育", value:2},
{label:"企业", value:3},
{label:"政府", value:4},
],
firstParty:"",//甲方名称
dockingPerson:"",//对接人
contractType:1,//承包类型
}
},
components: { },
methods:{
}
}
</script>
<style>
.null40Div{
width: 100%;
height: 40px;
}
.projectMaintain {
width: 100%;
}
.projectMaintain .maintainBodyBox {
width: 66%;
}
.projectMaintain .el-card {
box-shadow: 0 2px 12px 0 rgba(252, 252, 252, 0.144);
background-color: rgb(255 255 255 / 15%);
border-radius: 6px;
}
.projectMaintain .el-form-item__label {
color: aliceblue;
font-size: 16px;
}
.projectMaintain .maintainBodyBox .updateBodyButtonBox {
width: 95%;
height: 40px;
text-align: right;
}
/* 卡片二 */
.projectMaintain .maintainBaseBox {
width: 66%;
}
.projectMaintain .maintainBaseBox .updateBaseButtonBox {
width: 95%;
height: 40px;
text-align: right;
}
</style>
\ No newline at end of file
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
<div class="joinBox"> <div class="joinBox">
<div class="partyAInfo"> <div class="partyAInfo">
<div class="partyATitle">甲方:</div> <div class="partyATitle">甲方:</div>
<div class="partyAData">{{joinPeopleName}}</div> <div class="partyAData">{{partyA}}</div>
</div> </div>
<div class="jointInfo"> <div class="jointInfo">
<div class="joinTitle">对接人:</div> <div class="joinTitle">对接人:</div>
...@@ -45,15 +45,15 @@ ...@@ -45,15 +45,15 @@
<div class="centerInfoBox"> <div class="centerInfoBox">
<div class="projectFeedbackTable"> <div class="projectFeedbackTable">
<el-table :data="feedbackList" height="350"> <el-table :data="feedbackList" height="350">
<el-table-column prop="initiateUserName" align="center" width="80" label="发起人"> <el-table-column prop="uName" align="center" width="80" label="发起人">
</el-table-column> </el-table-column>
<el-table-column prop="initiateUserTime" align="center" width="180" label="发起时间"> <el-table-column prop="initiateTime" align="center" width="180" label="发起时间">
</el-table-column> </el-table-column>
<el-table-column prop="targetUserName" align="center" width="120" label="指派人"> <el-table-column prop="assignName" align="center" width="120" label="指派人">
</el-table-column> </el-table-column>
<el-table-column prop="type" align="center" width="50" label="类型"> <el-table-column prop="qType" align="center" width="50" label="类型">
</el-table-column> </el-table-column>
<el-table-column prop="des" align="center" label="描述"> <el-table-column prop="qDetails" align="center" label="描述">
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
...@@ -79,7 +79,7 @@ ...@@ -79,7 +79,7 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<div class="projectFeedbackSubmitBox"> <div class="projectFeedbackSubmitBox">
<el-button size="mini" round>添加反馈</el-button> <el-button @click="addFeedback" size="mini" round>添加反馈</el-button>
</div> </div>
</div> </div>
</div> </div>
...@@ -89,9 +89,12 @@ ...@@ -89,9 +89,12 @@
</template> </template>
<script> <script>
import { pid } from 'process';
export default { export default {
props:["checkId"],
data() { data() {
return { return {
pId:this.checkId,
projectName:"体育学院", projectName:"体育学院",
pageUrlStr:"", pageUrlStr:"",
createTime:"", createTime:"",
...@@ -101,11 +104,11 @@ export default { ...@@ -101,11 +104,11 @@ export default {
partyA:"测试的甲方名称", partyA:"测试的甲方名称",
feedbackList:[{ feedbackList:[{
initiateUserName:"张三", uName:"张三",
initiateUserTime:"2011-08-00 00:00:00", initiateTime:"2011-08-00 00:00:00",
targetUserName:"李四", assignName:"李四",
type:"紧急", qType:"紧急",
des:"这是一段描述xxxxxxxxxxxxxxxxxxxx描述" qDetails:"这是一段描述xxxxxxxxxxxxxxxxxxxx描述"
}], }],
addFeedbackInfo:{//添加反馈 addFeedbackInfo:{//添加反馈
...@@ -113,47 +116,51 @@ export default { ...@@ -113,47 +116,51 @@ export default {
targetList:[], targetList:[],
type:1, type:1,
}, },
activities: [ activities: [],
{
content: '尾款',
timestamp: '2018-04-12 20:46',
size: 'large',
type: 'primary'
},
{
content: '验收',
timestamp: '2018-04-03 20:46',
color: '#0bbd87'
}, {
content: '测试',
timestamp: '2018-04-03 20:46',
size: 'large',
color: '#0bbd87'
},
{
content: '开发',
timestamp: '2018-04-03 20:46',
color: '#0bbd87',
size: 'large'
},
{
content: '设计稿',
timestamp: '2018-04-03 20:46',
color: '#0bbd87',
size: 'large'
}, {
content: '立项',
timestamp: '2018-04-03 20:46',
color: '#0bbd87',
size: 'large'
}],
//员工 //员工
peopleList:[{label:"张三", value:"zs"},{label:"李四", value:"ls"},{label:"王五", value:"ww"},{label:"赵六", value:"zl"}] peopleList:[]
} }
}, },
mounted:async function(){
await this.getMementList();
this.initProjectInfo(this.pId);
},
methods:{ methods:{
async initProjectInfo(pId) {
this.pId = pId;
let result = await this.$store.dispatch('project/getProjectInfo', {pId});
if (result.data && result.data.projectInfo) {
let { pName, pDescribe, dockingPeople, partyAInformation, currentState, activities, feedbackList} = result.data.projectInfo;
this.projectName = pName;
this.pageUrlStr = "";
this.des = pDescribe;
this.joinPeopleName = dockingPeople;
this.partyA = partyAInformation;
this.feedbackList = feedbackList;
this.activities = activities;
} else {
this.$message.error("获取项目失败");
}
},
async addFeedback() {
let addParamater = this.addFeedbackInfo;
addParamater.pId = this.pId;
let result = await this.$store.dispatch('feedback/addFeedback', addParamater);
if (result.data && result.data.isOk) {
this.$message.success("修改成功");
this.initProjectInfo(this.pId);
this.addFeedbackInfo = { des:"", targetList:[], type:1};
} else {
this.$message.error("修改失败");
}
},
async getMementList() {
let result = await this.$store.dispatch('users/getFeedbackMemberList', {});
if (result && result.data) {
let { memberList } = result.data;
this.peopleList = memberList;
}
}
} }
} }
</script> </script>
......
...@@ -12,11 +12,11 @@ ...@@ -12,11 +12,11 @@
<div class="projectListBox"> <div class="projectListBox">
<div class="projectListTable"> <div class="projectListTable">
<el-table :data="projectList" height="650"> <el-table :data="projectList" height="650">
<el-table-column prop="projectName" align="center" width="220" label="项目名称"> <el-table-column prop="pName" align="center" width="220" label="项目名称">
</el-table-column> </el-table-column>
<el-table-column prop="type" align="center" width="150" label="项目类型"> <el-table-column prop="pType" align="center" width="150" label="项目类型">
</el-table-column> </el-table-column>
<el-table-column prop="state" align="center" width="200" label="当前进度"> <el-table-column prop="currentState" align="center" width="200" label="当前进度">
</el-table-column> </el-table-column>
<el-table-column prop="startTime" align="center" width="200" label="开始时间"> <el-table-column prop="startTime" align="center" width="200" label="开始时间">
</el-table-column> </el-table-column>
...@@ -24,7 +24,14 @@ ...@@ -24,7 +24,14 @@
</el-table-column> </el-table-column>
<el-table-column align="center" width="100" label="操作"> <el-table-column align="center" width="100" label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<i @click="checkProjectItem(scope.row)" style="color:aliceblue;font-size:18px" class="el-icon-thumb"></i> <div v-if="dId == 4">
<i @click="checkProjectItem(scope.row)" style="color:aliceblue;font-size:18px" class="el-icon-thumb"></i>
&nbsp;
<i @click="editProjectItem(scope.row)" style="color:aliceblue;font-size:18px" class="el-icon-edit"></i>
</div>
<div v-else>
<i @click="checkProjectItem(scope.row)" style="color:aliceblue;font-size:18px" class="el-icon-thumb"></i>
</div>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -33,7 +40,12 @@ ...@@ -33,7 +40,12 @@
</div> </div>
<div class="projectInfoDialog"> <div class="projectInfoDialog">
<el-dialog width="80%" top="2vh" :visible.sync="projectInfoDialogVisible"> <el-dialog width="80%" top="2vh" :visible.sync="projectInfoDialogVisible">
<projectInfo></projectInfo> <projectInfo ref="p1" :checkId="checkPId"/>
</el-dialog>
</div>
<div class="projectInfoDialog">
<el-dialog width="80%" top="2vh" :visible.sync="projectEditDialogVisible">
<replenish ref="p2" @updateOkCallback="updateOkCallback" :checkId="checkPId"/>
</el-dialog> </el-dialog>
</div> </div>
</div> </div>
...@@ -41,29 +53,61 @@ ...@@ -41,29 +53,61 @@
<script> <script>
import projectInfo from "./projectInfo.vue" import projectInfo from "./projectInfo.vue"
import replenish from "./replenish.vue"
export default { export default {
data() { data() {
return { return {
dId:sessionStorage.getItem("dId") || 0,
pageName:"项目列表", pageName:"项目列表",
selectInput:"", selectInput:"",
projectList:[{ projectList:[],
projectName:"11", dataList:[],
type:"11",
state:"11",
startTime:"11",
lastNodeTime:"11"
}],
projectInfoDialogVisible:false, projectInfoDialogVisible:false,
projectEditDialogVisible:false,
checkPId:0,
} }
}, },
components: { projectInfo }, components: { projectInfo, replenish },
created:async function() {
await this.getProjectList();
},
methods:{ methods:{
checkProjectItem:function(projectItem) {//点击详情 checkProjectItem:function(projectItem) {//点击详情
this.projectInfoDialogVisible = true; this.projectInfoDialogVisible = true;
this.checkPId = projectItem.pId;
if (this.$refs.p1) {
this.$refs.p1.initProjectInfo(projectItem.pId);
}
},
editProjectItem:function(projectItem) {//点击编辑
this.projectEditDialogVisible = true;
this.checkPId = projectItem.pId;
if (this.$refs.p2) {
this.$refs.p2.initProjectInfo(projectItem.pId);
}
}, },
checkSelect:function() {//查询 checkSelect:function() {//查询
let checkList = [];
let _this = this;
this.projectList.forEach(info => {
if (info.pName.indexOf(_this.selectInput) > -1) checkList.push(info);
});
},
getProjectList:async function() {
let result = await this.$store.dispatch('project/getProjectList', this.addInfo);
if (result.data && result.data.projectList) {
// this.dataList = result.data.projectList;
this.projectList = result.data.projectList;
} else {
this.$message.error("获取列表失败");
}
},
//修改项目成功回调
updateOkCallback() {
this.projectEditDialogVisible = false;
this.getProjectList();
} }
} }
} }
</script> </script>
......
<template> <template>
<div class="selfTask"> <div class="selfTask">
<div class="myTaskBaseBox"> <el-row>
<el-card shadow="always"> <el-col :span="8">
<div class="pscChartBox"> <div class="myTaskBaseBox">
<pscChart></pscChart> <el-card shadow="always">
</div> <div class="pscChartBox">
<div class="calendarChartBox"> <pscChart></pscChart>
<div id="calendarChart" style="width:400px;height:400px"></div> </div>
</div> <div class="calendarChartBox">
</el-card> <div id="calendarChart" style="width:400px;height:400px"></div>
</div> </div>
</el-card>
</div>
</el-col>
<el-col :span="1">
&nbsp;
</el-col>
<el-col :span="11">
<div class="myTaskBaseBox">
<el-card shadow="always">
<div class="taskTable">
<el-table :data="taskList" height="650">
<el-table-column prop="pName" align="center" width="350" label="项目名称">
</el-table-column>
<el-table-column prop="day" align="center" width="150" label="剩余天数">
</el-table-column>
<el-table-column align="center" width="200" label="操作">
<template slot-scope="scope">
<i @click="submit(scope.row)" style="color:aliceblue;font-size:18px" class="el-icon-document-checked">提交任务</i>
</template>
</el-table-column>
</el-table>
</div>
</el-card>
</div>
</el-col>
</el-row>
</div> </div>
</template> </template>
<script> <script>
import pscChart from "./pscChart.vue" import pscChart from "./pscChart.vue"
export default { export default {
// 任务 // 我的任务
data() { data() {
return { return {
taskList:[]
} }
}, },
components: { pscChart }, components: { pscChart },
mounted:function(){ mounted:function(){
this.initPscChart(); this.initMyTaskList();
this.initDayChart();
}, },
methods:{ methods:{
checkNotebookItem:function() { initMyTaskList:async function() {
let result = await this.$store.dispatch('project/myTaskList', {});
}, if (result && result.data && result.data.taskList) {
addNotebook:function() { this.taskList = result.data.taskList;
} else {
this.$message.error("获取列表失败");
}
}, },
initPscChart:function() { submit:async function(row) {
let result = await this.$store.dispatch('project/submitTask', {pId:row.pId});
if (result && result.data && result.data.isOk) {
this.$message.success("提交成功");
this.initMyTaskList();
} else {
this.$message.error("提交失败");
}
} }
} }
} }
...@@ -66,4 +99,23 @@ export default { ...@@ -66,4 +99,23 @@ export default {
height: 300px; height: 300px;
/* background: rgb(231, 131, 131); */ /* background: rgb(231, 131, 131); */
} }
.myTaskBaseBox .taskTable {
width: 100%;
box-shadow: 0 2px 12px 0 rgba(252, 252, 252, 0.144);
background-color: rgb(255 255 255 / 15%);
border-radius: 6px;
}
/*最外层透明*/
.myTaskBaseBox .taskTable .el-table, .el-table__expanded-cell{
background-color: transparent;
}
/* 表格内背景颜色 */
.myTaskBaseBox .taskTable .el-table th, .el-table tr, .el-table td {
background-color: transparent;
color: aliceblue;
}
.myTaskBaseBox .taskTable .el-table--enable-row-hover .el-table__body tr:hover>td {
background-color: rgba(247, 247, 247, 0.205);
}
</style> </style>
\ No newline at end of file
<template> <template>
<div>建设中</div> <div>
<el-row>
<el-col :span="12">
<h1 class="buildingtitle"> 建 设 中 . . . </h1>
</el-col>
<el-col :span="12">
<img src="../../assets/under.gif" style="">
</el-col>
</el-row>
</div>
</template> </template>
<script> <script>
...@@ -9,5 +20,9 @@ export default { ...@@ -9,5 +20,9 @@ export default {
</script> </script>
<style> <style>
.buildingtitle {
text-align: center;
font-size: 50px;
color: azure;
}
</style> </style>
\ No newline at end of file
...@@ -55,8 +55,6 @@ export default { ...@@ -55,8 +55,6 @@ export default {
}, },
components: { addNotebook }, components: { addNotebook },
mounted:function(){ mounted:function(){
this.initPscChart();
this.initDayChart();
}, },
methods:{ methods:{
checkNotebookItem:function() { checkNotebookItem:function() {
......
...@@ -5,20 +5,19 @@ ...@@ -5,20 +5,19 @@
<h3 class="changepwd">修改密码</h3> <h3 class="changepwd">修改密码</h3>
<el-divider></el-divider> <el-divider></el-divider>
<el-form ref="form" label-width="100px" class="pwdForm"> <el-form ref="form" label-width="100px" class="pwdForm">
<el-form-item label="用户名:">
<el-descriptions-item v-model="uName"></el-descriptions-item>
</el-form-item>
<el-form-item label="密码:"> <el-form-item label="密码:">
<el-input size="mini" style="width:400px" placeholder="请输入密码" v-model="password"></el-input> <el-input size="mini" style="width:400px" placeholder="请输入密码" v-model="oldPwd"></el-input>
</el-form-item>
<el-form-item label="新密码:">
<el-input size="mini" style="width:400px" placeholder="请输入密码" v-model="newPwd"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="确认密码:"> <el-form-item label="确认密码:">
<el-input size="mini" style="width:400px" placeholder="请确认密码" v-model="newPassword"></el-input> <el-input size="mini" style="width:400px" placeholder="请确认密码" v-model="ackPwd"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-divider></el-divider> <el-divider></el-divider>
<div class="pwdButtonBox"> <div class="pwdButtonBox">
<el-button class="pull-left">取 消</el-button> <el-button type="primary" @click="changePwd" class="pull-right">确 认</el-button>
<el-button type="primary" class="pull-right">确 认</el-button>
</div> </div>
</el-card> </el-card>
</div> </div>
...@@ -29,14 +28,30 @@ ...@@ -29,14 +28,30 @@
export default { export default {
data() { data() {
return { return {
uName:"", oldPwd:"",
password:"", newPwd:"",
newPassword:"", ackPwd:"",
} }
}, },
components: { }, components: { },
methods:{ methods:{
async changePwd() {
if (!this.oldPwd || !this.newPwd || !this.ackPwd) {
this.$message.error("密码不能为空");
return;
}
let paramater = {
oldPwd:this.oldPwd,
newPwd:this.newPwd,
ackPwd:this.ackPwd,
};
let result = await this.$store.dispatch('users/changePwd', paramater);
if (result.data && result.data.isOk) {
this.$message.success("修改成功");
} else {
this.$message.error("修改失败");
}
}
} }
} }
</script> </script>
......
...@@ -47,6 +47,7 @@ export default new Router({ ...@@ -47,6 +47,7 @@ export default new Router({
children: [ children: [
{path: 'projectList', name: 'projectList', component: () => import('../pages/project/projectList.vue')}, {path: 'projectList', name: 'projectList', component: () => import('../pages/project/projectList.vue')},
{path: 'task', name: 'task', component: () => import('../pages/project/task.vue')}, {path: 'task', name: 'task', component: () => import('../pages/project/task.vue')},
{path: 'replenish', name: 'replenish', component: () => import('../pages/project/replenish.vue')},
] ]
}, },
{ {
...@@ -82,9 +83,7 @@ export default new Router({ ...@@ -82,9 +83,7 @@ export default new Router({
name: 'pm', name: 'pm',
component: () => import('../pages/home.vue'), component: () => import('../pages/home.vue'),
children: [ children: [
{path: 'replenish', name: 'replenish', component: () => import('../pages/pm/replenish.vue')},
{path: 'stats', name: 'stats', component: () => import('../pages/pm/stats.vue')}, {path: 'stats', name: 'stats', component: () => import('../pages/pm/stats.vue')},
] ]
}, },
{ {
......
import axios from 'axios' import axios from 'axios'
const serverUrl = 'http://192.168.0.105:60000'; const serverUrl = 'http://192.168.0.105:6066';
const server = axios.create({ let server = axios.create({
baseURL: serverUrl, baseURL: serverUrl,
timeout: 5000 timeout: 5000
}); });
async function postReq(url, paramater) { async function postReq(url, paramater) {
let _this = this;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
server.post(url, paramater).then(res => { let headers = {};
if (sessionStorage.getItem('token') ) headers["token"] = sessionStorage.getItem('token');
server.post(url, paramater, {headers:headers}).then(res => {
resolve(res.data); resolve(res.data);
}).catch(error => { }).catch(error => {
resolve(error); resolve(error);
......
let picList = [ let picList = [
// {
// index:3,
// name:"BOSS",
// icon:"el-icon-s-custom",
// subList:[
// {subName:"创建项目", path:"/boss/createProject"},
// {subName:"统计", path:"/boss/stats"},
// ]
// },
// {
// index:4,
// name:"PM",
// icon:"el-icon-s-custom",
// subList:[
// {subName:"项目维护", path:"/pm/replenish"},
// {subName:"统计", path:"/pm/stats"},
// ]
// },
{ {
index:1, index:1,
name:" 工 作 台",
icon:"el-icon-s-platform",
subList:[
{subName:"笔记", path:"/desk/notebook"},
{subName:"文件仓库", path:"/desk/files"},
{subName:"项目列表", path:"/project/projectList"},
]
},
{
index:2,
name:" 反 馈", name:" 反 馈",
icon:"el-icon-s-opportunity", icon:"el-icon-s-opportunity",
subList:[ subList:[
...@@ -10,45 +38,26 @@ let picList = [ ...@@ -10,45 +38,26 @@ let picList = [
] ]
}, },
{ {
index:2, index:3,
name:" 系 统 设 置", name:" 系 统 设 置",
icon:"el-icon-s-tools", icon:"el-icon-s-tools",
subList:[ subList:[
{subName:"修改密码", path:"/set/pwd"}, {subName:"修改密码", path:"/set/pwd"},
] ]
}, },
{
index:3,
name:"BOSS",
icon:"el-icon-s-custom",
subList:[
{subName:"创建项目", path:"/boss/createProject"},
{subName:"统计", path:"/boss/stats"},
]
},
{
index:4,
name:"PM",
icon:"el-icon-s-custom",
subList:[
{subName:"项目维护", path:"/pm/replenish"},
{subName:"统计", path:"/pm/stats"},
]
},
{
index:5,
name:" 工 作 台",
icon:"el-icon-s-platform",
subList:[
{subName:"笔记", path:"/desk/notebook"},
{subName:"文件仓库", path:"/desk/files"},
{subName:"项目列表", path:"/project/projectList"},
{subName:"我的任务", path:"/project/task"},
]
}
] ]
function getThreeEnum() { function getThreeEnum() {
let dId = sessionStorage.getItem('dId');
if (!dId) {
return [];
}
if (dId == 3 || dId == 2 || dId == 4) {
picList[0].subList.push( {subName:"创建项目", path:"/boss/createProject"} );
}
if (dId != 3) {
picList[0].subList.push( {subName:"我的任务", path:"/project/task"} );
}
return picList; return picList;
} }
......
export const urlConfig = { export const urlConfig = {
"登录":"/api/user/login" "登录":"/api/user/login",
"修改密码":"/api/user/changepwd",
};
export const projectUrlConfig = {
"获取项目列表":"/api/project/projectlist",
"获取项目信息":"/api/project/projectinfo",
"创建项目":"/api/project/createproject",
"项目维护":"/api/project/replenish",
"任务列表":"/api/project/mytasklist",
"提交任务":"/api/project/submittask"
};
export const feedbackUrlConfig = {
"指派给我的反馈":"/api/feedback/selftasklist",
"反馈详情":"/api/feedback/taskinfo",
"我发起的反馈列表":"/api/feedback/initiatetasklist",
"提交反馈":"/api/feedback/solvetask",
"审核反馈":"/api/feedback/auditingtask",
"添加反馈":"/api/feedback/createfeedback",
};
export const publicUrlConfig = {
"成员列表":"/api/member/memberlist",
"反馈用成员列表":"/api/member/feedbackmemberlist",
}; };
\ No newline at end of file
import postReq from '../../server/axiosInstance';
import { feedbackUrlConfig } from '../../server/url';
//反馈详情
export async function feedbackInfo({commit}, payload) {
return await postReq(feedbackUrlConfig.反馈详情, payload);
};
//审核反馈
export async function auditingFeedback({commit}, payload) {
return await postReq(feedbackUrlConfig.审核反馈, payload);
};
//我发起的反馈列表
export async function selfInitiateFeedbackList({commit}, payload) {
return await postReq(feedbackUrlConfig.我发起的反馈列表, payload);
};
//指派给我的反馈
export async function selfFeedbackList({commit}, payload) {
return await postReq(feedbackUrlConfig.指派给我的反馈, payload);
};
//提交反馈
export async function solveFeedback({commit}, payload) {
return await postReq(feedbackUrlConfig.提交反馈, payload);
};
//添加反馈
export async function addFeedback({commit}, payload) {
return await postReq(feedbackUrlConfig.添加反馈, payload);
};
import * as actions from './actions'
import * as state from './state'
import * as getters from './getters'
export default {
namespaced: true,
actions,
state,
getters
}
\ No newline at end of file
import postReq from '../../server/axiosInstance';
import { projectUrlConfig } from '../../server/url';
//获取列表
export async function getProjectList({commit}, payload) {
console.log(payload);
return await postReq(projectUrlConfig.获取项目列表, payload);
};
//获取项目信息
export async function getProjectInfo({commit}, payload) {
return await postReq(projectUrlConfig.获取项目信息, payload);
};
//创建项目
export async function createProject({commit}, payload) {
return await postReq(projectUrlConfig.创建项目, payload);
};
//项目维护
export async function replenish({commit}, payload) {
return await postReq(projectUrlConfig.项目维护, payload);
};
//我的项目列表
export async function myTaskList({commit}, payload) {
return await postReq(projectUrlConfig.任务列表, payload);
};
//提交任务
export async function submitTask({commit}, payload) {
return await postReq(projectUrlConfig.提交任务, payload);
}
import * as actions from './actions'
import * as state from './state'
import * as getters from './getters'
export default {
namespaced: true,
actions,
state,
getters
}
\ No newline at end of file
...@@ -3,11 +3,15 @@ import Vuex from 'vuex' ...@@ -3,11 +3,15 @@ import Vuex from 'vuex'
import users from './users' import users from './users'
import project from './project'
import feedback from './feedback'
Vue.use(Vuex); Vue.use(Vuex);
export default () => { export default () => {
const Store = new Vuex.Store({ const Store = new Vuex.Store({
modules: { modules: {
users users,
project,
feedback
} }
}) })
return Store return Store
......
import postReq from '../../server/axiosInstance'; import postReq from '../../server/axiosInstance';
import { urlConfig } from '../../server/url'; import { urlConfig, publicUrlConfig } from '../../server/url';
//登录 //登录
export async function login({commit}, payload) { export async function login({commit}, payload) {
return await postReq(urlConfig.登录, payload); let result = await postReq(urlConfig.登录, payload);
if (result.code == 200 && result.success && result.data) {
let {uName, dId, token} = result.data;
if (!uName || !dId || !token) {
return {err:true, errMsg:"请重新登录" };
} else {
sessionStorage.setItem("userName", uName );
sessionStorage.setItem("dId", dId );
sessionStorage.setItem("token", token );
}
return {err:false, errMsg:""};
} else {
return {err:true, errMsg:result.msg || "" };
}
}; };
//退出登录 //退出登录
...@@ -13,5 +25,21 @@ export function quitLogin() { ...@@ -13,5 +25,21 @@ export function quitLogin() {
return ; return ;
} }
//修改密码
export async function changePwd({}, paramater) {
return await postReq(urlConfig.修改密码, paramater);
}
//获取成员列表
export async function getMemberList({}, paramater) {
return await postReq(publicUrlConfig.成员列表, paramater);
}
//获取总的成员列表
export async function getFeedbackMemberList({}, paramater) {
return await postReq(publicUrlConfig.反馈用成员列表, paramater);
}
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