bill 1 year ago
parent
commit
9a83b1aefb

+ 14 - 0
offline.html

@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <link rel="icon" type="image/svg+xml" href="/favicon.ico" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>案件信息</title>
+    <script>window.offline = true</script>
+  </head>
+  <body>
+    <div id="app"></div>
+    <script type="module" src="/src/main.ts"></script>
+  </body>
+</html>

File diff suppressed because it is too large
+ 1020 - 0
public/package/data.json


BIN
public/package/resource/caseExtractDetail.doc


BIN
public/package/resource/caseInquest.doc


+ 0 - 1
src/api/floder.ts

@@ -13,7 +13,6 @@ export interface Floder {
 export type Floders = Floder[]
 
 addUnsetResErrorURLS('/fusion-xj/caseInquest/downDocx', '/fusion-xj/caseExtractDetail/downDocx')
-
 export const fetchFloders = async () => {
   const floders = await axios.get<Floders>(FLODER_LIST, { params: { caseId: params.caseId } })
   const otherFloders = [{

+ 2 - 3
src/api/instance.ts

@@ -1,12 +1,11 @@
 import { axiosFactory } from './setup'
 import { Message } from 'bill/index'
-import { showLoad, hideLoad } from '@/utils'
+import { showLoad, hideLoad } from '@/utils/loading'
 import * as URL from './constant'
 import { ResCode, ResCodeDesc } from './constant'
-import { appBackRoot, appType, baseURL, params } from '@/env'
+import { appBackRoot, baseURL, params } from '@/env'
 
 const instance = axiosFactory()
-
 export const {
   axios,
   addUnsetTokenURLS,

+ 77 - 0
src/api/offline.ts

@@ -0,0 +1,77 @@
+import { AxiosInstance } from "axios";
+import Axios from 'axios'
+
+const data: {[key in string]: any} = {}
+Axios.get('/package/data.json', {headers: { Accept: "application/json"}}).then(res => {
+  Object.assign(data, res.data)
+})
+
+// 流接口
+const files = {
+  '/fusion-xj/caseExtractDetail/downDocx': '/package/resource/caseExtractDetail.doc',
+  '/fusion-xj/caseInquest/downDocx': '/package/resource/caseInquest.doc',
+} as any
+
+export const setOfflineAxios = (axios: AxiosInstance) => {
+  // 添加请求拦截器
+  axios.interceptors.request.use(
+    async function (config) {
+      if (config.url! in data) {
+        throw {
+          isFakeResponse: true,
+            config,
+            response: {
+              data: data[config.url!],
+              status: 200,
+              statusText: 'OK',
+              headers: {},
+              config: config,
+            }
+        }
+      } else if (files[config.url!]) {
+        const res = await Axios.get(files[config.url!], {responseType: 'blob'})
+        throw {
+          isFakeResponse: true,
+          response: {
+            data: res.data,
+            status: 200,
+            statusText: 'OK',
+            headers: {},
+            config: config,
+          },
+        }
+      } else {
+        console.error(config.url, '未在离线包中!')
+      }
+      return config
+    },
+    function (error) {
+      // 对请求错误做些什么
+      return Promise.reject(error);
+    }
+  );
+
+
+  // 添加响应拦截器
+  axios.interceptors.response.use(
+    function (response) {
+      if (!files.includes(response.config.url!)) {
+        console.error(response.config.url, '正在添加到离线包中!')
+        data[response.config.url!] = response.data
+      }
+      // 对响应数据做点什么
+      return response;
+    },
+    err => {
+      console.log(err)
+      if (err.isFakeResponse) {
+        return Promise.resolve(err.response);
+      }
+    }
+  );
+
+}
+
+(window as any).proxyData = () => {
+  console.log(JSON.stringify(data))
+};

+ 7 - 3
src/api/setup.ts

@@ -1,7 +1,8 @@
 import Axios from 'axios'
 import { ResCode } from './constant'
 
-import type { AxiosResponse, AxiosRequestConfig } from 'axios'
+import type { AxiosResponse, AxiosRequestConfig, AxiosInstance } from 'axios'
+import { setOfflineAxios } from './offline'
 
 export type ResErrorHandler = <D, T extends ResData<D>>(response: AxiosResponse<T>, data?: T) => void
 export type ReqErrorHandler = <T>(err: Error, response: AxiosRequestConfig<T>) => void
@@ -11,8 +12,7 @@ export type Hook = {
   after?: (config: AxiosRequestConfig) => void
 }
 
-export const axiosFactory = () => {
-  const axiosRaw = Axios.create()
+export const axiosFactory = (axiosRaw: AxiosInstance = Axios.create()) => {
   const axiosConfig = {
     token: localStorage.getItem('fuseCodeToken'),
     unTokenSet: [] as string[],
@@ -24,6 +24,10 @@ export const axiosFactory = () => {
     hook: [] as Hook[]
   }
 
+  if ((window as any).offline) {
+    setOfflineAxios(axiosRaw)
+  }
+
 
 
   type AxiosConfig = typeof axiosConfig

+ 6 - 2
src/main.ts

@@ -3,7 +3,7 @@ import './style.scss'
 import App from './app.vue'
 import Components from 'bill/index'
 import router from './router'
-import { appStyleImport, appType, params } from '@/env'
+import { appStyleImport, params } from '@/env'
 import { addHook, addUnsetTokenURLS, delHook, delUnsetTokenURLS } from '@/api'
 import { currentLayout, RoutesName } from './router';
 import * as URL from '@/api/constant'
@@ -40,7 +40,11 @@ watchEffect((onCleanup) => {
           URL.FLODER_LIST,
           URL.MODEL_SIGN,
           URL.CASE_INFO,
-          URL.AUTH_PWD
+          URL.AUTH_PWD,
+          '/fusion-xj/caseInquest/info',
+          '/fusion-xj/caseExtractDetail/info',
+          '/fusion-xj/caseInquest/downDocx',
+          '/fusion-xj/caseExtractDetail/downDocx'
         ]
       : [URL.AUTH_PWD]