Commit 3a9e709f by wangchunyang

统计及文件合并整理

parent 3f828572
import axios from '@/libs/api.request'
// 使用统计
export const getUsageStats = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmStats/selectUsageStats',
method: 'post',
data: param
})
}
export const getUsageDetails = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmStats/selectUsageDetails',
method: 'post',
data: param
})
}
// 工作量统计
export const getWorkloadStats = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmStats/selectWorkloadStats',
method: 'post',
data: param
})
}
export const getWorkloadDetails = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmStats/selectWorkloadDetails',
method: 'post',
data: param
})
}
import axios from '@/libs/api.request' import axios from '@/libs/api.request'
// ===== 人员分类管理 ===== // ===== 人员权限配置 =====
export const getUserCategoryList = (param) => { export const getPermissionConfigList = () => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmUserCategory/selectList',
method: 'post',
data: param
})
}
export const saveUserCategory = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmUserCategory/save',
method: 'post',
data: param
})
}
export const deleteUserCategory = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmUserCategory/delete',
method: 'post',
data: param
})
}
export const findUserCategoryList = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmUserCategory/findList',
method: 'post',
data: param
})
}
// ===== 人员分类权限管理 =====
export const getUserCategoryPermissionList = (param) => {
return axios.request({ return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmUserCategoryPermission/selectList', url: '/api/ac/jilinsscgsdp/keyDmUserCategory/selectPermissionConfigList',
method: 'post', method: 'post'
data: param
}) })
} }
export const saveUserCategoryPermission = (param) => { export const savePermissionUsers = (param) => {
return axios.request({ return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmUserCategoryPermission/save', url: '/api/ac/jilinsscgsdp/keyDmUserCategory/savePermissionUsers',
method: 'post', method: 'post',
data: param data: param
}) })
...@@ -53,7 +19,7 @@ export const saveUserCategoryPermission = (param) => { ...@@ -53,7 +19,7 @@ export const saveUserCategoryPermission = (param) => {
// ===== 请假类型管理 ===== // ===== 请假类型管理 =====
export const getLeaveTypeList = (param) => { export const getLeaveTypeList = (param) => {
return axios.request({ return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmLeaveType/selectList', url: '/api/ac/jilinsscgsdp/keyDmUserCategory/selectLeaveTypeList',
method: 'post', method: 'post',
data: param data: param
}) })
...@@ -61,7 +27,7 @@ export const getLeaveTypeList = (param) => { ...@@ -61,7 +27,7 @@ export const getLeaveTypeList = (param) => {
export const saveLeaveType = (param) => { export const saveLeaveType = (param) => {
return axios.request({ return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmLeaveType/save', url: '/api/ac/jilinsscgsdp/keyDmUserCategory/saveLeaveType',
method: 'post', method: 'post',
data: param data: param
}) })
...@@ -69,7 +35,7 @@ export const saveLeaveType = (param) => { ...@@ -69,7 +35,7 @@ export const saveLeaveType = (param) => {
export const deleteLeaveType = (param) => { export const deleteLeaveType = (param) => {
return axios.request({ return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmLeaveType/delete', url: '/api/ac/jilinsscgsdp/keyDmUserCategory/deleteLeaveType',
method: 'post', method: 'post',
data: param data: param
}) })
...@@ -77,7 +43,7 @@ export const deleteLeaveType = (param) => { ...@@ -77,7 +43,7 @@ export const deleteLeaveType = (param) => {
export const findLeaveTypeList = (param) => { export const findLeaveTypeList = (param) => {
return axios.request({ return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmLeaveType/findList', url: '/api/ac/jilinsscgsdp/keyDmUserCategory/findLeaveTypeList',
method: 'post', method: 'post',
data: param data: param
}) })
...@@ -86,7 +52,7 @@ export const findLeaveTypeList = (param) => { ...@@ -86,7 +52,7 @@ export const findLeaveTypeList = (param) => {
// ===== 办公用品分类管理 ===== // ===== 办公用品分类管理 =====
export const getMaterialCategoryList = (param) => { export const getMaterialCategoryList = (param) => {
return axios.request({ return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmMaterialCategory/selectList', url: '/api/ac/jilinsscgsdp/keyDmUserCategory/selectMaterialCategoryList',
method: 'post', method: 'post',
data: param data: param
}) })
...@@ -94,7 +60,7 @@ export const getMaterialCategoryList = (param) => { ...@@ -94,7 +60,7 @@ export const getMaterialCategoryList = (param) => {
export const saveMaterialCategory = (param) => { export const saveMaterialCategory = (param) => {
return axios.request({ return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmMaterialCategory/save', url: '/api/ac/jilinsscgsdp/keyDmUserCategory/saveMaterialCategory',
method: 'post', method: 'post',
data: param data: param
}) })
...@@ -102,7 +68,7 @@ export const saveMaterialCategory = (param) => { ...@@ -102,7 +68,7 @@ export const saveMaterialCategory = (param) => {
export const deleteMaterialCategory = (param) => { export const deleteMaterialCategory = (param) => {
return axios.request({ return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmMaterialCategory/delete', url: '/api/ac/jilinsscgsdp/keyDmUserCategory/deleteMaterialCategory',
method: 'post', method: 'post',
data: param data: param
}) })
...@@ -110,7 +76,7 @@ export const deleteMaterialCategory = (param) => { ...@@ -110,7 +76,7 @@ export const deleteMaterialCategory = (param) => {
export const findMaterialCategoryList = (param) => { export const findMaterialCategoryList = (param) => {
return axios.request({ return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmMaterialCategory/findList', url: '/api/ac/jilinsscgsdp/keyDmUserCategory/findMaterialCategoryList',
method: 'post', method: 'post',
data: param data: param
}) })
...@@ -119,7 +85,7 @@ export const findMaterialCategoryList = (param) => { ...@@ -119,7 +85,7 @@ export const findMaterialCategoryList = (param) => {
// ===== 办公用品管理 ===== // ===== 办公用品管理 =====
export const getMaterialList = (param) => { export const getMaterialList = (param) => {
return axios.request({ return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmMaterial/selectList', url: '/api/ac/jilinsscgsdp/keyDmUserCategory/selectMaterialList',
method: 'post', method: 'post',
data: param data: param
}) })
...@@ -127,7 +93,7 @@ export const getMaterialList = (param) => { ...@@ -127,7 +93,7 @@ export const getMaterialList = (param) => {
export const saveMaterial = (param) => { export const saveMaterial = (param) => {
return axios.request({ return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmMaterial/save', url: '/api/ac/jilinsscgsdp/keyDmUserCategory/saveMaterial',
method: 'post', method: 'post',
data: param data: param
}) })
...@@ -135,7 +101,7 @@ export const saveMaterial = (param) => { ...@@ -135,7 +101,7 @@ export const saveMaterial = (param) => {
export const deleteMaterial = (param) => { export const deleteMaterial = (param) => {
return axios.request({ return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmMaterial/delete', url: '/api/ac/jilinsscgsdp/keyDmUserCategory/deleteMaterial',
method: 'post', method: 'post',
data: param data: param
}) })
...@@ -144,7 +110,7 @@ export const deleteMaterial = (param) => { ...@@ -144,7 +110,7 @@ export const deleteMaterial = (param) => {
// 导入物料(Excel) // 导入物料(Excel)
export const importMaterial = (formData) => { export const importMaterial = (formData) => {
return axios.request({ return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmMaterial/importExcel', url: '/api/ac/jilinsscgsdp/keyDmUserCategory/importMaterial',
method: 'post', method: 'post',
data: formData data: formData
}) })
...@@ -153,23 +119,42 @@ export const importMaterial = (formData) => { ...@@ -153,23 +119,42 @@ export const importMaterial = (formData) => {
// 下载物料导入模板 // 下载物料导入模板
export const materialTemplateDownload = (param) => { export const materialTemplateDownload = (param) => {
return axios.request({ return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmMaterial/templateDownload', url: '/api/ac/jilinsscgsdp/keyDmUserCategory/templateDownload',
method: 'post', method: 'post',
data: param data: param
}) })
} }
// ===== 人员权限配置 ===== // --统计部分---------------------------------------------------------------------------------------------
export const getPermissionConfigList = () => { // 使用统计
export const getUsageStats = (param) => {
return axios.request({ return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmUserCategory/selectPermissionConfigList', url: '/api/ac/jilinsscgsdp/keyDmStats/selectUsageStats',
method: 'post' method: 'post',
data: param
}) })
} }
export const savePermissionUsers = (param) => { export const getUsageDetails = (param) => {
return axios.request({ return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmUserCategory/savePermissionUsers', url: '/api/ac/jilinsscgsdp/keyDmStats/selectUsageDetails',
method: 'post',
data: param
})
}
// 工作量统计
export const getWorkloadStats = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmStats/selectWorkloadStats',
method: 'post',
data: param
})
}
export const getWorkloadDetails = (param) => {
return axios.request({
url: '/api/ac/jilinsscgsdp/keyDmStats/selectWorkloadDetails',
method: 'post', method: 'post',
data: param data: param
}) })
......
/* eslint-disable */
export function normalizeVisitTimeValue (value) {
if (!value && value !== 0) return ''
if (value instanceof Date) {
return Number.isNaN(value.getTime()) ? '' : formatDateSegments(value)
}
if (typeof value === 'number' && !Number.isNaN(value)) {
const fromNumber = new Date(value)
return Number.isNaN(fromNumber.getTime()) ? '' : formatDateSegments(fromNumber)
}
if (typeof value === 'string') {
const trimmed = value.trim()
if (!trimmed) return ''
const direct = new Date(trimmed)
if (!Number.isNaN(direct.getTime())) return formatDateSegments(direct)
const withSlash = new Date(trimmed.replace(/-/g, '/'))
if (!Number.isNaN(withSlash.getTime())) return formatDateSegments(withSlash)
const match = trimmed.match(/^(\d{4})-(\d{2})-(\d{2})(?:[ T](\d{2}):(\d{2})(?::(\d{2}))?)?$/)
if (match) {
const [, y, m, d, hh = '00', mm = '00', ss = '00'] = match
return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
}
return ''
}
if (value && typeof value === 'object' && typeof value.valueOf === 'function') {
const timestamp = value.valueOf()
if (!Number.isNaN(timestamp)) {
const fromValue = new Date(timestamp)
return Number.isNaN(fromValue.getTime()) ? '' : formatDateSegments(fromValue)
}
}
return ''
}
function formatDateSegments (d) {
const y = d.getFullYear()
const mm = String(d.getMonth() + 1).padStart(2, '0')
const dd = String(d.getDate()).padStart(2, '0')
const HH = String(d.getHours()).padStart(2, '0')
const MM = String(d.getMinutes()).padStart(2, '0')
const SS = String(d.getSeconds()).padStart(2, '0')
return `${y}-${mm}-${dd} ${HH}:${MM}:${SS}`
}
...@@ -775,7 +775,7 @@ export default { ...@@ -775,7 +775,7 @@ export default {
// 下载物料导入模板 // 下载物料导入模板
try { try {
const response = await axios.post( const response = await axios.post(
'/api/ac/jilinsscgsdp/keyDmMaterial/templateDownload', '/api/ac/jilinsscgsdp/keyDmUserCategory/templateDownload',
{}, {},
{ {
responseType: 'blob' responseType: 'blob'
......
...@@ -51,16 +51,15 @@ ...@@ -51,16 +51,15 @@
<!-- 使用明细弹窗 --> <!-- 使用明细弹窗 -->
<Modal v-model="detailModal.visible" title="明细" width="800"> <Modal v-model="detailModal.visible" title="明细" width="800">
<Table :data="detailModal.rows" size="small" border> <Table :data="detailModal.rows" :columns="detailModal.columns" size="small" border />
<TableColumn v-for="col in detailModal.columns" :key="col.key" :prop="col.key" :title="col.title" />
</Table>
<div slot="footer"><Button type="primary" @click="detailModal.visible=false">关闭</Button></div> <div slot="footer"><Button type="primary" @click="detailModal.visible=false">关闭</Button></div>
</Modal> </Modal>
</div> </div>
</template> </template>
<script> <script>
import { getUsageStats, getUsageDetails, getWorkloadStats, getWorkloadDetails } from '@/api/key-dm-stats' import { getUsageStats, getUsageDetails, getWorkloadStats, getWorkloadDetails } from '@/api/key-dm'
import { normalizeVisitTimeValue } from '@/view/key-person/key_dm_conf/dates.js'
export default { export default {
name: 'key-dm-stats-index', name: 'key-dm-stats-index',
...@@ -91,48 +90,83 @@ export default { ...@@ -91,48 +90,83 @@ export default {
{ title: '请假时长(天)', key: 'leave_duration', align: 'center' }, { title: '请假时长(天)', key: 'leave_duration', align: 'center' },
{ title: '操作', slot: 'action', width: 160, align: 'center' } { title: '操作', slot: 'action', width: 160, align: 'center' }
], ],
detailModal: { visible: false, rows: [], columns: [] } detailModal: {
visible: false,
rows: [],
columns: []
}
} }
}, },
created () {
this.loadUsage()
},
methods: { methods: {
handleTabChange (name) { handleTabChange (name) {
this.activeTab = name this.activeTab = name
if (name === 'usage') {
this.loadUsage()
} else {
this.loadWorkload()
}
}, },
loadUsage () { loadUsage () {
this.loading.usage = true this.loading.usage = true
const params = { start: this.usageStart, end: this.usageEnd, material: this.usageMaterial } const st = this.usageStart ? normalizeVisitTimeValue(this.usageStart) : null
getUsageStats({ params }).then(ret => { const et = this.usageEnd ? normalizeVisitTimeValue(this.usageEnd) : null
const params = { start: st, end: et, material: this.usageMaterial }
getUsageStats(params).then(ret => {
if (ret.data && ret.data.errcode === 0) this.tables.usage = ret.data.data || [] if (ret.data && ret.data.errcode === 0) this.tables.usage = ret.data.data || []
else this.$Notice.error({ title: '查询失败', desc: ret.data && ret.data.errmsg }) else this.$Notice.error({ title: '查询失败', desc: ret.data && ret.data.errmsg })
}).finally(() => { this.loading.usage = false }) }).finally(() => { this.loading.usage = false })
}, },
resetUsage () { this.usageStart = null; this.usageEnd = null; this.usageMaterial = ''; this.tables.usage = [] }, resetUsage () { this.usageStart = null; this.usageEnd = null; this.usageMaterial = ''; this.tables.usage = [] },
openUsageDetail (row) { openUsageDetail (row) {
this.detailModal.columns = [{ key: 'user_name', title: '人员' }, { key: 'quantity', title: '数量' }, { key: 'material_name', title: '物料' }, { key: 'department_name', title: '部门' }] this.detailModal.columns = [
{ title: '部门', key: 'department_name', align: 'center' },
{ title: '人员', key: 'user_name', align: 'center' },
{ title: '物料', key: 'material_name', align: 'center' },
{ title: '申请数量', key: 'apply_quantity', align: 'center' },
{ title: '已归还数量', key: 'returned_quantity', align: 'center' }
]
this.detailModal.visible = true this.detailModal.visible = true
getUsageDetails({ params: { start: this.usageStart, end: this.usageEnd, material: this.usageMaterial, department: row.department_id } }).then(ret => { const st = this.usageStart ? normalizeVisitTimeValue(this.usageStart) : null
const et = this.usageEnd ? normalizeVisitTimeValue(this.usageEnd) : null
getUsageDetails({ start: st, end: et, material: row.material_id, department: row.department_id }).then(ret => {
if (ret.data && ret.data.errcode === 0) this.detailModal.rows = ret.data.data || [] if (ret.data && ret.data.errcode === 0) this.detailModal.rows = ret.data.data || []
else this.$Notice.error({ title: '查询失败', desc: ret.data && ret.data.errmsg }) else this.$Notice.error({ title: '查询失败', desc: ret.data && ret.data.errmsg })
}) })
}, },
loadWorkload () { loadWorkload () {
this.loading.workload = true this.loading.workload = true
const params = { start: this.workStart, end: this.workEnd } const st = this.workStart ? normalizeVisitTimeValue(this.workStart) : null
getWorkloadStats({ params }).then(ret => { const et = this.workEnd ? normalizeVisitTimeValue(this.workEnd) : null
const params = { start: st, end: et }
getWorkloadStats(params).then(ret => {
if (ret.data && ret.data.errcode === 0) this.tables.workload = ret.data.data || [] if (ret.data && ret.data.errcode === 0) this.tables.workload = ret.data.data || []
else this.$Notice.error({ title: '查询失败', desc: ret.data && ret.data.errmsg }) else this.$Notice.error({ title: '查询失败', desc: ret.data && ret.data.errmsg })
}).finally(() => { this.loading.workload = false }) }).finally(() => { this.loading.workload = false })
}, },
resetWorkload () { this.workStart = null; this.workEnd = null; this.tables.workload = [] }, resetWorkload () { this.workStart = null; this.workEnd = null; this.tables.workload = [] },
openWorkloadDetail (row, type) { openWorkloadDetail (row, type) {
const st = this.workStart ? normalizeVisitTimeValue(this.workStart) : null
const et = this.workEnd ? normalizeVisitTimeValue(this.workEnd) : null
if (type === 'leave') { if (type === 'leave') {
this.detailModal.columns = [{ key: 'user_name', title: '人员' }, { key: 'start_time', title: '开始' }, { key: 'end_time', title: '结束' }, { key: 'duration', title: '时长' }] this.detailModal.columns = [
getWorkloadDetails({ params: { user_id: row.user_id, start: this.workStart, end: this.workEnd, type: 'leave' } }).then(ret => { { title: '人员', key: 'user_name', align: 'center' },
{ title: '开始', key: 'start_time', align: 'center' },
{ title: '结束', key: 'end_time', align: 'center' },
{ title: '时长', key: 'duration', align: 'center' }
]
getWorkloadDetails({ user_id: row.user_id, start: st, end: et, type: 'leave' }).then(ret => {
if (ret.data && ret.data.errcode === 0) { this.detailModal.rows = ret.data.data || []; this.detailModal.visible = true } else this.$Notice.error({ title: '查询失败', desc: ret.data && ret.data.errmsg }) if (ret.data && ret.data.errcode === 0) { this.detailModal.rows = ret.data.data || []; this.detailModal.visible = true } else this.$Notice.error({ title: '查询失败', desc: ret.data && ret.data.errmsg })
}) })
} else { } else {
this.detailModal.columns = [{ key: 'application_no', title: '申请单号' }, { key: 'material_name', title: '物料' }, { key: 'apply_quantity', title: '数量' }] this.detailModal.columns = [
getWorkloadDetails({ params: { user_id: row.user_id, start: this.workStart, end: this.workEnd, type: 'inventory' } }).then(ret => { { title: '申请单号', key: 'application_no', align: 'center' },
{ title: '物料', key: 'material_name', align: 'center' },
{ title: '数量', key: 'apply_quantity', align: 'center' }
]
getWorkloadDetails({ user_id: row.user_id, start: st, end: et, type: 'inventory' }).then(ret => {
if (ret.data && ret.data.errcode === 0) { this.detailModal.rows = ret.data.data || []; this.detailModal.visible = true } else this.$Notice.error({ title: '查询失败', desc: ret.data && ret.data.errmsg }) if (ret.data && ret.data.errcode === 0) { this.detailModal.rows = ret.data.data || []; this.detailModal.visible = true } else this.$Notice.error({ title: '查询失败', desc: ret.data && ret.data.errmsg })
}) })
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论