|
//此js文件是用来自定义扩展业务代码,可以扩展一些自定义页面或者重新配置生成的代码
|
|
import { el } from "element-plus/es/locales.mjs";
|
|
let extension = {
|
components: {
|
//查询界面扩展组件
|
gridHeader: '',
|
gridBody: '',
|
gridFooter: '',
|
//新建、编辑弹出框扩展组件
|
modelHeader: '',
|
modelBody: '',
|
modelFooter: ''
|
},
|
tableAction: '', //指定某张表的权限(这里填写表名,默认不用填写)
|
buttons: { view: [], box: [], detail: [] }, //扩展的按钮
|
methods: {
|
//下面这些方法可以保留也可以删除
|
onInit() {
|
// 初始化空托检查定时器
|
// 设置定时器,每60秒检查一次
|
this.checkEmptyPalletTimer = setInterval(() => {
|
this.checkEmptyPalletWarning();
|
}, 10000); // 每10秒检查一次
|
|
// 原有代码...
|
// let InOrder = this.buttons.find(x => x.value == 'StockOutbound');
|
// if (InOrder) {
|
// InOrder.onClick = function () {
|
// let rows = this.$refs.table.getSelected();
|
// if (rows.length == 0) return this.$error("请选择数据!");
|
// if (rows.length > 1) return this.$error("请选择单条数据!");
|
// var keys = rows.map(x => { return x.stockId });
|
// this.http
|
// .post("api/Task/Outbound?id="+keys[0], null, "数据处理中")
|
// .then((x) => {
|
// if (!x.status) return this.$message.error(x.message);
|
// this.$message.success("操作成功");
|
// this.refresh();
|
// });
|
// }
|
// }
|
this.columns.forEach(column => {
|
if (column.field == 'materielCode') {
|
column.formatter = (row) => {
|
var str = '';
|
var list = row.materielCode.split(',');
|
for (let index = 0; index < list.length; index++) {
|
str += list[index] + '<br>';
|
}
|
return str = list[0] == "" ? "空箱" : str;
|
}
|
}
|
if (column.field == 'batchNo') {
|
column.formatter = (row) => {
|
var str = '';
|
var list = row.batchNo.split(',');
|
for (let index = 0; index < list.length; index++) {
|
str += list[index] + '<br>';
|
}
|
return str = list[0] == "" ? "无" : str;
|
}
|
}
|
if (column.field == 'materielInfo') {
|
const today = new Date()
|
column.formatter = (row) => {
|
if (row.details.length > 0) {
|
const today = new Date();
|
const closestDate = row.details
|
.map(x => {
|
const date = new Date(x.effectiveDate);
|
const diffInDays = Math.ceil(Math.abs((today - date) / (1000 * 60 * 60 * 24)));
|
return { date, diffInDays };
|
})
|
.reduce((closest, current) => (current.diffInDays < closest.diffInDays ? current : closest))
|
.date;
|
|
const daysSinceClosest = Math.ceil(Math.abs((today - closestDate) / (1000 * 60 * 60 * 24)));
|
return '<span style="color: #F56C6C">' + daysSinceClosest + "天" + '</span>';
|
} else {
|
// 空托记录会进入这个分支,返回"1个"或"10个"这样的字符串
|
// 在这里记录空托数量
|
const emptyPalletCount = 1; // 每条空托记录代表1个空托
|
|
// 保存到row对象,方便后续checkEmptyPalletWarning方法使用
|
row.emptyPalletCount = emptyPalletCount;
|
|
return '<span style="color: #F56C6C">' + emptyPalletCount + "个" + '</span>';
|
}
|
|
}
|
}
|
if (column.field == 'sumStock') {
|
column.formatter = (row) => {
|
if (row.details.length > 0) {
|
var sum = 0;
|
const closestDate = row.details
|
.map(x => {
|
sum += (x.stockQuantity)
|
})
|
return '<span style="color: #F56C6C">' + sum + row.details[0].unit + '</span>';
|
} else {
|
// 空托记录会进入这个分支,返回"1个"或"10个"这样的字符串
|
// 在这里记录空托数量
|
const emptyPalletCount = 1; // 每条空托记录代表1个空托
|
|
// 保存到row对象,方便后续checkEmptyPalletWarning方法使用
|
row.emptyPalletCount = emptyPalletCount;
|
|
return '<span style="color: #F56C6C">' + emptyPalletCount + "个" + '</span>';
|
}
|
|
}
|
}
|
})
|
},
|
onInited() {
|
//框架初始化配置后
|
//如果要配置明细表,在此方法操作
|
//this.detailOptions.columns.forEach(column=>{ });
|
},
|
searchBefore(param) {
|
//界面查询前,可以给param.wheres添加查询参数
|
//返回false,则不会执行查询
|
return true;
|
},
|
searchAfter(result) {
|
//查询后,result返回的查询数据,可以在显示到表格前处理表格的值
|
return true;
|
},
|
addBefore(formData) {
|
//新建保存前formData为对象,包括明细表,可以给给表单设置值,自己输出看formData的值
|
return true;
|
},
|
updateBefore(formData) {
|
//编辑保存前formData为对象,包括明细表、删除行的Id
|
return true;
|
},
|
rowClick({ row, column, event }) {
|
//查询界面点击行事件
|
this.$refs.table.$refs.table.toggleRowSelection(row); //单击行时选中当前行;
|
},
|
modelOpenAfter(row) {
|
//点击编辑、新建按钮弹出框后,可以在此处写逻辑,如,从后台获取数据
|
//(1)判断是编辑还是新建操作: this.currentAction=='Add';
|
//(2)给弹出框设置默认值
|
//(3)this.editFormFields.字段='xxx';
|
//如果需要给下拉框设置默认值,请遍历this.editFormOptions找到字段配置对应data属性的key值
|
//看不懂就把输出看:console.log(this.editFormOptions)
|
},
|
|
// 检查空托数量
|
checkEmptyPalletWarning() {
|
// 获取全局对象和store,检查是否存在相同的警告消息
|
const globalObj = this.$global || window.$global || {};
|
const store = this.$store || window.$store;
|
const globalMessageList = globalObj.messageList || [];
|
const storeMessageList = store?.state?.messageList || [];
|
|
// 检查是否已经存在未清除的空托预警消息
|
const hasExistingWarning = [...globalMessageList, ...storeMessageList].some(msg =>
|
msg.businessType === 'pallet_warning' && msg.type === 'warning'
|
);
|
|
if (hasExistingWarning) return;
|
|
// 获取当前所有库存数据
|
const stockData = this.$refs.table?.rowData || this.$refs.table?.tableData || [];
|
|
// 计算空托总数量:只计算proStockAttribute为5的记录
|
let totalEmptyPalletCount = 0;
|
|
// 遍历所有库存记录,累加空托数量
|
stockData.forEach(stock => {
|
const proStockAttribute = stock.proStockAttribute || stock.ProStockAttribute || 0;
|
if (proStockAttribute === 5) {
|
// 解析sumStock的值,提取数字部分
|
const sumStocks = stock.sumStocks || stock.sumStock || 0;
|
const stockQuantity = typeof sumStocks === 'string'
|
? parseInt(sumStocks.match(/\d+/)?.[0] || 0)
|
: parseInt(sumStocks || 0);
|
totalEmptyPalletCount += stockQuantity;
|
}
|
});
|
|
// 空托预警阈值为50个
|
const warningThreshold = 50;
|
|
// 如果空托总数量小于阈值,发送警告消息
|
if (totalEmptyPalletCount < warningThreshold) {
|
this.sendPalletWarningMessage(totalEmptyPalletCount, warningThreshold);
|
}
|
},
|
|
// 发送空托警告消息
|
sendPalletWarningMessage(emptyPalletCount, warningThreshold) {
|
// 创建警告消息
|
const warningMessage = {
|
id: Date.now(),
|
title: '空托数量预警',
|
message: `成品库空托数量不足,当前总数量:${emptyPalletCount},低于预警阈值:${warningThreshold},建议及时补充!`,
|
type: 'warning',
|
businessType: 'pallet_warning',
|
createTime: new Date().toLocaleString(),
|
relatedData: {
|
EmptyPalletCount: emptyPalletCount,
|
Threshold: warningThreshold
|
}
|
};
|
|
// 获取全局对象和store
|
const globalObj = this.$global || window.$global || {};
|
const store = this.$store || window.$store;
|
|
// 添加消息到store
|
if (store) {
|
store.commit('addMessage', warningMessage);
|
}
|
|
// 添加消息到全局消息列表,确保列表存在
|
if (!globalObj.messageList) {
|
globalObj.messageList = [];
|
}
|
globalObj.messageList.push(warningMessage);
|
|
// 显示提示框
|
// const $alert = this.$alert;
|
// const $message = this.$message;
|
|
// if ($alert) {
|
// $alert(warningMessage.message, warningMessage.title, {
|
// confirmButtonText: '确定',
|
// type: warningMessage.type,
|
// closeOnClickModal: false,
|
// closeOnPressEscape: false,
|
// showCancelButton: false
|
// });
|
// } else if ($message) {
|
// $message.warning(warningMessage.message);
|
// } else {
|
// alert(`${warningMessage.title}: ${warningMessage.message}`);
|
// }
|
},
|
|
// 在查询后处理数据
|
searchAfter(result) {
|
return true;
|
}
|
}
|
};
|
export default extension;
|