import Vue from 'vue' import { axios } from '@/utils/request' import store from '@/store' import JLoadingOne from '../components/jero/JLoadingOne' import { Modal } from 'ant-design-vue' import { ACCESS_TOKEN, TENANT_ID } from '@/store/mutation-types' const showDrawer = {} const DrawerConstructor = Vue.extend(JLoadingOne) let currentMsg const initInstance = () => { currentMsg = new DrawerConstructor({}) document.body.appendChild(currentMsg.$mount().$el) } let index = { showDrawer(options) { if (!currentMsg) { initInstance() } if (typeof options === 'object') { Object.assign(currentMsg, options) } } } const api = { user: '/mock/api/user', role: '/mock/api/role', service: '/mock/api/service', permission: '/mock/api/permission', permissionNoPager: '/mock/api/permission/no-pager' } export default api //post export function postAction(url, parameter) { return axios({ url: url, method: 'post', data: parameter }) } //post method= {post | put} export function httpAction(url, parameter, method) { return axios({ url: url, method: method, data: parameter }) } //put export function putAction(url, parameter) { return axios({ url: url, method: 'put', data: parameter }) } //get export function getAction(url, parameter) { return axios({ url: url, method: 'get', params: parameter }) } //deleteAction export function deleteAction(url, parameter) { return axios({ url: url, method: 'delete', params: parameter }) } export function getUserList(parameter) { return axios({ url: api.user, method: 'get', params: parameter }) } export function getRoleList(parameter) { return axios({ url: api.role, method: 'get', params: parameter }) } export function getServiceList(parameter) { return axios({ url: api.service, method: 'get', params: parameter }) } export function getPermissions(parameter) { return axios({ url: api.permissionNoPager, method: 'get', params: parameter }) } // id == 0 add post // id != 0 update put export function saveService(parameter) { return axios({ url: api.service, method: parameter.id == 0 ? 'post' : 'put', data: parameter }) } /** * 下载文件 用于excel导出 * @param url * @param parameter * @returns {*} */ export function downFile(url, parameter) { return axios({ url: url, params: parameter, method: 'get', responseType: 'blob' }) } export function downFilePost(url, parameter) { return axios({ url: url, data: parameter, method: 'post', responseType: 'blob' }) } /** * 下载文件 * @param url 文件路径 * @param fileName 文件名 * @param parameter * @returns {*} */ export function downloadFile(url, fileName, parameter, callback) { let langCn = localStorage.language // 默认中文 let isTrue if (langCn == 'en-us') { isTrue = true } else if (langCn == 'zh-cn') { isTrue = false } index.showDrawer({ loading: true, isTrue: isTrue }) return downFile(url, parameter).then((data) => { let fileReader = new FileReader() fileReader.onload = function(event) { try { let jsonData = JSON.parse(event.target.result) if (jsonData.message.includes('token')) { index.showDrawer({ loading: false, isTrue: isTrue }) Modal.error({ title: '登录已过期', content: '很抱歉,登录已过期,请重新登录', okText: '重新登录', mask: false, onOk: () => { store.dispatch('Logout').then(() => { Vue.ls.remove(ACCESS_TOKEN) try { let path = window.document.location.pathname if (path != '/' && path.indexOf('/user/login') == -1) { window.location.reload() } } catch (e) { window.location.reload() } }) } }) } else { if (!jsonData.success) { index.showDrawer({ loading: false, isTrue: isTrue }) Vue.prototype['$message'].warning(jsonData.message) } } } catch (e) { if (!data || data.size === 0) { index.showDrawer({ loading: false, isTrue: isTrue }) Vue.prototype['$message'].warning('文件下载失败') return } if (typeof window.navigator.msSaveBlob !== 'undefined') { window.navigator.msSaveBlob(new Blob([data]), fileName) } else { let url = window.URL.createObjectURL(new Blob([data])) let link = document.createElement('a') link.style.display = 'none' link.href = url link.setAttribute('download', fileName) document.body.appendChild(link) link.click() document.body.removeChild(link) //下载完成移除元素 window.URL.revokeObjectURL(url) //释放掉blob对象 } index.showDrawer({ loading: false, isTrue: isTrue }) callback && callback() } } fileReader.readAsText(data) }) } export function downloadFilePost(url, fileName, parameter, callback) { let langCn = localStorage.language // 默认中文 let isTrue if (langCn == 'en-us') { isTrue = true } else if (langCn == 'zh-cn') { isTrue = false } index.showDrawer({ loading: true, isTrue: isTrue }) return downFilePost(url, parameter).then((data) => { let fileReader = new FileReader() fileReader.onload = function(event) { try { let jsonData = JSON.parse(event.target.result) if (jsonData.message.includes('token')) { index.showDrawer({ loading: false, isTrue: isTrue }) Modal.error({ title: '登录已过期', content: '很抱歉,登录已过期,请重新登录', okText: '重新登录', mask: false, onOk: () => { store.dispatch('Logout').then(() => { Vue.ls.remove(ACCESS_TOKEN) try { let path = window.document.location.pathname if (path != '/' && path.indexOf('/user/login') == -1) { window.location.reload() } } catch (e) { window.location.reload() } }) } }) } else { if (!jsonData.success) { index.showDrawer({ loading: false, isTrue: isTrue }) Vue.prototype['$message'].warning(jsonData.message) } } } catch (e) { if (!data || data.size === 0) { Vue.prototype['$message'].warning('文件下载失败') return } if (typeof window.navigator.msSaveBlob !== 'undefined') { window.navigator.msSaveBlob(new Blob([data]), fileName) } else { let url = window.URL.createObjectURL(new Blob([data])) let link = document.createElement('a') link.style.display = 'none' link.href = url link.setAttribute('download', fileName) document.body.appendChild(link) link.click() document.body.removeChild(link) //下载完成移除元素 window.URL.revokeObjectURL(url) //释放掉blob对象 } index.showDrawer({ loading: false, isTrue: isTrue }) callback && callback() } } fileReader.readAsText(data) }) } /** * 文件上传 用于富文本上传图片 * @param url * @param parameter * @returns {*} */ export function uploadAction(url, parameter) { return axios({ url: url, data: parameter, method: 'post', headers: { 'Content-Type': 'multipart/form-data' // 文件上传 } }) } /** * 获取文件服务访问路径 * @param avatar * @param subStr * @returns {*} */ export function getFileAccessHttpUrl(avatar, subStr) { if (!subStr) subStr = 'http' try { if (avatar && avatar.startsWith(subStr)) { return avatar } else { if (avatar && avatar.length > 0 && avatar.indexOf('[') == -1) { return window._CONFIG['staticDomainURL'] + '/' + avatar } } } catch (err) { return } }