add websocket framework
This commit is contained in:
parent
e3806926d2
commit
0b8ade3f6d
@ -2,22 +2,13 @@
|
|||||||
<div class="workspace-container">
|
<div class="workspace-container">
|
||||||
<!-- <div class="workspace-header"></div> -->
|
<!-- <div class="workspace-header"></div> -->
|
||||||
<div class="workspace-body">
|
<div class="workspace-body">
|
||||||
<div
|
<div class="accordion accordion-list" v-for="(project, project_index) in projects" :key="project_index"
|
||||||
class="accordion accordion-list"
|
:id="project.id">
|
||||||
v-for="(project, project_index) in projects"
|
|
||||||
:key="project_index"
|
|
||||||
:id="project.id"
|
|
||||||
>
|
|
||||||
<div class="accordion-item">
|
<div class="accordion-item">
|
||||||
<h2 class="accordion-header">
|
<h2 class="accordion-header">
|
||||||
<button
|
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||||
class="accordion-button collapsed"
|
:data-bs-target="'#collapse-' + project_index" aria-expanded="false"
|
||||||
type="button"
|
:aria-controls="'collapse-' + project_index">
|
||||||
data-bs-toggle="collapse"
|
|
||||||
:data-bs-target="'#collapse-' + project_index"
|
|
||||||
aria-expanded="false"
|
|
||||||
:aria-controls="'collapse-' + project_index"
|
|
||||||
>
|
|
||||||
<div class="workspace-item-bar dashed-container">
|
<div class="workspace-item-bar dashed-container">
|
||||||
<div class="workspace-item-bar-left">
|
<div class="workspace-item-bar-left">
|
||||||
<div class="project-item-title-container">
|
<div class="project-item-title-container">
|
||||||
@ -44,11 +35,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
</h2>
|
</h2>
|
||||||
<div
|
<div :id="'collapse-' + project_index" class="accordion-collapse collapse" :data-bs-parent="'#' + project.id">
|
||||||
:id="'collapse-' + project_index"
|
|
||||||
class="accordion-collapse collapse"
|
|
||||||
:data-bs-parent="'#' + project.id"
|
|
||||||
>
|
|
||||||
<div class="accordion-body" v-if="isOpenRequest(project)">
|
<div class="accordion-body" v-if="isOpenRequest(project)">
|
||||||
<div class="float-action-container">
|
<div class="float-action-container">
|
||||||
<button class="request-action-withdraw" @click="withdrawAndEditRequest(project)">
|
<button class="request-action-withdraw" @click="withdrawAndEditRequest(project)">
|
||||||
@ -56,30 +43,17 @@
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="project-request-container">
|
<div class="project-request-container">
|
||||||
<div
|
<div class="project-request-content" v-html="project.request.content" @keyup="textAreaAdjust($event)"
|
||||||
class="project-request-content"
|
contenteditable="false"></div>
|
||||||
v-html="project.request.content"
|
|
||||||
@keyup="textAreaAdjust($event)"
|
|
||||||
contenteditable="false"
|
|
||||||
></div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="project-request-proposals-container">
|
<div class="project-request-proposals-container">
|
||||||
<div
|
<div class="accordion" v-for="(proposal, proposal_index) in project.proposals" :key="proposal_index"
|
||||||
class="accordion"
|
:id="proposal.id">
|
||||||
v-for="(proposal, proposal_index) in project.proposals"
|
|
||||||
:key="proposal_index"
|
|
||||||
:id="proposal.id"
|
|
||||||
>
|
|
||||||
<div class="accordion-item">
|
<div class="accordion-item">
|
||||||
<h2 class="accordion-header">
|
<h2 class="accordion-header">
|
||||||
<button
|
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||||
class="accordion-button collapsed"
|
:data-bs-target="'#collapse-request-proposal' + proposal_index" aria-expanded="false"
|
||||||
type="button"
|
:aria-controls="'collapse-request-proposal' + proposal_index">
|
||||||
data-bs-toggle="collapse"
|
|
||||||
:data-bs-target="'#collapse-request-proposal' + proposal_index"
|
|
||||||
aria-expanded="false"
|
|
||||||
:aria-controls="'collapse-request-proposal' + proposal_index"
|
|
||||||
>
|
|
||||||
<div class="project-request-proposal-bar-container">
|
<div class="project-request-proposal-bar-container">
|
||||||
<div class="project-request-proposal-quote-container">
|
<div class="project-request-proposal-quote-container">
|
||||||
<label class="project-item-label">Quote</label>
|
<label class="project-item-label">Quote</label>
|
||||||
@ -110,23 +84,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
</h2>
|
</h2>
|
||||||
<div
|
<div :id="'collapse-request-proposal' + proposal_index" class="accordion-collapse collapse"
|
||||||
:id="'collapse-request-proposal' + proposal_index"
|
:data-bs-parent="'#' + proposal.id">
|
||||||
class="accordion-collapse collapse"
|
|
||||||
:data-bs-parent="'#' + proposal.id"
|
|
||||||
>
|
|
||||||
<div class="accordion-body">
|
<div class="accordion-body">
|
||||||
<div class="request-proposal-action-container">
|
<div class="request-proposal-action-container">
|
||||||
<button
|
<button class="request-proposal-action-reject" @click="rejectProposal(project, proposal_index)">
|
||||||
class="request-proposal-action-reject"
|
|
||||||
@click="rejectProposal(project, proposal_index)"
|
|
||||||
>
|
|
||||||
reject
|
reject
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button class="request-proposal-action-accept" @click="acceptProposal(project, proposal_index)">
|
||||||
class="request-proposal-action-accept"
|
|
||||||
@click="acceptProposal(project, proposal_index)"
|
|
||||||
>
|
|
||||||
accept
|
accept
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -134,12 +99,9 @@
|
|||||||
<div class="request-proposal-content" v-html="proposal.content" />
|
<div class="request-proposal-content" v-html="proposal.content" />
|
||||||
</div>
|
</div>
|
||||||
<div class="request-proposal-payment-plan">
|
<div class="request-proposal-payment-plan">
|
||||||
<div
|
<div class="request-proposal-payment-plan-stage-container"
|
||||||
class="request-proposal-payment-plan-stage-container"
|
v-for="(stage, stage_index) in proposal.payment_plan.stages" :key="stage_index"
|
||||||
v-for="(stage, stage_index) in proposal.payment_plan.stages"
|
:id="'payment-stage-' + stage_index">
|
||||||
:key="stage_index"
|
|
||||||
:id="'payment-stage-' + stage_index"
|
|
||||||
>
|
|
||||||
<div class="project-request-proposal-stage-payment-container">
|
<div class="project-request-proposal-stage-payment-container">
|
||||||
<label class="project-item-label">Payment</label>
|
<label class="project-item-label">Payment</label>
|
||||||
<p class="project-item-text">
|
<p class="project-item-text">
|
||||||
@ -172,12 +134,9 @@
|
|||||||
<div class="request-proposal-content" v-html="project.proposal.content" />
|
<div class="request-proposal-content" v-html="project.proposal.content" />
|
||||||
</div>
|
</div>
|
||||||
<div class="request-proposal-payment-plan">
|
<div class="request-proposal-payment-plan">
|
||||||
<div
|
<div class="request-proposal-payment-plan-stage-container"
|
||||||
class="request-proposal-payment-plan-stage-container"
|
v-for="(stage, stage_index) in project.proposal.payment_plan.stages" :key="stage_index"
|
||||||
v-for="(stage, stage_index) in project.proposal.payment_plan.stages"
|
:id="'payment-stage-' + stage_index">
|
||||||
:key="stage_index"
|
|
||||||
:id="'payment-stage-' + stage_index"
|
|
||||||
>
|
|
||||||
<div class="project-request-proposal-stage-payment-container">
|
<div class="project-request-proposal-stage-payment-container">
|
||||||
<label class="project-item-label">Payment</label>
|
<label class="project-item-label">Payment</label>
|
||||||
<p class="project-item-text">{{ stage.amount }} {{ stage.currency }}</p>
|
<p class="project-item-text">{{ stage.amount }} {{ stage.currency }}</p>
|
||||||
@ -193,45 +152,27 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="project-request-container">
|
<div class="project-request-container">
|
||||||
<div
|
<div class="project-request-content" v-html="project.request.content" @keyup="textAreaAdjust($event)"
|
||||||
class="project-request-content"
|
contenteditable="false"></div>
|
||||||
v-html="project.request.content"
|
|
||||||
@keyup="textAreaAdjust($event)"
|
|
||||||
contenteditable="false"
|
|
||||||
></div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="accordion-body" v-if="isOngoingProject(project)">
|
<div class="accordion-body" v-if="isOngoingProject(project)">
|
||||||
<div class="project-invite-collaborator-containter">
|
<div class="project-invite-collaborator-containter">
|
||||||
<button
|
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||||
class="accordion-button collapsed"
|
data-bs-target="#collapse-project-invite-collaborator" aria-expanded="false"
|
||||||
type="button"
|
aria-controls="collapse-project-invite-collaborator">
|
||||||
data-bs-toggle="collapse"
|
|
||||||
data-bs-target="#collapse-project-invite-collaborator"
|
|
||||||
aria-expanded="false"
|
|
||||||
aria-controls="collapse-project-invite-collaborator"
|
|
||||||
>
|
|
||||||
<div class="project-invite-collaborator">+ Invite</div>
|
<div class="project-invite-collaborator">+ Invite</div>
|
||||||
</button>
|
</button>
|
||||||
<div
|
<div id="collapse-project-invite-collaborator" class="accordion-collapse collapse"
|
||||||
id="collapse-project-invite-collaborator"
|
data-bs-parent="#collapse-project-invite-collaborator">
|
||||||
class="accordion-collapse collapse"
|
|
||||||
data-bs-parent="#collapse-project-invite-collaborator"
|
|
||||||
>
|
|
||||||
<div class="project-invite-collaborator-form-container">
|
<div class="project-invite-collaborator-form-container">
|
||||||
<div class="project-invite-collaborator-form">
|
<div class="project-invite-collaborator-form">
|
||||||
<label class="project-item-label">Input E-mail to invite other</label>
|
<label class="project-item-label">Input E-mail to invite other</label>
|
||||||
<input
|
<input class="project-invite-collaborator-input" v-model="newInviteCollaborator[project_index]" />
|
||||||
class="project-invite-collaborator-input"
|
|
||||||
v-model="newInviteCollaborator[project_index]"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button class="project-invite-collaborator-action-button" @click="
|
||||||
class="project-invite-collaborator-action-button"
|
|
||||||
@click="
|
|
||||||
inviteCollaborator(project.project_id, newInviteCollaborator[project_index])
|
inviteCollaborator(project.project_id, newInviteCollaborator[project_index])
|
||||||
"
|
">
|
||||||
>
|
|
||||||
Submit
|
Submit
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -240,14 +181,9 @@
|
|||||||
<div class="accordion" id="workspace-project-accordion">
|
<div class="accordion" id="workspace-project-accordion">
|
||||||
<div class="accordion-item">
|
<div class="accordion-item">
|
||||||
<h2 class="accordion-header">
|
<h2 class="accordion-header">
|
||||||
<button
|
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||||
class="accordion-button collapsed"
|
data-bs-target="#collapse-project-milestone" aria-expanded="false"
|
||||||
type="button"
|
aria-controls="collapse-project-milestone">
|
||||||
data-bs-toggle="collapse"
|
|
||||||
data-bs-target="#collapse-project-milestone"
|
|
||||||
aria-expanded="false"
|
|
||||||
aria-controls="collapse-project-milestone"
|
|
||||||
>
|
|
||||||
<div class="project-milestone-bar-container">
|
<div class="project-milestone-bar-container">
|
||||||
<div class="project-milestone-bar-progress">
|
<div class="project-milestone-bar-progress">
|
||||||
<label class="project-item-label">Progress</label>
|
<label class="project-item-label">Progress</label>
|
||||||
@ -281,18 +217,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
</h2>
|
</h2>
|
||||||
<div
|
<div id="collapse-project-milestone" class="accordion-collapse collapse"
|
||||||
id="collapse-project-milestone"
|
data-bs-parent="#collapse-project-milestone">
|
||||||
class="accordion-collapse collapse"
|
|
||||||
data-bs-parent="#collapse-project-milestone"
|
|
||||||
>
|
|
||||||
<div class="project-milestones-containter">
|
<div class="project-milestones-containter">
|
||||||
<div
|
<div class="project-milestone-container" v-for="milestone in project.project.progress.milestones"
|
||||||
class="project-milestone-container"
|
:key="milestone.index" :id="'project-milestone-' + milestone.index">
|
||||||
v-for="milestone in project.project.progress.milestones"
|
|
||||||
:key="milestone.index"
|
|
||||||
:id="'project-milestone-' + milestone.index"
|
|
||||||
>
|
|
||||||
<div class="project-milestone-index">
|
<div class="project-milestone-index">
|
||||||
<label class="project-item-label">Milestone</label>
|
<label class="project-item-label">Milestone</label>
|
||||||
<p class="project-item-text">
|
<p class="project-item-text">
|
||||||
@ -325,21 +254,17 @@
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="project-milestone-action-button-container">
|
<div class="project-milestone-action-button-container">
|
||||||
<button
|
<button class="project-milestone-action-button"
|
||||||
class="project-milestone-action-button"
|
|
||||||
:disabled="isMilestoneActionButtonDisabled(project.project, milestone)"
|
:disabled="isMilestoneActionButtonDisabled(project.project, milestone)"
|
||||||
:hidden="isMilestoneActionButtonHidden(project.project, milestone)"
|
:hidden="isMilestoneActionButtonHidden(project.project, milestone)"
|
||||||
@click="handleMilestoneAction(project.project, milestone)"
|
@click="handleMilestoneAction(project.project, milestone)">
|
||||||
>
|
|
||||||
{{ fetchMilestoneActionButtonText(project.project, milestone) }}
|
{{ fetchMilestoneActionButtonText(project.project, milestone) }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="this.qrCode.index === milestone.index">
|
<div v-if="this.qrCode.index === milestone.index">
|
||||||
<img width="100" height="100" :src="this.qrCode.imageUrl" />
|
<img width="100" height="100" :src="this.qrCode.imageUrl" />
|
||||||
<button
|
<button class="project-milestone-payment-confirm-button"
|
||||||
class="project-milestone-payment-confirm-button"
|
@click="handlePaymentAction(project.project, milestone)">
|
||||||
@click="handlePaymentAction(project.project, milestone)"
|
|
||||||
>
|
|
||||||
Mark As Paid
|
Mark As Paid
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -349,14 +274,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="accordion-item">
|
<div class="accordion-item">
|
||||||
<h2 class="accordion-header">
|
<h2 class="accordion-header">
|
||||||
<button
|
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||||
class="accordion-button collapsed"
|
data-bs-target="#collapse-project-code" aria-expanded="false" aria-controls="collapse-project-code">
|
||||||
type="button"
|
|
||||||
data-bs-toggle="collapse"
|
|
||||||
data-bs-target="#collapse-project-code"
|
|
||||||
aria-expanded="false"
|
|
||||||
aria-controls="collapse-project-code"
|
|
||||||
>
|
|
||||||
<div class="project-code-bar-container">
|
<div class="project-code-bar-container">
|
||||||
<div class="project-code-git-status">
|
<div class="project-code-git-status">
|
||||||
<label class="project-item-label">Code Depot</label>
|
<label class="project-item-label">Code Depot</label>
|
||||||
@ -379,22 +298,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
</h2>
|
</h2>
|
||||||
<div
|
<div id="collapse-project-code" class="accordion-collapse collapse"
|
||||||
id="collapse-project-code"
|
data-bs-parent="#collapse-project-code">
|
||||||
class="accordion-collapse collapse"
|
|
||||||
data-bs-parent="#collapse-project-code"
|
|
||||||
>
|
|
||||||
<div class="project-code-details-container">
|
<div class="project-code-details-container">
|
||||||
<div class="project-code-git-url-container">
|
<div class="project-code-git-url-container">
|
||||||
<button
|
<button v-if="project.project.code.git_url" class="project-code-copy-git-url"
|
||||||
v-if="project.project.code.git_url"
|
@click="copyCodeGit(project)" v-tooltip title="Copied" trigger="click"
|
||||||
class="project-code-copy-git-url"
|
delay='{"show":"500", "hide":"100"}'>
|
||||||
@click="copyCodeGit(project)"
|
|
||||||
v-tooltip
|
|
||||||
title="Copied"
|
|
||||||
trigger="click"
|
|
||||||
delay='{"show":"500", "hide":"100"}'
|
|
||||||
>
|
|
||||||
copy git url
|
copy git url
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -407,14 +317,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="accordion-item">
|
<div class="accordion-item">
|
||||||
<h2 class="accordion-header">
|
<h2 class="accordion-header">
|
||||||
<button
|
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||||
class="accordion-button collapsed"
|
data-bs-target="#collapse-project-issue" aria-expanded="false"
|
||||||
type="button"
|
aria-controls="collapse-project-issue">
|
||||||
data-bs-toggle="collapse"
|
|
||||||
data-bs-target="#collapse-project-issue"
|
|
||||||
aria-expanded="false"
|
|
||||||
aria-controls="collapse-project-issue"
|
|
||||||
>
|
|
||||||
<div class="project-issue-bar-container">
|
<div class="project-issue-bar-container">
|
||||||
<div class="project-issue-open-issues">
|
<div class="project-issue-open-issues">
|
||||||
<label class="project-item-label">Open issues</label>
|
<label class="project-item-label">Open issues</label>
|
||||||
@ -437,51 +342,34 @@
|
|||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
</h2>
|
</h2>
|
||||||
<div
|
<div id="collapse-project-issue" class="accordion-collapse collapse"
|
||||||
id="collapse-project-issue"
|
data-bs-parent="#collapse-project-issue">
|
||||||
class="accordion-collapse collapse"
|
|
||||||
data-bs-parent="#collapse-project-issue"
|
|
||||||
>
|
|
||||||
<!-- <div class="project-issue-statistics-container">
|
<!-- <div class="project-issue-statistics-container">
|
||||||
<button class="project-issue-manage-button">Manage</button>
|
<button class="project-issue-manage-button">Manage</button>
|
||||||
TO BE IMPLEMENTED.
|
TO BE IMPLEMENTED.
|
||||||
</div> -->
|
</div> -->
|
||||||
<div class="project-new-issue-containter">
|
<div class="project-new-issue-containter">
|
||||||
<button
|
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||||
class="accordion-button collapsed"
|
data-bs-target="#collapse-project-new-issue" aria-expanded="false"
|
||||||
type="button"
|
aria-controls="collapse-project-issue">
|
||||||
data-bs-toggle="collapse"
|
|
||||||
data-bs-target="#collapse-project-new-issue"
|
|
||||||
aria-expanded="false"
|
|
||||||
aria-controls="collapse-project-issue"
|
|
||||||
>
|
|
||||||
<div class="project-add-new-issue">+ Add Issue</div>
|
<div class="project-add-new-issue">+ Add Issue</div>
|
||||||
</button>
|
</button>
|
||||||
<div
|
<div id="collapse-project-new-issue" class="accordion-collapse collapse"
|
||||||
id="collapse-project-new-issue"
|
data-bs-parent="#collapse-project-new-issue">
|
||||||
class="accordion-collapse collapse"
|
|
||||||
data-bs-parent="#collapse-project-new-issue"
|
|
||||||
>
|
|
||||||
<div class="project-issue-description-container">
|
<div class="project-issue-description-container">
|
||||||
<div class="project-issue-description">
|
<div class="project-issue-description">
|
||||||
<label class="project-item-label">New issue description</label>
|
<label class="project-item-label">New issue description</label>
|
||||||
<textarea
|
<textarea class="project-new-issue-textarea" type="text"
|
||||||
class="project-new-issue-textarea"
|
v-model="newIssueDescriptions[project_index]" />
|
||||||
type="text"
|
|
||||||
v-model="newIssueDescriptions[project_index]"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="project-new-issue-action-container">
|
<div class="project-new-issue-action-container">
|
||||||
<button
|
<button class="project-new-issue-action-button" @click="
|
||||||
class="project-new-issue-action-button"
|
|
||||||
@click="
|
|
||||||
postNewIssue(
|
postNewIssue(
|
||||||
project.request.product_id,
|
project.request.product_id,
|
||||||
project.project_id,
|
project.project_id,
|
||||||
newIssueDescriptions[project_index]
|
newIssueDescriptions[project_index]
|
||||||
)
|
)
|
||||||
"
|
">
|
||||||
>
|
|
||||||
Submit
|
Submit
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -489,22 +377,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="project-issues-containter">
|
<div class="project-issues-containter">
|
||||||
<div
|
<div class="project-issue-container"
|
||||||
class="project-issue-container"
|
v-for="(issue, issue_index) in project.project.issue.open_issues" :key="issue_index"
|
||||||
v-for="(issue, issue_index) in project.project.issue.open_issues"
|
:id="'project-issue-' + issue_index">
|
||||||
:key="issue_index"
|
|
||||||
:id="'project-issue-' + issue_index"
|
|
||||||
>
|
|
||||||
<div class="accordion-item">
|
<div class="accordion-item">
|
||||||
<h2 class="accordion-header">
|
<h2 class="accordion-header">
|
||||||
<button
|
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||||
class="accordion-button collapsed"
|
:data-bs-target="'#collapse-project-issue-details' + issue_index" aria-expanded="false"
|
||||||
type="button"
|
aria-controls="collapse-project-issue-details">
|
||||||
data-bs-toggle="collapse"
|
|
||||||
:data-bs-target="'#collapse-project-issue-details' + issue_index"
|
|
||||||
aria-expanded="false"
|
|
||||||
aria-controls="collapse-project-issue-details"
|
|
||||||
>
|
|
||||||
<div class="project-issue-title">
|
<div class="project-issue-title">
|
||||||
<label class="project-item-label">Issue title</label>
|
<label class="project-item-label">Issue title</label>
|
||||||
<p class="project-item-text">{{ issue.title }}</p>
|
<p class="project-item-text">{{ issue.title }}</p>
|
||||||
@ -523,35 +403,23 @@
|
|||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
</h2>
|
</h2>
|
||||||
<div
|
<div :id="'collapse-project-issue-details' + issue_index" class="accordion-collapse collapse"
|
||||||
:id="'collapse-project-issue-details' + issue_index"
|
:data-bs-parent="'#collapse-project-issue-details' + issue_index">
|
||||||
class="accordion-collapse collapse"
|
|
||||||
:data-bs-parent="'#collapse-project-issue-details' + issue_index"
|
|
||||||
>
|
|
||||||
<div class="project-issue-description-container">
|
<div class="project-issue-description-container">
|
||||||
<label class="project-item-label">Issue description</label>
|
<label class="project-item-label">Issue description</label>
|
||||||
<p class="project-item-text">{{ issue.description }}</p>
|
<p class="project-item-text">{{ issue.description }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="project-issue-action-container">
|
<div class="project-issue-action-container">
|
||||||
<button
|
<button :hidden="!showIssueActionButton(project.project, issue, 'Resolve')"
|
||||||
:hidden="!showIssueActionButton(project.project, issue, 'Resolve')"
|
class="project-issue-action-button" @click="setProjectIssueStatus(issue.id, 1)">
|
||||||
class="project-issue-action-button"
|
|
||||||
@click="setProjectIssueStatus(issue.id, 1)"
|
|
||||||
>
|
|
||||||
Resolve
|
Resolve
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button :hidden="!showIssueActionButton(project.project, issue, 'Confirm')"
|
||||||
:hidden="!showIssueActionButton(project.project, issue, 'Confirm')"
|
class="project-issue-action-button" @click="setProjectIssueStatus(issue.id, 2)">
|
||||||
class="project-issue-action-button"
|
|
||||||
@click="setProjectIssueStatus(issue.id, 2)"
|
|
||||||
>
|
|
||||||
Confirm
|
Confirm
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button :hidden="!showIssueActionButton(project.project, issue, 'Reopen')"
|
||||||
:hidden="!showIssueActionButton(project.project, issue, 'Reopen')"
|
class="project-issue-action-button" @click="setProjectIssueStatus(issue.id, 0)">
|
||||||
class="project-issue-action-button"
|
|
||||||
@click="setProjectIssueStatus(issue.id, 0)"
|
|
||||||
>
|
|
||||||
Reopen
|
Reopen
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -571,7 +439,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { WorksapceApi, DateUtils, requestIssueUtils, requestHubUtils } from '../../../utils/index'
|
import {
|
||||||
|
WorksapceApi,
|
||||||
|
DateUtils,
|
||||||
|
requestIssueUtils,
|
||||||
|
requestHubUtils,
|
||||||
|
WsConnectionFactory
|
||||||
|
} from '@/utils/index'
|
||||||
import {
|
import {
|
||||||
projectStatusEnum,
|
projectStatusEnum,
|
||||||
projectIssueStatusEnum,
|
projectIssueStatusEnum,
|
||||||
@ -582,12 +456,13 @@ import {
|
|||||||
milestoneStatusEnum,
|
milestoneStatusEnum,
|
||||||
convertIntoToMilestoneStatus,
|
convertIntoToMilestoneStatus,
|
||||||
convertIntoToProjectIssueStatus
|
convertIntoToProjectIssueStatus
|
||||||
} from '../../../types/index'
|
} from '@/types/index'
|
||||||
export default {
|
export default {
|
||||||
name: 'Workspace',
|
name: 'Workspace',
|
||||||
props: {},
|
props: {},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.fetchView()
|
this.fetchView()
|
||||||
|
//this.connectWebSocket()
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@ -598,7 +473,9 @@ export default {
|
|||||||
qrCode: {
|
qrCode: {
|
||||||
imageUrl: null,
|
imageUrl: null,
|
||||||
index: null
|
index: null
|
||||||
}
|
},
|
||||||
|
|
||||||
|
downstream_web_socket: null,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -905,7 +782,32 @@ export default {
|
|||||||
default:
|
default:
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
/** web socket. we put them here for test purpose. they need to be moved to an appropriate place**/
|
||||||
|
websocketOnOpen(event) {
|
||||||
|
console.log(event);
|
||||||
|
},
|
||||||
|
websocketOnMessage(event) {
|
||||||
|
console.log(event.data);
|
||||||
|
|
||||||
|
},
|
||||||
|
websocketOnError(event) {
|
||||||
|
console.log(event);
|
||||||
|
|
||||||
|
},
|
||||||
|
websocketOnClose(event) {
|
||||||
|
console.log(event);
|
||||||
|
|
||||||
|
},
|
||||||
|
connectWebSocket() {
|
||||||
|
this.downstream_web_socket = WsConnectionFactory.CreateWebSocket(
|
||||||
|
this.websocketOnOpen,
|
||||||
|
this.websocketOnMessage,
|
||||||
|
this.websocketOnError,
|
||||||
|
this.websocketOnClose
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -7,3 +7,4 @@ export { MessageHubApi } from './messageHub'
|
|||||||
export { HistoryApi } from './history'
|
export { HistoryApi } from './history'
|
||||||
export { ContentApi } from './content'
|
export { ContentApi } from './content'
|
||||||
export { LabApi } from './lab'
|
export { LabApi } from './lab'
|
||||||
|
export { WsConnectionFactory } from './websocket'
|
||||||
|
|||||||
14
frontend/src/utils/backend/websocket.js
Normal file
14
frontend/src/utils/backend/websocket.js
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import { userUtils } from '../store/index'
|
||||||
|
|
||||||
|
class WsConnectionFactory {
|
||||||
|
static CreateWebSocket(onOpen, onMessage, onError, onClose) {
|
||||||
|
let jwt = userUtils.getJwtToken()
|
||||||
|
this.socket = new WebSocket(`/ws/downstream/downstream_notification?token=${jwt}`)
|
||||||
|
this.socket.onopen = onOpen
|
||||||
|
this.socket.onmessage = onMessage
|
||||||
|
this.socket.onerror = onError
|
||||||
|
this.socket.onclose = onClose
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export { WsConnectionFactory }
|
||||||
@ -7,7 +7,8 @@ export {
|
|||||||
MessageHubApi,
|
MessageHubApi,
|
||||||
HistoryApi,
|
HistoryApi,
|
||||||
ContentApi,
|
ContentApi,
|
||||||
LabApi
|
LabApi,
|
||||||
|
WsConnectionFactory
|
||||||
} from './backend/index'
|
} from './backend/index'
|
||||||
|
|
||||||
export { userUtils, userProfileUtils, requestIssueUtils, requestHubUtils } from './store/index'
|
export { userUtils, userProfileUtils, requestIssueUtils, requestHubUtils } from './store/index'
|
||||||
|
|||||||
@ -11,6 +11,7 @@ function resolve(dir) {
|
|||||||
// https://vitejs.dev/config/
|
// https://vitejs.dev/config/
|
||||||
export default defineConfig(({ command, mode }) => {
|
export default defineConfig(({ command, mode }) => {
|
||||||
let API_URL = 'http://127.0.0.1:8001'
|
let API_URL = 'http://127.0.0.1:8001'
|
||||||
|
let WEBSOCKET_URL = 'ws://127.0.0.1:8001'
|
||||||
let PORT = '5173'
|
let PORT = '5173'
|
||||||
|
|
||||||
if (command === 'serve') {
|
if (command === 'serve') {
|
||||||
@ -18,6 +19,7 @@ export default defineConfig(({ command, mode }) => {
|
|||||||
console.log('loading environment variables from .env and .env.' + mode + ' under ' + process.cwd())
|
console.log('loading environment variables from .env and .env.' + mode + ' under ' + process.cwd())
|
||||||
const env = loadEnv(mode, process.cwd());
|
const env = loadEnv(mode, process.cwd());
|
||||||
API_URL = `${env.VITE_API_URL ?? 'http://127.0.0.1:8001'}`;
|
API_URL = `${env.VITE_API_URL ?? 'http://127.0.0.1:8001'}`;
|
||||||
|
WEBSOCKET_URL = `${env.VITE_WEBSOCKET_URL ?? 'ws://127.0.0.1:8001'}`;
|
||||||
PORT = `${env.VITE_PORT ?? '5173'}`;
|
PORT = `${env.VITE_PORT ?? '5173'}`;
|
||||||
} else {
|
} else {
|
||||||
// command === 'build'
|
// command === 'build'
|
||||||
@ -58,6 +60,11 @@ export default defineConfig(({ command, mode }) => {
|
|||||||
target: API_URL,
|
target: API_URL,
|
||||||
ws: true,
|
ws: true,
|
||||||
changeOrigin: true
|
changeOrigin: true
|
||||||
|
},
|
||||||
|
'^/ws/': {
|
||||||
|
target: WEBSOCKET_URL,
|
||||||
|
ws: true,
|
||||||
|
changeOrigin: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
port: PORT,
|
port: PORT,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user