import { service } from '~/assets/ts/api/share';
|
import { AxiosResponse } from 'axios';
|
import { AppointmentDetail } from '../models/AppointmentDetail';
|
import { ConsultantLoginInfo } from '../models/ConsultantLoginInfo';
|
import _ from 'lodash';
|
import { UserSetting } from '../models/account.model';
|
import { Consultant } from '~/assets/ts/models/consultant.model';
|
|
// 顧客登入(TODO: OTP認證開發前 暫時使用)
|
export function login(user: any) {
|
return service.post('/authenticate', user)
|
}
|
|
// 顧客登入-發送OTP
|
export function sendOtp(loginInfo: LoginRequest) {
|
return service.post<OtpInfo>('/otp/sendOtp', loginInfo).then(res => res.data)
|
}
|
|
// 顧客登入-驗證otp並登入
|
export function loginVerify(loginVerify: LoginVerify) {
|
return service.post('/otp/verify', loginVerify)
|
}
|
|
// 顧客註冊
|
export function register(registerInfo: RegisterInfo) {
|
return service.post('/otp/register', registerInfo)
|
}
|
|
// 推薦保險顧問
|
export function recommend() {
|
return service.get<Consultant[]>('/consultant/recommend')
|
.then(res => res.data);
|
}
|
|
// 我的顧問清單
|
export function getFavoriteConsultant() {
|
const headers = {
|
Authorization: 'Bearer ' + localStorage.getItem('id_token')
|
}
|
return service.get<Consultant[]>('/consultant/favorite', {headers})
|
.then(res => res.data);
|
}
|
|
// 快速篩選
|
export function fastQuery(data: FastQueryParams) {
|
return service.post('/consultant/fastQuery', data)
|
}
|
|
// 嚴選配對
|
export function strictQuery(data:StrictQueryParams):Promise<AxiosResponse<AgentOfStrictQuery[]>>{
|
return service.post('/consultant/strictQuery', data)
|
}
|
|
// 加入顧問
|
export function addFavoriteConsultant(agentNoList: string[]) {
|
const headers = {
|
Authorization: 'Bearer ' + localStorage.getItem('id_token')
|
}
|
return service.post('/consultant/favorite', {agentNoList}, {headers})
|
}
|
|
// 預約前詢問
|
export function appointmentDemand(data: AppointmentParams) {
|
const headers = {
|
Authorization: 'Bearer ' + localStorage.getItem('id_token')
|
}
|
return service.post('/appointment/customer/create', data, {headers})
|
}
|
|
//顧問詳細資訊
|
export function getConsultantDetail(agentNo:string){
|
return service.get('/consultant/detail', {params:{agentNo:agentNo}})
|
}
|
|
// 移除顧問
|
export function deleteConsultant(agentId: string) {
|
const headers = {
|
Authorization: 'Bearer ' + localStorage.getItem('id_token')
|
}
|
return service.delete('/consultant/favorite/'+agentId, {headers})
|
}
|
|
// 取得驗證碼圖片
|
export function getImgOfVerification():Promise<string>{
|
return service.get('/login/validate/get_img_code',{ responseType : 'arraybuffer' })
|
.then(response=>{
|
const toBase64 = window.btoa(_.reduce(new Uint8Array(response.data),(data,byte)=>data + String.fromCharCode(byte),''));
|
const imgSrc = `data:image/jpeg;base64,${toBase64}`;
|
return imgSrc;
|
});
|
}
|
|
// 驗證碼 驗證
|
export function getVerificationStatus(imgCode:string):Promise<AxiosResponse<boolean>>{
|
return service.get('/login/validate/verify_img_code/'+imgCode);
|
}
|
|
// 顧問登入
|
export function logInToConsultant(consultantDto:ConsultantLoginInfo):Promise<AxiosResponse<RequestOfLoginSuccess>>{
|
return service.post('/eService/authenticate',consultantDto);
|
}
|
|
// 取得預約單細節
|
export function getAppointmentDetail(apointmentId: number):Promise<AxiosResponse<AppointmentDetail>> {
|
const headers = {
|
Authorization: 'Bearer ' + localStorage.getItem('id_token')
|
}
|
return service.get('/appointment/getDetail/'+apointmentId, {headers})
|
}
|
|
//取得使用者帳號資訊
|
export function getUserAccountSetting() : Promise<UserSetting> {
|
const headers = {
|
Authorization: 'Bearer ' + localStorage.getItem('id_token')
|
}
|
return service.get<UserSetting>('/customer/info', {headers}).then(res => res.data);
|
}
|
|
//更新使用者帳號資訊
|
export function updateAccountSetting(params: any) : any {
|
const headers = {
|
Authorization: 'Bearer ' + localStorage.getItem('id_token')
|
}
|
return service.put('/customer/info', params ,{headers}).then(res => res.data);
|
}
|
|
//客戶進行滿意度評分
|
|
export function userReviewsConsultants(data: UserReviewsConsultantsParams) {
|
const headers = {
|
Authorization: 'Bearer ' + localStorage.getItem('id_token')
|
}
|
return service.post('/satisfaction/create', data ,{headers});
|
}
|
|
// 取消預約
|
export function cancelAppointment(appointment: number) {
|
const headers = {
|
Authorization: 'Bearer ' + localStorage.getItem('id_token')
|
}
|
return service.delete('/appointment/'+appointment ,{headers});
|
}
|
|
// 編輯預約
|
export function editAppointment(editAppointmentParams: editAppointmentParams) {
|
const headers = {
|
Authorization: 'Bearer ' + localStorage.getItem('id_token')
|
}
|
return service.put('/appointment', editAppointmentParams, {headers});
|
}
|
|
export interface FastQueryParams {
|
gender : string,
|
communicationStyles: string[],
|
avgScore : number,
|
status : string
|
}
|
|
export interface AppointmentRequests {
|
phone : string,
|
email : string,
|
contactType : string,
|
gender : string,
|
age : string,
|
job : string,
|
requirement : string[],
|
hopeContactTime: ContactTime[],
|
agentNo : string,
|
}
|
export interface ContactTime {
|
selectWeekOptions : string[],
|
selectTimesOptions: string[]
|
}
|
export interface AppointmentParams {
|
phone : string,
|
email : string,
|
contactType : string,
|
gender : string,
|
age : string,
|
job : string,
|
requirement : string,
|
hopeContactTime: string,
|
agentNo : string
|
}
|
export interface StrictQueryParams{
|
gender : string;
|
avgScore : number;
|
status : string; //phase 1 disable
|
area : string;
|
requirements : string[];
|
otherRequirement: string;
|
seniority : string;
|
popularTags : string[];
|
otherPopularTags: string;
|
}
|
export interface AgentOfStrictQuery {
|
agentNo : string;
|
name : string;
|
img : string;
|
expertise : string[];
|
avgScore : number;
|
contactStatus: null;
|
updateTime : null;
|
seniority : string;
|
new : boolean;
|
}
|
export interface RequestOfLoginSuccess{
|
id_token: string;
|
}
|
|
export interface LoginRequest {
|
/** "SMS"=手機,"EMAIL"=email */
|
loginType: string,
|
/** 若loginType填SMS則該欄帶入手機、EMAIL則帶入郵件信箱 */
|
account: string,
|
}
|
|
export interface OtpInfo {
|
/** 用於帶入otp認證時 */
|
indexKey: string,
|
/** Otp是否有成功發送 */
|
success: boolean,
|
failCode: string,
|
failReason: string,
|
}
|
|
export interface LoginVerify {
|
/** 可帶入手機或email */
|
account: string,
|
/** 由otp的api回的index key */
|
indexKey: string,
|
/** 由手機或信箱收到的認證碼 */
|
otpCode: string
|
}
|
|
export interface RegisterInfo {
|
phone?: string,
|
email?: string,
|
indexKey: string,
|
otpCode: string,
|
name: string,
|
/** "SMS":Otp發送手機,"EMAIL":Otp發email */
|
contactType: string
|
}
|
|
export interface UserReviewsConsultantsParams{
|
appointmentId:number,
|
score:number,
|
}
|
|
export interface editAppointmentParams {
|
id: number,
|
phone: string,
|
email: string,
|
contactType: string,
|
gender: string,
|
age: string,
|
job: string,
|
requirement: string,
|
hopeContactTime: string,
|
otherRequirement: null
|
}
|