diff --git a/README.md b/README.md index 2a2fad7..343abb1 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,8 @@ TypeScript cannot handle type information for `.vue` imports by default, so we r If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps: 1. Disable the built-in TypeScript Extension - 1. Run `Extensions: Show Built-in Extensions` from VSCode's command palette - 2. Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)` + 1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette + 2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)` 2. Reload the VSCode window by running `Developer: Reload Window` from the command palette. ## Customize configuration @@ -44,5 +44,3 @@ npm run build ```sh npm run lint ``` - -zmj 分支 diff --git a/src/api/talk.ts b/src/api/talk.ts new file mode 100644 index 0000000..ca397c3 --- /dev/null +++ b/src/api/talk.ts @@ -0,0 +1,22 @@ +import request from "@/utils/request/indexs"; + +/** + * 绑定scoket + */ +export const bindScoket = (data: any) => + request.post({ url: "/common/im/doBindUid", data }); +// 发送消息 +export const sendMsgApi = (data: any) => + request.post({ url: "/common/im/sendTextMsg", data }); +// 发送文件 +export const sendFileApi = (data: any) => + request.post({ url: "/common/im/sendFileMsg", data }); +// 消息列表 +export const getMsgListApi = (data: any) => + request.post({ url: "/common/im/msgList", data }); +// 片区经理id +export const getAreaManagerApi = (data: any) => + request.post({ url: "/common/im/getAreaManager", data }); +// 联系人列表 +export const getContactListApi = (data: any) => + request.post({ url: "/common/im/contactList", data }); diff --git a/src/assets/images/SP.png b/src/assets/images/SP.png new file mode 100644 index 0000000..a786f63 Binary files /dev/null and b/src/assets/images/SP.png differ diff --git a/src/assets/images/XC.png b/src/assets/images/XC.png new file mode 100644 index 0000000..e9eba65 Binary files /dev/null and b/src/assets/images/XC.png differ diff --git a/src/config/index.ts b/src/config/index.ts index efe50ec..b6d5725 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -2,11 +2,19 @@ const config = { terminal: 1, //终端 title: "后台管理系统", //网站默认标题 version: "1.6.0", //版本号 - baseUrl: `${ - import.meta.env.VITE_APP_BASE_URL - }/`, //请求接口域名 + baseUrl: `${import.meta.env.VITE_APP_BASE_URL}/`, //请求接口域名 urlPrefix: "adminapi", //请求默认前缀 timeout: 20 * 1000, //请求超时时长 }; export default config; +// const config = { +// terminal: 1, //终端 +// title: "后台管理系统", //网站默认标题 +// version: "1.6.0", //版本号 +// baseUrl: `https://worker-task.lihaink.cn`, //请求接口域名 +// urlPrefix: "adminapi", //请求默认前缀 +// timeout: 20 * 1000, //请求超时时长 +// }; + +// export default config; diff --git a/src/utils/request/indexs.ts b/src/utils/request/indexs.ts new file mode 100644 index 0000000..530f736 --- /dev/null +++ b/src/utils/request/indexs.ts @@ -0,0 +1,131 @@ +import { merge } from "lodash"; +import configs from "@/config"; +import { Axios } from "./axios"; +import { + ContentTypeEnum, + RequestCodeEnum, + RequestMethodsEnum, +} from "@/enums/requestEnums"; +import type { AxiosHooks } from "./type"; +import { clearAuthInfo, getToken } from "../auth"; +import feedback from "../feedback"; +import NProgress from "nprogress"; +import { AxiosError, type AxiosRequestConfig } from "axios"; +import router from "@/router"; +import { PageEnum } from "@/enums/pageEnum"; + +// 处理axios的钩子函数 +const axiosHooks: AxiosHooks = { + requestInterceptorsHook(config) { + NProgress.start(); + const { withToken, isParamsToData } = config.requestOptions; + const params = config.params || {}; + const headers = config.headers || {}; + + // 添加token + if (withToken) { + const token = getToken(); + headers.token = token; + } + // POST请求下如果无data,则将params视为data + if ( + isParamsToData && + !Reflect.has(config, "data") && + config.method?.toUpperCase() === RequestMethodsEnum.POST + ) { + config.data = params; + config.params = {}; + } + config.headers = headers; + return config; + }, + requestInterceptorsCatchHook(err) { + NProgress.done(); + return err; + }, + async responseInterceptorsHook(response) { + NProgress.done(); + const { isTransformResponse, isReturnDefaultResponse } = + response.config.requestOptions; + + //返回默认响应,当需要获取响应头及其他数据时可使用 + if (isReturnDefaultResponse) { + return response; + } + // 是否需要对数据进行处理 + if (!isTransformResponse) { + return response.data; + } + const { code, data, show, msg } = response.data; + switch (code) { + case RequestCodeEnum.SUCCESS: + if (show) { + msg && feedback.msgSuccess(msg); + } + return data; + case RequestCodeEnum.FAIL: + if (show) { + msg && feedback.msgError(msg); + } + return Promise.reject(data); + case RequestCodeEnum.LOGIN_FAILURE: + clearAuthInfo(); + router.push(PageEnum.LOGIN); + return Promise.reject(); + case RequestCodeEnum.OPEN_NEW_PAGE: + window.location.href = data.url; + return data; + default: + return data; + } + }, + responseInterceptorsCatchHook(error) { + NProgress.done(); + if (error.code !== AxiosError.ERR_CANCELED) { + error.message && feedback.msgError(error.message); + } + return Promise.reject(error); + }, +}; + +const defaultOptions: AxiosRequestConfig = { + //接口超时时间 + timeout: configs.timeout, + // 基础接口地 + baseURL: configs.baseUrl, + + // baseURL: "http://192.168.1.11:8081/", + + //请求头 + headers: { "Content-Type": ContentTypeEnum.JSON, version: configs.version }, + // 处理 axios的钩子函数 + axiosHooks: axiosHooks, + // 每个接口可以单独配置 + requestOptions: { + // 是否将params视为data参数,仅限post请求 + isParamsToData: true, + //是否返回默认的响应 + isReturnDefaultResponse: false, + // 需要对返回数据进行处理 + isTransformResponse: true, + // 接口拼接地址 + urlPrefix: "", + // 忽略重复请求 + ignoreCancelToken: false, + // 是否携带token + withToken: true, + // 开启请求超时重新发起请求请求机制 + isOpenRetry: true, + // 重新请求次数 + retryCount: 2, + }, +}; + +function createAxios(opt?: Partial) { + return new Axios( + // 深度合并 + merge(defaultOptions, opt || {}) + ); +} +const request = createAxios(); +export default request; diff --git a/src/views/business/index.vue b/src/views/business/index.vue new file mode 100644 index 0000000..9454242 --- /dev/null +++ b/src/views/business/index.vue @@ -0,0 +1,686 @@ + + + + + \ No newline at end of file