保誠-保戶業務員媒合平台
劉鈞霖
2021-11-15 f4ff5a6a7156417f23302ca86896a85d2937ce6a
Merge branch 'master' of ssh://dev.pollex.com.tw:29418/pcalife/PAM
修改9個檔案
新增2個檔案
172 ■■■■■ 已變更過的檔案
PAMapp/assets/ts/api/appointment.ts 37 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/ts/api/consultant.ts 46 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/ts/api/share.ts 18 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Client/ClientCard.vue 46 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Client/ClientList.vue 2 ●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Consultant/ConsultantCard.vue 4 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/index.vue 7 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/myAppointmentList.vue 2 ●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/myAppointmentList/appointmentList.vue 2 ●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/myAppointmentList/contactedList.vue 2 ●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/myConsultantList.vue 6 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/ts/api/appointment.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,37 @@
import { service } from '~/assets/ts/api/share';
import { AxiosResponse } from 'axios';
// å–得所有預約清單
export function getMyAppointmentList():Promise<AxiosResponse<ClientInfo>> {
    const headers = {
        Authorization: 'Bearer ' + localStorage.getItem('id_token')
    }
    return service.get('/consultant/getMyAppointment', {headers});
}
// æ¨™è¨˜ç‚ºå·²è¯çµ¡
export function markAsContact(appointmentId: number) {
    const headers = {
        Authorization: 'Bearer ' + localStorage.getItem('id_token')
    }
    return service.post('/appointment/markAsContacted/'+appointmentId, undefined, {headers})
}
export interface ClientInfo {
    id: number,
    phone: string,
    email: string,
    contactType: string,
    gender: string,
    age: string,
    job: string,
    requirement: string,
    communicateStatus: string,
    hopeContactTime: string,
    otherRequirement: string,
    appointmentDate: Date,
    agentNo: string,
    customerId: number,
    name: string
}
PAMapp/assets/ts/api/consultant.ts
@@ -1,24 +1,5 @@
import axios from 'axios';
import { AxiosRequestConfig, AxiosError, AxiosResponse } from 'axios';
import { MessageBox } from 'element-ui';
import { functionsIn } from 'lodash';
import Router from 'vue-router';
export const service = axios.create({
    baseURL: process.env.BASE_URL
})
service.interceptors.request.use(function (config: AxiosRequestConfig) {
    return config;
}, function (error: AxiosError) {
    return Promise.reject(error);
});
service.interceptors.response.use(function (response: AxiosResponse) {
    return response;
}, function (error: AxiosError) {
    return Promise.reject(error);
});
import { service } from '~/assets/ts/api/share';
import { AxiosResponse } from 'axios';
// é¡§å®¢ç™»å…¥(TODO: OTP認證開發前 æš«æ™‚使用)
export function login(user: any) {
@@ -69,12 +50,12 @@
    return service.get('/consultant/detail', {params:{agentNo:agentNo}})
}
// å–得所有預約清單
export function getMyAppointmentList():Promise<AxiosResponse<ClientInfo>> {
// ç§»é™¤é¡§å•
export function deleteConsultant(agentId: string) {
    const headers = {
        Authorization: 'Bearer ' + localStorage.getItem('id_token')
    }
    return service.get('/consultant/getMyAppointment', {headers});
    return service.delete('/consultant/favorite/'+agentId, {headers})
}
// å¿˜è¨˜å¯†ç¢¼ç¶²å€
@@ -159,20 +140,3 @@
    new:           boolean;
}
export interface ClientInfo {
    id: number,
    phone: string,
    email: string,
    contactType: string,
    gender: string,
    age: string,
    job: string,
    requirement: string,
    communicateStatus: string,
    hopeContactTime: string,
    otherRequirement: string,
    appointmentDate: Date,
    agentNo: string,
    customerId: number,
    name: string
}
PAMapp/assets/ts/api/share.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,18 @@
import axios from 'axios';
import { AxiosRequestConfig, AxiosError, AxiosResponse } from 'axios';
export const service = axios.create({
    baseURL: process.env.BASE_URL
})
service.interceptors.request.use(function (config: AxiosRequestConfig) {
    return config;
}, function (error: AxiosError) {
    return Promise.reject(error);
});
service.interceptors.response.use(function (response: AxiosResponse) {
    return response;
}, function (error: AxiosError) {
    return Promise.reject(error);
});
PAMapp/components/Client/ClientCard.vue
@@ -54,11 +54,12 @@
                <p>性別:{{client.gender === 'male' ? '男性' : '女性'}}</p>
                <p>年齡:{{client.age}}</p>
                <p>職業:{{client.job}}</p>
                <p>需求:{{client.requirements}}</p>
                <p>連絡時段一:{{hopeContactTime}}</p>
                <p>需求:{{client.requirement.replace(',', '、')}}</p>
                <p v-for="(item, index) in hopeContactTime" :key="index">連絡時段{{index + 1 | formatNumber}}:{{item}}</p>
                <div class="mt-30 text--center" v-if="isReserved">
                    <el-button>標註為已連絡</el-button>
                    <el-button @click="markAppointment">標註為已連絡</el-button>
                </div>
            </div>
        </Ui-Dialog>
    </div>
@@ -66,10 +67,19 @@
<script lang="ts">
import { Vue, Component, Prop } from 'nuxt-property-decorator';
import { ClientInfo } from '~/assets/ts/api/consultant';
import { isMobileDevice } from '~/assets/ts/device';
import { ClientInfo, markAsContact } from '~/assets/ts/api/appointment';
@Component
@Component({
    filters: {
        formatNumber(index: number) {
            if (index) {
                const upperNumber = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十']
                return upperNumber[index];
            }
        }
    }
})
export default class ClientList extends Vue {
    @Prop() client!: ClientInfo;
    isVisibleDialog = false;
@@ -80,26 +90,18 @@
    }
    get hopeContactTime() {
        return this.client.hopeContactTime.slice(1, this.client.hopeContactTime.length - 1)
        const contactList = this.client.hopeContactTime.split("'").map(item => item.slice(0, item.length - 1));
        return contactList.filter(item => !!item)
    }
    get time() {
        if (this.client.appointmentDate) {
            const newDate = new Date(this.client.appointmentDate);
            const hours = newDate.getHours();
            const minutes = newDate.getMinutes();
            return `${hours} : ${minutes}`
        }
        return ''
        const formatDate = (this.$options.filters as any).formatDate(this.client.appointmentDate);
        return formatDate.split(' ')[1]
    }
    get date() {
        if (this.client.appointmentDate) {
            const newDate = new Date(this.client.appointmentDate);
            const month = newDate.getMonth();
            const date = newDate.getDate();
            return `${month} / ${date}`
        }
        return ''
        const formatDate = (this.$options.filters as any).formatDate(this.client.appointmentDate);
        return formatDate.split(' ')[0]
    }
    get isReserved() {
@@ -111,6 +113,10 @@
        this.isVisibleDialog = true;
    }
    markAppointment() {
        markAsContact(this.client.id).then(res => this.$router.go(0))
    }
}
</script>
PAMapp/components/Client/ClientList.vue
@@ -17,7 +17,7 @@
<script lang='ts'>
import { Vue, Component, Prop } from 'nuxt-property-decorator';
import { ClientInfo } from '~/assets/ts/api/consultant';
import { ClientInfo } from '~/assets/ts/api/appointment';
@Component
export default class ClientList extends Vue {
PAMapp/components/Consultant/ConsultantCard.vue
@@ -26,8 +26,8 @@
                        </div>
                        <div
                            class="delete"
                            v-if="agentInfo.contactStatus !== 'reserved'
                                || agentInfo.contactStatus !== 'contacted'"
                            v-if="agentInfo.contactStatus === 'picked'
                                || !agentInfo.contactStatus"
                            @click="removeAgent"
                        >移除</div>
                    </el-col>
PAMapp/pages/index.vue
@@ -42,7 +42,7 @@
<script lang="ts">
import { Vue, Component, State, Action } from 'nuxt-property-decorator';
import { getFavoriteFromStorage, setFavoriteToStorage } from '~/assets/ts/storageConsultant';
import { addFavoriteConsultant, Consultants } from '~/assets/ts/api/consultant';
import { addFavoriteConsultant, Consultants, deleteConsultant } from '~/assets/ts/api/consultant';
import { login, getFavoriteConsultant } from '~/assets/ts/api/consultant';
import { isLogin } from '~/assets/ts/auth';
@@ -81,12 +81,15 @@
    }
    removeAgent(agentNo: string) {
        if (!isLogin()) {
        const findIndex = this.consultantList.findIndex((item, i) => {
            return item.agentNo === agentNo;
        })
        this.consultantList.splice(findIndex, 1);
        if (!isLogin()) {
            setFavoriteToStorage(this.consultantList)
        } else {
            deleteConsultant(agentNo).then(res => this.$router.go(0))
        }
    }
}
PAMapp/pages/myAppointmentList.vue
@@ -27,7 +27,7 @@
<script lang="ts">
import { Context } from '@nuxt/types';
import { Vue, Component } from 'nuxt-property-decorator';
import { ClientInfo, getMyAppointmentList } from '~/assets/ts/api/consultant';
import { ClientInfo, getMyAppointmentList } from '~/assets/ts/api/appointment';
@Component
export default class ClientReservedList extends Vue {
PAMapp/pages/myAppointmentList/appointmentList.vue
@@ -23,7 +23,7 @@
<script lang="ts">
import { Vue, Component, Prop } from 'nuxt-property-decorator';
import { ClientInfo } from '~/assets/ts/api/consultant';
import { ClientInfo } from '~/assets/ts/api/appointment';
@Component
export default class ClientReservedList extends Vue {
PAMapp/pages/myAppointmentList/contactedList.vue
@@ -27,7 +27,7 @@
<script lang="ts">
import { Vue, Component, Prop } from 'nuxt-property-decorator';
import { ClientInfo } from '~/assets/ts/api/consultant';
import { ClientInfo } from '~/assets/ts/api/appointment';
@Component
export default class ClientContactedList extends Vue {
PAMapp/pages/myConsultantList.vue
@@ -30,7 +30,7 @@
import { Vue, Component, Watch } from 'vue-property-decorator';
import { Route } from 'vue-router/types/router.d'
import { getFavoriteFromStorage, setFavoriteToStorage } from '~/assets/ts/storageConsultant';
import { Consultants, getFavoriteConsultant } from '~/assets/ts/api/consultant';
import { Consultants, deleteConsultant, getFavoriteConsultant } from '~/assets/ts/api/consultant';
import { isLogin } from '~/assets/ts/auth';
@Component
@@ -67,10 +67,12 @@
    }
    removeAgent(agentNo: string) {
        if (!isLogin()) {
        const fintIndex = this.consultantList.findIndex(item => item.agentNo === agentNo);
        this.consultantList.splice(fintIndex, 1);
        if (!isLogin()) {
            setFavoriteToStorage(this.consultantList);
        } else {
            deleteConsultant(agentNo).then(res => this.$router.go(0))
        }
    }