mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-07 18:06:46 +08:00
517 lines
11 KiB
JavaScript
517 lines
11 KiB
JavaScript
import {isRef, reactive, ref, toRefs, unref, watch, watchEffect} from "vue";
|
|
import {getCookieForName, setCookie, throttle} from "@/api/method";
|
|
import JSONBigInt from "json-bigint";
|
|
import router from "@/router";
|
|
import {message} from "ant-design-vue";
|
|
import {REFRESH_TOKEN, VALIDATE_TOKEN} from "@/api/apis";
|
|
import {REFRESH_TOKEN_API} from "@/api/ThirdApi";
|
|
|
|
const JSONBigIntStr = JSONBigInt({ storeAsString: true });
|
|
|
|
export function useBoeApiAuditPage(_url, params = {}) {
|
|
return useBoeApiPage(_url, params, {
|
|
init: true,
|
|
result: (res) => res.result.audienceList.map((e) => ({ ...e, id: e.id + "" })),
|
|
totalPage: (res) => res.result.totalPage,
|
|
total: (res) => res.result.totalElement,
|
|
});
|
|
}
|
|
|
|
export function useBoeApiUserInfoPage(_url, params = {}) {
|
|
return useBoeApiPage(_url, params, {
|
|
init: false,
|
|
result: (res) => res.result.userInfoList,
|
|
totalPage: (res) => res.result.totalPage,
|
|
total: (res) => res.result.totalElement,
|
|
});
|
|
}
|
|
|
|
export function useBoeApiPage(_url, params = {}, config = {
|
|
init: true,
|
|
result: res => res.result,
|
|
totalPage: res => res.result.totalPage,
|
|
total: res => res.result.totalElement
|
|
}) {
|
|
|
|
const state = reactive({
|
|
data: [],
|
|
loading: false,
|
|
page: 1,
|
|
pageSize: 10,
|
|
totalPage: 0,
|
|
total: 0
|
|
});
|
|
|
|
if (isRef(params)) {
|
|
watch(params.value, () => {
|
|
fetch();
|
|
});
|
|
}
|
|
|
|
if (isRef(_url)) {
|
|
watchEffect(fetch);
|
|
} else {
|
|
fetch();
|
|
}
|
|
|
|
function fetch() {
|
|
state.loading = true;
|
|
return boeRequest(unref(_url), unref(params)).then(r => {
|
|
state.data = config.result(r);
|
|
state.totalPage = config.totalPage(r);
|
|
state.total = config.total(r);
|
|
state.loading = false;
|
|
state.page = params.page;
|
|
});
|
|
}
|
|
|
|
function reset() {
|
|
state.data = [];
|
|
state.loading = false;
|
|
state.page = 1;
|
|
state.totalPage = 0;
|
|
state.total = 0;
|
|
}
|
|
|
|
config.init && fetch();
|
|
return {
|
|
...toRefs(state),
|
|
fetch,
|
|
reset
|
|
};
|
|
}
|
|
|
|
// export function useBoeApi(_url, params = {}, config = {
|
|
// init: true,
|
|
// result: res => res.result,
|
|
// }) {
|
|
|
|
// const state = reactive({
|
|
// data: [],
|
|
// loading: false,
|
|
// });
|
|
// watch(() => params, () => {
|
|
// fetch();
|
|
// });
|
|
|
|
// function fetch() {
|
|
// state.loading = true;
|
|
// return boeRequest(_url, params).then(r => {
|
|
// state.data = config.result(r);
|
|
// state.loading = false;
|
|
// });
|
|
// }
|
|
|
|
// config.init && fetch();
|
|
// return {
|
|
// ...toRefs(state),
|
|
// fetch,
|
|
// };
|
|
// }
|
|
|
|
// export function useBoeUserListPage(_url, params = {}, init = true) {
|
|
|
|
// const state = reactive({
|
|
// data: [],
|
|
// loading: false,
|
|
// total: 0,
|
|
// totalPage: 0,
|
|
// page: 1,
|
|
// ...params
|
|
// });
|
|
|
|
// watch(() => params.keyword, throttle(fetch, 600));
|
|
// watch(() => params.page, fetch);
|
|
|
|
// function fetch() {
|
|
// state.loading = true;
|
|
// if (!params.keyword) {
|
|
// state.loading = false;
|
|
// return;
|
|
// }
|
|
// return boeRequest(_url, params).then(r => {
|
|
// state.data = params.page === 1 ? r.result.userInfoList : [...state.data, ...r.result.userInfoList];
|
|
// state.totalPage = r.result.totalPage;
|
|
// state.total = r.result.totalElement;
|
|
// state.loading = false;
|
|
// });
|
|
// }
|
|
|
|
// init && fetch();
|
|
// return {
|
|
// ...toRefs(state),
|
|
// fetch,
|
|
// };
|
|
// }
|
|
export function useNewRowsPageNoInit(_url, params) {
|
|
const state = reactive({
|
|
data: [],
|
|
total: 1,
|
|
pageNo: 1,
|
|
pages: 1,
|
|
loading: false
|
|
});
|
|
|
|
function reset() {
|
|
state.data = [];
|
|
state.loading = false;
|
|
}
|
|
|
|
function fetch() {
|
|
state.loading = true;
|
|
return request(unref(_url), unref(params)).then(r => {
|
|
state.data = r.data.list;
|
|
state.total = r.data.total;
|
|
state.loading = false;
|
|
});
|
|
}
|
|
|
|
return {
|
|
...toRefs(state),
|
|
fetch,
|
|
reset,
|
|
};
|
|
}
|
|
export function useRowsPageNoInit(_url, params) {
|
|
const state = reactive({
|
|
data: [],
|
|
total: 1,
|
|
current: 1,
|
|
pages: 1,
|
|
loading: false
|
|
});
|
|
|
|
function reset() {
|
|
state.data = [];
|
|
state.loading = false;
|
|
}
|
|
|
|
function fetch() {
|
|
state.loading = true;
|
|
return request(unref(_url), unref(params)).then(r => {
|
|
state.data = r.data.rows || r.data.records;
|
|
state.current = r.data.current || r.data.current;
|
|
state.pages = r.data.pages;
|
|
state.total = r.data.total;
|
|
state.loading = false;
|
|
});
|
|
}
|
|
|
|
return {
|
|
...toRefs(state),
|
|
fetch,
|
|
reset,
|
|
};
|
|
}
|
|
|
|
export function useRowsPage(_url, params, init = true) {
|
|
|
|
const state = reactive({
|
|
data: [],
|
|
total: 1,
|
|
current: 1,
|
|
pages: 1,
|
|
loading: false
|
|
});
|
|
|
|
if (isRef(params)) {
|
|
watch(params.value, () => {
|
|
fetch();
|
|
});
|
|
}
|
|
|
|
if (isRef(_url)) {
|
|
watchEffect(fetch);
|
|
} else {
|
|
init && fetch();
|
|
}
|
|
|
|
function reset() {
|
|
state.data = [];
|
|
state.loading = false;
|
|
}
|
|
|
|
function fetch() {
|
|
state.loading = true;
|
|
return request(unref(_url), unref(params)).then(r => {
|
|
state.data = r.data.rows;
|
|
state.current = r.data.current;
|
|
state.pages = r.data.pages;
|
|
state.total = r.data.total;
|
|
state.loading = false;
|
|
});
|
|
}
|
|
|
|
return {
|
|
...toRefs(state),
|
|
fetch,
|
|
reset,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 分页只返回 total 无分页信息
|
|
* @param _url
|
|
* @param params
|
|
* @param init
|
|
* @param listing
|
|
*/
|
|
export function useTotalPage(_url, params, init = true,listing = false) {
|
|
|
|
const state = reactive({
|
|
data: [],
|
|
total: 1,
|
|
current: 1,
|
|
pages: 1,
|
|
pageNo: 1,
|
|
pageSize: 10,
|
|
loading: false
|
|
});
|
|
|
|
if (isRef(params) && listing) {
|
|
watch(params.value, () => {
|
|
fetch();
|
|
});
|
|
}
|
|
|
|
if (isRef(_url)) {
|
|
watchEffect(fetch);
|
|
} else {
|
|
init && fetch();
|
|
}
|
|
|
|
function reset() {
|
|
state.data = [];
|
|
state.loading = false;
|
|
}
|
|
|
|
function fetch() {
|
|
state.loading = true;
|
|
return request(unref(_url), unref(params)).then(r => {
|
|
state.data = r.data.list;
|
|
state.total = r.data.total;
|
|
state.loading = false;
|
|
});
|
|
}
|
|
|
|
return {
|
|
...toRefs(state),
|
|
fetch,
|
|
reset,
|
|
};
|
|
}
|
|
export function usePage(_url, params, init = true,listing = false) {
|
|
|
|
const state = reactive({
|
|
data: [],
|
|
total: 1,
|
|
current: 1,
|
|
pages: 1,
|
|
loading: false
|
|
});
|
|
|
|
if (isRef(params) && listing) {
|
|
watch(params.value, () => {
|
|
fetch();
|
|
});
|
|
}
|
|
|
|
if (isRef(_url)) {
|
|
watchEffect(fetch);
|
|
} else {
|
|
init && fetch();
|
|
}
|
|
|
|
function reset() {
|
|
state.data = [];
|
|
state.loading = false;
|
|
}
|
|
|
|
function fetch() {
|
|
state.loading = true;
|
|
return request(unref(_url), unref(params)).then(r => {
|
|
state.data = r.data.records;
|
|
state.current = r.data.current;
|
|
state.pages = r.data.pages;
|
|
state.total = r.data.total;
|
|
state.loading = false;
|
|
});
|
|
}
|
|
|
|
return {
|
|
...toRefs(state),
|
|
fetch,
|
|
reset,
|
|
};
|
|
}
|
|
export function useThrottlePage(_url, params = {}, init = true) {
|
|
|
|
const state = reactive({
|
|
data: [],
|
|
loading: false,
|
|
total: 0,
|
|
totalPage: 0,
|
|
page: 1,
|
|
pageNo: 1,
|
|
...params
|
|
});
|
|
|
|
watch(() => params.keyword, throttle(fetch, 600));
|
|
watch(() => params.page, fetch);
|
|
|
|
function fetch() {
|
|
state.loading = true;
|
|
if (!params.keyword) {
|
|
state.loading = false;
|
|
return;
|
|
}
|
|
return request(_url, params).then(r => {
|
|
state.data = params.pageNo === 1 ? r.data.list : [...state.data, ...r.data.list];
|
|
state.totalPage = r.data.total/10 || 1;
|
|
state.total = r.data.total;
|
|
state.loading = false;
|
|
}).catch(err => {
|
|
state.loading = false;
|
|
})
|
|
}
|
|
|
|
init && fetch();
|
|
return {
|
|
...toRefs(state),
|
|
fetch,
|
|
};
|
|
}
|
|
|
|
|
|
export function useRequest(_url, params, init = true) {
|
|
|
|
const data = ref({});
|
|
const loading = ref(false);
|
|
|
|
if (isRef(params)) {
|
|
watch(params.value, () => {
|
|
fetchData();
|
|
});
|
|
}
|
|
|
|
function fetchData() {
|
|
loading.value = true;
|
|
request(_url, unref(params)).then(r => {
|
|
data.value = r.data;
|
|
loading.value = false;
|
|
});
|
|
}
|
|
|
|
init && fetchData();
|
|
return {
|
|
data,
|
|
loading,
|
|
fetchData,
|
|
};
|
|
}
|
|
export function useArrayRequest(_url, params, init = true) {
|
|
|
|
const data = ref([]);
|
|
const loading = ref(false);
|
|
|
|
if (isRef(params)) {
|
|
watch(params.value, () => {
|
|
fetchData();
|
|
});
|
|
}
|
|
|
|
function fetchData() {
|
|
loading.value = true;
|
|
request(_url, unref(params)).then(r => {
|
|
data.value = r.data;
|
|
loading.value = false;
|
|
});
|
|
}
|
|
|
|
init && fetchData();
|
|
return {
|
|
data,
|
|
loading,
|
|
fetchData,
|
|
};
|
|
}
|
|
export async function boeRequest(_url, params = {}) {
|
|
const s = _url.split(" ");
|
|
let url = s[0];
|
|
const method = s[1]?.toLowerCase() || "get";
|
|
if (method === "get") {
|
|
url.includes("?") ? (url.endsWith("&") || (url += "&")) : (url += "?");
|
|
url += Object.keys(params).map(key => key + "=" + params[key]).join("&");
|
|
}
|
|
const body = method !== "get" ? s[2] === "formData" ? formatFormData(params) : params : {};
|
|
url = process.env.NODE_ENV === "development" ? url : window.location.protocol + process.env.VUE_APP_BOE_API_URL + url;
|
|
return fetch(url, {
|
|
method,
|
|
headers: {
|
|
token: getCookieForName("token"),
|
|
...method !== "get" && s[2] !== "formData" ? { "Content-Type": "application/json" } : {}
|
|
},
|
|
...method !== "get" ? { body: s[2] === "formData" ? body : JSON.stringify(body) } : {}
|
|
}).then(res => {
|
|
return res.text();
|
|
}).then(res => {
|
|
return JSONBigIntStr.parse(res);
|
|
});
|
|
}
|
|
|
|
function formatFormData(data) {
|
|
const formData = new FormData();
|
|
Object.keys(data).forEach(k => formData.append(k, data[k]));
|
|
return formData;
|
|
}
|
|
|
|
export async function request(_url, params) {
|
|
const s = _url.split(" ");
|
|
let url = s[0];
|
|
const method = s[1]?.toLowerCase() || "get";
|
|
if (method === "get") {
|
|
let paramsArray = [];
|
|
if (params) {
|
|
Object.keys(params).forEach(key => paramsArray.push(key + "=" + params[key]));
|
|
if (url.search(/\?/) === -1) {
|
|
url += "?" + paramsArray.join("&");
|
|
} else {
|
|
url += "&" + paramsArray.join("&");
|
|
}
|
|
}
|
|
}
|
|
const body = method !== "get" ? params || {} : {};
|
|
return fetch(process.env.VUE_APP_BASE_API + url, {
|
|
method,
|
|
headers: {
|
|
token: getCookieForName("token"),
|
|
...method !== "get" ? { "Content-Type": "application/json" } : {}
|
|
},
|
|
...method !== "get" ? { body: JSON.stringify(body) } : {}
|
|
}).then(res => {
|
|
return res.text();
|
|
}).then(res => {
|
|
return JSONBigIntStr.parse(res);
|
|
}).then(res => {
|
|
if (res.code === 0 || res.code === 200) {
|
|
return res;
|
|
}
|
|
if (res.code === 4 ){
|
|
return Promise.reject(res);
|
|
}
|
|
if (res.code === 1000 || res.code === 1002) {
|
|
window.location.href = process.env.VUE_APP_LOGIN_URL + encodeURIComponent(window.location.protocol + process.env.VUE_APP_BOE_API_URL + process.env.VUE_APP_BASE + router.currentRoute.value.fullPath)
|
|
localStorage.removeItem('refreshPage')
|
|
return Promise.reject(res);
|
|
}else if(res.code=== 1001){
|
|
return boeRequest(REFRESH_TOKEN_API).then((res)=>{
|
|
if(res.code===0 || res.code === 200){
|
|
return request(_url, params)
|
|
}
|
|
})
|
|
}
|
|
//刷新token
|
|
res.show ? message.error(res.msg):message.error('系统接口数据异常,请联系管理员');
|
|
return Promise.reject(res);
|
|
});
|
|
} |