Merge branch 'feature/PMCORE-3049' of https://bitbucket.org/colosa/processmaker into taskmetrics

This commit is contained in:
Henry Jordan
2021-08-09 19:58:22 +00:00
12 changed files with 223 additions and 50 deletions

View File

@@ -25,5 +25,22 @@ export let menu = {
"Accept-Language": window.config.SYS_LANG "Accept-Language": window.config.SYS_LANG
} }
}); });
},
/**
* Get the counter of a specific task
* @param {string} task
* @returns
*/
getTooltip(task) {
return axios.get(
window.config.SYS_SERVER_API +
'/api/1.0/' +
window.config.SYS_WORKSPACE +
'/home/'+ task +'/counter', {
headers: {
'Authorization': 'Bearer ' + window.config.SYS_CREDENTIALS.accessToken,
"Accept-Language": window.config.SYS_LANG
}
});
} }
}; };

View File

@@ -2,21 +2,33 @@
<div class="pm-multiview-header"> <div class="pm-multiview-header">
<div class="pm-multiview-header-title"></div> <div class="pm-multiview-header-title"></div>
<div class="pm-multiview-header-actions"> <div class="pm-multiview-header-actions">
<div> <b-row>
<button <b-col sm="8">
v-for="action in data.actions" <div class="subtitle" v-if="dataSubtitle">
:key="action.id" <h6>
@click="action.onClick(action)" {{ dataSubtitle.subtitle }}
class="pm-multiview-header-button" <span>
:title="action.title" <i :class="dataSubtitle.icon"></i>
> </span>
<div> </h6>
<span>
<i :class="action.icon"></i>
</span>
</div> </div>
</button> </b-col>
</div> <b-col sm="4" class="pm-multiview-header-actions-buttons">
<button
v-for="action in data.actions"
:key="action.id"
@click="action.onClick(action)"
class="pm-multiview-header-button"
:title="action.title"
>
<div>
<span>
<i :class="action.icon"></i>
</span>
</div>
</button>
</b-col>
</b-row>
</div> </div>
</div> </div>
</template> </template>
@@ -24,7 +36,10 @@
<script> <script>
export default { export default {
name: "MultiviewHeader", name: "MultiviewHeader",
props: ["data"], props: [
"data",
"dataSubtitle"
],
data() { data() {
return {}; return {};
}, },
@@ -38,10 +53,11 @@ export default {
<style> <style>
.pm-multiview-header { .pm-multiview-header {
margin-bottom: 7px;
} }
.pm-multiview-header-title { .pm-multiview-header-title {
} }
.pm-multiview-header-actions { .pm-multiview-header-actions-buttons {
text-align: end; text-align: end;
} }
.pm-multiview-header-button { .pm-multiview-header-button {

View File

@@ -34,7 +34,7 @@
" "
> >
<span class="vsm--title"> <span class="vsm--title">
{{ item.title }} <custom-tooltip :data="item"></custom-tooltip>
<b-icon <b-icon
v-if="item.sortable" v-if="item.sortable"
:icon="item.sortIcon" :icon="item.sortIcon"
@@ -139,7 +139,7 @@
</div> </div>
</draggable> </draggable>
<template #modal-footer="{ ok, cancel, hide }"> <template #modal-footer="{ cancel }">
<b-button size="sm" variant="danger" @click="cancel()"> <b-button size="sm" variant="danger" @click="cancel()">
Cancel Cancel
</b-button> </b-button>
@@ -153,6 +153,8 @@
import draggable from "vuedraggable"; import draggable from "vuedraggable";
import CustomSidebarMenuLink from "./CustomSidebarMenuLink"; import CustomSidebarMenuLink from "./CustomSidebarMenuLink";
import CustomSidebarMenuIcon from "./CustomSidebarMenuIcon"; import CustomSidebarMenuIcon from "./CustomSidebarMenuIcon";
import CustomTooltip from "./../utils/CustomTooltip.vue";
export default { export default {
name: "CustomSidebarMenuItem", name: "CustomSidebarMenuItem",
props: { props: {
@@ -201,6 +203,7 @@ export default {
draggable, draggable,
CustomSidebarMenuLink, CustomSidebarMenuLink,
CustomSidebarMenuIcon, CustomSidebarMenuIcon,
CustomTooltip
}, },
data() { data() {
return { return {
@@ -210,6 +213,7 @@ export default {
itemHover: false, itemHover: false,
exactActive: false, exactActive: false,
active: false, active: false,
titleHover: '',
}; };
}, },
computed: { computed: {

View File

@@ -31,7 +31,9 @@
<div class="p-1 v-flex"> <div class="p-1 v-flex">
<h5 class="v-search-title">{{ title }}</h5> <h5 class="v-search-title">{{ title }}</h5>
<div class="pm-in-text-icon">
<i :class="icon"></i>
</div>
<b-input-group class="w-75 p-1"> <b-input-group class="w-75 p-1">
<div class="input-group mb-3"> <div class="input-group mb-3">
<div class="input-group-prepend"> <div class="input-group-prepend">
@@ -87,7 +89,7 @@ import api from "./../../api/index";
export default { export default {
name: "Cases", name: "Cases",
props: ["filters", "title"], props: ["filters", "title", "icon"],
components: { components: {
SearchPopover, SearchPopover,
CaseNumber, CaseNumber,
@@ -376,7 +378,12 @@ export default {
} }
.v-search-title { .v-search-title {
padding-right: 20px; padding-right: 10px;
line-height: 40px; line-height: 40px;
} }
.pm-in-text-icon {
font-size: 2vw;
padding-right: 10px;
line-height: 3vw;
}
</style> </style>

View File

@@ -28,8 +28,10 @@
</SearchPopover> </SearchPopover>
<div class="p-1 v-flex"> <div class="p-1 v-flex">
<h5 class="v-search-title">{{ title }}</h5> <h5 class="v-search-title">{{ title }}</h5>
<div class="pm-mc-text-icon">
<i :class="icon"></i>
</div>
<b-input-group class="w-75 p-1"> <b-input-group class="w-75 p-1">
<div class="input-group mb-3"> <div class="input-group mb-3">
<div class="input-group-prepend"> <div class="input-group-prepend">
@@ -86,7 +88,7 @@ import api from "./../../api/index";
export default { export default {
name: "MyCasesFilter", name: "MyCasesFilter",
props: ["filters","title"], props: ["filters","title", "icon"],
components:{ components:{
SearchPopover, SearchPopover,
CaseNumber, CaseNumber,
@@ -408,8 +410,13 @@ export default {
} }
.v-search-title { .v-search-title {
padding-right: 20px; padding-right: 10px;
line-height: 40px; line-height: 40px;
} }
.pm-mc-text-icon{
font-size: 2vw;
padding-right: 10px;
line-height: 3vw;
}
</style> </style>

View File

@@ -0,0 +1,71 @@
<template>
<span
:id="data.id"
@mouseover="hoverHandler"
v-b-tooltip.hover
:title="labelTooltip"
@mouseleave="unhoverHandler"
>
{{ data.title }}
<b-tooltip
:target="data.id"
triggers="hoverHandler"
:show.sync="show"
>
{{ labelTooltip }}
</b-tooltip>
</span>
</template>
<script>
import api from "./../../api/index";
export default {
name: "CustomTooltip",
props: {
data: Object,
},
data() {
return {
labelTooltip: "",
hovering: "",
show: false,
menuMap: {
CASES_INBOX: "inbox",
CASES_DRAFT: "draft",
CASES_PAUSED: "paused",
CASES_SELFSERVICE: "unassigned"
}
}
},
methods: {
/**
* Delay the hover event
*/
hoverHandler() {
this.hovering = setTimeout(() => { this.setTooltip() }, 3000);
},
/**
* Reset the delay and hide the tooltip
*/
unhoverHandler() {
this.labelTooltip = "";
this.show = false;
clearTimeout(this.hovering);
},
/**
* Set the label to show in the tooltip
*/
setTooltip() {
let that = this;
api.menu
.getTooltip(that.menuMap[that.data.id])
.then((response) => {
that.labelTooltip = response.data.label;
that.show = true;
});
},
}
}
</script>

View File

@@ -35,8 +35,8 @@
<div slot="case_title" slot-scope="props"> <div slot="case_title" slot-scope="props">
{{ props.row.CASE_TITLE }} {{ props.row.CASE_TITLE }}
</div> </div>
<div slot="assignee" slot-scope="props"> <div slot="current_user" slot-scope="props">
{{ props.row.ASSIGNEE }} <CurrentUserCell :data="props.row.USER_DATA" />
</div> </div>
<div slot="status" slot-scope="props"> <div slot="status" slot-scope="props">
{{ props.row.STATUS }} {{ props.row.STATUS }}
@@ -114,6 +114,7 @@ import ModalCancelCase from "../home/modal/ModalCancelCase.vue";
import ModalNewRequest from "./ModalNewRequest.vue"; import ModalNewRequest from "./ModalNewRequest.vue";
import ModalClaimCase from "./modal/ModalClaimCase.vue"; import ModalClaimCase from "./modal/ModalClaimCase.vue";
import TaskCell from "../components/vuetable/TaskCell.vue"; import TaskCell from "../components/vuetable/TaskCell.vue";
import CurrentUserCell from "../components/vuetable/CurrentUserCell.vue"
import utils from "./../utils/utils"; import utils from "./../utils/utils";
import Api from "../api/index"; import Api from "../api/index";
@@ -131,7 +132,8 @@ export default {
ButtonFleft, ButtonFleft,
ModalNewRequest, ModalNewRequest,
ModalClaimCase, ModalClaimCase,
TaskCell TaskCell,
CurrentUserCell
}, },
props: {}, props: {},
data() { data() {
@@ -153,7 +155,7 @@ export default {
columns: [ columns: [
"task", "task",
"case_title", "case_title",
"assignee", "current_user",
"status", "status",
"due_date", "due_date",
"actions" "actions"
@@ -164,7 +166,7 @@ export default {
headings: { headings: {
task: this.$i18n.t("ID_TASK"), task: this.$i18n.t("ID_TASK"),
case_title: this.$i18n.t("ID_CASE_TITLE"), case_title: this.$i18n.t("ID_CASE_TITLE"),
assignee: this.$i18n.t("ID_CURRENT_USER"), current_user: this.$i18n.t("ID_CURRENT_USER"),
status: this.$i18n.t("ID_STATUS"), status: this.$i18n.t("ID_STATUS"),
due_date: this.$i18n.t("ID_DUE_DATE"), due_date: this.$i18n.t("ID_DUE_DATE"),
actions: this.$i18n.t("ID_ACTIONS") actions: this.$i18n.t("ID_ACTIONS")
@@ -500,15 +502,7 @@ export default {
}, },
], ],
CASE_TITLE: v.DEL_TITLE, CASE_TITLE: v.DEL_TITLE,
ASSIGNEE: USER_DATA: this.formatUser(v.user_tooltip),
v.USR_ID !== 0
? utils.userNameDisplayFormat({
userName: v.USR_USERNAME,
firstName: v.USR_LASTNAME,
lastName: v.USR_LASTNAME,
format: window.config.FORMATS.format || null
})
: this.$i18n.t("ID_UNASSIGNED"),
STATUS: v.DEL_THREAD_STATUS, STATUS: v.DEL_THREAD_STATUS,
DUE_DATE: v.DEL_TASK_DUE_DATE, DUE_DATE: v.DEL_TASK_DUE_DATE,
TASK_COLOR: v.TAS_COLOR_LABEL, TASK_COLOR: v.TAS_COLOR_LABEL,
@@ -520,6 +514,31 @@ export default {
}); });
return data; return data;
}, },
/**
* Format user information to show
*/
formatUser(data) {
var dataFormat = [],
userDataFormat;
userDataFormat = data.usr_id ?
utils.userNameDisplayFormat({
userName: data.usr_firstname,
firstName: data.usr_lastname,
lastName: data.usr_username,
format: window.config.FORMATS.format || null
})
: this.$i18n.t("ID_UNASSIGNED");
dataFormat.push({
USERNAME_DISPLAY_FORMAT: userDataFormat !== "" ? userDataFormat : this.$i18n.t("ID_UNASSIGNED"),
EMAIL: data.usr_email,
POSITION: data.usr_position,
AVATAR: userDataFormat !== this.$i18n.t("ID_UNASSIGNED") ? window.config.SYS_SERVER_AJAX +
window.config.SYS_URI +
`users/users_ViewPhotoGrid?pUID=${data.usr_id}` : "",
UNASSIGNED: userDataFormat !== this.$i18n.t("ID_UNASSIGNED") ? true : false
});
return dataFormat;
},
/** /**
* Show the alert message * Show the alert message
* @param {string} message - message to be displayen in the body * @param {string} message - message to be displayen in the body

View File

@@ -5,10 +5,14 @@
<CasesFilter <CasesFilter
:filters="filters" :filters="filters"
:title="$t('ID_DRAFT')" :title="$t('ID_DRAFT')"
:icon="icon"
@onRemoveFilter="onRemoveFilter" @onRemoveFilter="onRemoveFilter"
@onUpdateFilters="onUpdateFilters" @onUpdateFilters="onUpdateFilters"
/> />
<multiview-header :data="dataMultiviewHeader" /> <multiview-header
:data="dataMultiviewHeader"
:dataSubtitle="dataSubtitle"
/>
<settings-popover :options="formatColumnSettings(options.headings)" target="pm-dr-column-settings" @onUpdateColumnSettings="onUpdateColumnSettings" :key="random+1" :selected="formatColumnSelected(columns)"/> <settings-popover :options="formatColumnSettings(options.headings)" target="pm-dr-column-settings" @onUpdateColumnSettings="onUpdateColumnSettings" :key="random+1" :selected="formatColumnSelected(columns)"/>
<v-server-table <v-server-table
v-if="typeView === 'GRID'" v-if="typeView === 'GRID'"
@@ -226,6 +230,7 @@ export default {
"actions" "actions"
], ],
tableData: [], tableData: [],
icon:"fas fa-edit",
options: { options: {
filterable: false, filterable: false,
headings: { headings: {
@@ -281,7 +286,8 @@ export default {
dataEllipsis: { dataEllipsis: {
buttons: {} buttons: {}
}, },
showEllipsis: false showEllipsis: false,
dataSubtitle: null
}; };
}, },
created() { created() {

View File

@@ -8,10 +8,14 @@
<CasesFilter <CasesFilter
:filters="filters" :filters="filters"
:title="$t('ID_CASES_STATUS_TO_DO')" :title="$t('ID_CASES_STATUS_TO_DO')"
:icon="icon"
@onRemoveFilter="onRemoveFilter" @onRemoveFilter="onRemoveFilter"
@onUpdateFilters="onUpdateFilters" @onUpdateFilters="onUpdateFilters"
/> />
<multiview-header :data="dataMultiviewHeader" /> <multiview-header
:data="dataMultiviewHeader"
:dataSubtitle="dataSubtitle"
/>
<settings-popover :options="formatColumnSettings(options.headings)" target="pm-dr-column-settings" @onUpdateColumnSettings="onUpdateColumnSettings" :key="random+1" :selected="formatColumnSelected(columns)"/> <settings-popover :options="formatColumnSettings(options.headings)" target="pm-dr-column-settings" @onUpdateColumnSettings="onUpdateColumnSettings" :key="random+1" :selected="formatColumnSelected(columns)"/>
<v-server-table <v-server-table
v-if="typeView === 'GRID'" v-if="typeView === 'GRID'"
@@ -266,6 +270,7 @@ export default {
"actions" "actions"
], ],
tableData: [], tableData: [],
icon:"fas fa-check-circle",
options: { options: {
filterable: false, filterable: false,
headings: { headings: {
@@ -325,7 +330,8 @@ export default {
dataEllipsis: { dataEllipsis: {
buttons: {} buttons: {}
}, },
showEllipsis: false showEllipsis: false,
dataSubtitle: null
}; };
}, },
created() { created() {
@@ -513,7 +519,7 @@ export default {
POSITION: data.user_tooltip.usr_position, POSITION: data.user_tooltip.usr_position,
AVATAR: userDataFormat !== "" ? window.config.SYS_SERVER_AJAX + AVATAR: userDataFormat !== "" ? window.config.SYS_SERVER_AJAX +
window.config.SYS_URI + window.config.SYS_URI +
`users/users_ViewPhotoGrid?pUID=${data.user_tooltip.user_id}` : "", `users/users_ViewPhotoGrid?pUID=${data.user_tooltip.usr_id}` : "",
UNASSIGNED: userDataFormat !== "" ? true : false UNASSIGNED: userDataFormat !== "" ? true : false
}); });
return dataFormat; return dataFormat;

View File

@@ -13,6 +13,8 @@
<MyCasesFilter <MyCasesFilter
:filters="filters" :filters="filters"
:title="title" :title="title"
:random="random"
:icon="filterHeaderObject.icon"
@onRemoveFilter="onRemoveFilter" @onRemoveFilter="onRemoveFilter"
@onUpdateFilters="onUpdateFilters" @onUpdateFilters="onUpdateFilters"
/> />
@@ -101,7 +103,11 @@ export default {
filter: "CASES_INBOX", filter: "CASES_INBOX",
allView: [], allView: [],
filterHeader: "STARTED", filterHeader: "STARTED",
filterHeaderObject: {
icon:"fas fa-inbox"
},
headers: [], headers: [],
random: _.random(0,1000000000),
newCase: { newCase: {
title: this.$i18n.t("ID_NEW_CASE"), title: this.$i18n.t("ID_NEW_CASE"),
class: "btn-success", class: "btn-success",
@@ -533,6 +539,8 @@ export default {
that.filterHeader = obj.item; that.filterHeader = obj.item;
that.$refs["vueTable"].setPage(1); // Reset the page when change the header filter that.$refs["vueTable"].setPage(1); // Reset the page when change the header filter
that.$refs["vueTable"].getData(); that.$refs["vueTable"].getData();
that.filterHeaderObject = obj;
that.random = _.random(0,1000000000);
}, },
class: info[v.id].class class: info[v.id].class
}); });

View File

@@ -6,10 +6,14 @@
<CasesFilter <CasesFilter
:filters="filters" :filters="filters"
:title="$t('ID_PAUSED')" :title="$t('ID_PAUSED')"
:icon="icon"
@onRemoveFilter="onRemoveFilter" @onRemoveFilter="onRemoveFilter"
@onUpdateFilters="onUpdateFilters" @onUpdateFilters="onUpdateFilters"
/> />
<multiview-header :data="dataMultiviewHeader" /> <multiview-header
:data="dataMultiviewHeader"
:dataSubtitle="dataSubtitle"
/>
<settings-popover :options="formatColumnSettings(options.headings)" target="pm-dr-column-settings" @onUpdateColumnSettings="onUpdateColumnSettings" :key="random+1" :selected="formatColumnSelected(columns)"/> <settings-popover :options="formatColumnSettings(options.headings)" target="pm-dr-column-settings" @onUpdateColumnSettings="onUpdateColumnSettings" :key="random+1" :selected="formatColumnSelected(columns)"/>
<v-server-table <v-server-table
v-if="typeView === 'GRID'" v-if="typeView === 'GRID'"
@@ -265,6 +269,7 @@ export default {
"actions", "actions",
], ],
tableData: [], tableData: [],
icon:"far fa-pause-circle",
options: { options: {
filterable: false, filterable: false,
headings: { headings: {
@@ -324,7 +329,8 @@ export default {
dataEllipsis: { dataEllipsis: {
buttons: {} buttons: {}
}, },
showEllipsis: false showEllipsis: false,
dataSubtitle: null
}; };
}, },
created() { created() {
@@ -508,7 +514,7 @@ export default {
POSITION: data.user_tooltip.usr_position, POSITION: data.user_tooltip.usr_position,
AVATAR: userDataFormat !== "" ? window.config.SYS_SERVER_AJAX + AVATAR: userDataFormat !== "" ? window.config.SYS_SERVER_AJAX +
window.config.SYS_URI + window.config.SYS_URI +
`users/users_ViewPhotoGrid?pUID=${data.user_tooltip.user_id}` : "", `users/users_ViewPhotoGrid?pUID=${data.user_tooltip.usr_id}` : "",
UNASSIGNED: userDataFormat !== "" ? true : false UNASSIGNED: userDataFormat !== "" ? true : false
}); });
return dataFormat; return dataFormat;

View File

@@ -5,10 +5,14 @@
<CasesFilter <CasesFilter
:filters="filters" :filters="filters"
:title="$t('ID_UNASSIGNED')" :title="$t('ID_UNASSIGNED')"
:icon="icon"
@onRemoveFilter="onRemoveFilter" @onRemoveFilter="onRemoveFilter"
@onUpdateFilters="onUpdateFilters" @onUpdateFilters="onUpdateFilters"
/> />
<multiview-header :data="dataMultiviewHeader" /> <multiview-header
:data="dataMultiviewHeader"
:dataSubtitle="dataSubtitle"
/>
<settings-popover :options="formatColumnSettings(options.headings)" target="pm-dr-column-settings" @onUpdateColumnSettings="onUpdateColumnSettings" :key="random+1" :selected="formatColumnSelected(columns)"/> <settings-popover :options="formatColumnSettings(options.headings)" target="pm-dr-column-settings" @onUpdateColumnSettings="onUpdateColumnSettings" :key="random+1" :selected="formatColumnSelected(columns)"/>
<v-server-table <v-server-table
v-if="typeView === 'GRID'" v-if="typeView === 'GRID'"
@@ -260,6 +264,7 @@ export default {
"priority", "priority",
"actions", "actions",
], ],
icon:"fas fa-users",
options: { options: {
filterable: false, filterable: false,
headings: { headings: {
@@ -319,7 +324,8 @@ export default {
dataEllipsis: { dataEllipsis: {
buttons: {} buttons: {}
}, },
showEllipsis: false showEllipsis: false,
dataSubtitle: null
}; };
}, },
mounted() { mounted() {
@@ -467,7 +473,7 @@ export default {
POSITION: data.user_tooltip.usr_position, POSITION: data.user_tooltip.usr_position,
AVATAR: userDataFormat !== "" ? window.config.SYS_SERVER_AJAX + AVATAR: userDataFormat !== "" ? window.config.SYS_SERVER_AJAX +
window.config.SYS_URI + window.config.SYS_URI +
`users/users_ViewPhotoGrid?pUID=${data.user_tooltip.user_id}` : "", `users/users_ViewPhotoGrid?pUID=${data.user_tooltip.usr_id}` : "",
UNASSIGNED: userDataFormat !== "" ? true : false UNASSIGNED: userDataFormat !== "" ? true : false
}); });
return dataFormat; return dataFormat;