Files
zhgh_zjnu/src/main/resources/static/assets/staffbenefit/therapyRecuperation/compat.js
T
2026-10-26 18:19:28 +08:00

116 lines
3.7 KiB
JavaScript

const sublime = {
jumpPagePjax(url) {
window.location.href = url;
}
};
Vue.prototype.$validateForm = function(form) {
return new Promise(resolve => {
if (!form) {
this.$message.error('表单尚未加载完成');
resolve(false);
return;
}
const uploading = component => {
if (Array.isArray(component.uploadFiles) && component.uploadFiles.some(file => file.status === 'uploading')) return true;
return (component.$children || []).some(uploading);
};
if (uploading(form)) {
this.$message.warning('请等待图片或附件上传完成后再提交');
resolve(false);
return;
}
form.validate((valid, fields) => {
if (!valid) {
const errors = Object.values(fields || {}).flat();
this.$message.warning(errors.length ? errors[0].message : '请检查必填项和填写格式');
}
resolve(valid);
});
});
};
Vue.prototype.$confirmAction = async function(...args) {
try {
return await this.$confirm(...args);
} catch (error) {
if (error === 'cancel' || error === 'close') return false;
throw error;
}
};
Vue.prototype.$actionError = function(error) {
if (error === 'cancel' || error === 'close') return;
const message = error && (error.responseJSON && error.responseJSON.msg || error.msg || error.message);
this.$message.error(message || '操作失败,请稍后重试');
};
Vue.prototype.$downloadFile = function(url) {
window.location.href = url;
};
Vue.prototype.$importExcel = function(url, files) {
const data = new FormData();
files.forEach(file => data.append('file', file.raw, file.raw.name));
return $.ajax({url: url, type: 'POST', data: data, processData: false, contentType: false});
};
Vue.directive('throttle', {
bind(el) {
let lastClick = 0;
el.therapyThrottleHandler = event => {
const now = Date.now();
if (now - lastClick < 1000) {
event.preventDefault();
event.stopImmediatePropagation();
return;
}
lastClick = now;
};
el.addEventListener('click', el.therapyThrottleHandler, true);
},
unbind(el) {
el.removeEventListener('click', el.therapyThrottleHandler, true);
delete el.therapyThrottleHandler;
}
});
$.ajaxSetup({
traditional: true,
error(xhr) {
const message = xhr.responseJSON && xhr.responseJSON.msg || '请求失败,请稍后重试';
if (window.ELEMENT) ELEMENT.Message.error(message);
else if (window.vant) vant.Toast.fail(message);
}
});
Vue.prototype.$downLoad = function(url, data = {}) {
const query = $.param(data, true);
window.open(url + (url.includes('?') ? '&' : '?') + query);
};
Vue.prototype.$download = Vue.prototype.$downLoad;
Vue.prototype.$viewImage = function(url) {
const address = CREATE_PREVIEW_URL(url);
if (window.vant) vant.ImagePreview([address]);
else window.open(address);
};
window.viewImage = Vue.prototype.$viewImage;
// v3 views use the same helper for stored file IDs and v4 download URLs.
window.therapyPreview = function(value) {
if (!value) return '';
return /^(https?:|data:|blob:|\/)/.test(value) ? value :
'/platform/inclusiveTherapyV3/common/preview?id=' + encodeURIComponent(value);
};
if (window.vant) {
window.preview = function(filename, id) {
const address = therapyPreview(id);
if (/\.(jpe?g|png|gif|bmp|webp|svg)$/i.test(filename || '')) {
vant.ImagePreview([address]);
} else {
window.open(address);
}
};
}