use '@' for all import

This commit is contained in:
Zhigang Wang 2024-06-20 20:43:27 -07:00
parent 0b8ade3f6d
commit a21f824f7b
48 changed files with 331 additions and 211 deletions

2
env.sh
View File

@ -1,4 +1,4 @@
INT_DIR="../freeleaps-int/sites/freeleaps/deploy" INT_DIR="@/freeleaps-int/sites/freeleaps/deploy"
DEPLOY_DIR="deploy" DEPLOY_DIR="deploy"
FE_ENV="$DEPLOY_DIR/.fe.env" FE_ENV="$DEPLOY_DIR/.fe.env"
if [ -d "$INT_DIR" ]; then if [ -d "$INT_DIR" ]; then

View File

@ -86,7 +86,7 @@
</div> </div>
</template> </template>
<script> <script>
import { UserAuthApi } from '../utils/backend/index' import { UserAuthApi } from '@/utils/backend/index'
export default { export default {
name: 'HeaderGuest', name: 'HeaderGuest',

View File

@ -1,4 +1,4 @@
import { userRoleEnum } from '../types/index' import { userRoleEnum } from '@/types/index'
export default { export default {
methods: { methods: {
//public //public

View File

@ -1,4 +1,4 @@
import { signinActionEnum } from '../types/index' import { signinActionEnum } from '@/types/index'
export default { export default {
methods: { methods: {
mnx_userSignedin(authResposne, keepMeSignedin) { mnx_userSignedin(authResposne, keepMeSignedin) {

View File

@ -36,8 +36,8 @@ import {
UserAuthApi, UserAuthApi,
applicantValidator applicantValidator
// userProfileValidator, // userProfileValidator,
} from '../../utils/index' } from '@/utils/index'
import { signinActionEnum } from '../../types/index' import { signinActionEnum } from '@/types/index'
export default { export default {
name: 'FrontDoor', name: 'FrontDoor',

View File

@ -24,8 +24,8 @@
</template> </template>
<script> <script>
import { UserAuthApi } from '../../utils/index' import { UserAuthApi } from '@/utils/index'
import { signinActionEnum } from '../../types/index' import { signinActionEnum } from '@/types/index'
export default { export default {
name: 'NewUserSetFlid', name: 'NewUserSetFlid',
props: { props: {

View File

@ -38,7 +38,7 @@
</template> </template>
<script> <script>
import { UserAuthApi, passwordValidator } from '../../utils/index' import { UserAuthApi, passwordValidator } from '@/utils/index'
export default { export default {
name: 'NewUserSetPassword', name: 'NewUserSetPassword',
props: {}, props: {},

View File

@ -24,8 +24,8 @@
</template> </template>
<script> <script>
import { signinActionEnum } from '../../types' import { signinActionEnum } from '@/types'
import { UserAuthApi } from '../../utils/index' import { UserAuthApi } from '@/utils/index'
export default { export default {
name: 'SigninWithEmailAndCode', name: 'SigninWithEmailAndCode',
props: { props: {

View File

@ -30,8 +30,8 @@
</template> </template>
<script> <script>
import { signinActionEnum } from '../../types' import { signinActionEnum } from '@/types'
import { UserAuthApi } from '../../utils/index' import { UserAuthApi } from '@/utils/index'
export default { export default {
name: 'SigninWithEmailAndCode', name: 'SigninWithEmailAndCode',
props: { props: {

View File

@ -5,7 +5,7 @@
</div> </div>
</template> </template>
<script> <script>
import { LabApi } from '../../../utils/index' import { LabApi } from '@/utils/index'
export default { export default {
name: 'TranslationHome', name: 'TranslationHome',
components: {}, components: {},

View File

@ -13,7 +13,7 @@
</div> </div>
</template> </template>
<script> <script>
import { ContentApi } from '../../utils/index' import { ContentApi } from '@/utils/index'
export default { export default {
name: 'About', name: 'About',
components: {}, components: {},

View File

@ -13,7 +13,7 @@
</div> </div>
</template> </template>
<script> <script>
import { ContentApi } from '../../utils/index' import { ContentApi } from '@/utils/index'
export default { export default {
name: 'Blogs', name: 'Blogs',
components: {}, components: {},

View File

@ -18,7 +18,7 @@
</div> </div>
</template> </template>
<script> <script>
import { ContentApi } from '../../utils/index' import { ContentApi } from '@/utils/index'
export default { export default {
name: 'Career', name: 'Career',
components: {}, components: {},

View File

@ -7,7 +7,7 @@
</div> </div>
</template> </template>
<script> <script>
import { ContentApi } from '../../utils/index' import { ContentApi } from '@/utils/index'
export default { export default {
name: 'Contact', name: 'Contact',
components: {}, components: {},

View File

@ -4,9 +4,6 @@
</div> </div>
</template> </template>
<script> <script>
// import { pdfjsLib } from '../../plugins/index'
// import { ContentApi } from '../../utils/index'
// import { Buffer } from 'buffer'
import { ContentApi } from '@/utils/index' import { ContentApi } from '@/utils/index'
import PDFReader from '@/components/PDFReader.vue' import PDFReader from '@/components/PDFReader.vue'
export default { export default {

View File

@ -8,7 +8,7 @@
import { import {
UserProfileApi UserProfileApi
// userProfileValidator, // userProfileValidator,
} from '../../../utils/index' } from '@/utils/index'
export default { export default {
name: 'UserFinance', name: 'UserFinance',
props: {}, props: {},

View File

@ -5,7 +5,7 @@
</template> </template>
<script> <script>
import { HistoryApi } from '../../../utils/index' import { HistoryApi } from '@/utils/index'
export default { export default {
name: 'UserHistory', name: 'UserHistory',
props: {}, props: {},

View File

@ -710,14 +710,9 @@
<script> <script>
import SvgIcon from '@/components/SvgIcon.vue' import SvgIcon from '@/components/SvgIcon.vue'
import { moneyCollectionTypeEnum } from '../../../types/index' import { moneyCollectionTypeEnum } from '@/types/index'
import { import { UserProfileApi, elementHandler, textAreaAujuster, passwordValidator } from '@/utils/index'
UserProfileApi,
elementHandler,
textAreaAujuster,
passwordValidator
} from '../../../utils/index'
import FreeleapsEditor from '@/components/FreeleapsEditor.vue' import FreeleapsEditor from '@/components/FreeleapsEditor.vue'
export default { export default {

View File

@ -8,7 +8,7 @@
import { import {
UserProfileApi UserProfileApi
// userProfileValidator, // userProfileValidator,
} from '../../../utils/index' } from '@/utils/index'
export default { export default {
name: 'UserSubscription', name: 'UserSubscription',
props: {}, props: {},

View File

@ -78,8 +78,8 @@
</div> </div>
</template> </template>
<script> <script>
import SvgIcon from '../../../components/SvgIcon.vue' import SvgIcon from '@/components/SvgIcon.vue'
import { MessageHubApi, DateUtils } from '../../../utils/index' import { MessageHubApi, DateUtils } from '@/utils/index'
export default { export default {
components: { SvgIcon }, components: { SvgIcon },
name: 'MessageHub', name: 'MessageHub',

View File

@ -266,7 +266,7 @@
import { import {
ProviderHubApi ProviderHubApi
// userProfileValidator, // userProfileValidator,
} from '../../../utils/index' } from '@/utils/index'
export default { export default {
name: 'ProviderHub', name: 'ProviderHub',
props: {}, props: {},

View File

@ -180,8 +180,8 @@
</template> </template>
<script> <script>
import { RequestHubApi, WorksapceApi, DateUtils, requestHubUtils } from '../../../utils/index' import { RequestHubApi, WorksapceApi, DateUtils, requestHubUtils } from '@/utils/index'
import { proposingModelEnum } from '../../../types/index' import { proposingModelEnum } from '@/types/index'
export default { export default {
name: 'RequestHub', name: 'RequestHub',
props: {}, props: {},

View File

@ -15,7 +15,7 @@
import { import {
UserProfileApi UserProfileApi
// userProfileValidator, // userProfileValidator,
} from '../../../utils/index' } from '@/utils/index'
export default { export default {
name: 'ProposalSubmitted', name: 'ProposalSubmitted',
props: { props: {

View File

@ -291,14 +291,14 @@
</template> </template>
<script> <script>
import { requestHubUtils, RequestHubApi } from '../../../utils/index' import { requestHubUtils, RequestHubApi } from '@/utils/index'
import { import {
proposingModelEnum, proposingModelEnum,
preparedProposal, preparedProposal,
preparedProposalStage, preparedProposalStage,
preparedProposalSummary, preparedProposalSummary,
proposalUtils proposalUtils
} from '../../../types/index' } from '@/types/index'
import SvgIcon from '@/components/SvgIcon.vue' import SvgIcon from '@/components/SvgIcon.vue'
import FreeleapsEditor from '@/components/FreeleapsEditor.vue' import FreeleapsEditor from '@/components/FreeleapsEditor.vue'
export default { export default {

View File

@ -2,13 +2,22 @@
<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 class="accordion accordion-list" v-for="(project, project_index) in projects" :key="project_index" <div
:id="project.id"> class="accordion accordion-list"
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 class="accordion-button collapsed" type="button" data-bs-toggle="collapse" <button
:data-bs-target="'#collapse-' + project_index" aria-expanded="false" class="accordion-button collapsed"
:aria-controls="'collapse-' + project_index"> type="button"
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">
@ -35,7 +44,11 @@
</div> </div>
</button> </button>
</h2> </h2>
<div :id="'collapse-' + project_index" class="accordion-collapse collapse" :data-bs-parent="'#' + project.id"> <div
: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)">
@ -43,17 +56,30 @@
</button> </button>
</div> </div>
<div class="project-request-container"> <div class="project-request-container">
<div class="project-request-content" v-html="project.request.content" @keyup="textAreaAdjust($event)" <div
contenteditable="false"></div> class="project-request-content"
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 class="accordion" v-for="(proposal, proposal_index) in project.proposals" :key="proposal_index" <div
:id="proposal.id"> class="accordion"
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 class="accordion-button collapsed" type="button" data-bs-toggle="collapse" <button
:data-bs-target="'#collapse-request-proposal' + proposal_index" aria-expanded="false" class="accordion-button collapsed"
:aria-controls="'collapse-request-proposal' + proposal_index"> type="button"
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>
@ -84,14 +110,23 @@
</div> </div>
</button> </button>
</h2> </h2>
<div :id="'collapse-request-proposal' + proposal_index" class="accordion-collapse collapse" <div
:data-bs-parent="'#' + proposal.id"> :id="'collapse-request-proposal' + proposal_index"
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 class="request-proposal-action-reject" @click="rejectProposal(project, proposal_index)"> <button
class="request-proposal-action-reject"
@click="rejectProposal(project, proposal_index)"
>
reject reject
</button> </button>
<button class="request-proposal-action-accept" @click="acceptProposal(project, proposal_index)"> <button
class="request-proposal-action-accept"
@click="acceptProposal(project, proposal_index)"
>
accept accept
</button> </button>
</div> </div>
@ -99,9 +134,12 @@
<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 class="request-proposal-payment-plan-stage-container" <div
v-for="(stage, stage_index) in proposal.payment_plan.stages" :key="stage_index" class="request-proposal-payment-plan-stage-container"
:id="'payment-stage-' + stage_index"> v-for="(stage, stage_index) in proposal.payment_plan.stages"
: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">
@ -134,9 +172,12 @@
<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 class="request-proposal-payment-plan-stage-container" <div
v-for="(stage, stage_index) in project.proposal.payment_plan.stages" :key="stage_index" class="request-proposal-payment-plan-stage-container"
:id="'payment-stage-' + stage_index"> v-for="(stage, stage_index) in project.proposal.payment_plan.stages"
: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>
@ -152,27 +193,45 @@
</div> </div>
</div> </div>
<div class="project-request-container"> <div class="project-request-container">
<div class="project-request-content" v-html="project.request.content" @keyup="textAreaAdjust($event)" <div
contenteditable="false"></div> class="project-request-content"
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 class="accordion-button collapsed" type="button" data-bs-toggle="collapse" <button
data-bs-target="#collapse-project-invite-collaborator" aria-expanded="false" class="accordion-button collapsed"
aria-controls="collapse-project-invite-collaborator"> type="button"
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 id="collapse-project-invite-collaborator" class="accordion-collapse collapse" <div
data-bs-parent="#collapse-project-invite-collaborator"> id="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 class="project-invite-collaborator-input" v-model="newInviteCollaborator[project_index]" /> <input
class="project-invite-collaborator-input"
v-model="newInviteCollaborator[project_index]"
/>
</div> </div>
<button class="project-invite-collaborator-action-button" @click=" <button
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>
@ -181,9 +240,14 @@
<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 class="accordion-button collapsed" type="button" data-bs-toggle="collapse" <button
data-bs-target="#collapse-project-milestone" aria-expanded="false" class="accordion-button collapsed"
aria-controls="collapse-project-milestone"> type="button"
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>
@ -217,11 +281,18 @@
</div> </div>
</button> </button>
</h2> </h2>
<div id="collapse-project-milestone" class="accordion-collapse collapse" <div
data-bs-parent="#collapse-project-milestone"> id="collapse-project-milestone"
class="accordion-collapse collapse"
data-bs-parent="#collapse-project-milestone"
>
<div class="project-milestones-containter"> <div class="project-milestones-containter">
<div class="project-milestone-container" v-for="milestone in project.project.progress.milestones" <div
:key="milestone.index" :id="'project-milestone-' + milestone.index"> class="project-milestone-container"
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">
@ -254,17 +325,21 @@
</p> </p>
</div> </div>
<div class="project-milestone-action-button-container"> <div class="project-milestone-action-button-container">
<button class="project-milestone-action-button" <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 class="project-milestone-payment-confirm-button" <button
@click="handlePaymentAction(project.project, milestone)"> class="project-milestone-payment-confirm-button"
@click="handlePaymentAction(project.project, milestone)"
>
Mark As Paid Mark As Paid
</button> </button>
</div> </div>
@ -274,8 +349,14 @@
</div> </div>
<div class="accordion-item"> <div class="accordion-item">
<h2 class="accordion-header"> <h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" <button
data-bs-target="#collapse-project-code" aria-expanded="false" aria-controls="collapse-project-code"> class="accordion-button collapsed"
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>
@ -298,13 +379,22 @@
</div> </div>
</button> </button>
</h2> </h2>
<div id="collapse-project-code" class="accordion-collapse collapse" <div
data-bs-parent="#collapse-project-code"> id="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 v-if="project.project.code.git_url" class="project-code-copy-git-url" <button
@click="copyCodeGit(project)" v-tooltip title="Copied" trigger="click" v-if="project.project.code.git_url"
delay='{"show":"500", "hide":"100"}'> class="project-code-copy-git-url"
@click="copyCodeGit(project)"
v-tooltip
title="Copied"
trigger="click"
delay='{"show":"500", "hide":"100"}'
>
copy git url copy git url
</button> </button>
</div> </div>
@ -317,9 +407,14 @@
</div> </div>
<div class="accordion-item"> <div class="accordion-item">
<h2 class="accordion-header"> <h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" <button
data-bs-target="#collapse-project-issue" aria-expanded="false" class="accordion-button collapsed"
aria-controls="collapse-project-issue"> type="button"
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>
@ -342,34 +437,51 @@
</div> </div>
</button> </button>
</h2> </h2>
<div id="collapse-project-issue" class="accordion-collapse collapse" <div
data-bs-parent="#collapse-project-issue"> id="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 class="accordion-button collapsed" type="button" data-bs-toggle="collapse" <button
data-bs-target="#collapse-project-new-issue" aria-expanded="false" class="accordion-button collapsed"
aria-controls="collapse-project-issue"> type="button"
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 id="collapse-project-new-issue" class="accordion-collapse collapse" <div
data-bs-parent="#collapse-project-new-issue"> id="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 class="project-new-issue-textarea" type="text" <textarea
v-model="newIssueDescriptions[project_index]" /> class="project-new-issue-textarea"
type="text"
v-model="newIssueDescriptions[project_index]"
/>
</div> </div>
<div class="project-new-issue-action-container"> <div class="project-new-issue-action-container">
<button class="project-new-issue-action-button" @click=" <button
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>
@ -377,14 +489,22 @@
</div> </div>
</div> </div>
<div class="project-issues-containter"> <div class="project-issues-containter">
<div class="project-issue-container" <div
v-for="(issue, issue_index) in project.project.issue.open_issues" :key="issue_index" class="project-issue-container"
:id="'project-issue-' + issue_index"> v-for="(issue, issue_index) in project.project.issue.open_issues"
: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 class="accordion-button collapsed" type="button" data-bs-toggle="collapse" <button
:data-bs-target="'#collapse-project-issue-details' + issue_index" aria-expanded="false" class="accordion-button collapsed"
aria-controls="collapse-project-issue-details"> type="button"
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>
@ -403,23 +523,35 @@
</div> </div>
</button> </button>
</h2> </h2>
<div :id="'collapse-project-issue-details' + issue_index" class="accordion-collapse collapse" <div
:data-bs-parent="'#collapse-project-issue-details' + issue_index"> :id="'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 :hidden="!showIssueActionButton(project.project, issue, 'Resolve')" <button
class="project-issue-action-button" @click="setProjectIssueStatus(issue.id, 1)"> :hidden="!showIssueActionButton(project.project, issue, 'Resolve')"
class="project-issue-action-button"
@click="setProjectIssueStatus(issue.id, 1)"
>
Resolve Resolve
</button> </button>
<button :hidden="!showIssueActionButton(project.project, issue, 'Confirm')" <button
class="project-issue-action-button" @click="setProjectIssueStatus(issue.id, 2)"> :hidden="!showIssueActionButton(project.project, issue, 'Confirm')"
class="project-issue-action-button"
@click="setProjectIssueStatus(issue.id, 2)"
>
Confirm Confirm
</button> </button>
<button :hidden="!showIssueActionButton(project.project, issue, 'Reopen')" <button
class="project-issue-action-button" @click="setProjectIssueStatus(issue.id, 0)"> :hidden="!showIssueActionButton(project.project, issue, 'Reopen')"
class="project-issue-action-button"
@click="setProjectIssueStatus(issue.id, 0)"
>
Reopen Reopen
</button> </button>
</div> </div>
@ -475,7 +607,7 @@ export default {
index: null index: null
}, },
downstream_web_socket: null, downstream_web_socket: null
} }
}, },
@ -785,19 +917,16 @@ export default {
}, },
/** web socket. we put them here for test purpose. they need to be moved to an appropriate place**/ /** web socket. we put them here for test purpose. they need to be moved to an appropriate place**/
websocketOnOpen(event) { websocketOnOpen(event) {
console.log(event); console.log(event)
}, },
websocketOnMessage(event) { websocketOnMessage(event) {
console.log(event.data); console.log(event.data)
}, },
websocketOnError(event) { websocketOnError(event) {
console.log(event); console.log(event)
}, },
websocketOnClose(event) { websocketOnClose(event) {
console.log(event); console.log(event)
}, },
connectWebSocket() { connectWebSocket() {
this.downstream_web_socket = WsConnectionFactory.CreateWebSocket( this.downstream_web_socket = WsConnectionFactory.CreateWebSocket(
@ -807,7 +936,6 @@ export default {
this.websocketOnClose this.websocketOnClose
) )
} }
} }
} }
</script> </script>

View File

@ -44,8 +44,8 @@
</template> </template>
<script> <script>
import { WorksapceApi, DateUtils } from '../../../../utils/index' import { WorksapceApi, DateUtils } from '@/utils/index'
import { projectStatusEnum, convertIntoToProjectStatus } from '../../../../types/index' import { projectStatusEnum, convertIntoToProjectStatus } from '@/types/index'
export default { export default {
name: 'MyWorkspaceProjects', name: 'MyWorkspaceProjects',
props: {}, props: {},

View File

@ -44,8 +44,8 @@
</template> </template>
<script> <script>
import { WorksapceApi, DateUtils } from '../../../../utils/index' import { WorksapceApi, DateUtils } from '@/utils/index'
import { projectStatusEnum, convertIntoToProjectStatus } from '../../../../types/index' import { projectStatusEnum, convertIntoToProjectStatus } from '@/types/index'
export default { export default {
name: 'MyWorkspaceProposal', name: 'MyWorkspaceProposal',
props: {}, props: {},

View File

@ -13,7 +13,7 @@
import { import {
UserProfileApi UserProfileApi
// requestHubUtils, // requestHubUtils,
} from '../../../../utils/index' } from '@/utils/index'
export default { export default {
name: 'RquestIssueDeposit', name: 'RquestIssueDeposit',
props: { props: {

View File

@ -11,7 +11,7 @@
import { import {
UserProfileApi UserProfileApi
// userProfileValidator, // userProfileValidator,
} from '../../../../utils/index' } from '@/utils/index'
export default { export default {
name: 'RquestIssueDeposited', name: 'RquestIssueDeposited',
props: { props: {

View File

@ -170,8 +170,8 @@
</template> </template>
<script> <script>
import { WorksapceApi, textAreaAujuster, requestIssueUtils } from '../../../../utils/index' import { WorksapceApi, textAreaAujuster, requestIssueUtils } from '@/utils/index'
import { requestIssuingModelEnum } from '../../../../types/index' import { requestIssuingModelEnum } from '@/types/index'
import FreeleapsEditor from '@/components/FreeleapsEditor.vue' import FreeleapsEditor from '@/components/FreeleapsEditor.vue'
import InputSelector from '@/components/InputSelector.vue' import InputSelector from '@/components/InputSelector.vue'
import SvgIcon from '@/components/SvgIcon.vue' import SvgIcon from '@/components/SvgIcon.vue'

View File

@ -15,7 +15,7 @@
import { import {
UserProfileApi UserProfileApi
// userProfileValidator, // userProfileValidator,
} from '../../../../utils/index' } from '@/utils/index'
export default { export default {
name: 'RquestIssueSubmitted', name: 'RquestIssueSubmitted',
props: { props: {

View File

@ -44,8 +44,8 @@
</template> </template>
<script> <script>
import { WorksapceApi, DateUtils } from '../../../../utils/index' import { WorksapceApi, DateUtils } from '@/utils/index'
import { projectStatusEnum, convertIntoToProjectStatus } from '../../../../types/index' import { projectStatusEnum, convertIntoToProjectStatus } from '@/types/index'
export default { export default {
name: 'MyWorkspaceRequest', name: 'MyWorkspaceRequest',
props: {}, props: {},

View File

@ -88,8 +88,8 @@
</template> </template>
<script> <script>
import { WorksapceApi, requestIssueUtils, DateUtils } from '../../../../utils/index' import { WorksapceApi, requestIssueUtils, DateUtils } from '@/utils/index'
import { requestStatusEnum, convertIntoToRequestStatus } from '../../../../types/index' import { requestStatusEnum, convertIntoToRequestStatus } from '@/types/index'
export default { export default {
name: 'RequestManage', name: 'RequestManage',
props: { props: {

View File

@ -65,7 +65,7 @@
import { import {
WorksapceApi WorksapceApi
// userProfileValidator, // userProfileValidator,
} from '../../../../utils/index' } from '@/utils/index'
export default { export default {
name: 'ReviewProposalBeforeAccetance', name: 'ReviewProposalBeforeAccetance',
props: { props: {

View File

@ -1,71 +1,71 @@
import { createRouter, createWebHistory } from 'vue-router' import { createRouter, createWebHistory } from 'vue-router'
import { store, userRoleEnum } from '../store/index' import { store, userRoleEnum } from '@/store/index'
//public //public
import About from '../../pages/public/About.vue' import About from '@/pages/public/About.vue'
import Blogs from '../../pages/public/Blogs.vue' import Blogs from '@/pages/public/Blogs.vue'
import Career from '../../pages/public/Career.vue' import Career from '@/pages/public/Career.vue'
import Contact from '../../pages/public/Contact.vue' import Contact from '@/pages/public/Contact.vue'
import PdfContentViewer from '../../pages/public/PdfContentViewer.vue' import PdfContentViewer from '@/pages/public/PdfContentViewer.vue'
import LinkContentViewer from '../../pages/public/LinkContentViewer.vue' import LinkContentViewer from '@/pages/public/LinkContentViewer.vue'
//guest //guest
import FrontDoor from '../../pages/guest/FrontDoor.vue' import FrontDoor from '@/pages/guest/FrontDoor.vue'
import SigninWithEmailAndCode from '../../pages/guest/SigninWithEmailAndCode.vue' import SigninWithEmailAndCode from '@/pages/guest/SigninWithEmailAndCode.vue'
import NewUserSetPassword from '../../pages/guest/NewUserSetPassword.vue' import NewUserSetPassword from '@/pages/guest/NewUserSetPassword.vue'
import NewUserSetFlid from '../../pages/guest/NewUserSetFlid.vue' import NewUserSetFlid from '@/pages/guest/NewUserSetFlid.vue'
import SigninWithEmailAndPassword from '../../pages/guest/SigninWithEmailAndPassword.vue' import SigninWithEmailAndPassword from '@/pages/guest/SigninWithEmailAndPassword.vue'
//Workspace projects //Workspace projects
import MyWorkspaceProjects from '../../pages/user/workspace/projectManage/Home.vue' import MyWorkspaceProjects from '@/pages/user/workspace/projectManage/Home.vue'
import ProjectManage from '../../pages/user/workspace/projectManage/ProjectManage.vue' import ProjectManage from '@/pages/user/workspace/projectManage/ProjectManage.vue'
import ProjectManageCode from '../../pages/user/workspace/projectManage/Code.vue' import ProjectManageCode from '@/pages/user/workspace/projectManage/Code.vue'
import ProjectManageDeploy from '../../pages/user/workspace/projectManage/Deploy.vue' import ProjectManageDeploy from '@/pages/user/workspace/projectManage/Deploy.vue'
import ProjectManageGeneral from '../../pages/user/workspace/projectManage/General.vue' import ProjectManageGeneral from '@/pages/user/workspace/projectManage/General.vue'
import ProjectManageIssues from '../../pages/user/workspace/projectManage/Issues.vue' import ProjectManageIssues from '@/pages/user/workspace/projectManage/Issues.vue'
import ProjectManageProduct from '../../pages/user/workspace/projectManage/Product.vue' import ProjectManageProduct from '@/pages/user/workspace/projectManage/Product.vue'
import ProjectManageProgress from '../../pages/user/workspace/projectManage/Progress.vue' import ProjectManageProgress from '@/pages/user/workspace/projectManage/Progress.vue'
//Workspace Requests //Workspace Requests
import MyWorkspaceRequests from '../../pages/user/workspace/requestManage/Home.vue' import MyWorkspaceRequests from '@/pages/user/workspace/requestManage/Home.vue'
/// Request Issue /// Request Issue
import IssueRequest from '../../pages/user/workspace/requestIssue/Issue.vue' import IssueRequest from '@/pages/user/workspace/requestIssue/Issue.vue'
import RequestSubmitted from '../../pages/user/workspace/requestIssue/Submitted.vue' import RequestSubmitted from '@/pages/user/workspace/requestIssue/Submitted.vue'
import RequestDeposit from '../../pages/user/workspace/requestIssue/Deposit.vue' import RequestDeposit from '@/pages/user/workspace/requestIssue/Deposit.vue'
import RequestDeposited from '../../pages/user/workspace/requestIssue/Deposited.vue' import RequestDeposited from '@/pages/user/workspace/requestIssue/Deposited.vue'
//Workspace Proposals //Workspace Proposals
import MyWorkspaceProposals from '../../pages/user/workspace/proposalManage/Home.vue' import MyWorkspaceProposals from '@/pages/user/workspace/proposalManage/Home.vue'
//Message Hub //Message Hub
import MessageHub from '../../pages/user/messages/Home.vue' import MessageHub from '@/pages/user/messages/Home.vue'
//Provider Hub //Provider Hub
import ProviderHub from '../../pages/user/providers/Home.vue' import ProviderHub from '@/pages/user/providers/Home.vue'
//Request Hub //Request Hub
import RequestHub from '../../pages/user/requests/Home.vue' import RequestHub from '@/pages/user/requests/Home.vue'
import MakeProposal from '../../pages/user/requests/Propose.vue' import MakeProposal from '@/pages/user/requests/Propose.vue'
import ProposalSubmitted from '../../pages/user/requests/ProposalSubmitted.vue' import ProposalSubmitted from '@/pages/user/requests/ProposalSubmitted.vue'
import RequestManage from '../../pages/user/workspace/requestManage/Manage.vue' import RequestManage from '@/pages/user/workspace/requestManage/Manage.vue'
import ReviewProposalBeforeAccetance from '../../pages/user/workspace/requestManage/ReviewProposal.vue' import ReviewProposalBeforeAccetance from '@/pages/user/workspace/requestManage/ReviewProposal.vue'
import UserProfile from '../../pages/user/account/UserProfile.vue' import UserProfile from '@/pages/user/account/UserProfile.vue'
import UserFinance from '../../pages/user/account/UserFinance.vue' import UserFinance from '@/pages/user/account/UserFinance.vue'
import UserHistory from '../../pages/user/account/UserHistory.vue' import UserHistory from '@/pages/user/account/UserHistory.vue'
import Workspace from '../../pages/user/workspace/Home.vue' import Workspace from '@/pages/user/workspace/Home.vue'
import FooterGuest from '../../footers/FooterGuest.vue' import FooterGuest from '@/footers/FooterGuest.vue'
import FooterUser from '../../footers/FooterUser.vue' import FooterUser from '@/footers/FooterUser.vue'
import HeaderGuest from '../../headers/HeaderGuest.vue' import HeaderGuest from '@/headers/HeaderGuest.vue'
import HeaderUser from '../../headers/HeaderUser.vue' import HeaderUser from '@/headers/HeaderUser.vue'
//Lab //Lab
import LabHome from '../../pages/lab/Home.vue' import LabHome from '@/pages/lab/Home.vue'
import TranslationHome from '../../pages/lab/translation/Home.vue' import TranslationHome from '@/pages/lab/translation/Home.vue'
const router = createRouter({ const router = createRouter({
history: createWebHistory(), history: createWebHistory(),

View File

@ -1,4 +1,4 @@
import { userRoleEnum } from '../../types/index' import { userRoleEnum } from '@/types/index'
const userProfileStore = { const userProfileStore = {
namespaced: true, namespaced: true,

View File

@ -1,5 +1,5 @@
import { backendAxios } from './axios' import { backendAxios } from './axios'
import { userUtils } from '../store/index' import { userUtils } from '@/store/index'
class HistoryApi { class HistoryApi {
static fetchClosedWorkspackeProjects() { static fetchClosedWorkspackeProjects() {

View File

@ -1,5 +1,5 @@
import { backendAxios } from './axios' import { backendAxios } from './axios'
import { userUtils } from '../store/index' import { userUtils } from '@/store/index'
class LabApi { class LabApi {
static translate_text(input_text) { static translate_text(input_text) {
let jwt = userUtils.getJwtToken() let jwt = userUtils.getJwtToken()

View File

@ -1,5 +1,5 @@
import { backendAxios } from './axios' import { backendAxios } from './axios'
import { userUtils } from '../store/index' import { userUtils } from '@/store/index'
class MessageHubApi { class MessageHubApi {
static fetchMessageThreads() { static fetchMessageThreads() {

View File

@ -1,5 +1,5 @@
import { backendAxios } from './axios' import { backendAxios } from './axios'
import { userUtils } from '../store/index' import { userUtils } from '@/store/index'
class ProviderHubApi { class ProviderHubApi {
static fetchProvidersForHub() { static fetchProvidersForHub() {

View File

@ -1,5 +1,5 @@
import { backendAxios } from './axios' import { backendAxios } from './axios'
import { userUtils } from '../store/index' import { userUtils } from '@/store/index'
class RequestHubApi { class RequestHubApi {
static fetchRequestForHub() { static fetchRequestForHub() {

View File

@ -1,5 +1,5 @@
import { backendAxios } from './axios' import { backendAxios } from './axios'
import { userUtils } from '../store/index' import { userUtils } from '@/store/index'
class UserProfileApi { class UserProfileApi {
static fetchUserProfile() { static fetchUserProfile() {

View File

@ -1,4 +1,4 @@
import { userUtils } from '../store/index' import { userUtils } from '@/store/index'
class WsConnectionFactory { class WsConnectionFactory {
static CreateWebSocket(onOpen, onMessage, onError, onClose) { static CreateWebSocket(onOpen, onMessage, onError, onClose) {

View File

@ -1,5 +1,5 @@
import { backendAxios } from './axios' import { backendAxios } from './axios'
import { userUtils } from '../store/index' import { userUtils } from '@/store/index'
class WorksapceApi { class WorksapceApi {
static createMilestoneCheckoutSession(project_id, milestone_index) { static createMilestoneCheckoutSession(project_id, milestone_index) {

View File

@ -1,4 +1,4 @@
import { store } from '../../plugins/index' import { store } from '@/plugins/index'
class RequestHubUtils { class RequestHubUtils {
constructor(store) { constructor(store) {

View File

@ -1,4 +1,4 @@
import { store } from '../../plugins/index' import { store } from '@/plugins/index'
class RequestIssueUtils { class RequestIssueUtils {
constructor(store) { constructor(store) {

View File

@ -1,4 +1,4 @@
import { store } from '../../plugins/index' import { store } from '@/plugins/index'
class UserProfileUtils { class UserProfileUtils {
constructor(store) { constructor(store) {

View File

@ -1,4 +1,4 @@
import { store } from '../../plugins/index' import { store } from '@/plugins/index'
class UserUtils { class UserUtils {
constructor(store) { constructor(store) {