Merge branch 'main' of https://freeleaps.com:3443/products/freeleaps into main
* 'main' of https://freeleaps.com:3443/products/freeleaps: fix the import path in utils use '@' for all import add websocket framework # Conflicts: # frontend/src/pages/user/requests/Home.vue
This commit is contained in:
commit
97709a8e50
2
env.sh
2
env.sh
@ -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
|
||||||
|
|||||||
@ -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',
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { userRoleEnum } from '../types/index'
|
import { userRoleEnum } from '@/types/index'
|
||||||
export default {
|
export default {
|
||||||
methods: {
|
methods: {
|
||||||
//public
|
//public
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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',
|
||||||
|
|||||||
@ -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: {
|
||||||
|
|||||||
@ -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: {},
|
||||||
|
|||||||
@ -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: {
|
||||||
|
|||||||
@ -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: {
|
||||||
|
|||||||
@ -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: {},
|
||||||
|
|||||||
@ -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: {},
|
||||||
|
|||||||
@ -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: {},
|
||||||
|
|||||||
@ -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: {},
|
||||||
|
|||||||
@ -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: {},
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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: {},
|
||||||
|
|||||||
@ -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: {},
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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: {},
|
||||||
|
|||||||
@ -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',
|
||||||
|
|||||||
@ -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: {},
|
||||||
|
|||||||
@ -75,12 +75,12 @@
|
|||||||
Propose
|
Propose
|
||||||
</button>
|
</button>
|
||||||
<div class="request-description-content" v-html="request.content"></div>
|
<div class="request-description-content" v-html="request.content"></div>
|
||||||
<div class="preview-btn-container" v-for="(file, index) in request.attached_files" :key="index">
|
<div v-for="(file, index) in request.attached_files" :key="index">
|
||||||
<button class="btn btn-link" data-bs-toggle="modal" data-bs-target="#previewModal" :data-bs-file="file.file_name" :data-bs-rid="request.id" :data-bs-did="file.document_id">
|
<button @click="previewAttachedFile(request.id, file.document_id)">
|
||||||
Preview {{ file.file_name }}
|
Preview{{ file.file_name }}
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-link" @click="downloadAttachedFile(request.id, file.document_id)">
|
<button @click="downloadAttachedFile(request.id, file.document_id)">
|
||||||
Download {{ file.file_name }}
|
Download{{ file.file_name }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -177,56 +177,24 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal fade" id="previewModal" ref="previewModal" aria-labelledby="previewModalLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog modal-xl">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h1 class="modal-title fs-5" id="previewModalLabel">{{previewModal.filename}}</h1>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<PDFReader :doc="previewModal.doc" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</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'
|
||||||
import PDFReader from '@/components/PDFReader.vue'
|
|
||||||
export default {
|
export default {
|
||||||
name: 'RequestHub',
|
name: 'RequestHub',
|
||||||
props: {},
|
props: {},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.fetchRequests()
|
this.fetchRequests()
|
||||||
this.$refs.previewModal.addEventListener('shown.bs.modal', event => {
|
|
||||||
const relatedTarget = event.relatedTarget
|
|
||||||
const filename = relatedTarget.getAttribute('data-bs-file')
|
|
||||||
this.previewModal = { filename }
|
|
||||||
const requestId = relatedTarget.getAttribute('data-bs-rid')
|
|
||||||
const documentId = relatedTarget.getAttribute('data-bs-did')
|
|
||||||
WorksapceApi.fetchAttachedFileAsMediaData(requestId, documentId)
|
|
||||||
.then((response) => {
|
|
||||||
this.previewModal.doc = {url: response.data}
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
this.mnx_backendErrorHandler(error)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
this.$refs.previewModal.addEventListener('hidden.bs.modal', () => {
|
|
||||||
this.previewModal = {}
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
requestGroups: [],
|
requestGroups: [],
|
||||||
message: null,
|
message: null
|
||||||
previewModal: {}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
components: { PDFReader },
|
|
||||||
methods: {
|
methods: {
|
||||||
fetchRequests() {
|
fetchRequests() {
|
||||||
RequestHubApi.fetchRequestForHub()
|
RequestHubApi.fetchRequestForHub()
|
||||||
@ -244,6 +212,18 @@ export default {
|
|||||||
getDateFromFulltimeString(fulltime) {
|
getDateFromFulltimeString(fulltime) {
|
||||||
return DateUtils.FromJsonToDateString(fulltime)
|
return DateUtils.FromJsonToDateString(fulltime)
|
||||||
},
|
},
|
||||||
|
previewAttachedFile(request_id, document_id) {
|
||||||
|
// !!! SHOULD NOT use PdfContentViewer which is designed for unlogged in users.
|
||||||
|
// !!! Instead, should have a dedicated pdf viewer which should follow the figma design.
|
||||||
|
// WorksapceApi.fetchAttachedFileAsMediaData(request_id, document_id)
|
||||||
|
// .then((response) => {
|
||||||
|
// let media_data = response.data
|
||||||
|
// console.log(media_data)
|
||||||
|
// })
|
||||||
|
// .catch((error) => {
|
||||||
|
// this.mnx_backendErrorHandler(error)
|
||||||
|
// })
|
||||||
|
},
|
||||||
downloadAttachedFile(request_id, document_id) {
|
downloadAttachedFile(request_id, document_id) {
|
||||||
WorksapceApi.fetchAttachedFileAsDownload(request_id, document_id)
|
WorksapceApi.fetchAttachedFileAsDownload(request_id, document_id)
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
@ -431,15 +411,4 @@ export default {
|
|||||||
@extend .text-start;
|
@extend .text-start;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.preview-btn-container {
|
|
||||||
display: flex;
|
|
||||||
text-align: left;
|
|
||||||
|
|
||||||
.btn-link {
|
|
||||||
font-weight: bold;
|
|
||||||
margin-right: 15px;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -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: {
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -571,7 +571,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 +588,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 +605,9 @@ export default {
|
|||||||
qrCode: {
|
qrCode: {
|
||||||
imageUrl: null,
|
imageUrl: null,
|
||||||
index: null
|
index: null
|
||||||
}
|
},
|
||||||
|
|
||||||
|
downstream_web_socket: null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -905,6 +914,27 @@ 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
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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: {},
|
||||||
|
|||||||
@ -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: {},
|
||||||
|
|||||||
@ -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: {
|
||||||
|
|||||||
@ -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: {
|
||||||
|
|||||||
@ -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'
|
||||||
|
|||||||
@ -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: {
|
||||||
|
|||||||
@ -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: {},
|
||||||
|
|||||||
@ -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: {
|
||||||
|
|||||||
@ -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: {
|
||||||
|
|||||||
@ -2,70 +2,70 @@ 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(),
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { userRoleEnum } from '../../types/index'
|
import { userRoleEnum } from '@/types/index'
|
||||||
|
|
||||||
const userProfileStore = {
|
const userProfileStore = {
|
||||||
namespaced: true,
|
namespaced: true,
|
||||||
|
|||||||
@ -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/online_platform_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'
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { store } from '../../plugins/index'
|
import { store } from '@/plugins/index'
|
||||||
|
|
||||||
class RequestHubUtils {
|
class RequestHubUtils {
|
||||||
constructor(store) {
|
constructor(store) {
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { store } from '../../plugins/index'
|
import { store } from '@/plugins/index'
|
||||||
|
|
||||||
class RequestIssueUtils {
|
class RequestIssueUtils {
|
||||||
constructor(store) {
|
constructor(store) {
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { store } from '../../plugins/index'
|
import { store } from '@/plugins/index'
|
||||||
|
|
||||||
class UserProfileUtils {
|
class UserProfileUtils {
|
||||||
constructor(store) {
|
constructor(store) {
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { store } from '../../plugins/index'
|
import { store } from '@/plugins/index'
|
||||||
|
|
||||||
class UserUtils {
|
class UserUtils {
|
||||||
constructor(store) {
|
constructor(store) {
|
||||||
|
|||||||
@ -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