mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/student-h5.git
synced 2025-12-06 09:26:46 +08:00
172 lines
5.5 KiB
JavaScript
172 lines
5.5 KiB
JavaScript
import router from "@/router";
|
|
import {reactive, toRefs, watch} from "vue";
|
|
import axios from 'axios';
|
|
import {delCookie, getCookie} from "@/api/utils";
|
|
import JSONBigInt from 'json-bigint';
|
|
import {ElMessageBox} from 'element-plus'
|
|
|
|
const JSONBigIntStr = JSONBigInt({ storeAsString: true });
|
|
|
|
|
|
export function usePage(_url, param, callback) {
|
|
|
|
const state = reactive({
|
|
data: {},
|
|
loading: false,
|
|
total: 0,
|
|
size: 10,
|
|
current: 1,
|
|
params: { pageNo: 1, pageSize: 10, ...param }
|
|
})
|
|
|
|
watch(param, () => {
|
|
state.params = { ...state.params, ...param }
|
|
fetchData()
|
|
})
|
|
|
|
function fetchData() {
|
|
state.loading = true
|
|
request(_url, state.params).then(r => {
|
|
state.params.pageNo === 1 ? (state.data = (r.data.records || r.data.rows)) : (state.data = [...state.data, ...(r.data.records || r.data.rows)])
|
|
state.size = r.data.size
|
|
state.total = r.data.total
|
|
state.current = r.data.current
|
|
state.loading = false
|
|
callback(r)
|
|
})
|
|
}
|
|
|
|
fetchData()
|
|
return {
|
|
...toRefs(state),
|
|
fetchData,
|
|
};
|
|
}
|
|
|
|
export function useRequest(_url, params = {}, callback) {
|
|
|
|
const state = reactive({
|
|
data: {},
|
|
loading: false,
|
|
|
|
})
|
|
|
|
watch(params, () => {
|
|
fetchData()
|
|
})
|
|
|
|
function fetchData() {
|
|
state.loading = true
|
|
request(_url, params).then(r => {
|
|
state.data = r.data
|
|
state.loading = false
|
|
callback && callback(r)
|
|
})
|
|
}
|
|
|
|
fetchData()
|
|
return {
|
|
...toRefs(state),
|
|
fetchData,
|
|
};
|
|
}
|
|
|
|
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 axios({
|
|
url,
|
|
method,
|
|
headers: {
|
|
'token': getCookie('token'),
|
|
...method !== 'get' ? { 'Content-Type': 'application/json' } : {}
|
|
},
|
|
baseURL: import.meta.env.VITE_BASE_API,
|
|
...method !== 'get' ? { data: JSON.stringify(body) } : {}
|
|
}).then(resp => resp.data).then(response => {
|
|
if (response.code !== 200 && response.code !== 0) {
|
|
if (response.code === 1000) {
|
|
delCookie();
|
|
(import.meta.env.MODE === 'development' || import.meta.env.MODE === 'test') ? router.push({ path: '/login', query: { returnUrl: router.currentRoute.value.fullPath } }) : window.open(window.location.protocol + import.meta.env.VITE_BASE_LOGIN_URL + encodeURIComponent(window.location.protocol + import.meta.env.VITE_BOE_BASE_URL + import.meta.env.VITE_BASE + router.currentRoute.value.fullPath), '_top')
|
|
}
|
|
else if (response.code === 2001) {
|
|
ElMessageBox.alert('抱歉,您不再本次参训名单中,请您联系管理员', '提示', {
|
|
confirmButtonText: '确定',
|
|
callback: () => router.push({ path: '/FaceTeachSignUp', query: { courseId: router.currentRoute.value.query.courseId, type: 3 } })
|
|
})
|
|
}
|
|
else if (response.code === 2002) router.push({ path: '/FaceTeachNoCommon', query: { courseId: router.currentRoute.value.query.courseId, type: 3 } })
|
|
else if (response.code === 9000) router.replace({ path: '/noData'})
|
|
// if (import.meta.env.DEV && response.code === 1000) {
|
|
// router.push({path: '/login'})
|
|
// } else {
|
|
// window.open()
|
|
// response.showMsg && notification.open({
|
|
// message: response.showMsg,
|
|
// duration: 2,
|
|
// });
|
|
// }
|
|
}
|
|
return response
|
|
})
|
|
}
|
|
|
|
export async function boeRequest(_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(url, {
|
|
method,
|
|
headers: {
|
|
token: getCookie('token'),
|
|
...method !== 'get' ? { 'Content-Type': 'application/json' } : {}
|
|
},
|
|
...method !== 'get' ? { body: JSON.stringify(body) } : {}
|
|
}).then(res => {
|
|
return res.text()
|
|
}).then(res => {
|
|
return JSONBigIntStr.parse(res)
|
|
})
|
|
}
|
|
|
|
const httpupload = axios.create({
|
|
baseURL: process.env.VUE_APP_BASE_API,
|
|
timeout: 10000 * 15,
|
|
headers: { "Content-Type": "multipart/form-data" },
|
|
});
|
|
|
|
export const fileUp = (data) => httpupload.post(import.meta.env.VITE_BASE_API + "/file/upload", data, {
|
|
headers: { "Content-Type": "multipart/form-data" },
|
|
});
|
|
export const videoUp = (data) => httpupload.post("/file/uploadunlimit", data, {
|
|
headers: { "Content-Type": "multipart/form-data" },
|
|
});
|
|
|