Mike Liao 2024-07-04 11:31:25 -07:00
commit 1ee2c68075
14 changed files with 95 additions and 115 deletions

View File

@ -24,7 +24,7 @@ export default {
}, },
methods: { methods: {
retrieve_directories() { retrieve_directories() {
ContentApi.retrieve_about_directories() ContentApi.retrieve_about_directories(window.location.host)
.then((response) => { .then((response) => {
this.directories = response.data this.directories = response.data
}) })
@ -62,17 +62,20 @@ export default {
padding: 0; padding: 0;
} }
} }
.directory_cover_image { .directory_cover_image {
width: 100%; width: 100%;
border-radius: 16px; border-radius: 16px;
margin-bottom: 16px; margin-bottom: 16px;
} }
.directory-title { .directory-title {
font-size: 48px; font-size: 48px;
// font-weight: bold; // font-weight: bold;
color: #18181a; color: #18181a;
margin-bottom: 5px; margin-bottom: 5px;
} }
.directory-subtitle { .directory-subtitle {
font-size: 14px; font-size: 14px;
color: #666666; color: #666666;

View File

@ -23,7 +23,7 @@ export default {
}, },
methods: { methods: {
retrieve_blogs() { retrieve_blogs() {
ContentApi.retrieve_blogs() ContentApi.retrieve_blogs(window.location.host)
.then((response) => { .then((response) => {
this.blogs = response.data this.blogs = response.data
}) })

View File

@ -24,7 +24,7 @@ export default {
}, },
methods: { methods: {
retrieve_directories() { retrieve_directories() {
ContentApi.retrieve_career_directories() ContentApi.retrieve_career_directories(window.location.host)
.then((response) => { .then((response) => {
this.directories = response.data this.directories = response.data
}) })
@ -61,6 +61,7 @@ export default {
p { p {
margin: 0; margin: 0;
} }
.career-title { .career-title {
font-size: 32px; font-size: 32px;
margin-bottom: 10px; margin-bottom: 10px;

View File

@ -23,7 +23,7 @@ export default {
}, },
methods: { methods: {
retrieve_directories() { retrieve_directories() {
ContentApi.retrieve_contact_directories() ContentApi.retrieve_contact_directories(window.location.host)
.then((response) => { .then((response) => {
this.directories = response.data this.directories = response.data
}) })
@ -63,6 +63,7 @@ export default {
img { img {
width: 100%; width: 100%;
} }
.contact-left-content { .contact-left-content {
padding: 32px; padding: 32px;
display: flex; display: flex;
@ -82,6 +83,7 @@ export default {
} }
} }
} }
.contact-right { .contact-right {
margin-left: 24px; margin-left: 24px;
box-shadow: 0px 0px 24px 0px #d4d3e380; box-shadow: 0px 0px 24px 0px #d4d3e380;

View File

@ -20,7 +20,6 @@
<span class="conversation-last-update-date">{{ <span class="conversation-last-update-date">{{
getDateFromFulltimeString(conversation.create_time) getDateFromFulltimeString(conversation.create_time)
}}</span> }}</span>
<!-- <span v-if="unreadCountMapper" class="conversation-unreadcount">{{unreadCountMapper}}</span> -->
</div> </div>
<div class="conversation-summary-highlight-container"> <div class="conversation-summary-highlight-container">
{{ conversation.last_message?.message_body }} {{ conversation.last_message?.message_body }}
@ -83,24 +82,10 @@ export default {
components: { SvgIcon }, components: { SvgIcon },
name: 'MessageHub', name: 'MessageHub',
props: {}, props: {},
mounted() { mounted() {},
// this.fetchConversations()
},
// watch: {
// conversations: {
// handler: function (val) {
// if (val && val.length > 0) {
// this.current_thread = val[0]
// this.clearUnreadMessageBy(val[0])
// }
// },
// deep: false
// }
// },
data() { data() {
return { return {
userIdentityNote: this.mnx_getUserIdentity(), userIdentityNote: this.mnx_getUserIdentity(),
// conversations: [],
selConversation: null, selConversation: null,
messages: [], messages: [],
writtenMessage: null writtenMessage: null
@ -126,19 +111,6 @@ export default {
} }
}, },
methods: { methods: {
// fetchConversations() {
// MessageHubApi.fetchConversations(new Date('01 Jan 1970 00:00:00 GMT').toISOString())
// .then((response) => {
// const conversations = response.data.conversations || []
// this.conversations = conversations
// if (conversations.length > 0) {
// this.selectConversation(conversations[0])
// }
// })
// .catch((error) => {
// this.mnx_backendErrorHandler(error)
// })
// },
fetchMessageForConversation(conversation_id) { fetchMessageForConversation(conversation_id) {
const jwt = userUtils.getJwtToken() const jwt = userUtils.getJwtToken()
MessageHubApi.fetchMessages( MessageHubApi.fetchMessages(

View File

@ -447,11 +447,6 @@ export default {
border-top: 1px solid #dee2e6; border-top: 1px solid #dee2e6;
} }
// .statistics-content-label {
// @extend .label-text-light;
// @extend .w-100;
// }
.statistics-content-container { .statistics-content-container {
@extend .flex-colum-container; @extend .flex-colum-container;
padding: 0; padding: 0;

View File

@ -77,11 +77,23 @@
{{ $t('Propose') }} {{ $t('Propose') }}
</button> </button>
<div class="request-description-content" v-html="request.content"></div> <div class="request-description-content" v-html="request.content"></div>
<div v-for="(file, index) in request.attached_files" :key="index"> <div
<button @click="previewAttachedFile(request.id, file.document_id)"> class="pdf-actions"
v-for="(file, index) in request.attached_files"
:key="index"
>
<button
class="btn btn-link"
data-bs-toggle="modal"
data-bs-target="#pdf-viewer"
@click="previewAttachedFile(request.id, file.document_id, file.file_name)"
>
{{ $t('Preview') }}{{ file.file_name }} {{ $t('Preview') }}{{ file.file_name }}
</button> </button>
<button @click="downloadAttachedFile(request.id, file.document_id)"> <button
class="btn btn-link"
@click="downloadAttachedFile(request.id, file.document_id)"
>
{{ $t('Download') }}{{ file.file_name }} {{ $t('Download') }}{{ file.file_name }}
</button> </button>
</div> </div>
@ -179,12 +191,38 @@
</div> </div>
</div> </div>
</div> </div>
<div
class="modal fade"
id="pdf-viewer"
tabindex="-1"
aria-labelledby="pdf-viewer-label"
aria-hidden="true"
>
<div class="modal-dialog modal-xl">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="pdf-viewer-label">{{ pdfDocument.title }}</h1>
<button
type="button"
class="btn-close"
data-bs-dismiss="modal"
aria-label="Close"
></button>
</div>
<div class="modal-body">
<PDFReader :doc="pdfDocument.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 {
components: { PDFReader },
name: 'RequestHub', name: 'RequestHub',
props: {}, props: {},
mounted() { mounted() {
@ -193,7 +231,8 @@ export default {
data() { data() {
return { return {
requestGroups: [], requestGroups: [],
message: null message: null,
pdfDocument: {}
} }
}, },
@ -214,17 +253,16 @@ export default {
getDateFromFulltimeString(fulltime) { getDateFromFulltimeString(fulltime) {
return DateUtils.FromJsonToDateString(fulltime) return DateUtils.FromJsonToDateString(fulltime)
}, },
previewAttachedFile(request_id, document_id) { previewAttachedFile(request_id, document_id, title) {
// !!! SHOULD NOT use PdfContentViewer which is designed for unlogged in users. this.pdfDocument.title = title
// !!! Instead, should have a dedicated pdf viewer which should follow the figma design. WorksapceApi.fetchAttachedFileAsMediaData(request_id, document_id)
// WorksapceApi.fetchAttachedFileAsMediaData(request_id, document_id) .then((response) => {
// .then((response) => { let media_data = response.data
// let media_data = response.data this.pdfDocument.doc = { url: media_data }
// console.log(media_data) })
// }) .catch((error) => {
// .catch((error) => { this.mnx_backendErrorHandler(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)
@ -413,4 +451,16 @@ export default {
@extend .text-start; @extend .text-start;
font-weight: bold; font-weight: bold;
} }
.pdf-actions {
text-align: left;
display: flex;
align-items: center;
margin-top: 12px;
.btn-link {
padding: 0;
margin-right: 12px;
}
}
</style> </style>

View File

@ -12,10 +12,6 @@
</template> </template>
<script> <script>
import {
UserProfileApi
// userProfileValidator,
} from '@/utils/index'
export default { export default {
name: 'ProposalSubmitted', name: 'ProposalSubmitted',
props: { props: {

View File

@ -221,36 +221,6 @@
<button class="stage-item-delete-button"> <button class="stage-item-delete-button">
<svg-icon v-if="index != 0" icon="delete" @click="removeStage(index)" /> <svg-icon v-if="index != 0" icon="delete" @click="removeStage(index)" />
</button> </button>
<!-- <div class="stage-item-content-container" id="stage-item-content">
<div class="stage-payment-container">
<label class="stage-content-label" for="stage-payment-content">Payment</label>
<div class="stage-payment-content-container" id="stage-payment-content">
<input
type="text"
class="stage-payment-content-text"
id="stage-payment-content-text"
v-model="stage.payment"
/>
<span class="stage-payment-content-span"> {{ stage.currency }}</span>
</div>
</div>
<div class="stage-duration-container">
<label class="stage-content-label" for="stage-duration-content">Duration</label>
<div class="stage-duration-content-container" id="stage-duration-content">
<input
type="text"
class="stage-duration-content-text"
v-model="stage.duration_in_days"
/>
<span class="stage-duration-content-span"> day(s)</span>
</div>
</div>
<div class="stage-note-container">
<label class="stage-content-label" for="stage-note-content">Notes</label>
<input class="stage-note-content-text" id="stage-note-content" v-model="stage.note" />
</div>
</div> -->
</div> </div>
<div class="stage-more-action-container"> <div class="stage-more-action-container">
<button class="stage-add-more-button" @click="addStage()"> <button class="stage-add-more-button" @click="addStage()">
@ -350,12 +320,6 @@ export default {
} }
}, },
methods: { methods: {
// loadTemplates() {
// this.mnx_navToLoadTemplates()
// },
// copyExisting() {
// this.mnx_navToCopyProposals()
// },
isUserInCNY() { isUserInCNY() {
return window.location.host.includes('localhost') || window.location.href.includes('com.cn') return window.location.host.includes('localhost') || window.location.href.includes('com.cn')
}, },

View File

@ -10,10 +10,6 @@
</template> </template>
<script> <script>
import {
UserProfileApi
// requestHubUtils,
} from '@/utils/index'
export default { export default {
name: 'RquestIssueDeposit', name: 'RquestIssueDeposit',
props: { props: {

View File

@ -8,10 +8,6 @@
</template> </template>
<script> <script>
import {
UserProfileApi
// userProfileValidator,
} from '@/utils/index'
export default { export default {
name: 'RquestIssueDeposited', name: 'RquestIssueDeposited',
props: { props: {

View File

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

View File

@ -13,7 +13,6 @@ const basicStore = {
language: 'zh', language: 'zh',
conversations: [], conversations: [],
unreadConversationCount: 0, unreadConversationCount: 0,
// conversation_update_time: null,
downstream_web_socket: null downstream_web_socket: null
} }
}, },
@ -56,12 +55,8 @@ const basicStore = {
} }
} }
// event = connected 初始化conversation list
// 似乎并不需要在获取conversation list的时候进行时间戳处理
MessageHubApi.fetchConversations(GWT, token).then((response) => { MessageHubApi.fetchConversations(GWT, token).then((response) => {
const conversations = response.data.conversations || [] const conversations = response.data.conversations || []
// 既然每次都是新消息在第一位那么只需要对比conversation list的长度就可以知道是否有新的会话产生。
// 消息初始化不做比对
let updateLength = 0 let updateLength = 0
if (data.event !== 'connected') { if (data.event !== 'connected') {
updateLength = conversations.length - state.conversations.length updateLength = conversations.length - state.conversations.length

View File

@ -1,7 +1,7 @@
import { backendAxios } from './axios' import { backendAxios } from './axios'
class ContentApi { class ContentApi {
static retrieve_blogs() { static retrieve_blogs(host) {
const request = backendAxios.post('/api/content/retrieve-blogs', {}, {}) const request = backendAxios.post('/api/content/retrieve-blogs', { host: host }, {})
return request return request
} }
static retrieve_blog_content(document_id) { static retrieve_blog_content(document_id) {
@ -15,16 +15,26 @@ class ContentApi {
return request return request
} }
static retrieve_about_directories() { static retrieve_about_directories(host) {
const request = backendAxios.post('/api/content/retrieve-about-directories', {}, {}) const request = backendAxios.post('/api/content/retrieve-about-directories', { host: host }, {})
return request return request
} }
static retrieve_career_directories() { static retrieve_career_directories(host) {
const request = backendAxios.post('/api/content/retrieve-career-directories', {}, {}) const request = backendAxios.post(
'/api/content/retrieve-career-directories',
{ host: host },
{}
)
return request return request
} }
static retrieve_contact_directories() { static retrieve_contact_directories(host) {
const request = backendAxios.post('/api/content/retrieve-contact-directories', {}, {}) const request = backendAxios.post(
'/api/content/retrieve-contact-directories',
{
host: host
},
{}
)
return request return request
} }
} }