//此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] + '
';
}
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] + '
';
}
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 '' + daysSinceClosest + "天" + '';
} else {
// 空托记录会进入这个分支,返回"1个"或"10个"这样的字符串
// 在这里记录空托数量
const emptyPalletCount = 1; // 每条空托记录代表1个空托
// 保存到row对象,方便后续checkEmptyPalletWarning方法使用
row.emptyPalletCount = emptyPalletCount;
return '' + emptyPalletCount + "个" + '';
}
}
}
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 '' + sum + row.details[0].unit + '';
} else {
// 空托记录会进入这个分支,返回"1个"或"10个"这样的字符串
// 在这里记录空托数量
const emptyPalletCount = 1; // 每条空托记录代表1个空托
// 保存到row对象,方便后续checkEmptyPalletWarning方法使用
row.emptyPalletCount = emptyPalletCount;
return '' + emptyPalletCount + "个" + '';
}
}
}
})
},
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;