Merge branch 'dev-scheduling' of http://42.192.7.176:3000/suojin/jonhon-mes-web into dev-scheduling

dev-scheduling
zhangdi 1 month ago
commit 7eff2a8a7d
  1. 15
      src/api/costManagement/costStatistics.js
  2. 1
      src/views/basicData/jobTransferManagement.vue
  3. 115
      src/views/basicData/shiftManagement.vue
  4. 38
      src/views/basicData/teamManagement.vue
  5. 42
      src/views/basicData/workCenter.vue
  6. 101
      src/views/costStatistics/index.vue
  7. 48
      src/views/processManagement/processCapability.vue

@ -47,3 +47,18 @@ export const getDetail = (params) =>
method: 'get', method: 'get',
params params
}); });
// 导出材料费用
export const exportMaterial = (params) => {
return exportBlob('/api/blade-desk/costStatistics/exportMaterialCost', params);
};
// 导出作业中心材料费用
export const exportWorkCenterMaterial = (params) => {
return exportBlob('/api/blade-desk/costStatistics/exportWorkCenterMaterialCost', params);
};
// 导出辅助人员材料费用
export const exportAuxiliaryPersonMaterial = (params) => {
return exportBlob('/api/blade-desk/costStatistics/exportAssistantMaterialCost', params);
};

@ -111,7 +111,6 @@
search-key="id" search-key="id"
:debounce-time="500" :debounce-time="500"
@change="changeTeacher" @change="changeTeacher"
/> />
</el-form-item> </el-form-item>
</el-form> </el-form>

@ -17,13 +17,16 @@
@size-change="sizeChange" @size-change="sizeChange"
@refresh-change="refreshChange" @refresh-change="refreshChange"
@on-load="onLoad" @on-load="onLoad"
@sort-change="sortChange"
:permission="permissionList"
> >
</avue-crud> </avue-crud>
</basic-container> </basic-container>
</template> </template>
<script> <script>
import {getList,addShift,updateShift} from "@/api/basicData/shiftManagement" import { getList, addShift, updateShift } from '@/api/basicData/shiftManagement';
import { mapGetters } from 'vuex';
export default { export default {
data() { data() {
return { return {
@ -39,8 +42,8 @@ export default {
excelBox: false, excelBox: false,
option: { option: {
tip: false, tip: false,
height: "auto", height: 'auto',
rowKey: "csId", rowKey: 'csId',
calcHeight: 32, calcHeight: 32,
simplePage: false, simplePage: false,
searchShow: true, searchShow: true,
@ -53,9 +56,9 @@ export default {
selection: false, selection: false,
viewBtn: false, viewBtn: false,
delBtn: false, delBtn: false,
editBtnText: "修改", editBtnText: '修改',
editBtnIcon: " ", editBtnIcon: ' ',
viewBtnText: "详情", viewBtnText: '详情',
labelWidth: 120, labelWidth: 120,
menuWidth: 120, menuWidth: 120,
dialogWidth: 300, dialogWidth: 300,
@ -65,22 +68,22 @@ export default {
searchShowBtn: false, searchShowBtn: false,
excelBtn: true, excelBtn: true,
showOverflowTooltip: true, showOverflowTooltip: true,
searchLabelPosition: "left", searchLabelPosition: 'left',
searchGutter: 24, searchGutter: 24,
searchSpan: 6, searchSpan: 6,
menuAlign: "center", menuAlign: 'center',
gridBtn: false, gridBtn: false,
searchMenuPosition: "right", searchMenuPosition: 'right',
searchLabelWidth: 'auto', searchLabelWidth: 'auto',
addBtnIcon: " ", addBtnIcon: ' ',
viewBtnIcon: " ", viewBtnIcon: ' ',
delBtnIcon: " ", delBtnIcon: ' ',
editBtnIcon: " ", editBtnIcon: ' ',
align: "center", align: 'center',
column: [ column: [
{ {
label: "班次", label: '班次',
prop: "name", prop: 'name',
search: true, search: true,
sortable: true, sortable: true,
filter: true, filter: true,
@ -90,8 +93,8 @@ export default {
rules: [ rules: [
{ {
required: true, required: true,
message: "请输入班次", message: '请输入班次',
trigger: "blur", trigger: 'blur',
}, },
], ],
}, },
@ -102,21 +105,21 @@ export default {
emptyBtn: false, emptyBtn: false,
column: [ column: [
{ {
label: "模板上传", label: '模板上传',
prop: "excelFile", prop: 'excelFile',
type: "upload", type: 'upload',
drag: true, drag: true,
loadText: "模板上传中,请稍等", loadText: '模板上传中,请稍等',
span: 24, span: 24,
propsHttp: { propsHttp: {
res: "data", res: 'data',
}, },
tip: "请上传 .xls,.xlsx 标准格式文件", tip: '请上传 .xls,.xlsx 标准格式文件',
action: "/blade-system/user/import-user", action: '/blade-system/user/import-user',
}, },
{ {
label: "模板下载", label: '模板下载',
prop: "excelTemplate", prop: 'excelTemplate',
formslot: true, formslot: true,
span: 24, span: 24,
}, },
@ -125,7 +128,15 @@ export default {
selectionList: [], selectionList: [],
}; };
}, },
mounted() {}, computed: {
...mapGetters(['permission']),
permissionList() {
return {
addBtn: this.validData(this.permission.shiftManagement_add, false),
editBtn: this.validData(this.permission.shiftManagement_edit, false),
};
},
},
methods: { methods: {
handleImport() { handleImport() {
this.excelBox = true; this.excelBox = true;
@ -141,20 +152,20 @@ export default {
rowUpdate(row, index, done, loading) { rowUpdate(row, index, done, loading) {
updateShift(row).then(res => { updateShift(row).then(res => {
if (res.data.code == 200) { if (res.data.code == 200) {
this.$message.success("修改成功") this.$message.success('修改成功');
this.onLoad() this.onLoad();
done() done();
} }
}) });
}, },
rowSave(row, done, loading) { rowSave(row, done, loading) {
addShift(row).then(res => { addShift(row).then(res => {
if (res.data.code == 200) { if (res.data.code == 200) {
this.$message.success("新增成功") this.$message.success('新增成功');
this.onLoad() this.onLoad();
done() done();
} }
}) });
// done(); // done();
}, },
searchReset() { searchReset() {
@ -168,10 +179,10 @@ export default {
done(); done();
}, },
rowDel(row, index, done) { rowDel(row, index, done) {
this.$confirm("确定将选择数据删除?", { this.$confirm('确定将选择数据删除?', {
confirmButtonText: "确定", confirmButtonText: '确定',
cancelButtonText: "取消", cancelButtonText: '取消',
type: "warning", type: 'warning',
}).then(() => {}); }).then(() => {});
}, },
currentChange(currentPage) { currentChange(currentPage) {
@ -183,17 +194,31 @@ export default {
refreshChange() { refreshChange() {
this.onLoad(this.page, this.query); this.onLoad(this.page, this.query);
}, },
//
sortChange({ prop, order }) {
if (!prop) {
//
this.query.orderByField = undefined;
this.query.isAsc = undefined;
} else {
const orderByField = prop.replace(/([a-z])([A-Z0-9])/g, '$1_$2').toUpperCase();
this.query.orderByField = orderByField;
this.query.isAsc = order === 'ascending' ? true : false;
}
//
this.onLoad();
},
onLoad() { onLoad() {
this.loading = true; this.loading = true;
getList({ getList({
current: 1, current: 1,
size: 10, size: 10,
...this.query ...this.query,
}).then(res => { }).then(res => {
this.data = res.data.data.records this.data = res.data.data.records;
this.page.total = res.data.data.total this.page.total = res.data.data.total;
this.loading = false this.loading = false;
}) });
}, },
}, },
}; };

@ -18,21 +18,23 @@
@refresh-change="refreshChange" @refresh-change="refreshChange"
:before-open="beforeOpen" :before-open="beforeOpen"
@on-load="onLoad" @on-load="onLoad"
@sort-change="sortChange"
:permission="permissionList"
> >
<template #menu-left> <template #menu-left>
<el-button type="danger" @click="handleDelete"> </el-button> <el-button type="danger" v-if="permission.teamManagement_del" @click="handleDelete"> </el-button>
<!-- <el-button type="success" icon="el-icon-upload" @click="handleImport" <!-- <el-button type="success" icon="el-icon-upload" @click="handleImport"
>导入 >导入
</el-button> --> </el-button> -->
</template> </template>
<template #menu-right> <template #menu-right>
<el-button type="primary" @click="handleImport">导入</el-button> <el-button type="primary" v-if="permission.teamManagement_import" @click="handleImport">导入</el-button>
</template> </template>
<template #menu="scope"> <template #menu="scope">
<el-button type="text" @click="setCrew(scope.row)">设置班组人员</el-button> <el-button type="text" v-if="permission.teamManagement_setTeamMembers" @click="setCrew(scope.row)">设置班组人员</el-button>
<el-button type="text" @click="changeTime(scope.row, 0)">日分派时间</el-button> <el-button type="text" v-if="permission.teamManagement_dailyDispatchTime" @click="changeTime(scope.row, 0)">日分派时间</el-button>
<el-button type="text" @click="changeTime(scope.row, 1)">特殊日分派时间</el-button> <el-button type="text" v-if="permission.teamManagement_specialDayDistributionTime" @click="changeTime(scope.row, 1)">特殊日分派时间</el-button>
<el-button type="text" @click="changeTime(scope.row, 2)">轮换时间</el-button> <el-button type="text" v-if="permission.teamManagement_rotationTime" @click="changeTime(scope.row, 2)">轮换时间</el-button>
</template> </template>
<template #teamLeader="{ row }"> <template #teamLeader="{ row }">
{{ row.teamLeaderRealName }} {{ row.teamLeaderRealName }}
@ -263,6 +265,7 @@ import {
} from '@/api/basicData/teamManagement.js'; } from '@/api/basicData/teamManagement.js';
import basicImport from '@/components/basic-import/main.vue'; import basicImport from '@/components/basic-import/main.vue';
import treeTransfer from 'tree-transfer-vue3'; // import treeTransfer from 'tree-transfer-vue3'; //
import { mapGetters } from 'vuex';
export default { export default {
components: { components: {
basicImport, basicImport,
@ -585,6 +588,15 @@ export default {
checkId: '', checkId: '',
checkTimeType: 0, checkTimeType: 0,
}; };
},
computed: {
...mapGetters(['permission']),
permissionList() {
return {
addBtn: this.validData(this.permission.teamManagement_add, false),
editBtn: this.validData(this.permission.teamManagement_edit, false),
};
},
}, },
mounted() {}, mounted() {},
methods: { methods: {
@ -886,6 +898,20 @@ export default {
}, },
refreshChange() { refreshChange() {
this.onLoad(this.page, this.query); this.onLoad(this.page, this.query);
},
//
sortChange({ prop, order }) {
if (!prop) {
//
this.query.orderByField = undefined;
this.query.isAsc = undefined;
} else {
const orderByField = prop.replace(/([a-z])([A-Z0-9])/g, '$1_$2').toUpperCase();
this.query.orderByField = orderByField;
this.query.isAsc = order === 'ascending' ? true : false;
}
//
this.onLoad();
}, },
onLoad() { onLoad() {
this.loading = true; this.loading = true;

@ -16,14 +16,26 @@
@size-change="sizeChange" @size-change="sizeChange"
@refresh-change="refreshChange" @refresh-change="refreshChange"
@on-load="onLoad" @on-load="onLoad"
@sort-change="sortChange"
:beforeOpen="beforeOpen" :beforeOpen="beforeOpen"
:permission="permissionList"
> >
<template #menu-left> <template #menu-left>
<el-button type="danger" @click="handleDelete">删除</el-button> <el-button type="danger" v-if="permission.workCenter_del" @click="handleDelete">
删除
</el-button>
</template> </template>
<template #menu="{ row }"> <template #menu="{ row }">
<el-button type="text" @click="setTeam(row)">设置班组</el-button> <el-button type="text" v-if="permission.workCenter_setTeam" @click="setTeam(row)">
<el-button type="text" @click="setCapability(row)">设置工艺能力</el-button> 设置班组
</el-button>
<el-button
type="text"
v-if="permission.workCenter_setCapability"
@click="setCapability(row)"
>
设置工艺能力
</el-button>
</template> </template>
</avue-crud> </avue-crud>
<el-dialog title="设置班组" append-to-body v-model="teamDialog" width="700"> <el-dialog title="设置班组" append-to-body v-model="teamDialog" width="700">
@ -131,6 +143,7 @@ import {
deleteWorkCenter, deleteWorkCenter,
getAllUser, getAllUser,
} from '@/api/basicData/workCenter'; } from '@/api/basicData/workCenter';
import { mapGetters } from 'vuex';
export default { export default {
data() { data() {
return { return {
@ -465,6 +478,15 @@ export default {
checkId: '', checkId: '',
}; };
}, },
computed: {
...mapGetters(['permission']),
permissionList() {
return {
addBtn: this.validData(this.permission.workCenter_add, false),
editBtn: this.validData(this.permission.workCenter_edit, false),
};
},
},
mounted() { mounted() {
this.getAbilityData(); this.getAbilityData();
}, },
@ -699,6 +721,20 @@ export default {
}); });
} }
}, },
//
sortChange({ prop, order }) {
if (!prop) {
//
this.query.orderByField = undefined;
this.query.isAsc = undefined;
} else {
const orderByField = prop.replace(/([a-z])([A-Z0-9])/g, '$1_$2').toUpperCase();
this.query.orderByField = orderByField;
this.query.isAsc = order === 'ascending' ? true : false;
}
//
this.onLoad();
},
onLoad() { onLoad() {
getList({ getList({
current: this.page.currentPage, current: this.page.currentPage,

@ -18,6 +18,8 @@
@size-change="sizeChange" @size-change="sizeChange"
@refresh-change="refreshChange" @refresh-change="refreshChange"
@on-load="onLoad" @on-load="onLoad"
@cell-click="cellClick"
:cell-class-name="tableCellClassName"
> >
<template #menu-left> <template #menu-left>
<el-button type="primary" @click="handleCost">成本计算</el-button> <el-button type="primary" @click="handleCost">成本计算</el-button>
@ -72,8 +74,7 @@
</template> </template>
<script> <script>
import {getList,deleteTable,verifyTable,calculateTable,exportData,getDetail} from "@/api/costManagement/costStatistics" import {getList,deleteTable,verifyTable,calculateTable,exportData,getDetail,exportMaterial,exportWorkCenterMaterial,exportAuxiliaryPersonMaterial} from "@/api/costManagement/costStatistics"
import { tr } from 'element-plus/es/locales.mjs'
export default { export default {
data(){ data(){
return{ return{
@ -307,6 +308,92 @@ export default {
}, },
methods:{ methods:{
cellClick(row, column, cell, event){
console.log('row----------',row)
console.log('column----------',column)
if(column.property == 'materialCost'){
this.$confirm('是否导出数据?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
// this.loading = true;
exportMaterial({ month: row.month,workCenterId:row.workCenterId }).then(res => {
const blob = new Blob([res.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = `${row.month}${row.workCenterName}材料费用.xlsx`;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
window.URL.revokeObjectURL(url);
this.$message.success('导出成功');
this.loading = false;
}).catch(() => {
this.loading = false;
});
});
}else if(column.property == 'workCenterMaterialCost'){
this.$confirm('是否导出数据?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
exportWorkCenterMaterial({ month: row.month,workCenterId:row.workCenterId }).then(res => {
const blob = new Blob([res.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = `${row.month}${row.workCenterName}作业中心材料费用.xlsx`;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
window.URL.revokeObjectURL(url);
this.$message.success('导出成功');
this.loading = false;
}).catch(() => {
this.loading = false;
});
})
}else if(column.property == 'assistantMaterialCost'){
this.$confirm('是否导出数据?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
exportAuxiliaryPersonMaterial({ month: row.month }).then(res => {
const blob = new Blob([res.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = `${row.month}月辅助人员材料费用.xlsx`;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
window.URL.revokeObjectURL(url);
this.$message.success('导出成功');
this.loading = false;
}).catch(() => {
this.loading = false;
});
})
}else{
return
}
},
tableCellClassName({ row, column, rowIndex, columnIndex }){
const monthProps = [
'materialCost',
'workCenterMaterialCost',
"assistantMaterialCost"
];
if(monthProps.includes(column.property)){
return "high_row"
}
return ''
},
handleCurrentRowChange(row){ handleCurrentRowChange(row){
if (!row) { if (!row) {
this.detailData = []; this.detailData = [];
@ -538,4 +625,14 @@ export default {
::v-deep .el-table__row.current-row td { ::v-deep .el-table__row.current-row td {
background-color: yellow !important; background-color: yellow !important;
} }
//
::v-deep .high_row {
cursor: pointer !important;
// 线
&:hover {
text-decoration: underline;
color: #284c89 !important; /* Element UI 主题蓝,你可以改为 blue 或其他颜色 */
}
}
</style> </style>

@ -18,9 +18,17 @@
@refresh-change="refreshChange" @refresh-change="refreshChange"
@on-load="onLoad" @on-load="onLoad"
:before-open="beforeOpen" :before-open="beforeOpen"
@sort-change="sortChange"
:permission="permissionList"
> >
<template #menu-left> <template #menu-left>
<el-button type="danger" plain @click="handleDelete()">删除</el-button> <el-button
type="danger"
plain
v-if="permission.processCapability_del"
@click="handleDelete()"
>删除</el-button
>
</template> </template>
<template #menu-right> <template #menu-right>
@ -36,9 +44,22 @@
value: 'dictKey', value: 'dictKey',
}" }"
style="width: 200px; margin-right: 12px" style="width: 200px; margin-right: 12px"
v-if="permission.processCapability_batchSettings"
></avue-select> ></avue-select>
<el-button type="primary" @click="batchSet()">批量设置</el-button> <el-button
<el-button type="primary" @click="handleImport">导入</el-button> type="primary"
v-if="permission.processCapability_batchSettings"
@click="batchSet()"
>
批量设置
</el-button>
<el-button
type="primary"
v-if="permission.processCapability_import"
@click="handleImport"
>
导入
</el-button>
</span> </span>
</template> </template>
@ -326,10 +347,9 @@ export default {
...mapGetters(['userInfo', 'permission']), ...mapGetters(['userInfo', 'permission']),
permissionList() { permissionList() {
return { return {
addBtn: this.validData(this.permission.menu_add, false), addBtn: this.validData(this.permission.processCapability_add, false),
viewBtn: this.validData(this.permission.menu_view, false), delBtn: this.validData(this.permission.processCapability_del, false),
delBtn: this.validData(this.permission.menu_delete, false), editBtn: this.validData(this.permission.processCapability_edit, false),
editBtn: this.validData(this.permission.menu_edit, false),
}; };
}, },
ids() { ids() {
@ -563,6 +583,20 @@ export default {
refreshChange() { refreshChange() {
this.onLoad(this.page, this.query); this.onLoad(this.page, this.query);
},
//
sortChange({ prop, order }) {
if (!prop) {
//
this.query.orderByField = undefined;
this.query.isAsc = undefined;
} else {
const orderByField = prop.replace(/([a-z])([A-Z0-9])/g, '$1_$2').toUpperCase();
this.query.orderByField = orderByField;
this.query.isAsc = order === 'ascending' ? true : false;
}
//
this.onLoad();
}, },
// //
onLoad(page, params = {}) { onLoad(page, params = {}) {

Loading…
Cancel
Save