pengjun 4 weeks ago
parent
commit
a7137a22d1
  1. 55
      src/api/api.js
  2. 36
      src/api/request.js
  3. 79
      src/components/doctorCheck/PacsImgPreview.vue
  4. 26
      src/components/occDisease/occReport.vue
  5. 23
      src/views/login/Login.vue

55
src/api/api.js

@ -1,5 +1,6 @@
import request, { showFullScreenLoading, tryHideFullScreenLoading } from "@/api/request";
import request from "@/api/request";
import store from "../store/index";
import { Message, Loading } from "element-ui";
const sysConfig = getSysConfig()
@ -13,8 +14,33 @@ function getSysConfig(){
}
}
function startLoading() {
let loading = Loading.service({
lock: true,
text: "正在加载中,请稍后",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0)",
customClass: "boxStyle"
});
// 调用接口 5秒 没结束,关闭锁屏
setTimeout(() => {
endLoading(loading)
}, 5000);
return loading
}
function endLoading(loading) {
try {
loading.close()
} catch (error) {
console.error('关闭锁屏',error)
}
}
export async function getapi(url, params = {}, config) {
return new Promise((resolve, reject) => {
let loading = startLoading()
request
.get(`${sysConfig.apiurl}${url}`, {
params: params,
@ -26,13 +52,16 @@ export async function getapi(url, params = {}, config) {
.catch((err) => {
reject(err.data);
})
.finally(() => {});
.finally(() => {
endLoading(loading)
});
});
}
//axios封装post
export async function postapi(url, paramsdata = {}, config) {
return new Promise((resolve, reject) => {
let loading = startLoading()
request
.post(`${sysConfig.apiurl}${url}`, paramsdata, config)
.then((res) => {
@ -41,12 +70,15 @@ export async function postapi(url, paramsdata = {}, config) {
.catch((err) => {
reject(err.data);
})
.finally(() => {});
.finally(() => {
endLoading(loading)
});
});
}
//axios封装deleteapi
export async function deletapi(url, params = {}, config) {
return new Promise((resolve, reject) => {
let loading = startLoading()
request
.delete(`${sysConfig.apiurl}${url}`, {
params: params,
@ -58,12 +90,15 @@ export async function deletapi(url, params = {}, config) {
.catch((err) => {
reject(err.data);
})
.finally(() => {});
.finally(() => {
endLoading(loading)
});
});
}
//axios封装Put方法
export async function putapi(url, params = {}, config) {
return new Promise((resolve, reject) => {
let loading = startLoading()
request
.put(`${sysConfig.apiurl}${url}`, params, config)
.then((res) => {
@ -72,14 +107,16 @@ export async function putapi(url, params = {}, config) {
.catch((err) => {
reject(err.data);
})
.finally(() => {});
.finally(() => {
endLoading(loading)
});
});
}
// 浏览器端 fetch 流式读取(用于增量处理服务器 chunked/text-stream 响应)
export async function fetchStream(url, params = {}, onChunk = (chunk) => {}) {
const fullUrl = `${sysConfig.apiurl}${url}`;
showFullScreenLoading();
let loading = startLoading()
try {
const token = window.sessionStorage.getItem('token');
let tokentype = window.sessionStorage.getItem("tokentype");
@ -104,7 +141,7 @@ export async function fetchStream(url, params = {}, onChunk = (chunk) => {}) {
const text = await resp.text();
try { onChunk(text); } catch (e) { /* ignore */ }
// 已经拿到首个数据,先隐藏 loading
tryHideFullScreenLoading();
endLoading(loading)
return text;
}
@ -120,7 +157,7 @@ export async function fetchStream(url, params = {}, onChunk = (chunk) => {}) {
// 在收到第一个 chunk 时立即隐藏 loading
if (!firstChunkSeen) {
firstChunkSeen = true;
tryHideFullScreenLoading();
endLoading(loading)
}
try { onChunk(chunk); } catch (e) { /* 忽略回调内部错误 */ }
}
@ -128,6 +165,6 @@ export async function fetchStream(url, params = {}, onChunk = (chunk) => {}) {
} catch (err) {
throw err;
} finally {
tryHideFullScreenLoading();
endLoading(loading)
}
}

36
src/api/request.js

@ -3,7 +3,7 @@ import router from "@/router";
import axios from "axios";
// import Promise from 'promise'
import { yztoken } from "@/utlis/istoken";
import { Message, Loading } from "element-ui";
import { Message } from "element-ui";
import store from "../store/index";
@ -24,42 +24,14 @@ const instance = axios.create({
//timeout: 500000,
withCredentials: true, // 允许跨域
});
let loading = null
let needLoadingRequestCount = 0
function startLoading() {
loading = Loading.service({
lock: true,
text: "正在加载中,请稍后",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0)",
customClass: "boxStyle"
});
}
function endLoading() {
loading.close()
}
export function showFullScreenLoading() {
if (needLoadingRequestCount === 0) {
startLoading()
}
needLoadingRequestCount++
}
export function tryHideFullScreenLoading() {
if (needLoadingRequestCount <= 0) return
needLoadingRequestCount--
if (needLoadingRequestCount === 0) {
endLoading()
}
}
//请求拦截
instance.interceptors.request.use(
async function(config) {
//console.log('old token:',window.sessionStorage.getItem("token"))
//console.log('old expires_in',window.sessionStorage.getItem("expires_in"))
await yztoken();
showFullScreenLoading()
let token = window.sessionStorage.getItem("token");
let tokentype = window.sessionStorage.getItem("tokentype");
@ -76,7 +48,7 @@ instance.interceptors.request.use(
//响应拦截
instance.interceptors.response.use(
(res) => {
tryHideFullScreenLoading()
// console.log(res);
if (res.data.code < 0) {
Message.error({ showClose: true, message: res.data.message });
@ -92,7 +64,7 @@ instance.interceptors.response.use(
// Message.error('状态失效请重新登录')
// console.log('token失效返回登录');
// }
tryHideFullScreenLoading()
Message.error({ showClose: true, message: err.message });
return Promise.reject(err);
}

79
src/components/doctorCheck/PacsImgPreview.vue

@ -233,86 +233,7 @@ export default {
}
},
//
btnGetPic() {
if (!this.doctorCheck.RegisterCheckId) {
this.$message.warning({ showClose: true, message: "未选中组合项目!" });
return;
}
if (!this.$peisAPI) {
this.$message.info({ showClose: true, message: "此功能,需要在壳客户端才可运行!" })
return
}
let toOutShell = {
barCode: this.doctorCheck.checkRequestNo,
patientName: this.dataTransOpts.tableS.patient_register.patientName,
sexName: this.dataTransOpts.tableS.patient_register.sexName,
age: (this.dataTransOpts.tableS.patient_register.age || '') + '',
asbitemName: this.doctorCheck.asbitemName
}
// console.log('this.$peisAPI.imageAcquisition', JSON.stringify(toOutShell))
let loading = Loading.service({
lock: true,
text: "正在加载中,请稍后",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0)",
customClass: "boxStyle"
});
this.$peisAPI.imageAcquisition(JSON.stringify(toOutShell))
.then(async (res) => {
let lres = JSON.parse(res)
console.log('this.$peisAPI.imageAcquisition', lres)
if (lres.code > -1) {
for (let i = 0; i < lres.data.length; i++) {
let item = lres.data[i];
// FilePath:
// Image
// ImageFormat
let baseHead = 'data:image/jpeg;base64,'
switch (item.ImageFormat) {
case 'png':
case 'bmp':
baseHead = `data:image/${item.ImageFormat};base64,`
break;
default:
break;
}
this.checkPictures.push({ pictureFilename: baseHead + item.Image })
let fileName = item.FilePath
let dotIndex = fileName.lastIndexOf('\\');
if (dotIndex > -1) fileName = fileName.substring(dotIndex, fileName.length);
let body = {
registerCheckId: this.dataTransOpts.tableS.register_check.id,
pictureBaseStrs: [{
fileName,
localPathName: item.FilePath,
pictureBaseStr: baseHead + item.Image
}],
pictureFileType: '0' //01 this.pictureFileType
}
try {
//await postapi('/api/app/RegisterCheckPicture/InstrumentMapping', body)
await hadoopPost('pacsApi', '/api/app/RegisterCheckPicture/InstrumentMapping', body)
} catch (error) {
console.log('btnGetPic err', error)
}
}
this.getCheckPictures(this.dataTransOpts.tableS.register_check.id)
} else {
console.log('this.$peisAPI.imageAcquisition', lres.message)
}
}).catch(err => {
this.$message.error(err)
}).finally(() => {
loading.close()
});
},
// tab
dispLabel(itemName) {

26
src/components/occDisease/occReport.vue

@ -35,14 +35,15 @@
</el-select>
</div>
<div class="query">
<el-button @click="btnQuery(true)" size="small" class="commonbutton" :disabled="format == 2">预览</el-button>
<el-button @click="btnQuery(true)" size="small" class="commonbutton" :disabled="format == 2" v-loading.fullscreen.lock="fullscreenLoading">预览</el-button>
<el-button @click="btnQuery(false)" size="small" class="commonbutton" :disabled="format == 2">打印</el-button>
</div>
<div class="query">
<el-button size="small" class="commonbutton" :disabled="format != 2" @click="query">查询</el-button>
</div>
<div class="query">
<el-button size="small" class="commonbutton" :disabled="format != 2" @click="handleExport">导出excel</el-button>
<el-button size="small" class="commonbutton" :disabled="format != 2"
@click="handleExport">导出excel</el-button>
</div>
<!-- <div class="query">
<el-button size="small" class="commonbutton" :disabled="format != 2" @click="onPrint">打印</el-button>
@ -98,7 +99,6 @@
<script>
import moment from "moment";
import { mapState, mapActions } from "vuex";
import { Loading } from "element-ui";
import { getapi, postapi, putapi, deletapi } from "@/api/api";
import {
dddw,
@ -123,6 +123,7 @@ export default {
startDate: "",
endDate: "",
reportUrl: "",
fullscreenLoading:false,
};
},
created() {
@ -245,14 +246,14 @@ export default {
};
console.log('toOutShell', toOutShell)
let loading = Loading.service({
lock: true,
text: "正在加载中,请稍后",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0)",
customClass: "boxStyle"
});
// let loading = Loading.service({
// lock: true,
// text: "",
// spinner: "el-icon-loading",
// background: "rgba(0, 0, 0, 0)",
// customClass: "boxStyle"
// });
this.fullscreenLoading = true
if (isPreview) {
this.$peisAPI.printPre(JSON.stringify(toOutShell))
.then(res => {
@ -265,7 +266,8 @@ export default {
this.$message.error({ showClose: true, message: err })
})
.finally(() => {
loading.close()
//loading.close()
this.fullscreenLoading = false
});
} else {
this.$peisAPI.print(JSON.stringify(toOutShell))

23
src/views/login/Login.vue

@ -49,7 +49,7 @@
</el-form-item>
</el-col>
</el-row>
<el-button type="primary" class="btn" @click="onSubmit(form)" style="margin-bottom: 20px;">
<el-button type="primary" class="btn" @click="onSubmit(form)" style="margin-bottom: 20px;" v-loading.fullscreen.lock="fullscreenLoading">
用户登录
</el-button>
<div style="color:#396FFA;font-size:14px;text-align: center;font-family: NotoSansSC-Regular;">注册新账号</div>
@ -63,12 +63,13 @@
import { writetoken } from "@/utlis/istoken";
import { deepCopy } from "@/utlis/proFunc";
import axios from "axios";
import { Loading } from "element-ui";
// import { Loading } from "element-ui";
import { mapState, mapMutations } from "vuex";
export default {
data() {
return {
fullscreenLoading:false,
form: {
Username: "",
Password: "",
@ -192,13 +193,14 @@ export default {
this.$refs.form.validate((valid) => {
if (valid) {
let loading = Loading.service({
lock: true,
text: "正在加载中,请稍后",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0)",
customClass: "boxStyle"
});
// let loading = Loading.service({
// lock: true,
// text: "",
// spinner: "el-icon-loading",
// background: "rgba(0, 0, 0, 0)",
// customClass: "boxStyle"
// });
this.fullscreenLoading = true
axios.post(`${this.sysConfig.apiurl}/api/identity/users/login`, {
userName: this.form.Username,
passWord: this.form.Password,
@ -242,7 +244,8 @@ export default {
}).catch(err => {
this.$message.error(err);
}).finally(() => {
loading.close()
// loading.close()
this.fullscreenLoading = false
})
}
});

Loading…
Cancel
Save