mirror of
https://github.com/jeecgboot/JeecgBoot.git
synced 2025-12-08 17:12:28 +08:00
567 lines
16 KiB
Vue
567 lines
16 KiB
Vue
import { ref, reactive, nextTick } from 'vue';
|
||
import { defHttp } from '/@/utils/http/axios';
|
||
import { getDictItemsByCode } from '/@/utils/dict/index';
|
||
import { useRouter, useRoute } from 'vue-router'
|
||
import { useAppStore } from '/@/store/modules/app';
|
||
import { useTabs } from '/@/hooks/web/useTabs';
|
||
import { useModal } from '/@/components/Modal';
|
||
import {useMessage} from "/@/hooks/web/useMessage";
|
||
|
||
/**
|
||
* 列表接口
|
||
* @param params
|
||
*/
|
||
const queryMessageList = (params) => {
|
||
const url = '/sys/annountCement/vue3List';
|
||
return defHttp.get({ url, params });
|
||
};
|
||
|
||
/**
|
||
* 获取消息列表数据
|
||
*
|
||
* setLocaleText 设置未读消息
|
||
*/
|
||
export function useSysMessage(setLocaleText) {
|
||
const { createMessage } = useMessage();
|
||
const rangeDateArray = getDictItemsByCode('rangeDate');
|
||
console.log('+++++++++++++++++++++');
|
||
console.log('rangeDateArray', rangeDateArray);
|
||
console.log('+++++++++++++++++++++');
|
||
|
||
const messageList = ref<any[]>([]);
|
||
const pageNo = ref(1)
|
||
let pageSize = 10;
|
||
|
||
const searchParams = reactive({
|
||
fromUser: '',
|
||
rangeDateKey: '',
|
||
rangeDate: [],
|
||
starFlag: '',
|
||
noticeType: ''
|
||
});
|
||
|
||
|
||
function getQueryParams() {
|
||
let { fromUser, rangeDateKey, rangeDate, starFlag, noticeType } = searchParams;
|
||
let params = {
|
||
fromUser,
|
||
starFlag,
|
||
rangeDateKey,
|
||
beginDate: '',
|
||
endDate: '',
|
||
pageNo: pageNo.value,
|
||
pageSize,
|
||
noticeType
|
||
};
|
||
if (rangeDateKey == 'zdy') {
|
||
params.beginDate = rangeDate[0]+' 00:00:00';
|
||
params.endDate = rangeDate[1]+' 23:59:59';
|
||
}
|
||
return params;
|
||
}
|
||
|
||
// 数据是否加载完了
|
||
const loadEndStatus = ref(false);
|
||
|
||
//请求数据
|
||
async function loadData() {
|
||
if(loadEndStatus.value === true){
|
||
return;
|
||
}
|
||
let params = getQueryParams();
|
||
const data = await queryMessageList(params);
|
||
console.log('获取结果', data);
|
||
if(!data || data.length<=0){
|
||
loadEndStatus.value = true;
|
||
setLocaleText();
|
||
return;
|
||
}
|
||
if(data.length<pageSize){
|
||
loadEndStatus.value = true;
|
||
}
|
||
pageNo.value = pageNo.value+1
|
||
let temp:any[] = messageList.value;
|
||
temp.push(...data);
|
||
messageList.value = temp;
|
||
setLocaleText();
|
||
}
|
||
|
||
//重置
|
||
function reset(){
|
||
messageList.value = []
|
||
pageNo.value = 1;
|
||
loadEndStatus.value = false;
|
||
}
|
||
|
||
//标星
|
||
async function updateStarMessage(item){
|
||
const url = '/sys/sysAnnouncementSend/edit';
|
||
let starFlag = '1';
|
||
if(item.starFlag==starFlag){
|
||
starFlag = '0'
|
||
}
|
||
const params = {
|
||
starFlag,
|
||
id: item.sendId
|
||
}
|
||
//update-begin-author:taoyan date:2023-3-6 for: QQYUN-4491【应用】一些小问题 4、标星不需要提示吧
|
||
const data:any = await defHttp.put({url, params}, {isTransformResponse: false});
|
||
if(data.success === true){
|
||
}else{
|
||
createMessage.warning(data.message)
|
||
}
|
||
//update-end-author:taoyan date:2023-3-6 for: QQYUN-4491【应用】一些小问题 4、标星不需要提示吧
|
||
}
|
||
|
||
|
||
const loadingMoreStatus = ref(false);
|
||
async function onLoadMore() {
|
||
loadingMoreStatus.value = true;
|
||
await loadData();
|
||
loadingMoreStatus.value = false;
|
||
}
|
||
|
||
function noRead(item) {
|
||
if (item.readFlag === '1') {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
// 消息类型
|
||
function getMsgCategory(item) {
|
||
if(item.busType=='email'){
|
||
return '邮件提醒:';
|
||
} else if(item.busType=='bpm'){
|
||
return '流程催办:';
|
||
} else if(item.busType=='bpm_cc'){
|
||
return '流程抄送:';
|
||
}else if(item.busType=='bpm_task'){
|
||
return '流程任务:';
|
||
} else if (item.msgCategory == '2') {
|
||
return '系统消息:';
|
||
} else if (item.msgCategory == '1') {
|
||
return '通知公告:';
|
||
}
|
||
return '';
|
||
}
|
||
|
||
// QQYUN-4472 来消息了没有提醒--查看详情改为去处理
|
||
function getHrefText(item) {
|
||
if(item.busType === 'bpm'|| item.busType === 'bpm_task' || item.busType === 'tenant_invite'){
|
||
//判断是否是查看详情
|
||
if (item.msgAbstract) {
|
||
try {
|
||
const json = JSON.parse(item.msgAbstract);
|
||
if (json.taskDetail) {
|
||
return '查看详情';
|
||
}
|
||
} catch (e) {
|
||
console.error('getHrefText:msgAbstract参数不是JSON格式', item.msgAbstract);
|
||
}
|
||
}
|
||
return '去处理'
|
||
} else {
|
||
return '查看详情'
|
||
}
|
||
}
|
||
|
||
return {
|
||
messageList,
|
||
reset,
|
||
loadData,
|
||
loadEndStatus,
|
||
searchParams,
|
||
updateStarMessage,
|
||
onLoadMore,
|
||
noRead,
|
||
getMsgCategory,
|
||
getHrefText
|
||
|
||
};
|
||
}
|
||
|
||
/**
|
||
* 用于消息跳转
|
||
*/
|
||
export function useMessageHref(emit, props){
|
||
//const [registerHistoryModal, { openModal: openHistoryModal }] = useModal();
|
||
//const [registerTaskModal, { openModal: openTaskModal }] = useModal();
|
||
// 注册表单弹窗
|
||
//const [registerDesignFormModal, { openModal: openDesignFormModal }] = useModal();
|
||
const messageHrefArray: any[] = getDictItemsByCode('messageHref');
|
||
const router = useRouter();
|
||
const appStore = useAppStore();
|
||
const rt = useRoute();
|
||
const { close: closeTab, closeSameRoute } = useTabs();
|
||
|
||
//*********************************[QQYUN-6713]系统通知打开弹窗修改,动态设置弹窗begin******************************************
|
||
//当前表单弹窗
|
||
const currentModal = ref<string | null>(null);
|
||
//当前表单参数
|
||
const modalParams = ref<Recordable>({});
|
||
//表单注册缓存
|
||
const modalRegCache = ref<Recordable>({});
|
||
//组件绑定参数
|
||
const bindParams = ref<Recordable>({});
|
||
|
||
/**
|
||
* 根据类型打开不同弹窗
|
||
* @param type
|
||
* @param params
|
||
*/
|
||
async function handleOpenType(type, params) {
|
||
currentModal.value = null;
|
||
modalParams.value = { ...params };
|
||
switch (type) {
|
||
case 'task':
|
||
//流程办理
|
||
bindParams.value = { actionType: 'todo' };
|
||
currentModal.value = 'ProcessTaskHandleModal';
|
||
break;
|
||
case 'history':
|
||
bindParams.value = {};
|
||
//历史流程
|
||
currentModal.value = 'MyTaskHandleModal';
|
||
break;
|
||
case 'design':
|
||
//表单设计
|
||
currentModal.value = 'DesformViewModal';
|
||
bindParams.value = {
|
||
showRecordCopy: false,
|
||
showRecordShare: false,
|
||
showRecordSysPrint: false,
|
||
showDesignFormBtn: false,
|
||
};
|
||
break;
|
||
case 'cgform':
|
||
//Online表单
|
||
currentModal.value = 'OnlineAutoModal';
|
||
bindParams.value = {
|
||
id: params.formId,
|
||
}
|
||
break;
|
||
default:
|
||
currentModal.value = null;
|
||
break;
|
||
}
|
||
//注册表单弹窗
|
||
initModalRegister();
|
||
await nextTick(() => {
|
||
if (modalRegCache.value[currentModal.value!]?.isRegister) {
|
||
console.log('已注冊,走缓存');
|
||
modalRegCache.value[currentModal.value!].modalMethods.openModal(true, modalParams.value);
|
||
}
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 初始化弹窗注册
|
||
*/
|
||
function initModalRegister() {
|
||
//如果当前选择表单为null,就不处理
|
||
if (!currentModal.value) {
|
||
return;
|
||
}
|
||
//判断缓存中是否存在,不存在就走缓存逻辑
|
||
if (!modalRegCache.value[currentModal.value]) {
|
||
const [registerModal, modalMethods] = useModal();
|
||
modalRegCache.value[currentModal.value] = {
|
||
isRegister: false,
|
||
register: bindRegisterModal(registerModal, modalMethods),
|
||
modalMethods,
|
||
};
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 绑定注册弹窗
|
||
* @param regFn
|
||
* @param modalMethod
|
||
*/
|
||
function bindRegisterModal(regFn, modalMethod) {
|
||
return async (...args) => {
|
||
console.log('开始注册:', currentModal.value);
|
||
await regFn(...args);
|
||
console.log('注册完成:', currentModal.value);
|
||
//打开弹窗
|
||
modalMethod.openModal(true, modalParams.value);
|
||
//设置缓存标识
|
||
modalRegCache.value[currentModal.value!].isRegister = true;
|
||
};
|
||
}
|
||
//*************************************[QQYUN-6713]系统通知打开弹窗修改,动态设置弹窗end*********************************************
|
||
// const defaultPath = '/monitor/mynews';
|
||
//const bpmPath = '/task/handle/'
|
||
|
||
async function goPage(record, openModalFun?){
|
||
if(!record.busType || record.busType == 'msg_node'){
|
||
if(!openModalFun){
|
||
// 从首页的消息通知跳转
|
||
await goPageFromOuter(record);
|
||
}else{
|
||
// 从消息页面列表点击详情查看 直接打开modal
|
||
openModalFun()
|
||
}
|
||
// update-begin-author:taoyan date:2023-5-10 for: QQYUN-4744【系统通知】6、系统通知@人后,对方看不到是哪个表单@的,没有超链接
|
||
}else if(record.busType == 'comment'){
|
||
// de
|
||
let msgAbstract = record.msgAbstract;
|
||
if(msgAbstract){
|
||
try {
|
||
let data = JSON.parse(msgAbstract.toString());
|
||
if(data.type == 'designForm'){
|
||
showDesignFormModal(data);
|
||
} else {
|
||
showOnlineCgformModal(data);
|
||
}
|
||
}catch (e) {
|
||
console.error('打开评论表单,但是msgAbstract参数不是JSON格式', msgAbstract)
|
||
if(openModalFun){
|
||
openModalFun();
|
||
}
|
||
}
|
||
}
|
||
// update-end-author:taoyan date:2023-5-10 for: QQYUN-4744【系统通知】6、系统通知@人后,对方看不到是哪个表单@的,没有超链接
|
||
}else if(record.busType == 'tenant_invite'){
|
||
if(props.isLowApp===true){
|
||
router.push({ name:"myapps-settings-user", query:{ page:'tenantSetting' }})
|
||
}else{
|
||
router.push({ name:"system-usersetting", query:{ page:'tenantSetting' }})
|
||
}
|
||
}else{
|
||
if(props && props.isLowApp===true){
|
||
openLowAppFlowModal(record)
|
||
}else{
|
||
await goPageWithBusType(record)
|
||
}
|
||
}
|
||
/* busId: "1562035005173587970"
|
||
busType: "email"
|
||
openPage: "modules/eoa/email/modals/EoaEmailInForm"
|
||
openType: "component"*/
|
||
}
|
||
|
||
/**
|
||
* 打开表单设计器 表单弹窗
|
||
* @param data
|
||
*/
|
||
function showDesignFormModal(data) {
|
||
handleOpenType('design', {
|
||
mode: 'detail',
|
||
desformCode: data.code,
|
||
dataId: data.dataId,
|
||
isOnline: false,
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 打开Online表单 弹窗
|
||
* @param data
|
||
*/
|
||
function showOnlineCgformModal(data) {
|
||
handleOpenType('cgform', {
|
||
formId: data.formId,
|
||
isUpdate: true,
|
||
disableSubmit: true,
|
||
record: {
|
||
id: data.dataId,
|
||
},
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 判断是不是表单的评论消息
|
||
* @param record
|
||
*/
|
||
function isFormComment(record) {
|
||
if(record.busType == 'comment'){
|
||
let msgAbstract = record.msgAbstract;
|
||
if(msgAbstract){
|
||
try {
|
||
let data = JSON.parse(msgAbstract);
|
||
if(['cgform', 'designForm'].includes(data.type)){
|
||
return true
|
||
}
|
||
}catch (e) {
|
||
console.error('打开评论表单,但是msgAbstract参数不是JSON格式', msgAbstract)
|
||
}
|
||
}
|
||
}
|
||
return false
|
||
}
|
||
|
||
/**
|
||
* 如果是工作流任务 在lowApp中 直接打开modal
|
||
*/
|
||
function openLowAppFlowModal(record){
|
||
const { busType, busId, msgAbstract } = record;
|
||
let temp = messageHrefArray.filter(item=>item.value === busType);
|
||
if(!temp || temp.length==0){
|
||
console.error('当前业务类型不识别', busType);
|
||
return;
|
||
}
|
||
if(busType.indexOf('bpm')<0){
|
||
console.error('low-app不支持跳转邮箱', busType);
|
||
return;
|
||
}
|
||
//固定参数 detailId 用于查询表单数据
|
||
let query:any = {
|
||
detailId: busId
|
||
};
|
||
// 额外参数处理
|
||
if(msgAbstract){
|
||
try {
|
||
let json = JSON.parse(msgAbstract);
|
||
Object.keys(json).map(k=>{
|
||
query[k] = json[k]
|
||
});
|
||
}catch (e) {
|
||
console.error('msgAbstract参数不是JSON格式', msgAbstract)
|
||
}
|
||
}
|
||
console.log("busType = ", busType)
|
||
handleOpenType('task', {
|
||
record: {
|
||
id: busId,
|
||
procInsId: query.procInsId,
|
||
processDefinitionId: query.processDefinitionId,
|
||
isDetail: query.taskDetail || 'bpm_cc' == busType
|
||
}
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 根据busType不同跳转不同页面
|
||
* @param record
|
||
*/
|
||
async function goPageWithBusType(record){
|
||
const { busType, busId, msgAbstract } = record;
|
||
let temp = messageHrefArray.filter(item=>item.value === busType);
|
||
if(!temp || temp.length==0){
|
||
console.error('当前业务类型不识别', busType);
|
||
return;
|
||
}
|
||
let path = temp[0].text;
|
||
path = path.replace('{DETAIL_ID}', busId)
|
||
//固定参数 detailId 用于查询表单数据
|
||
let query:any = {
|
||
detailId: busId
|
||
};
|
||
// 额外参数处理
|
||
if(msgAbstract){
|
||
try {
|
||
let json = JSON.parse(msgAbstract);
|
||
Object.keys(json).map(k=>{
|
||
query[k] = json[k]
|
||
});
|
||
}catch (e) {
|
||
console.error('msgAbstract参数不是JSON格式', msgAbstract)
|
||
}
|
||
}
|
||
if(query.taskDetail){
|
||
// 查看任务详情的弹窗
|
||
await showHistory(query.procInsId)
|
||
}else{
|
||
// 跳转路由
|
||
appStore.setMessageHrefParams(query);
|
||
if(rt.path.indexOf(path)>=0){
|
||
await closeTab();
|
||
await router.replace({ path: path, query:{ time: new Date().getTime() } });
|
||
}else{
|
||
closeSameRoute(path)
|
||
await router.push({ path: path });
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 从首页的消息通知跳转消息列表打开modal
|
||
* @param record
|
||
*/
|
||
async function goPageFromOuter(record){
|
||
//没有定义业务类型 直接跳转我的消息页面
|
||
emit('detail', record)
|
||
}
|
||
|
||
//===============================================================================================================
|
||
//update-begin-author:taoyan date:2022-12-31 for: QQYUN-3485 【查看流程】做一个查看页面,非办理页面,只通过流程实例参数即可
|
||
async function showHistory(processInstanceId) {
|
||
let { formData, formUrl } = await getTaskInfoForHistory({ processInstanceId });
|
||
formData['PROCESS_TAB_TYPE'] = 'history';
|
||
handleOpenType('history', {
|
||
formData,
|
||
formUrl,
|
||
title: '流程历史',
|
||
});
|
||
}
|
||
|
||
const nodeInfoUrl = '/act/process/extActProcessNode/getHisProcessNodeInfo'
|
||
const taskNodeInfo = (params) => defHttp.get({ url: nodeInfoUrl, params });
|
||
|
||
async function getTaskInfoForHistory(record) {
|
||
//查询条件
|
||
let params = { procInstId: record.processInstanceId };
|
||
const result = await taskNodeInfo(params);
|
||
console.log('获取历史任务信息', result);
|
||
let formData: any = {
|
||
dataId: result.dataId,
|
||
taskId: record.id,
|
||
taskDefKey: record.taskId,
|
||
procInsId: record.processInstanceId,
|
||
tableName: result.tableName,
|
||
vars: result.records,
|
||
};
|
||
let tempFormUrl = result.formUrl;
|
||
console.log('获取流程节点表单URL', tempFormUrl);
|
||
//节点配置表单URL,VUE组件类型对应的拓展参数
|
||
if (tempFormUrl && tempFormUrl.indexOf('?') != -1 && !isURL(tempFormUrl) && tempFormUrl.indexOf('{{DOMAIN_URL}}') == -1) {
|
||
tempFormUrl = result.formUrl.split('?')[0];
|
||
console.log('获取流程节点表单URL(去掉参数)', tempFormUrl);
|
||
formData.extendUrlParams = getQueryVariable(result.formUrl);
|
||
}
|
||
return {
|
||
formData,
|
||
formUrl: tempFormUrl,
|
||
};
|
||
}
|
||
|
||
/**
|
||
* 获取URL上参数
|
||
* @param url
|
||
*/
|
||
function getQueryVariable(url) {
|
||
if (!url) return;
|
||
|
||
let t,
|
||
n,
|
||
r,
|
||
i = url.split('?')[1],
|
||
s = {};
|
||
(t = i.split('&')), (r = null), (n = null);
|
||
for (let o in t) {
|
||
let u = t[o].indexOf('=');
|
||
u !== -1 && ((r = t[o].substr(0, u)), (n = t[o].substr(u + 1)), (s[r] = n));
|
||
}
|
||
return s;
|
||
}
|
||
|
||
/**
|
||
* URL地址
|
||
* @param {*} s
|
||
*/
|
||
function isURL(s) {
|
||
return /^http[s]?:\/\/.*/.test(s);
|
||
}
|
||
//update-end-author:taoyan date:2022-12-31 for: QQYUN-3485 【查看流程】做一个查看页面,非办理页面,只通过流程实例参数即可
|
||
//===============================================================================================================
|
||
|
||
return {
|
||
goPage,
|
||
isFormComment,
|
||
modalRegCache,
|
||
currentModal,
|
||
bindParams,
|
||
}
|
||
}
|