Selaa lähdekoodia

完成评分

master
yangzhou-cyber 3 vuotta sitten
vanhempi
commit
6a0f83f350
9 muutettua tiedostoa jossa 453 lisäystä ja 51 poistoa
  1. +6
    -0
      src/api/second/segmentation/constraint.js
  2. +6
    -0
      src/api/second/segmentation/reward.js
  3. +3
    -0
      src/api/second/taskSummary.js
  4. +2
    -2
      src/config/setting.js
  5. +35
    -1
      src/views/second/search.vue
  6. +15
    -4
      src/views/second/segmentation/contentDetail.vue
  7. +107
    -41
      src/views/second/taskSummary/basicTable.vue
  8. +139
    -2
      src/views/second/taskSummary/constraint.vue
  9. +140
    -1
      src/views/second/taskSummary/reward.vue

+ 6
- 0
src/api/second/segmentation/constraint.js Näytä tiedosto

}, },
editPoints(params){ editPoints(params){
return axios.post('/rigidityconstraintitem/updateItemDeduction',params) return axios.post('/rigidityconstraintitem/updateItemDeduction',params)
},
getItemDeptScoreList(id){
return axios.get('/rigidityconstraintitem/getItemDeptScoreList/'+id)
},
setItemDeptScore(data){
return axios.post('/rigidityconstraintitem/setItemDeptScore',data)
} }
} }

+ 6
- 0
src/api/second/segmentation/reward.js Näytä tiedosto

}, },
editPoints(params){ editPoints(params){
return axios.post('/specialpoweritem/updateItemBonus',params) return axios.post('/specialpoweritem/updateItemBonus',params)
},
getItemDeptScoreList(id){
return axios.get('/specialpoweritem/getItemDeptScoreList/'+id)
},
setItemDeptScore(data){
return axios.post('/specialpoweritem/setItemDeptScore',data)
} }
} }

+ 3
- 0
src/api/second/taskSummary.js Näytä tiedosto

}, },
getReportDataSummaryAttach(){ getReportDataSummaryAttach(){
return axios.get('/statistics/getReportDataSummaryAttach') return axios.get('/statistics/getReportDataSummaryAttach')
},
setPoint(type){
return axios.post(`/${type}/setItemDeptPoints`,{"rule": "6:4"})
} }
} }

+ 2
- 2
src/config/setting.js Näytä tiedosto

export default { export default {
version: '1.0', version: '1.0',
name: 'JNDZ考核管理系统', // 项目名称 name: 'JNDZ考核管理系统', // 项目名称
baseURL: 'http://121.40.249.52:9031/api/', // 正式环境
// baseURL:'http://47.98.157.120:9031/api/', //测试环境
// baseURL: 'http://121.40.249.52:9031/api/', // 正式环境
baseURL:'http://47.98.157.120:9031/api/', //测试环境
whiteList: ['/login', '/forget'], // 路由白名单(不需要登录的) whiteList: ['/login', '/forget'], // 路由白名单(不需要登录的)
keepAliveList: [], // 需要缓存的组件名称 keepAliveList: [], // 需要缓存的组件名称
menuUrl: '/index/getMenuList', // 菜单数据接口 menuUrl: '/index/getMenuList', // 菜单数据接口

+ 35
- 1
src/views/second/search.vue Näytä tiedosto

@click="emitExport" @click="emitExport"
>导出</el-button >导出</el-button
> >
<el-button
v-if="baseUrl"
size="small"
type="success"
@click="setPoint"
:loading="editPoint"
>评分</el-button
>
</el-form-item> </el-form-item>
</el-form> </el-form>
<!-- <div class="operating" v-if="showExport"> <!-- <div class="operating" v-if="showExport">
import "@riophae/vue-treeselect/dist/vue-treeselect.css"; import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import Treeselect from "@riophae/vue-treeselect"; // 下拉树 import Treeselect from "@riophae/vue-treeselect"; // 下拉树
import { mapGetters, mapActions } from "vuex"; import { mapGetters, mapActions } from "vuex";
import api from "@/api/second/taskSummary"
export default { export default {
props: { props: {
type: { type: {
return false; return false;
}, },
}, },
baseUrl:{
type:String,
default(){
return ''
}
}
}, },
components: { components: {
Treeselect, Treeselect,
content: "", content: "",
leaderUnit: "", leaderUnit: "",
}, },
editPoint:false
}; };
}, },
created() { created() {
emitExport() { emitExport() {
this.$emit("export", this.searchParams); this.$emit("export", this.searchParams);
}, },
setPoint(){
this.editPoint=true
api.setPoint(this.baseUrl).then(res=>{
console.log(res.data)
if(res.data.code===0){
this.$message({
type:"success",
message:"修改成功"
})
}else{
this.$message.error(res.data.msg)
}
}).catch(e=>{
this.$message.error(e.message);
}).finally(()=>{
this.editPoint=false
})
}
}, },
computed: { computed: {
...mapGetters(["quota1", "quota2", "formatDep", "quota"]), ...mapGetters(["quota1", "quota2", "formatDep", "quota"]),


<style scoped> <style scoped>
.action >>> .el-form-item__content{ .action >>> .el-form-item__content{
width:200px
width:280px
} }
</style> </style>

+ 15
- 4
src/views/second/segmentation/contentDetail.vue Näytä tiedosto

</el-row> </el-row>
</div> </div>
</div> </div>
<el-row class="edit">
<el-row class="edit" v-if="type == 1">
<el-col :span="4" class="edit-title" <el-col :span="4" class="edit-title"
><span style="color: red">* </span>分值:</el-col ><span style="color: red">* </span>分值:</el-col
> >
></el-input ></el-input
></el-col> ></el-col>
</el-row> </el-row>
<el-row class="edit" v-if="type == 2">
<el-col :span="4" class="edit-title">分值:</el-col>
<el-col :span="7"
><el-input
placeholder="请输入分值"
v-model="form.points"
></el-input
></el-col>
</el-row>
<!-- </el-scrollbar> --> <!-- </el-scrollbar> -->
<div slot="footer"> <div slot="footer">
<el-button type="primary" @click="add">确定</el-button> <el-button type="primary" @click="add">确定</el-button>
} }
} }
if (param == "points") { if (param == "points") {
if (!form[param]) {
this.$message.error("请输入分值");
return;
if (this.type == 1) {
if (!form[param]) {
this.$message.error("请输入分值");
return;
}
} }
if (Number(form[param]) !== Number(form[param])) { if (Number(form[param]) !== Number(form[param])) {
this.$message.error("分值请输入数值"); this.$message.error("分值请输入数值");

+ 107
- 41
src/views/second/taskSummary/basicTable.vue Näytä tiedosto

@search:task="updateParams($event)" @search:task="updateParams($event)"
@export="exportData($event)" @export="exportData($event)"
:show-export="true" :show-export="true"
base-url="basictaskitem"
/> />
<el-table <el-table
highlight-current-row highlight-current-row
align="center" align="center"
> >
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<pre>{{formatList(row,'leader')}}</pre>
<pre>{{ formatList(row, "leader") }}</pre>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column <!-- <el-table-column
align="center" align="center"
> >
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<pre>{{ formatList(row,'other') }}</pre>
<pre>{{ formatList(row, "other") }}</pre>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column <!-- <el-table-column
<pre>{{ row.otherPrincipalList | formatList }}</pre> <pre>{{ row.otherPrincipalList | formatList }}</pre>
</template> </template>
</el-table-column> --> </el-table-column> -->
<el-table-column
label="配合部门和责任领导"
width="250"
align="center"
>
<el-table-column label="配合部门和责任领导" width="250" align="center">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<pre>{{formatList(row,'cooperate') }}</pre>
<pre>{{ formatList(row, "cooperate") }}</pre>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column <!-- <el-table-column
<el-button @click="showEdit = false">取消</el-button>&nbsp; <el-button @click="showEdit = false">取消</el-button>&nbsp;
</div> </div>
</el-dialog> </el-dialog>

<el-dialog <el-dialog
:loading="pointLoading"
@closed="pointForm = []" @closed="pointForm = []"
title="编辑分数" title="编辑分数"
custom-class="ele-dialog-form" custom-class="ele-dialog-form"
:lock-scroll="true" :lock-scroll="true"
:destroy-on-close="true" :destroy-on-close="true"
width="500px"
width="600px"
:visible.sync="showPoints" :visible.sync="showPoints"
> >
<el-form label-width="50%">
<!-- <el-form label-width="50%">
<template v-for="(item, index) of pointForm"> <template v-for="(item, index) of pointForm">
<el-form-item :label="item | formatLabel" :key="index">
<el-input
placeholder="请输入得分"
v-model="item.actualPoints"
clearable
></el-input>
</el-form-item>
<el-row :key="index">
<el-form-item :label="item | formatLabel">
<el-input
placeholder="请输入承担得分"
v-model="item.actualPoints"
clearable
></el-input>
</el-form-item>
<el-form-item label="得分">
<el-input
placeholder="请输入得分"
v-model="item.actualPoints"
clearable
></el-input>
</el-form-item>
</el-row>
</template>
</el-form> -->
<div class="edit-point-body">
<template v-for="item of pointForm">
<el-row :key="item.id" type="flex">
<el-col :span="12" style="padding-right:15px">{{ item | formatLabel }}</el-col>
<el-col :span="5">
<el-input
placeholder="请输入承担得分"
v-model="item.bearPoints"
clearable
></el-input>
</el-col>
<el-col :span="4" class="right">得分</el-col>
<el-col :span="5">
<el-input
placeholder="请输入得分"
v-model="item.actualPoints"
clearable
></el-input>
</el-col>
</el-row>
</template> </template>
</el-form>
</div>
<div slot="footer"> <div slot="footer">
<el-button type="primary" @click="savePoints">确定</el-button> <el-button type="primary" @click="savePoints">确定</el-button>
<el-button @click="showPoints = false">取消</el-button>&nbsp; <el-button @click="showPoints = false">取消</el-button>&nbsp;
data() { data() {
return { return {
showPoints: false, showPoints: false,
pointLoading: false,
pointForm: [], pointForm: [],
searchParams: {}, searchParams: {},
dataList: [], dataList: [],
filters: { filters: {
formatLabel(data) { formatLabel(data) {
if (data.isLeader == 1) { if (data.isLeader == 1) {
return "第一牵头 '" + data.deptName + "' 得分:";
return "第一牵头 '" + data.deptName + "' 承担得分:";
} else if (data.isLeader == 2) { } else if (data.isLeader == 2) {
return "其他牵头 '" + data.deptName + "' 得分:";
return "其他牵头 '" + data.deptName + "' 承担得分:";
} else if (data.isLeader == 3) { } else if (data.isLeader == 3) {
return "配合部门 '" + data.deptName + "' 得分:";
return "配合部门 '" + data.deptName + "' 承担得分:";
} else { } else {
return ""; return "";
} }
}, },
}, },
methods: { methods: {
formatList(data,type) {
let arr=[]
for(let key in data[type+'DeptList']){
arr.push(`${data[type+'DeptList'][key]}(${data[type+'PrincipalList'][key]})`)
formatList(data, type) {
let arr = [];
for (let key in data[type + "DeptList"]) {
arr.push(
`${data[type + "DeptList"][key]}(${
data[type + "PrincipalList"][key]
})`
);
} }
return arr.join('\n')
return arr.join("\n");
}, },
showPointsDialog(row) { showPointsDialog(row) {
console.log(row)
if (!row.id) { if (!row.id) {
this.$message({ this.$message({
type: "warning", type: "warning",
this.getItemDeptScoreList(row.id); this.getItemDeptScoreList(row.id);
}, },
getItemDeptScoreList(id) { getItemDeptScoreList(id) {
this.pointLoading = true;
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-refresh-right',
background: 'rgba(1, 1, 1, 1)'
});
editApi editApi
.getItemDeptScoreList(id) .getItemDeptScoreList(id)
.then((res) => { .then((res) => {
this.showPoints = false; this.showPoints = false;
this.$message({ this.$message({
type: "warning", type: "warning",
message: "当前无数据",
message: data.msg,
}); });
} }
}) })
this.showPoints = false; this.showPoints = false;
this.$message({ this.$message({
type: "warning", type: "warning",
message: "当前无数据",
message: e.message,
}); });
}) })
.finally(() => { .finally(() => {
this.pointLoading = false;
this.$nextTick(()=>{
loading.close();
})
}); });
}, },
savePoints() { savePoints() {
let list = JSON.parse(JSON.stringify(this.pointForm)); let list = JSON.parse(JSON.stringify(this.pointForm));
console.log(list)
for (let obj of list) { for (let obj of list) {
if (!(obj.bearPoints + "").trim()) {
this.$message({
type: "warning",
message: "请输入" + obj.deptName + "的承担得分",
});
return;
}
if (!(obj.actualPoints + "").trim()) { if (!(obj.actualPoints + "").trim()) {
this.$message({ this.$message({
type: "warning", type: "warning",
}); });
return; return;
} }
if (Number(obj.bearPoints) !== Number(obj.bearPoints)) {
this.$message({
type: "warning",
message: obj.deptName + "的承担得分请输入数值",
});
return;
}
if (Number(obj.actualPoints) !== Number(obj.actualPoints)) { if (Number(obj.actualPoints) !== Number(obj.actualPoints)) {
this.$message({ this.$message({
type: "warning", type: "warning",
} }
let obj = {}; let obj = {};
list.forEach((item) => { list.forEach((item) => {
obj[item.deptId] = item.actualPoints;
obj[item.deptId] =item.bearPoints+','+item.actualPoints;
}); });
editApi editApi
.setItemDeptScore( .setItemDeptScore(
}, },
save() { save() {
let form = this.form; let form = this.form;
let params = ["itemContent", "points", "leaderDept", "leaderPrincipal",];
let arr=['otherDept','otherPrincipal','cooperateDept','cooperatePrincipal']
for(let key of arr){
if(form[key]){
for (let item of form[key]){
if(!item||(item.length==0)){
this.$message.error('请选择部门及对应责任领导')
return
let params = ["itemContent", "points", "leaderDept", "leaderPrincipal"];
let arr = [
"otherDept",
"otherPrincipal",
"cooperateDept",
"cooperatePrincipal",
];
for (let key of arr) {
if (form[key]) {
for (let item of form[key]) {
if (!item || item.length == 0) {
this.$message.error("请选择部门及对应责任领导");
return;
} }
} }
} }
max-height: 60vh; max-height: 60vh;
overflow-y: scroll; overflow-y: scroll;
} }
.edit-point-body .el-row{
align-items: center;
}

.edit-point-body .el-col.right{
text-align: center;
}
</style> </style>

+ 139
- 2
src/views/second/taskSummary/constraint.vue Näytä tiedosto

@search:task="updateParams($event)" @search:task="updateParams($event)"
:show-export="true" :show-export="true"
@export="exportData($event)" @export="exportData($event)"
base-url="rigidityconstraintitem"
/> />
<el-table <el-table
highlight-current-row highlight-current-row
<pre>{{ row.cooperatePrincipalList | formatList }}</pre> <pre>{{ row.cooperatePrincipalList | formatList }}</pre>
</template> </template>
</el-table-column> --> </el-table-column> -->
<el-table-column label="操作" width="80" align="center" fixed="right">
<el-table-column label="操作" width="150" align="center" fixed="right">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<el-link <el-link
slot="reference" slot="reference"
icon="el-icon-edit" icon="el-icon-edit"
>编辑</el-link >编辑</el-link
> >
<el-link
@click="showPointsDialog(row)"
type="warning"
icon="el-icon-edit-outline"
>评分</el-link
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-button @click="showEdit = false">取消</el-button>&nbsp; <el-button @click="showEdit = false">取消</el-button>&nbsp;
</div> </div>
</el-dialog> </el-dialog>
<el-dialog
@closed="pointForm = []"
title="编辑分数"
custom-class="ele-dialog-form"
:lock-scroll="true"
:destroy-on-close="true"
width="500px"
:visible.sync="showPoints"
>
<el-form label-width="50%">
<template v-for="(item, index) of pointForm">
<el-form-item :label="item | formatLabel" :key="index">
<el-input
placeholder="请输入得分"
v-model="item.actualPoints"
clearable
></el-input>
</el-form-item>
</template>
</el-form>
<div slot="footer">
<el-button type="primary" @click="savePoints">确定</el-button>
<el-button @click="showPoints = false">取消</el-button>&nbsp;
</div>
</el-dialog>
</div> </div>
</template> </template>


], ],
data() { data() {
return { return {
showPoints: false,
pointForm: [],
searchParams: {}, searchParams: {},
dataList: [{}], dataList: [{}],
loading: false, loading: false,
computed: { computed: {
...mapGetters(["formatDep", "principalList", "department", "user"]), ...mapGetters(["formatDep", "principalList", "department", "user"]),
}, },

filters: {
formatLabel(data) {
if (data.isLeader == 1) {
return "第一牵头 '" + data.deptName + "' 得分:";
} else if (data.isLeader == 2) {
return "其他牵头 '" + data.deptName + "' 得分:";
} else if (data.isLeader == 3) {
return "配合部门 '" + data.deptName + "' 得分:";
} else {
return "";
}
},
},
methods: { methods: {
showPointsDialog(row) {
if (!row.id) {
this.$message({
type: "warning",
message: "请先拆分小条",
});
return;
}
this.showPoints = true;
this.getItemDeptScoreList(row.id);
},
getItemDeptScoreList(id) {
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-refresh-right',
background: 'rgba(1, 1, 1, 1)'
});
editApi
.getItemDeptScoreList(id)
.then((res) => {
let data = res.data;
if (data.code == 0) {
this.pointForm = data.data;
this.itemId = id;
} else {
this.pointForm = [];
this.showPoints = false;
this.$message({
type: "warning",
message: data.msg,
});
}
})
.catch((e) => {
this.pointForm = [];
this.showPoints = false;
this.$message({
type: "warning",
message: e.message,
});
})
.finally(() => {
this.$nextTick(() => {
loading.close();
});
});
},
savePoints() {
let list = JSON.parse(JSON.stringify(this.pointForm));
for (let obj of list) {
if (!(obj.actualPoints + "").trim()) {
this.$message({
type: "warning",
message: "请输入" + obj.deptName + "的得分",
});
return;
}
if (Number(obj.actualPoints) !== Number(obj.actualPoints)) {
this.$message({
type: "warning",
message: obj.deptName + "的得分请输入数值",
});
return;
}
}
let obj = {};
list.forEach((item) => {
obj[item.deptId] = item.actualPoints;
});
editApi
.setItemDeptScore(
Object.assign({ itemId: this.itemId, deptScore: obj })
)
.then((res) => {
let data = res.data;
if (data.code == 0) {
this.$message({
type: "success",
message: "编辑分数成功",
});
this.showPoints = false;
this.getDataList();
} else {
this.$message.error(data.msg);
}
})
.catch((e) => {
this.$message.error("编辑分数失败");
});
},
formatList(data, type) { formatList(data, type) {
let arr = []; let arr = [];
for (let key in data[type + "DeptList"]) { for (let key in data[type + "DeptList"]) {

+ 140
- 1
src/views/second/taskSummary/reward.vue Näytä tiedosto

@search:task="updateParams($event)" @search:task="updateParams($event)"
@export="exportData($event)" @export="exportData($event)"
:show-export="true" :show-export="true"
base-url="specialpoweritem"
/> />
<el-table <el-table
highlight-current-row highlight-current-row
<pre>{{ row.cooperatePrincipalList | formatList }}</pre> <pre>{{ row.cooperatePrincipalList | formatList }}</pre>
</template> </template>
</el-table-column> --> </el-table-column> -->
<el-table-column label="操作" width="80" align="center" fixed="right">
<el-table-column label="操作" width="150" align="center" fixed="right">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<el-link <el-link
slot="reference" slot="reference"
icon="el-icon-edit" icon="el-icon-edit"
>编辑</el-link >编辑</el-link
> >
<el-link
@click="showPointsDialog(row)"
type="warning"
icon="el-icon-edit-outline"
>评分</el-link
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-button @click="showEdit = false">取消</el-button>&nbsp; <el-button @click="showEdit = false">取消</el-button>&nbsp;
</div> </div>
</el-dialog> </el-dialog>
<el-dialog
@closed="pointForm = []"
title="编辑分数"
custom-class="ele-dialog-form"
:lock-scroll="true"
:destroy-on-close="true"
width="500px"
:visible.sync="showPoints"
>
<el-form label-width="50%">
<template v-for="(item, index) of pointForm">
<el-form-item :label="item | formatLabel" :key="index">
<el-input
placeholder="请输入得分"
v-model="item.actualPoints"
clearable
></el-input>
</el-form-item>
</template>
</el-form>
<div slot="footer">
<el-button type="primary" @click="savePoints">确定</el-button>
<el-button @click="showPoints = false">取消</el-button>&nbsp;
</div>
</el-dialog>
</div> </div>
</div> </div>
</template> </template>
], ],
data() { data() {
return { return {
showPoints: false,
pointForm: [],
searchParams: {}, searchParams: {},
dataList: [], dataList: [],
showEdit: false, showEdit: false,
computed: { computed: {
...mapGetters(["formatDep", "principalList", "department", "user"]), ...mapGetters(["formatDep", "principalList", "department", "user"]),
}, },
filters: {
formatLabel(data) {
if (data.isLeader == 1) {
return "第一牵头 '" + data.deptName + "' 得分:";
} else if (data.isLeader == 2) {
return "其他牵头 '" + data.deptName + "' 得分:";
} else if (data.isLeader == 3) {
return "配合部门 '" + data.deptName + "' 得分:";
} else {
return "";
}
},
},
methods: { methods: {
showPointsDialog(row) {
if (!row.id) {
this.$message({
type: "warning",
message: "请先拆分小条",
});
return;
}
this.showPoints = true;
this.getItemDeptScoreList(row.id);
},
getItemDeptScoreList(id) {
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-refresh-right',
background: 'rgba(1, 1, 1, 1)'
});
editApi
.getItemDeptScoreList(id)
.then((res) => {
let data = res.data;
if (data.code == 0) {
this.pointForm = data.data;
this.itemId = id;
} else {
this.pointForm = [];
this.showPoints = false;
this.$message({
type: "warning",
message: data.msg,
});
}
})
.catch((e) => {
this.pointForm = [];
this.showPoints = false;
this.$message({
type: "warning",
message: e.message,
});
})
.finally(() => {
this.$nextTick(() => {
loading.close();
});
});
},

savePoints() {
let list = JSON.parse(JSON.stringify(this.pointForm));
for (let obj of list) {
if (!(obj.actualPoints + "").trim()) {
this.$message({
type: "warning",
message: "请输入" + obj.deptName + "的得分",
});
return;
}
if (Number(obj.actualPoints) !== Number(obj.actualPoints)) {
this.$message({
type: "warning",
message: obj.deptName + "的得分请输入数值",
});
return;
}
}
let obj = {};
list.forEach((item) => {
obj[item.deptId] = item.actualPoints;
});
editApi
.setItemDeptScore(
Object.assign({ itemId: this.itemId, deptScore: obj })
)
.then((res) => {
let data = res.data;
if (data.code == 0) {
this.$message({
type: "success",
message: "编辑分数成功",
});
this.showPoints = false;
this.getDataList();
} else {
this.$message.error(data.msg);
}
})
.catch((e) => {
this.$message.error("编辑分数失败");
});
},
formatList(data, type) { formatList(data, type) {
let arr = []; let arr = [];
for (let key in data[type + "DeptList"]) { for (let key in data[type + "DeptList"]) {

Loading…
Peruuta
Tallenna