@ -0,0 +1,2 @@ |
|||||
|
# VITE_BASE_URL="https://twx.igandan.org/" |
||||
|
VITE_BASE_URL="http://47.105.52.114:8083/" |
@ -0,0 +1 @@ |
|||||
|
VITE_BASE_URL="https://wx.igandan.com/" |
@ -0,0 +1,2 @@ |
|||||
|
# VITE_BASE_URL="https://twx.igandan.org/" |
||||
|
VITE_BASE_URL="http://47.105.52.114:8083/" |
@ -0,0 +1,44 @@ |
|||||
|
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. |
||||
|
|
||||
|
# dependencies |
||||
|
/node_modules |
||||
|
/.pnp |
||||
|
.pnp.js |
||||
|
|
||||
|
# testing |
||||
|
/coverage |
||||
|
|
||||
|
# next.js |
||||
|
/.next/ |
||||
|
/out/ |
||||
|
|
||||
|
# production |
||||
|
/build |
||||
|
|
||||
|
# misc |
||||
|
.DS_Store |
||||
|
*.pem |
||||
|
|
||||
|
# debug |
||||
|
npm-debug.log* |
||||
|
yarn-debug.log* |
||||
|
yarn-error.log* |
||||
|
|
||||
|
# local env files |
||||
|
.env.local |
||||
|
.env.development.local |
||||
|
.env.test.local |
||||
|
.env.production.local |
||||
|
|
||||
|
# vercel |
||||
|
.vercel |
||||
|
|
||||
|
# typescript |
||||
|
*.tsbuildinfo |
||||
|
|
||||
|
|
||||
|
# eslint |
||||
|
.eslintcache |
||||
|
|
||||
|
# stylelint |
||||
|
.stylelintcache |
@ -0,0 +1,65 @@ |
|||||
|
/* eslint-disable */ |
||||
|
/* prettier-ignore */ |
||||
|
// @ts-nocheck
|
||||
|
// noinspection JSUnusedGlobalSymbols
|
||||
|
// Generated by unplugin-auto-import
|
||||
|
export {} |
||||
|
declare global { |
||||
|
const EffectScope: typeof import('vue')['EffectScope'] |
||||
|
const computed: typeof import('vue')['computed'] |
||||
|
const createApp: typeof import('vue')['createApp'] |
||||
|
const customRef: typeof import('vue')['customRef'] |
||||
|
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] |
||||
|
const defineComponent: typeof import('vue')['defineComponent'] |
||||
|
const effectScope: typeof import('vue')['effectScope'] |
||||
|
const getCurrentInstance: typeof import('vue')['getCurrentInstance'] |
||||
|
const getCurrentScope: typeof import('vue')['getCurrentScope'] |
||||
|
const h: typeof import('vue')['h'] |
||||
|
const inject: typeof import('vue')['inject'] |
||||
|
const isProxy: typeof import('vue')['isProxy'] |
||||
|
const isReactive: typeof import('vue')['isReactive'] |
||||
|
const isReadonly: typeof import('vue')['isReadonly'] |
||||
|
const isRef: typeof import('vue')['isRef'] |
||||
|
const markRaw: typeof import('vue')['markRaw'] |
||||
|
const nextTick: typeof import('vue')['nextTick'] |
||||
|
const onActivated: typeof import('vue')['onActivated'] |
||||
|
const onBeforeMount: typeof import('vue')['onBeforeMount'] |
||||
|
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] |
||||
|
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] |
||||
|
const onDeactivated: typeof import('vue')['onDeactivated'] |
||||
|
const onErrorCaptured: typeof import('vue')['onErrorCaptured'] |
||||
|
const onMounted: typeof import('vue')['onMounted'] |
||||
|
const onRenderTracked: typeof import('vue')['onRenderTracked'] |
||||
|
const onRenderTriggered: typeof import('vue')['onRenderTriggered'] |
||||
|
const onScopeDispose: typeof import('vue')['onScopeDispose'] |
||||
|
const onServerPrefetch: typeof import('vue')['onServerPrefetch'] |
||||
|
const onUnmounted: typeof import('vue')['onUnmounted'] |
||||
|
const onUpdated: typeof import('vue')['onUpdated'] |
||||
|
const provide: typeof import('vue')['provide'] |
||||
|
const reactive: typeof import('vue')['reactive'] |
||||
|
const readonly: typeof import('vue')['readonly'] |
||||
|
const ref: typeof import('vue')['ref'] |
||||
|
const resolveComponent: typeof import('vue')['resolveComponent'] |
||||
|
const shallowReactive: typeof import('vue')['shallowReactive'] |
||||
|
const shallowReadonly: typeof import('vue')['shallowReadonly'] |
||||
|
const shallowRef: typeof import('vue')['shallowRef'] |
||||
|
const toRaw: typeof import('vue')['toRaw'] |
||||
|
const toRef: typeof import('vue')['toRef'] |
||||
|
const toRefs: typeof import('vue')['toRefs'] |
||||
|
const toValue: typeof import('vue')['toValue'] |
||||
|
const triggerRef: typeof import('vue')['triggerRef'] |
||||
|
const unref: typeof import('vue')['unref'] |
||||
|
const useAttrs: typeof import('vue')['useAttrs'] |
||||
|
const useCssModule: typeof import('vue')['useCssModule'] |
||||
|
const useCssVars: typeof import('vue')['useCssVars'] |
||||
|
const useSlots: typeof import('vue')['useSlots'] |
||||
|
const watch: typeof import('vue')['watch'] |
||||
|
const watchEffect: typeof import('vue')['watchEffect'] |
||||
|
const watchPostEffect: typeof import('vue')['watchPostEffect'] |
||||
|
const watchSyncEffect: typeof import('vue')['watchSyncEffect'] |
||||
|
} |
||||
|
// for type re-export
|
||||
|
declare global { |
||||
|
// @ts-ignore
|
||||
|
export type { Component, ComponentPublicInstance, ComputedRef, InjectionKey, PropType, Ref, VNode } from 'vue' |
||||
|
} |
@ -0,0 +1,17 @@ |
|||||
|
/* eslint-disable */ |
||||
|
/* prettier-ignore */ |
||||
|
// @ts-nocheck
|
||||
|
// Generated by unplugin-vue-components
|
||||
|
// Read more: https://github.com/vuejs/core/pull/3399
|
||||
|
export {} |
||||
|
|
||||
|
declare module 'vue' { |
||||
|
export interface GlobalComponents { |
||||
|
HelloWorld: typeof import('./src/components/HelloWorld.vue')['default'] |
||||
|
LiverDrugs: typeof import('./src/views/liver-drugs.vue')['default'] |
||||
|
LiverGuidelines: typeof import('./src/views/liver-guidelines.vue')['default'] |
||||
|
LiverTools: typeof import('./src/views/liver-tools.vue')['default'] |
||||
|
RouterLink: typeof import('vue-router')['RouterLink'] |
||||
|
RouterView: typeof import('vue-router')['RouterView'] |
||||
|
} |
||||
|
} |
@ -0,0 +1,13 @@ |
|||||
|
<!doctype html> |
||||
|
<html lang="en"> |
||||
|
<head> |
||||
|
<meta charset="UTF-8" /> |
||||
|
<link rel="icon" type="image/svg+xml" href="/vite.svg" /> |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> |
||||
|
<title><%- title %></title> |
||||
|
</head> |
||||
|
<body> |
||||
|
<div id="app"></div> |
||||
|
<script type="module" src="/src/main.js"></script> |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,14 @@ |
|||||
|
{ |
||||
|
"compilerOptions": { |
||||
|
"target": "ES6", |
||||
|
"module": "commonjs", |
||||
|
"allowSyntheticDefaultImports": true, |
||||
|
"baseUrl": "./", |
||||
|
"paths": { |
||||
|
"@/*": ["src/*"] |
||||
|
} |
||||
|
}, |
||||
|
"exclude": [ |
||||
|
"node_modules" |
||||
|
] |
||||
|
} |
@ -0,0 +1,33 @@ |
|||||
|
{ |
||||
|
"name": "wxapp-home", |
||||
|
"private": true, |
||||
|
"version": "0.0.0", |
||||
|
"type": "module", |
||||
|
"scripts": { |
||||
|
"dev": "vite", |
||||
|
"build": "vite build", |
||||
|
"test": "vite build --mode=test", |
||||
|
"preview": "vite preview" |
||||
|
}, |
||||
|
"dependencies": { |
||||
|
"@nutui/nutui": "^4.1.4", |
||||
|
"axios": "^1.5.0", |
||||
|
"reset-css": "^5.0.2", |
||||
|
"tdesign-mobile-vue": "^1.0.3", |
||||
|
"vue": "^3.3.4", |
||||
|
"vue-router": "^4.2.4", |
||||
|
"weixin-js-sdk": "^1.6.0" |
||||
|
}, |
||||
|
"devDependencies": { |
||||
|
"@types/node": "^20.4.5", |
||||
|
"@vitejs/plugin-vue": "^4.2.3", |
||||
|
"rollup-plugin-external-globals": "^0.8.0", |
||||
|
"rollup-plugin-visualizer": "^5.9.2", |
||||
|
"terser": "^5.19.1", |
||||
|
"unplugin-auto-import": "^0.16.6", |
||||
|
"unplugin-vue-components": "^0.25.1", |
||||
|
"vite": "^4.4.5", |
||||
|
"vite-plugin-compression": "^0.5.1", |
||||
|
"vite-plugin-html": "^3.2.0" |
||||
|
} |
||||
|
} |
After Width: | Height: | Size: 1.5 KiB |
@ -0,0 +1,22 @@ |
|||||
|
<template> |
||||
|
<body> |
||||
|
<router-view></router-view> |
||||
|
</body> |
||||
|
|
||||
|
</template> |
||||
|
<style> |
||||
|
body { |
||||
|
line-height: normal!important; |
||||
|
} |
||||
|
:root { |
||||
|
--font-size: 14px; |
||||
|
--font-size-title: 20px; |
||||
|
} |
||||
|
strong{ |
||||
|
font-weight: bold!important; |
||||
|
} |
||||
|
sup{ |
||||
|
vertical-align: super!important; |
||||
|
} |
||||
|
|
||||
|
</style> |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 912 B |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 889 B |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 677 B |
@ -0,0 +1,77 @@ |
|||||
|
|
||||
|
<template> |
||||
|
<nut-tabbar class="nuttabbar" @tab-switch="tabSwitch" |
||||
|
bottom active-color="#2BB5ECFF" unactive-color="rgba(0,0,0,0.24)" v-model="activee"> |
||||
|
<nut-tabbar-item |
||||
|
v-for="item in list" |
||||
|
:tab-title="item.text" |
||||
|
:to="item.to" |
||||
|
> |
||||
|
<template #icon="props"> |
||||
|
<img :src="props.active ? item.active : item.unactive" alt="" :style="{width:'24px',height:'24px'}"/> |
||||
|
</template> |
||||
|
</nut-tabbar-item> |
||||
|
</nut-tabbar> |
||||
|
</template> |
||||
|
<script setup> |
||||
|
import edu from "../assets/edu.png"; |
||||
|
import edun from "../assets/edun.png"; |
||||
|
import My from "../assets/myn.png"; |
||||
|
import SMy from "../assets/my.png"; |
||||
|
import department from '@/assets/department.png' |
||||
|
import departmentn from '@/assets/departmentn.png' |
||||
|
import interact from '@/assets/interact.png' |
||||
|
import interactn from '@/assets/interactn.png' |
||||
|
import { ref,onMounted } from 'vue'; |
||||
|
import { useRouter,onBeforeRouteUpdate } from 'vue-router' |
||||
|
const router = useRouter(); |
||||
|
const cur_path=ref(router.currentRoute.value.path) |
||||
|
// const active = (cur_path.value=='/my-tools')?ref(1):ref(0); |
||||
|
const activee = active(); |
||||
|
const list = ref([ |
||||
|
{ text: '宣教中心', active:edu,unactive:edun,to:'/education-centre',name:'/education-centre'}, |
||||
|
{ text: '科室服务', active:department,unactive: departmentn,to:'/department',name:'/department'}, |
||||
|
{ text: '健康互动', active:interact,unactive: interactn,to:'/interact',name:'/interact'}, |
||||
|
{ text: '我的', active:SMy,unactive: My,to:'/my',name:'/my'}, |
||||
|
]); |
||||
|
const tabSwitch= (item,index)=> { |
||||
|
|
||||
|
// console.log(activee); |
||||
|
} |
||||
|
function active() |
||||
|
{ |
||||
|
if(cur_path.value=='/education-centre') |
||||
|
{ |
||||
|
return ref(0); |
||||
|
} |
||||
|
else if(cur_path.value=='/department') |
||||
|
{ |
||||
|
return ref(1); |
||||
|
} |
||||
|
else if(cur_path.value=='/interact') |
||||
|
{ |
||||
|
return ref(2); |
||||
|
} |
||||
|
else if(cur_path.value=='/my') |
||||
|
{ |
||||
|
return ref(3); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
return ref(0); |
||||
|
} |
||||
|
} |
||||
|
onMounted(() => { |
||||
|
document.title = list.value[activee.value].text; |
||||
|
}); |
||||
|
</script> |
||||
|
<style> |
||||
|
.nuttabbar{ |
||||
|
--nut-tabbar-border-top: #fff; |
||||
|
--nut-tabbar-border-bottom: #ffffff; |
||||
|
--nut-tabbar-item-text-font-size:12px; |
||||
|
--nut-tabbar-box-shadow:0px -4px 16px 0px rgba(0,0,0,0.04); |
||||
|
--nut-tabbar-height:53px; |
||||
|
|
||||
|
} |
||||
|
</style> |
@ -0,0 +1,15 @@ |
|||||
|
import { createApp } from 'vue' |
||||
|
import 'reset-css' |
||||
|
import './style.css' |
||||
|
import App from './App.vue' |
||||
|
import router from "@/router/index.js" |
||||
|
import NutUI from "@nutui/nutui"; |
||||
|
import "@nutui/nutui/dist/style.css"; |
||||
|
import TDesign from 'tdesign-mobile-vue'; |
||||
|
import 'tdesign-mobile-vue/es/style/index.css'; |
||||
|
const app = createApp(App); |
||||
|
app.use(NutUI); |
||||
|
app.use(router); |
||||
|
app.use(TDesign); |
||||
|
|
||||
|
app.mount('#app') |
@ -0,0 +1,97 @@ |
|||||
|
import { createWebHashHistory, createRouter, createWebHistory } from 'vue-router'; |
||||
|
import educationCentre from "@/views/education-centre.vue" |
||||
|
import department from "@/views/department.vue" |
||||
|
import interact from "@/views/interact.vue" |
||||
|
import my from "@/views/my.vue" |
||||
|
const routes = [ |
||||
|
// {
|
||||
|
// path: '/',
|
||||
|
// name: 'home',
|
||||
|
// component: home,
|
||||
|
// children: [{ path: '', component: educationCentre },{ path: '/education-centre', component: educationCentre },{ path: '/my-drugs', namne:'my-drugs',component: myDrugs}
|
||||
|
// ]
|
||||
|
// },
|
||||
|
{ |
||||
|
path: '/', |
||||
|
redirect: '/education-centre', |
||||
|
}, |
||||
|
{ |
||||
|
path: '/education-centre', |
||||
|
name: 'education-centre', |
||||
|
component: educationCentre, |
||||
|
|
||||
|
}, |
||||
|
{ |
||||
|
path: '/department', |
||||
|
name: 'department', |
||||
|
component: department, |
||||
|
|
||||
|
}, |
||||
|
{ |
||||
|
path: '/interact', |
||||
|
name: 'interact', |
||||
|
component: interact, |
||||
|
|
||||
|
}, |
||||
|
{ |
||||
|
path: '/my', |
||||
|
name: 'my', |
||||
|
component: my, |
||||
|
|
||||
|
} |
||||
|
|
||||
|
]; |
||||
|
// const routes = [
|
||||
|
// // {
|
||||
|
// // path: '/',
|
||||
|
// // redirect: '/liver-drugs',
|
||||
|
// // },
|
||||
|
// {
|
||||
|
// path: '/',
|
||||
|
// redirect: '/home',
|
||||
|
// },
|
||||
|
// {
|
||||
|
// path: '/home',
|
||||
|
// name: 'home',
|
||||
|
// component: home,
|
||||
|
// child:[{ path: '', component: liverDrugs },
|
||||
|
// {
|
||||
|
// path: '/liver-drugs',
|
||||
|
// // name: 'liver-drugs',
|
||||
|
// component: liverDrugs,
|
||||
|
// },
|
||||
|
// { path: '/my-drugs',
|
||||
|
// // name: 'my-drugs',
|
||||
|
// component: myDrugs} ]
|
||||
|
|
||||
|
// },
|
||||
|
// {
|
||||
|
// path: '/liver-drugs',
|
||||
|
// name: 'liver-drugs',
|
||||
|
// component: liverDrugs,
|
||||
|
// },
|
||||
|
// {
|
||||
|
// path: '/liver-tools',
|
||||
|
// name: 'liver-tools',
|
||||
|
// component: liverTools,
|
||||
|
// },
|
||||
|
|
||||
|
// {
|
||||
|
// path: '/liver-guidelines',
|
||||
|
// name: 'liver-guidelines',
|
||||
|
// component: liverGuidelines,
|
||||
|
// },
|
||||
|
// {
|
||||
|
// path: '/my-drugs',
|
||||
|
// name: 'my-drugs',
|
||||
|
// component: myDrugs}
|
||||
|
|
||||
|
// ];
|
||||
|
|
||||
|
const router = createRouter({ |
||||
|
// createWebHashHistory URL 带井号
|
||||
|
// createWebHistory URL 去井号
|
||||
|
history:createWebHashHistory(), |
||||
|
routes: routes, |
||||
|
}); |
||||
|
export default router; |
@ -0,0 +1,12 @@ |
|||||
|
body{ |
||||
|
background:#fff; |
||||
|
} |
||||
|
/* @font-face { |
||||
|
font-family: "阿里巴巴普惠体 2.0 65 Medium";font-weight: 500;src: url("//at.alicdn.com/wf/webfont/sgTFboRMJU3n/JxNJC26HiA0D.woff2") format("woff2"), |
||||
|
url("//at.alicdn.com/wf/webfont/sgTFboRMJU3n/T8cUklUUIqA1.woff") format("woff"); |
||||
|
font-display: swap; |
||||
|
} */ |
||||
|
@font-face { |
||||
|
font-family: "阿里巴巴普惠体 2.0 65 Medium";font-weight: 500;src: url("Alibaba_PuHuiTi_2.0_65_Medium_65_Medium.ttf") format("ttf"), |
||||
|
|
||||
|
} |
@ -0,0 +1,31 @@ |
|||||
|
import service from './request'; |
||||
|
export function getDrugList(id,name) { |
||||
|
return service({ |
||||
|
url:'/book/drughand/getDrugList', |
||||
|
method: 'get', |
||||
|
params:{ |
||||
|
type_id:id, |
||||
|
name:name |
||||
|
} |
||||
|
|
||||
|
}) |
||||
|
} |
||||
|
export function getDrugTypeList() { |
||||
|
return service({ |
||||
|
url:'/book/drughand/getDrugTypeList', |
||||
|
method: 'get' |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
export function addCorrection(id,catalog_id,content) { |
||||
|
return service({ |
||||
|
url:'/book/drughand/addCorrection', |
||||
|
method: 'post', |
||||
|
params:{ |
||||
|
id:id, |
||||
|
catalog_id:catalog_id, |
||||
|
content:content |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
|
@ -0,0 +1,124 @@ |
|||||
|
import axios from 'axios'; |
||||
|
// create an axios instance
|
||||
|
const service = axios.create({ |
||||
|
baseURL:import.meta.env.VITE_BASE_URL, |
||||
|
timeout: 8000, |
||||
|
// withCredentials: true,
|
||||
|
headers:{ |
||||
|
'Content-Type':'application/json', |
||||
|
'Authorization':'' |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
// request interceptor
|
||||
|
service.interceptors.request.use( |
||||
|
(config) => { |
||||
|
// Store 必须在拦截器内部导入,在外部导入会显示 Pinia 未初始化
|
||||
|
// 设置请求头部 Authorization
|
||||
|
// console.log("333333");
|
||||
|
// console.log(config);
|
||||
|
|
||||
|
return config; |
||||
|
}, |
||||
|
(error) => { |
||||
|
console.error(error); |
||||
|
return Promise.reject(error); |
||||
|
} |
||||
|
); |
||||
|
|
||||
|
// response interceptor
|
||||
|
service.interceptors.response.use( |
||||
|
(response) => { |
||||
|
// console.log(response)
|
||||
|
//var Authorization_token = response.headers.Authorization;
|
||||
|
// if (Authorization_token) {
|
||||
|
// sessionStorage.setItem('token', Authorization_token); //当token快过期时,服务器会返回新token,本地刷新
|
||||
|
// }
|
||||
|
const { code, message } = response.data; |
||||
|
// console.log("code",code);
|
||||
|
if(code == 60003) |
||||
|
{ |
||||
|
let back_url = window.location.href; |
||||
|
window.location.href="https://wx.igandan.com/hcp/toLogin?back_url="+back_url; |
||||
|
// window.location.href="https://twx.igandan.org/hcp/toLogin?back_url="+back_url;
|
||||
|
} |
||||
|
else if (code == 401 || code==403 || code==405 || code==406) { |
||||
|
//Message.clear();
|
||||
|
// Message.error({
|
||||
|
// content: message,
|
||||
|
// duration: 3000
|
||||
|
// });
|
||||
|
// 重定向路由到登陆页面
|
||||
|
|
||||
|
}else if(code === 400){ |
||||
|
// Message.error({
|
||||
|
// content: '缺少参数',
|
||||
|
// duration: 3000
|
||||
|
// });
|
||||
|
}else if(code == 402){ |
||||
|
// Message.error({
|
||||
|
// content: '请求无权限',
|
||||
|
// duration: 3000
|
||||
|
// });
|
||||
|
}else if(code == 201){ |
||||
|
// Message.error({
|
||||
|
// content: '账户状态异常',
|
||||
|
// duration: 3000
|
||||
|
// });
|
||||
|
}else if(code==-1){ |
||||
|
// Message.error({
|
||||
|
// content: message,
|
||||
|
// duration: 3000
|
||||
|
// });
|
||||
|
} |
||||
|
|
||||
|
return response.data; |
||||
|
}, |
||||
|
(error) => { |
||||
|
console.log("------------------"); |
||||
|
console.log(error); |
||||
|
|
||||
|
const { code, message } = error.response.data; |
||||
|
// 如果过期则退出登录
|
||||
|
if(code == 60003) |
||||
|
{ |
||||
|
let back_url = window.location.href; |
||||
|
window.location.href="https://wx.igandan.com/hcp/toLogin?back_url="+back_url; |
||||
|
} |
||||
|
else if (code === 401 || code==403 || code==405 || code==406) { |
||||
|
// Message.error({
|
||||
|
// content: message,
|
||||
|
// duration: 3000
|
||||
|
// });
|
||||
|
// // 重定向路由到登陆页面
|
||||
|
// store.clearInfo();
|
||||
|
// window.location.href="/login";
|
||||
|
}else if(code === 400){ |
||||
|
// Message.error({
|
||||
|
// content: '缺少参数',
|
||||
|
// duration: 3000
|
||||
|
// });
|
||||
|
}else if(code === 402){ |
||||
|
// Message.error({
|
||||
|
// content: '请求无权限',
|
||||
|
// duration: 3000
|
||||
|
// });
|
||||
|
}else if(code === 201){ |
||||
|
// Message.error({
|
||||
|
// content: '账户状态异常',
|
||||
|
// duration: 3000
|
||||
|
// });
|
||||
|
}else { |
||||
|
// Message.error({
|
||||
|
// content: error.message,
|
||||
|
// duration: 3000
|
||||
|
// })
|
||||
|
} |
||||
|
return Promise.reject(message); |
||||
|
} |
||||
|
); |
||||
|
// export const imgurl='http://47.105.52.114:8085/app/';
|
||||
|
export const fromwexin='&from=wx'; |
||||
|
export const frommywexin='?from=wx'; |
||||
|
export const imgurl='https://doc.igandan.com/app/'; |
||||
|
export default service; |
@ -0,0 +1,92 @@ |
|||||
|
import wx from 'weixin-js-sdk' |
||||
|
import axios from 'axios' |
||||
|
let share = { |
||||
|
title: "", |
||||
|
desc: "", |
||||
|
link: "", |
||||
|
imgUrl: "", |
||||
|
init: function () { |
||||
|
var path = location.href.split('#')[0]; |
||||
|
var url = ""; |
||||
|
var appid = ""; |
||||
|
if (path.indexOf(".igandan.org") > 1) { |
||||
|
url = "https://tapp.igandan.org/app/manager/getSignature4bing"; |
||||
|
appid = "wx68affaa9d23528f8"; |
||||
|
} else { |
||||
|
url = "https://app.igandan.com/app/manager/getSignature4bing"; |
||||
|
appid = "wxa4132ef4701ac5e4"; |
||||
|
} |
||||
|
|
||||
|
axios.get(url, { |
||||
|
params: { |
||||
|
path: encodeURIComponent(window.location.href.split('#')[0]), |
||||
|
appid: appid |
||||
|
} |
||||
|
}).then(json => { |
||||
|
wx.config({ |
||||
|
debug: false, |
||||
|
appId: appid, |
||||
|
timestamp: json.data.timestamp, |
||||
|
nonceStr: json.data.nonceStr, |
||||
|
signature: json.data.signature, |
||||
|
jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData', 'onMenuShareTimeline', 'onMenuShareAppMessage'] |
||||
|
}); |
||||
|
}).catch((e) => { |
||||
|
console.log('获取数据失败'); |
||||
|
}); |
||||
|
wx.checkJsApi({ |
||||
|
jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData', 'onMenuShareTimeline', 'onMenuShareAppMessage'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
|
||||
|
success: function (res) { |
||||
|
console.log(res) |
||||
|
} |
||||
|
}); |
||||
|
wx.ready(function () { |
||||
|
|
||||
|
|
||||
|
wx.updateAppMessageShareData({ |
||||
|
title: share.title, |
||||
|
desc: share.desc, |
||||
|
link: share.link, |
||||
|
imgUrl: share.imgUrl, |
||||
|
success: function () {} |
||||
|
}) |
||||
|
wx.updateTimelineShareData({ |
||||
|
title: share.title, |
||||
|
desc: share.desc, |
||||
|
link: share.link, |
||||
|
imgUrl: share.imgUrl, |
||||
|
success: function () {} |
||||
|
}) |
||||
|
wx.onMenuShareTimeline({ |
||||
|
title: share.title, |
||||
|
desc: share.desc, |
||||
|
link: share.link, |
||||
|
imgUrl: share.imgUrl, |
||||
|
success: function () {} |
||||
|
}) |
||||
|
wx.onMenuShareAppMessage({ |
||||
|
title: share.title, |
||||
|
desc: share.desc, |
||||
|
link: share.link, |
||||
|
imgUrl: share.imgUrl, |
||||
|
success: function () {} |
||||
|
}) |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function WXSHARE(title, desc, link, imgUrl) { |
||||
|
share.title = title; |
||||
|
share.desc = desc; |
||||
|
share.link = link; |
||||
|
if (imgUrl == undefined || imgUrl == "") { |
||||
|
imgUrl = "https://doc.igandan.com/app/html/img/2016/20160714132557.png"; |
||||
|
} |
||||
|
share.imgUrl = imgUrl; |
||||
|
share.init(); |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
export { |
||||
|
WXSHARE |
||||
|
} |
@ -0,0 +1,13 @@ |
|||||
|
<template > |
||||
|
<TabTools></TabTools> |
||||
|
</template> |
||||
|
<script setup > |
||||
|
import { IconFont } from '@nutui/icons-vue'; |
||||
|
import { useRouter } from 'vue-router'; |
||||
|
import {WXSHARE} from '../utils/wxshare-1.6.0'; |
||||
|
const state = reactive([]); |
||||
|
|
||||
|
</script> |
||||
|
<style scoped> |
||||
|
|
||||
|
</style> |
@ -0,0 +1,60 @@ |
|||||
|
<template > |
||||
|
<div class="edu-head"> |
||||
|
<nut-image :src=edubg alt="图片描述" class="myDivd"> |
||||
|
</nut-image> |
||||
|
<div class="department"> |
||||
|
<nut-image class="dicon" width="20" height="20" :src=edu alt="图片描述" round/> |
||||
|
<div class="dtitle">首都医科大学附属友谊医院 |
||||
|
(西城院区) — 肝病中心</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<TabTools></TabTools> |
||||
|
</template> |
||||
|
<script setup > |
||||
|
import edu from "../assets/edu.png"; |
||||
|
import edubg from "../assets/edubg.png"; |
||||
|
import TabTools from '@/components/tabTools.vue'; |
||||
|
import { IconFont } from '@nutui/icons-vue'; |
||||
|
import { useRouter } from 'vue-router'; |
||||
|
import {WXSHARE} from '../utils/wxshare-1.6.0'; |
||||
|
onMounted(() => { |
||||
|
|
||||
|
}); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
</script> |
||||
|
<style scoped> |
||||
|
.edu-head{ |
||||
|
display: flex; |
||||
|
|
||||
|
} |
||||
|
.myDivd{ |
||||
|
position: absolute; |
||||
|
top: 0px; |
||||
|
pointer-events: none; |
||||
|
|
||||
|
} |
||||
|
.department{ |
||||
|
margin-top: 16px; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: space-between; |
||||
|
} |
||||
|
.dicon{ |
||||
|
margin-left: 16px; |
||||
|
|
||||
|
} |
||||
|
/* 在线链接服务仅供平台体验和调试使用,平台不承诺服务的稳定性,企业客户需下载字体包自行发布使用并做好备份。 */ |
||||
|
|
||||
|
.dtitle{ |
||||
|
margin-left: 8px; |
||||
|
width: 160px; |
||||
|
font-size: var(--font-size); |
||||
|
font-family:'阿里巴巴普惠体 2.0 65 Medium'; |
||||
|
color: #233C4C; |
||||
|
line-height: 20px; |
||||
|
} |
||||
|
|
||||
|
</style> |
@ -0,0 +1,127 @@ |
|||||
|
<template > |
||||
|
|
||||
|
<TabTools></TabTools> |
||||
|
</template> |
||||
|
<script setup > |
||||
|
import { IconFont } from '@nutui/icons-vue'; |
||||
|
import { useRouter } from 'vue-router'; |
||||
|
import {WXSHARE} from '../utils/wxshare-1.6.0'; |
||||
|
const state = reactive([]); |
||||
|
|
||||
|
onMounted(() => { |
||||
|
|
||||
|
|
||||
|
}) |
||||
|
|
||||
|
|
||||
|
|
||||
|
</script> |
||||
|
<style scoped> |
||||
|
.headnav { |
||||
|
--td-navbar-title-font-size:var(--font-size-title); |
||||
|
--td-navbar-bg-color: transparent; |
||||
|
--td-navbar-color: #FFFFFF; |
||||
|
--td-navbar-height: 86px; |
||||
|
} |
||||
|
|
||||
|
.divhead { |
||||
|
background:linear-gradient(352deg, #87DBFF 0%, #57A1FF 33%, #2C68FF 100%); |
||||
|
} |
||||
|
|
||||
|
.divsearch { |
||||
|
display: flex; |
||||
|
width: 90%; |
||||
|
height: 40px; |
||||
|
background: rgba(255, 255, 255, 0.24); |
||||
|
border-radius: 16px; |
||||
|
margin: auto; |
||||
|
backdrop-filter: blur(25px); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
.nut-elevator { |
||||
|
--nut-elevator-list-item-font-size: var(--font-size); |
||||
|
--nut-elevator-list-item-code-font-size: var(--font-size); |
||||
|
--nut-elevator-list-item-name-height: 42px; |
||||
|
--nut-elevator-list-item-code-height: 42px; |
||||
|
--nut-elevator-list-item-bars-inner-item-font-size: 12px; |
||||
|
--nut-elevator-list-item-bars-background-color: #F4F5F5; |
||||
|
--nut-elevator-list-item-bars-inner-item-active-color: #2C68FF; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
input { |
||||
|
width: 70%; |
||||
|
margin-left: 5px; |
||||
|
font-size: var(--font-size); |
||||
|
background: transparent; |
||||
|
border: none; |
||||
|
-webkit-box-shadow: none; |
||||
|
box-shadow: none; |
||||
|
outline: none; |
||||
|
color: white; |
||||
|
} |
||||
|
|
||||
|
input:focus { |
||||
|
font-size: var(--font-size); |
||||
|
width: 70%; |
||||
|
margin-left: 5px; |
||||
|
border: none; |
||||
|
box-shadow: none; |
||||
|
} |
||||
|
|
||||
|
::-webkit-input-placeholder { |
||||
|
/* WebKit browsers */ |
||||
|
color: white; |
||||
|
} |
||||
|
|
||||
|
:-moz-placeholder { |
||||
|
/* Mozilla Firefox 4 to 18 */ |
||||
|
color: white; |
||||
|
} |
||||
|
|
||||
|
::-moz-placeholder { |
||||
|
/* Mozilla Firefox 19+ */ |
||||
|
color: white; |
||||
|
} |
||||
|
|
||||
|
:-ms-input-placeholder { |
||||
|
/* Internet Explorer 10+ */ |
||||
|
color: white; |
||||
|
} |
||||
|
.divselect:before{ |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
content:""; |
||||
|
background:url('../assets/sel.png'); |
||||
|
background-size: cover; |
||||
|
margin-top: 14px; |
||||
|
width:20px; |
||||
|
height:20px; |
||||
|
} |
||||
|
.divselect { |
||||
|
margin-top: 20px; |
||||
|
padding-left: 16px; |
||||
|
width: cal(100%-20); |
||||
|
height: 50px; |
||||
|
/* font-size: var(--font-size); */ |
||||
|
font-family: PingFangSC-Regular, PingFang SC; |
||||
|
font-weight: 600; |
||||
|
display: flex; |
||||
|
|
||||
|
background: white; |
||||
|
border-radius: 20px 20px 0px 0px; |
||||
|
--nut-menu-bar-box-shadow:0 0px 0px rgba(89, 89, 89, 0.12); |
||||
|
--nut-menu-item-active-text-color:#2C68FF; |
||||
|
--nut-menu-item-content-max-height:100%; |
||||
|
--nut-menu-item-font-size:18px; |
||||
|
|
||||
|
/* --nut-menu-item-text-color:#2C68FF; */ |
||||
|
} |
||||
|
.t-list{ |
||||
|
/* padding-bottom: 120px; */ |
||||
|
height:70vh; |
||||
|
} |
||||
|
|
||||
|
</style> |
@ -0,0 +1,126 @@ |
|||||
|
<template > |
||||
|
<TabTools></TabTools> |
||||
|
</template> |
||||
|
<script setup > |
||||
|
import { IconFont } from '@nutui/icons-vue'; |
||||
|
import { useRouter } from 'vue-router'; |
||||
|
import {WXSHARE} from '../utils/wxshare-1.6.0'; |
||||
|
const state = reactive([]); |
||||
|
|
||||
|
onMounted(() => { |
||||
|
|
||||
|
|
||||
|
}) |
||||
|
|
||||
|
|
||||
|
|
||||
|
</script> |
||||
|
<style scoped> |
||||
|
.headnav { |
||||
|
--td-navbar-title-font-size:var(--font-size-title); |
||||
|
--td-navbar-bg-color: transparent; |
||||
|
--td-navbar-color: #FFFFFF; |
||||
|
--td-navbar-height: 86px; |
||||
|
} |
||||
|
|
||||
|
.divhead { |
||||
|
background:linear-gradient(352deg, #87DBFF 0%, #57A1FF 33%, #2C68FF 100%); |
||||
|
} |
||||
|
|
||||
|
.divsearch { |
||||
|
display: flex; |
||||
|
width: 90%; |
||||
|
height: 40px; |
||||
|
background: rgba(255, 255, 255, 0.24); |
||||
|
border-radius: 16px; |
||||
|
margin: auto; |
||||
|
backdrop-filter: blur(25px); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
.nut-elevator { |
||||
|
--nut-elevator-list-item-font-size: var(--font-size); |
||||
|
--nut-elevator-list-item-code-font-size: var(--font-size); |
||||
|
--nut-elevator-list-item-name-height: 42px; |
||||
|
--nut-elevator-list-item-code-height: 42px; |
||||
|
--nut-elevator-list-item-bars-inner-item-font-size: 12px; |
||||
|
--nut-elevator-list-item-bars-background-color: #F4F5F5; |
||||
|
--nut-elevator-list-item-bars-inner-item-active-color: #2C68FF; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
input { |
||||
|
width: 70%; |
||||
|
margin-left: 5px; |
||||
|
font-size: var(--font-size); |
||||
|
background: transparent; |
||||
|
border: none; |
||||
|
-webkit-box-shadow: none; |
||||
|
box-shadow: none; |
||||
|
outline: none; |
||||
|
color: white; |
||||
|
} |
||||
|
|
||||
|
input:focus { |
||||
|
font-size: var(--font-size); |
||||
|
width: 70%; |
||||
|
margin-left: 5px; |
||||
|
border: none; |
||||
|
box-shadow: none; |
||||
|
} |
||||
|
|
||||
|
::-webkit-input-placeholder { |
||||
|
/* WebKit browsers */ |
||||
|
color: white; |
||||
|
} |
||||
|
|
||||
|
:-moz-placeholder { |
||||
|
/* Mozilla Firefox 4 to 18 */ |
||||
|
color: white; |
||||
|
} |
||||
|
|
||||
|
::-moz-placeholder { |
||||
|
/* Mozilla Firefox 19+ */ |
||||
|
color: white; |
||||
|
} |
||||
|
|
||||
|
:-ms-input-placeholder { |
||||
|
/* Internet Explorer 10+ */ |
||||
|
color: white; |
||||
|
} |
||||
|
.divselect:before{ |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
content:""; |
||||
|
background:url('../assets/sel.png'); |
||||
|
background-size: cover; |
||||
|
margin-top: 14px; |
||||
|
width:20px; |
||||
|
height:20px; |
||||
|
} |
||||
|
.divselect { |
||||
|
margin-top: 20px; |
||||
|
padding-left: 16px; |
||||
|
width: cal(100%-20); |
||||
|
height: 50px; |
||||
|
/* font-size: var(--font-size); */ |
||||
|
font-family: PingFangSC-Regular, PingFang SC; |
||||
|
font-weight: 600; |
||||
|
display: flex; |
||||
|
|
||||
|
background: white; |
||||
|
border-radius: 20px 20px 0px 0px; |
||||
|
--nut-menu-bar-box-shadow:0 0px 0px rgba(89, 89, 89, 0.12); |
||||
|
--nut-menu-item-active-text-color:#2C68FF; |
||||
|
--nut-menu-item-content-max-height:100%; |
||||
|
--nut-menu-item-font-size:18px; |
||||
|
|
||||
|
/* --nut-menu-item-text-color:#2C68FF; */ |
||||
|
} |
||||
|
.t-list{ |
||||
|
/* padding-bottom: 120px; */ |
||||
|
height:70vh; |
||||
|
} |
||||
|
|
||||
|
</style> |
@ -0,0 +1,102 @@ |
|||||
|
import { |
||||
|
join |
||||
|
} from 'path' |
||||
|
import { |
||||
|
defineConfig |
||||
|
} from 'vite'; |
||||
|
import vue from '@vitejs/plugin-vue'; |
||||
|
import { |
||||
|
VuetifyResolver |
||||
|
} from 'unplugin-vue-components/resolvers'; |
||||
|
import Components from 'unplugin-vue-components/vite'; |
||||
|
import AutoImport from 'unplugin-auto-import/vite'; |
||||
|
import viteCompression from 'vite-plugin-compression' |
||||
|
import { visualizer } from 'rollup-plugin-visualizer' //查看项目的依赖
|
||||
|
import { createHtmlPlugin } from 'vite-plugin-html' |
||||
|
|
||||
|
|
||||
|
export default defineConfig(({ command }) => { |
||||
|
return { |
||||
|
base: command === 'build' ? '/modernHepatology/' : './', |
||||
|
plugins: [ |
||||
|
vue(), |
||||
|
AutoImport({ |
||||
|
// 自动导入 Vue 相关函数,如:ref, reactive, toRef 等
|
||||
|
imports: ['vue'] |
||||
|
}), |
||||
|
visualizer({ |
||||
|
open: false |
||||
|
}), |
||||
|
// 将下面的添加到plugin下
|
||||
|
createHtmlPlugin({ |
||||
|
minify: true, |
||||
|
inject: { |
||||
|
data: { |
||||
|
title: '健康宣教', |
||||
|
} |
||||
|
} |
||||
|
}), |
||||
|
Components({ |
||||
|
resolvers: [VuetifyResolver()], |
||||
|
include: [/\.vue$/, /\.vue\?vue/, /\.md$/], |
||||
|
dirs: ['src/components', 'src/views'], |
||||
|
}), |
||||
|
], |
||||
|
|
||||
|
build: { |
||||
|
assetsInlineLimit: 4096, // 图片转 base64 编码的阈值
|
||||
|
minify: 'terser', |
||||
|
plugins: [ |
||||
|
viteCompression({ |
||||
|
threshold: 1024000 // 对大于 1mb 的文件进行压缩
|
||||
|
}), |
||||
|
], |
||||
|
// rollup 配置
|
||||
|
rollupOptions: { |
||||
|
output: { |
||||
|
chunkFileNames: 'static/js/[name]-[hash].js', // 引入文件名的名称
|
||||
|
entryFileNames: 'static/js/[name]-[hash].js', // 包的入口文件名称
|
||||
|
assetFileNames: 'static/[ext]/[name]-[hash].[ext]', // 资源文件像 字体,图片等
|
||||
|
manualChunks(id) { |
||||
|
// 如果不同模块使用的插件基本相同那就尽可能打包在同一个文件中,减少http请求,如果不同模块使用不同插件明显,那就分成不同模块打包。这是一个矛盾体。
|
||||
|
// 这里使用的是最小化拆分包。如果是前者可以直接选择返回'vendor'。
|
||||
|
if (id.includes('node_modules')) { |
||||
|
return id.toString().split('node_modules/')[1].split('/')[0].toString(); //让打开那个页面,加载那个页面的js ,让之间的关联足够小
|
||||
|
// return 'vendor' 如果不同模块使用的插件基本相同那就尽可能打包在同一个文件中,减少http请求;
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
terserOptions: { |
||||
|
compress: { |
||||
|
//生产环境时移除console
|
||||
|
drop_console: true, |
||||
|
drop_debugger: true, |
||||
|
}, |
||||
|
}, |
||||
|
}, |
||||
|
resolve: { |
||||
|
alias: { |
||||
|
'@': join(__dirname, 'src'), |
||||
|
} |
||||
|
}, |
||||
|
server: { |
||||
|
host: true, |
||||
|
port: 1798, |
||||
|
//secure: false,
|
||||
|
proxy: { |
||||
|
// '/api': {
|
||||
|
// target: 'https://vue3.go-admin.dev',
|
||||
|
// changeOrigin: true, //开启跨域
|
||||
|
// rewrite: (path) => path.replace(/^\/api/, '')
|
||||
|
// },
|
||||
|
'/book': { |
||||
|
target: 'https://twx.igandan.org', |
||||
|
changeOrigin: true, //开启跨域
|
||||
|
rewrite: (path) => path.replace(/^\/book/, '') |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
publicDir: '/public' |
||||
|
} |
||||
|
}); |