Commit 57295901 authored by huyf's avatar huyf

部门业绩

parent 3b15b096
...@@ -50,6 +50,15 @@ export function getDeptTargetPage(query) { ...@@ -50,6 +50,15 @@ export function getDeptTargetPage(query) {
}) })
} }
// 获得个人目标进度分页
export function getPersonTargetPage(query) {
return request({
url: '/sale/dept-target/personal/page',
method: 'get',
params: query
})
}
// 导出部门业绩目标设置 Excel // 导出部门业绩目标设置 Excel
export function exportDeptTargetExcel(query) { export function exportDeptTargetExcel(query) {
return request({ return request({
......
...@@ -9,14 +9,15 @@ ...@@ -9,14 +9,15 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="目标类型" prop="targetType"> <el-form-item label="目标类型" prop="targetType">
<dict-selector :type="DICT_TYPE.TARGET_TYPE" v-model="queryParams.targetType" formatter="number" /> <dict-selector :type="DICT_TYPE.TARGET_TYPE" v-model="queryParams.targetType" formatter="number"/>
</el-form-item> </el-form-item>
<el-form-item label="运输方式" prop="transportType"> <el-form-item label="运输方式" prop="transportType">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="queryParams.transportType" formatter="number" /> <dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="queryParams.transportType" formatter="number"/>
</el-form-item> </el-form-item>
<el-form-item label="出货渠道" prop="shippingChannel"> <el-form-item label="出货渠道" prop="shippingChannel">
<el-select v-model="queryParams.shippingChannel" placeholder="请选择出货渠道"> <el-select v-model="queryParams.shippingChannel" placeholder="请选择出货渠道">
<el-option v-for="item in channelList" :label="item.nameZh" :value="item.channelId" :key="item.channelId"></el-option> <el-option v-for="item in channelList" :label="item.nameZh" :value="item.channelId"
:key="item.channelId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
...@@ -29,7 +30,8 @@ ...@@ -29,7 +30,8 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['ecw:dept-target:create']">目标设置</el-button> v-hasPermi="['ecw:dept-target:create']">目标设置
</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
...@@ -41,7 +43,7 @@ ...@@ -41,7 +43,7 @@
<span>{{scope.row.deptName}}{{scope.row.targetPeriodName}}目标</span> <span>{{scope.row.deptName}}{{scope.row.targetPeriodName}}目标</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="部门" align="center" prop="deptName" /> <el-table-column label="部门" align="center" prop="deptName"/>
<el-table-column label="目标类型" align="center" prop="targetType"> <el-table-column label="目标类型" align="center" prop="targetType">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :type="DICT_TYPE.TARGET_TYPE" :value="scope.row.targetType"/> <dict-tag :type="DICT_TYPE.TARGET_TYPE" :value="scope.row.targetType"/>
...@@ -53,7 +55,7 @@ ...@@ -53,7 +55,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="部门人数" align="center" prop="deptEmpCount"/> <el-table-column label="部门人数" align="center" prop="deptEmpCount"/>
<el-table-column label="目标方数" align="center" prop="cubeNum" /> <el-table-column label="目标方数" align="center" prop="cubeNum"/>
<el-table-column label="运输方式" align="center" prop="transportType"> <el-table-column label="运输方式" align="center" prop="transportType">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :type="DICT_TYPE.TRANSPORT_TYPE" :value="scope.row.transportType"/> <dict-tag :type="DICT_TYPE.TRANSPORT_TYPE" :value="scope.row.transportType"/>
...@@ -64,7 +66,7 @@ ...@@ -64,7 +66,7 @@
<span>{{ getShipChannelName(scope.row.shippingChannel) }}</span> <span>{{ getShipChannelName(scope.row.shippingChannel) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="已完成方数" align="center" prop="completeCubeNum" /> <el-table-column label="已完成方数" align="center" prop="completeCubeNum"/>
<el-table-column label="完成比例" align="center"> <el-table-column label="完成比例" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ (scope.row.completeCubeNum/scope.row.cubeNum*100).toFixed(2)+'%' }}</span> <span>{{ (scope.row.completeCubeNum/scope.row.cubeNum*100).toFixed(2)+'%' }}</span>
...@@ -73,9 +75,13 @@ ...@@ -73,9 +75,13 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['ecw:dept-target:update']">修改</el-button> v-hasPermi="['ecw:dept-target:update']">修改
</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['ecw:dept-target:delete']">删除</el-button> v-hasPermi="['ecw:dept-target:delete']">删除
</el-button>
<el-button size="mini" type="text" icon="el-icon-search" @click="handleView(scope.row)"
v-hasPermi="['ecw:dept-target:create']"></el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -94,7 +100,7 @@ ...@@ -94,7 +100,7 @@
<el-form-item label="目标类型" prop="targetType"> <el-form-item label="目标类型" prop="targetType">
<el-select v-model="form.targetType" placeholder="请选择运输方式" @change="changeList"> <el-select v-model="form.targetType" placeholder="请选择运输方式" @change="changeList">
<el-option v-for="dict in getDictDatas(DICT_TYPE.TARGET_TYPE)" <el-option v-for="dict in getDictDatas(DICT_TYPE.TARGET_TYPE)"
:key="dict.value" :label="dict.label" :value="parseInt(dict.value)" /> :key="dict.value" :label="dict.label" :value="parseInt(dict.value)"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="计算周期" prop="targetPeriodName"> <el-form-item label="计算周期" prop="targetPeriodName">
...@@ -103,15 +109,16 @@ ...@@ -103,15 +109,16 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="运输方式" prop="transportType"> <el-form-item label="运输方式" prop="transportType">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="form.transportType" formatter="number" /> <dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="form.transportType" formatter="number"/>
</el-form-item> </el-form-item>
<el-form-item label="出货渠道" prop="shippingChannel"> <el-form-item label="出货渠道" prop="shippingChannel">
<el-select v-model="form.shippingChannel" placeholder="请选择出货渠道"> <el-select v-model="form.shippingChannel" placeholder="请选择出货渠道">
<el-option v-for="item in channelList" :label="item.nameZh" :value="item.channelId" :key="item.channelId"></el-option> <el-option v-for="item in channelList" :label="item.nameZh" :value="item.channelId"
:key="item.channelId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="立方数" prop="cubeNum"> <el-form-item label="立方数" prop="cubeNum">
<el-input v-model="form.cubeNum" placeholder="请输入立方数" /> <el-input v-model="form.cubeNum" placeholder="请输入立方数"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
...@@ -119,19 +126,71 @@ ...@@ -119,19 +126,71 @@
<el-button @click="cancel">取 消</el-button> <el-button @click="cancel">取 消</el-button>
</div> </div>
</el-dialog> </el-dialog>
<!--人员目标进度-->
<el-dialog title="人员目标进度" :visible.sync="tableOpen" width="1000px" append-to-body>
<div><span><b>{{detail.deptName}}-{{getDictDataLabel(DICT_TYPE.TARGET_TYPE,detail.targetType)}}</b></span></div>
<div>
<span>运输方式:</span><span>{{getDictDataLabel(DICT_TYPE.TRANSPORT_TYPE,detail.transportType)}}</span>
<span>出货渠道:</span><span>{{ getShipChannelName(detail.shippingChannel) }}</span>
<span>部门目标:</span><span>{{detail.cubeNum}}</span>
</div>
<el-table v-loading="loading" :data="tableList">
<el-table-column label="员工名称" align="center" width="180">
<template slot-scope="scope">
<span>{{scope.row.userName}}</span>
</template>
</el-table-column>
<el-table-column label="部门" align="center">
<template>
<span>{{detail.deptName}}</span>
</template>
</el-table-column>
<el-table-column label="目标类型" align="center" prop="targetType">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.TARGET_TYPE" :value="scope.row.targetType"/>
</template>
</el-table-column>
<el-table-column label="时间范围" align="center" prop="targetPeriodName">
<template slot-scope="scope">
<span>{{dateFormat(scope.row.startTime)}}~{{dateFormat(scope.row.endTime)}}</span>
</template>
</el-table-column>
<el-table-column label="个人目标方数" align="center" prop="personalCubeNum"/>
<el-table-column label="已完成方数" align="center" prop="personalCompleteCubeNum"/>
<el-table-column label="完成比例" align="center">
<template slot-scope="scope">
<span>{{ (scope.row.personalCompleteCubeNum/scope.row.personalCubeNum*100).toFixed(2)+'%' }}</span>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="tableTotal > 0" :total="tableTotal" :page.sync="tableQueryParams.pageNo"
:limit.sync="tableQueryParams.pageSize"
@pagination="getTableList"/>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { createDeptTarget, updateDeptTarget, deleteDeptTarget, getDeptTarget, getDeptTargetPage, exportDeptTargetExcel,getCreateInitData } from "@/api/ecw/deptTarget"; import {
import { listSimpleDepts } from "@/api/system/dept"; createDeptTarget,
import { getChannelList } from '@/api/ecw/channel'; updateDeptTarget,
import dayjs from "dayjs"; deleteDeptTarget,
getDeptTarget,
getDeptTargetPage,
exportDeptTargetExcel,
getCreateInitData,
getPersonTargetPage
} from "@/api/ecw/deptTarget";
import {listSimpleDepts} from "@/api/system/dept";
import {getChannelList} from '@/api/ecw/channel';
import dayjs from "dayjs";
export default { export default {
name: "DeptTarget", name: "DeptTarget",
components: { components: {},
},
data() { data() {
return { return {
// 遮罩层 // 遮罩层
...@@ -142,22 +201,32 @@ export default { ...@@ -142,22 +201,32 @@ export default {
showSearch: true, showSearch: true,
// 总条数 // 总条数
total: 0, total: 0,
tableTotal: 0,
// 部门业绩目标设置列表 // 部门业绩目标设置列表
list: [], list: [],
tableList: [],
// 弹出层标题 // 弹出层标题
title: "", title: "",
detail: {
deptName: null,
targetType: null,
cubeNum: null,
shippingChannel: null,
transportType: null,
},
// 是否显示弹出层 // 是否显示弹出层
open: false, open: false,
tableOpen: false,
dateRangeCreateTime: [], dateRangeCreateTime: [],
dateRangeStartTime: [], dateRangeStartTime: [],
dateRangeEndTime: [], dateRangeEndTime: [],
deptData:[], deptData: [],
deptArr:[], deptArr: [],
channelList:[], channelList: [],
monthList:[], monthList: [],
quarterList:[], quarterList: [],
yearList:[], yearList: [],
targetPeriod:[], targetPeriod: [],
// 查询参数 // 查询参数
queryParams: { queryParams: {
pageNo: 1, pageNo: 1,
...@@ -169,17 +238,22 @@ export default { ...@@ -169,17 +238,22 @@ export default {
shippingChannel: null, shippingChannel: null,
cubeNum: null, cubeNum: null,
}, },
tableQueryParams: {
pageNo: 1,
pageSize: 10,
id: null,
},
// 表单参数 // 表单参数
form: {}, form: {},
// 表单校验 // 表单校验
rules: { rules: {
deptId: [{ required: true, message: "部门ID不能为空", trigger: "blur" }], deptId: [{required: true, message: "部门ID不能为空", trigger: "blur"}],
targetType: [{ required: true, message: "目标类型不能为空", trigger: "change" }], targetType: [{required: true, message: "目标类型不能为空", trigger: "change"}],
cubeNum: [{ required: true, message: "立方数不能为空", trigger: "blur" }], cubeNum: [{required: true, message: "立方数不能为空", trigger: "blur"}],
} }
}; };
}, },
computed:{ computed: {
getShipChannelName() { getShipChannelName() {
return shippingChannelId => { return shippingChannelId => {
for (let index in this.channelList) { for (let index in this.channelList) {
...@@ -193,25 +267,25 @@ export default { ...@@ -193,25 +267,25 @@ export default {
} }
}, },
created() { created() {
listSimpleDepts().then(res =>{ listSimpleDepts().then(res => {
res.data.forEach((item)=>{ res.data.forEach((item) => {
if(item.parentId==0){ if (item.parentId == 0) {
this.deptArr.push(item) this.deptArr.push(item)
}else{ } else {
this.deptData.push(item) this.deptData.push(item)
} }
}) })
this.deptData.forEach((value)=>{ this.deptData.forEach((value) => {
var dept = this.deptArr.filter(itt=>itt.id==value.parentId) var dept = this.deptArr.filter(itt => itt.id == value.parentId)
if(dept.length>0){ if (dept.length > 0) {
value.name =dept[0].name+' | '+ value.name value.name = dept[0].name + ' | ' + value.name
} }
}) })
}); });
getCreateInitData().then(res=>{ getCreateInitData().then(res => {
this.monthList = res.data.month; this.monthList = res.data.month;
this.quarterList = res.data.quarter; this.quarterList = res.data.quarter;
this.yearList = res.data.year; this.yearList = res.data.year;
...@@ -220,27 +294,27 @@ export default { ...@@ -220,27 +294,27 @@ export default {
this.getList(); this.getList();
}, },
methods: { methods: {
getChannelList(){ getChannelList() {
getChannelList().then(res => this.channelList = res.data) getChannelList().then(res => this.channelList = res.data)
}, },
dateFormat(val){ dateFormat(val) {
return dayjs(val).format("YYYY-MM-DD"); return dayjs(val).format("YYYY-MM-DD");
}, },
changeList(val){ changeList(val) {
if(val===1){ if (val === 1) {
this.form.targetPeriodName=undefined; this.form.targetPeriodName = undefined;
this.targetPeriod = this.monthList; this.targetPeriod = this.monthList;
} else if (val ===2 ){ } else if (val === 2) {
this.form.targetPeriodName=undefined; this.form.targetPeriodName = undefined;
this.targetPeriod = this.quarterList; this.targetPeriod = this.quarterList;
} else{ } else {
this.form.targetPeriodName=undefined; this.form.targetPeriodName = undefined;
this.targetPeriod = this.yearList; this.targetPeriod = this.yearList;
} }
}, },
setTime(item){ setTime(item) {
this.targetPeriod.forEach((i,index)=>{ this.targetPeriod.forEach((i, index) => {
if(i.name===item){ if (i.name === item) {
this.form.startTime = i.startDate; this.form.startTime = i.startDate;
this.form.endTime = i.endDate; this.form.endTime = i.endDate;
} }
...@@ -301,17 +375,30 @@ export default { ...@@ -301,17 +375,30 @@ export default {
this.open = true; this.open = true;
this.title = "添加部门业绩目标设置"; this.title = "添加部门业绩目标设置";
}, },
/** 查看人员目标情况 */
handleView(row) {
this.detail = row;
this.tableQueryParams.id = row.id;
this.getTableList();
this.tableOpen = true;
},
getTableList() {
getPersonTargetPage(this.tableQueryParams).then(res => {
this.tableList = res.data.list;
this.tableTotal = res.data.total;
});
},
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
this.reset(); this.reset();
const id = row.id; const id = row.id;
getDeptTarget(id).then(response => { getDeptTarget(id).then(response => {
this.form = response.data; this.form = response.data;
if(response.data.targetType===1){ if (response.data.targetType === 1) {
this.targetPeriod = this.monthList; this.targetPeriod = this.monthList;
} else if (response.data.targetType ===2 ){ } else if (response.data.targetType === 2) {
this.targetPeriod = this.quarterList; this.targetPeriod = this.quarterList;
} else{ } else {
this.targetPeriod = this.yearList; this.targetPeriod = this.yearList;
} }
this.open = true; this.open = true;
...@@ -344,12 +431,13 @@ export default { ...@@ -344,12 +431,13 @@ export default {
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
const id = row.id; const id = row.id;
this.$modal.confirm('是否确认删除部门业绩目标设置编号为"' + id + '"的数据项?').then(function() { this.$modal.confirm('是否确认删除部门业绩目标设置编号为"' + id + '"的数据项?').then(function () {
return deleteDeptTarget(id); return deleteDeptTarget(id);
}).then(() => { }).then(() => {
this.getList(); this.getList();
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess("删除成功");
}).catch(() => {}); }).catch(() => {
});
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
...@@ -367,8 +455,9 @@ export default { ...@@ -367,8 +455,9 @@ export default {
}).then(response => { }).then(response => {
this.$download.excel(response, '${table.classComment}.xls'); this.$download.excel(response, '${table.classComment}.xls');
this.exportLoading = false; this.exportLoading = false;
}).catch(() => {}); }).catch(() => {
});
} }
} }
}; };
</script> </script>
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