3.5提交代码
This commit is contained in:
parent
ae9a961a42
commit
799471090f
23
api/api.js
23
api/api.js
@ -689,7 +689,28 @@ const api = {
|
||||
receiveWelfare(data){
|
||||
return request('/expertAPI/receiveWelfare', data, 'post', false);
|
||||
},
|
||||
|
||||
getKePuCollection(data){
|
||||
return request('/expertAPI/getKePuCollection', data, 'post', false);
|
||||
},
|
||||
getRead(data){
|
||||
return request('/expertAPI/read', data, 'post', false);
|
||||
},
|
||||
getOutRead(data){
|
||||
return request('/expertAPI/outread', data, 'post', false);
|
||||
},
|
||||
getAgree(data){
|
||||
return request('/expertAPI/agree', data, 'post', false);
|
||||
},
|
||||
getDisagree(data){
|
||||
return request('/expertAPI/disagree', data, 'post', false);
|
||||
},
|
||||
getCollect(data){
|
||||
return request('/expertAPI/collection', data, 'post', false);
|
||||
},
|
||||
getGanDanFileOrder(data){
|
||||
return request('/expertPay/getGanDanFileOrder', data, 'post', false);
|
||||
}
|
||||
//https://dev-app.igandan.com/app/expertPay/getGanDanFileOrder
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -2,8 +2,8 @@
|
||||
"name" : "肝胆相照专家版",
|
||||
"appid" : "__UNI__89F511F",
|
||||
"description" : "",
|
||||
"versionName" : "4.2.2",
|
||||
"versionCode" : 422,
|
||||
"versionName" : "4.2.4",
|
||||
"versionCode" : 424,
|
||||
"transformPx" : false,
|
||||
"app-plus" : {
|
||||
/* 5+App特有相关 */
|
||||
|
||||
715
pages.json
715
pages.json
@ -5,7 +5,6 @@
|
||||
"^u--(.*)": "@/node_modules/uview-plus/components/u-$1/u-$1.vue",
|
||||
"^up-(.*)": "@/node_modules/uview-plus/components/u-$1/u-$1.vue",
|
||||
"^u-([^-].*)": "@/node_modules/uview-plus/components/u-$1/u-$1.vue"
|
||||
|
||||
}
|
||||
},
|
||||
"pages": [
|
||||
@ -29,7 +28,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "pages/index/index",
|
||||
"style": {
|
||||
@ -102,12 +100,10 @@
|
||||
// },
|
||||
{
|
||||
"path": "pages/univerify/univerify",
|
||||
"style" :
|
||||
{
|
||||
"style": {
|
||||
"navigationBarTitleText": ""
|
||||
}
|
||||
}
|
||||
|
||||
],
|
||||
"subPackages": [
|
||||
// {
|
||||
@ -242,6 +238,21 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "webview/webviewClass",
|
||||
"style": {
|
||||
"softinputMode": "adjustResize",
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "网页",
|
||||
"app": {
|
||||
"bounce": "none",
|
||||
"softinputmode": "adjustResize"
|
||||
},
|
||||
"app-plus": {
|
||||
"softinputmode": "adjustResize"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "scanLogin/scanLogin",
|
||||
"style": {
|
||||
@ -296,7 +307,9 @@
|
||||
"path": "reply/reply",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarRightButton":{ "hide": true},
|
||||
"navigationBarRightButton": {
|
||||
"hide": true
|
||||
},
|
||||
"navigationBarTitleText": "回复",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
@ -307,7 +320,9 @@
|
||||
"path": "video/video",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarRightButton":{ "hide": true},
|
||||
"navigationBarRightButton": {
|
||||
"hide": true
|
||||
},
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
@ -388,7 +403,9 @@
|
||||
"path": "patientVideo/patientVideo",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarRightButton":{ "hide": true},
|
||||
"navigationBarRightButton": {
|
||||
"hide": true
|
||||
},
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
@ -399,7 +416,9 @@
|
||||
"path": "videoDetail/videoDetail",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarRightButton":{ "hide": true},
|
||||
"navigationBarRightButton": {
|
||||
"hide": true
|
||||
},
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
@ -420,7 +439,9 @@
|
||||
"path": "zhinanList/zhinanList",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarRightButton":{ "hide": true},
|
||||
"navigationBarRightButton": {
|
||||
"hide": true
|
||||
},
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
@ -431,7 +452,9 @@
|
||||
"path": "hot/hot",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarRightButton":{ "hide": true},
|
||||
"navigationBarRightButton": {
|
||||
"hide": true
|
||||
},
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
@ -442,7 +465,9 @@
|
||||
"path": "login/login",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarRightButton":{ "hide": true},
|
||||
"navigationBarRightButton": {
|
||||
"hide": true
|
||||
},
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
@ -539,6 +564,46 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "idcardAuth/idcardAuth",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "idcardAuth/bankCardList",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "常用银行卡",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "myCourseware/myCourseware",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "myCourseware/coursewareDetail",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "buyUpan/buyUpan",
|
||||
"style": {
|
||||
@ -590,7 +655,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "pointGoods/pointGoods",
|
||||
"style": {
|
||||
@ -611,7 +675,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "myFlower/myFlower",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarRightButton": {
|
||||
"hide": true
|
||||
},
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "msg/msg",
|
||||
"style": {
|
||||
@ -626,7 +702,9 @@
|
||||
"path": "myPatient/myPatient",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarRightButton":{ "hide": true},
|
||||
"navigationBarRightButton": {
|
||||
"hide": true
|
||||
},
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
@ -643,6 +721,235 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "feedback/feedback",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "意见反馈",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "patientMsg/patientMsg",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "patientGroup/patientGroup",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "groupMsg/groupMsg",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "schedule/schedule",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "visitPlan/visitPlan",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "caseList/caseList",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "checkRecord/checkRecord",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "visit/visit",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarRightButton": {
|
||||
"hide": true
|
||||
},
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "patientSetting/patientSetting",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarRightButton": {
|
||||
"hide": true
|
||||
},
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "patientRemark/patientRemark",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarRightButton": {
|
||||
"hide": true
|
||||
},
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "patientDetail/patientDetail",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarRightButton": {
|
||||
"hide": true
|
||||
},
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "groupEdit/groupEdit",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarRightButton": {
|
||||
"hide": true
|
||||
},
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "groupManage/groupManage",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarRightButton": {
|
||||
"hide": true
|
||||
},
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "myAccount/myAccount",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "我的账户",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "myAccount/billDetails",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"enablePullDownRefresh": true,
|
||||
"onReachBottomDistance": 80,
|
||||
"navigationBarTitleText": "账单明细",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "myAccount/withdrawal",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "提现",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "selectPatient/selectPatient",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarRightButton": {
|
||||
"hide": true
|
||||
},
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "visitNote/visitNote",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarRightButton": {
|
||||
"hide": true
|
||||
},
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "followDetail/followDetail",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarRightButton": {
|
||||
"hide": true
|
||||
},
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pwdLogin/pwdLogin",
|
||||
"style": {
|
||||
@ -704,9 +1011,6 @@
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
|
||||
|
||||
|
||||
// {
|
||||
// "path": "searchNews/searchNews",
|
||||
// "style": {
|
||||
@ -761,7 +1065,6 @@
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
|
||||
// {
|
||||
// "path": "video/video",
|
||||
// "style": {
|
||||
@ -773,87 +1076,6 @@
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
|
||||
// {
|
||||
// "path": "patientSetting/patientSetting",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarRightButton":{ "hide": true},
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "patientRemark/patientRemark",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarRightButton":{ "hide": true},
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "groupEdit/groupEdit",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarRightButton":{ "hide": true},
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "groupManage/groupManage",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarRightButton":{ "hide": true},
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
|
||||
|
||||
|
||||
// {
|
||||
// "path": "selectPatient/selectPatient",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarRightButton":{ "hide": true},
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "visitNote/visitNote",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarRightButton":{ "hide": true},
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "followDetail/followDetail",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarRightButton":{ "hide": true},
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "liveReplay/liveReplay",
|
||||
// "style": {
|
||||
@ -864,21 +1086,6 @@
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
|
||||
// {
|
||||
// "path": "myFlower/myFlower",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarRightButton":{ "hide": true},
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
|
||||
|
||||
|
||||
// {
|
||||
// "path": "myWelfareCard/exchange",
|
||||
// "style": {
|
||||
@ -887,7 +1094,6 @@
|
||||
// "app": { "bounce": "none" }
|
||||
// }
|
||||
// },
|
||||
|
||||
// {
|
||||
// "path": "pointMall/pointMall",
|
||||
// "style": {
|
||||
@ -898,11 +1104,6 @@
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// {
|
||||
// "path": "caseRecord/caseRecord",
|
||||
// "style": {
|
||||
@ -913,7 +1114,6 @@
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
|
||||
// {
|
||||
// "path": "searchPatient/searchPatient",
|
||||
// "style": {
|
||||
@ -924,38 +1124,6 @@
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
|
||||
// {
|
||||
// "path": "visitPlan/visitPlan",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
|
||||
// {
|
||||
// "path": "caseList/caseList",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "checkRecord/checkRecord",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "qikan/qikan",
|
||||
// "style": {
|
||||
@ -976,28 +1144,6 @@
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "patientGroup/patientGroup",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "groupMsg/groupMsg",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
|
||||
|
||||
// {
|
||||
// "path": "myDownLoad/myDownLoad",
|
||||
// "style": {
|
||||
@ -1008,7 +1154,6 @@
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
|
||||
// {
|
||||
// "path": "myCollect/myCollect",
|
||||
// "style": {
|
||||
@ -1020,35 +1165,6 @@
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "myAccount/myAccount",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarTitleText": "我的账户",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "myAccount/billDetails",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarTitleText": "账单明细",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "myAccount/withdrawal",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarTitleText": "提现",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "myCourseware/myCourseware",
|
||||
// "style": {
|
||||
@ -1082,7 +1198,6 @@
|
||||
// {
|
||||
// "path": "setting/setting",
|
||||
// "style": {
|
||||
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
@ -1091,58 +1206,6 @@
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "schedule/schedule",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "visit/visit",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarRightButton":{ "hide": true},
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "patientDetail/patientDetail",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarRightButton":{ "hide": true},
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "idcardAuth/idcardAuth",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "idcardAuth/bankCardList",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarTitleText": "常用银行卡",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "myVideo/myVideo",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
@ -1163,7 +1226,6 @@
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
|
||||
// {
|
||||
// "path": "personInfo/personInfo",
|
||||
// "style": {
|
||||
@ -1174,18 +1236,6 @@
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
|
||||
// {
|
||||
// "path": "patientMsg/patientMsg",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
|
||||
// {
|
||||
// "path": "videoHistory/videoHistory",
|
||||
// "style": {
|
||||
@ -1257,17 +1307,6 @@
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
|
||||
// {
|
||||
// "path": "feedback/feedback",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarTitleText": "意见反馈",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "feedback/feedback-logoff",
|
||||
// "style": {
|
||||
@ -1289,8 +1328,6 @@
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -1326,7 +1363,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "productDetail/productDetail",
|
||||
"style": {
|
||||
@ -1388,6 +1424,100 @@
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"root": "pages_chat",
|
||||
"pages": [
|
||||
{
|
||||
"path": "outPatient/outPatient",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "stopPatient/stopPatient",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "groupSend/groupSend",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "patientGroup/patientGroup",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "addAddress/addAddress",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "editAddress/editAddress",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "outManage/outManage",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "groupMessage/groupMessage",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},{
|
||||
"path": "note/note",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
// {
|
||||
// "root": "pages_chat",
|
||||
@ -1463,16 +1593,6 @@
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "outPatient/outPatient",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
// "navigationBarTitleText": "uni-app分页",
|
||||
// "app": {
|
||||
// "bounce": "none"
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// {
|
||||
// "path": "addAddress/addAddress",
|
||||
// "style": {
|
||||
// "navigationStyle": "custom",
|
||||
@ -1532,7 +1652,6 @@
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// ]
|
||||
// }
|
||||
],
|
||||
@ -1566,7 +1685,7 @@
|
||||
"list": [
|
||||
{
|
||||
"name": "",
|
||||
"path": "",
|
||||
"path": "pages_chat/groupMessage/groupMessage",
|
||||
"query": ""
|
||||
}
|
||||
]
|
||||
|
||||
@ -15,7 +15,7 @@ const countDown=()=>{
|
||||
}
|
||||
timer.value=setInterval(()=>{
|
||||
count.value++;
|
||||
if(count.value>=3){
|
||||
if(count.value>=5){
|
||||
clearInterval(timer.value);
|
||||
plus.runtime.quit();
|
||||
}
|
||||
|
||||
@ -108,8 +108,9 @@
|
||||
|
||||
<!-- 空状态 -->
|
||||
<view class="empty-state" v-if="articleList.length === 0 && !loading">
|
||||
<uni-icons type="article" size="80" color="#cccccc"></uni-icons>
|
||||
<text class="empty-text">暂无文章</text>
|
||||
<empty :emptyDesc="'暂无患教信息'"></empty>
|
||||
<!-- <uni-icons type="article" size="80" color="#cccccc"></uni-icons>
|
||||
<text class="empty-text">暂无文章</text> -->
|
||||
</view>
|
||||
</scroll-view>
|
||||
|
||||
@ -155,7 +156,7 @@
|
||||
currentPage.value = 1;
|
||||
hasMore.value = true;
|
||||
articleList.value = [];
|
||||
polularScienceArticleListByKeywordsNew(true);
|
||||
polularScienceArticleListByKeywordsNew(false);
|
||||
};
|
||||
const loadGuideTags = async () => {
|
||||
try {
|
||||
@ -203,9 +204,9 @@
|
||||
// 判断是否还有更多数据
|
||||
hasMore.value = newData.length >= pageSize.value;
|
||||
|
||||
if (!isRefresh) {
|
||||
currentPage.value++;
|
||||
}
|
||||
// if (!isRefresh) {
|
||||
// currentPage.value++;
|
||||
// }
|
||||
|
||||
console.log('文章数据加载成功:', articleList.value);
|
||||
}
|
||||
@ -287,7 +288,7 @@
|
||||
// 跳转到详情页
|
||||
if (article.path) {
|
||||
uni.navigateTo({
|
||||
url: `/pages_app/webview/webview?url=${encodeURIComponent(docUrl+article.path)}&title=患教详情`
|
||||
url: `/pages_app/webview/webviewClass?url=${encodeURIComponent(docUrl+article.path+'?fromtype=doctor')}&title=患教详情&uuid=${article.uuid}&sharetitle=${article.title}&summary=${article.summary}&type=huanjiao&imgPath=${encodeURIComponent(article.image)}`
|
||||
});
|
||||
}
|
||||
};
|
||||
@ -313,6 +314,7 @@
|
||||
// 上拉加载更多
|
||||
const onLoadMore = async () => {
|
||||
if (!hasMore.value || loading.value) return;
|
||||
currentPage.value++
|
||||
await polularScienceArticleListByKeywordsNew(false);
|
||||
};
|
||||
|
||||
@ -377,11 +379,11 @@
|
||||
hasMore.value = true;
|
||||
articleList.value = [];
|
||||
showFilter.value = false;
|
||||
polularScienceArticleListByKeywordsNew(true);
|
||||
polularScienceArticleListByKeywordsNew(false);
|
||||
};
|
||||
|
||||
onShow(() => {
|
||||
polularScienceArticleListByKeywordsNew(true);
|
||||
polularScienceArticleListByKeywordsNew(false);
|
||||
loadGuideTags();
|
||||
});
|
||||
</script>
|
||||
@ -501,10 +503,10 @@ $padding-small: 20rpx;
|
||||
// 文章列表
|
||||
.article-list {
|
||||
position: fixed;
|
||||
height:calc(100vh - var(--status-bar-height) - 44px - 188rpx);
|
||||
// height:calc(100vh - var(--status-bar-height) - 44px - 207rpx);
|
||||
top: calc(var(--status-bar-height) + 44px + 188rpx);
|
||||
|
||||
padding-bottom: 130rpx;
|
||||
bottom: 128rpx;
|
||||
.article-item {
|
||||
background-color: $white;
|
||||
margin-bottom: $padding-small;
|
||||
@ -572,6 +574,9 @@ $padding-small: 20rpx;
|
||||
|
||||
font-size: 24rpx;
|
||||
color: $gray-medium;
|
||||
text{
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,13 +1,15 @@
|
||||
<template>
|
||||
<view class="container">
|
||||
<!-- 头部导航 -->
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="病情记录"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
|
||||
:border="false"
|
||||
backgroundColor="#eee"
|
||||
>
|
||||
@ -17,6 +19,7 @@
|
||||
</view>
|
||||
</template>
|
||||
</uni-nav-bar>
|
||||
</view>
|
||||
|
||||
|
||||
<!-- 主要内容区域 -->
|
||||
@ -301,7 +304,10 @@ onMounted(() => {
|
||||
|
||||
/* 主要内容区域 */
|
||||
.main-content {
|
||||
height: calc(100vh - 180rpx);
|
||||
top: calc(var(--status-bar-height) + 44px);
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
bottom:0;
|
||||
padding: 40rpx 30rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
@ -6,15 +6,13 @@
|
||||
<!-- 主要内容区域 -->
|
||||
<view class="main-content">
|
||||
<!-- 疾病诊断部分 -->
|
||||
<view class="header">
|
||||
<view class="section">
|
||||
<view class="section-header">
|
||||
<view class="red-bar"></view>
|
||||
<text class="section-title">疾病诊断</text>
|
||||
</view>
|
||||
<view class="section-content">
|
||||
<text class="diagnosis-text">疾病诊断: {{ pageData.diseaseName }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 化验报告部分 -->
|
||||
<view class="section">
|
||||
@ -153,7 +151,7 @@ onMounted(() => {
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
<style scoped lang="scss">
|
||||
.container {
|
||||
background-color: #ffffff;
|
||||
min-height: 100vh;
|
||||
@ -205,13 +203,7 @@ onMounted(() => {
|
||||
}
|
||||
|
||||
/* 头部导航样式 */
|
||||
.header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 20rpx 30rpx;
|
||||
background-color: #ffffff;
|
||||
border-bottom: 1rpx solid #f0f0f0;
|
||||
}
|
||||
|
||||
|
||||
.back-btn {
|
||||
width: 60rpx;
|
||||
@ -237,7 +229,8 @@ onMounted(() => {
|
||||
|
||||
/* 主要内容区域 */
|
||||
.main-content {
|
||||
padding: 0 30rpx;
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
|
||||
}
|
||||
|
||||
.section {
|
||||
@ -247,6 +240,7 @@ onMounted(() => {
|
||||
.section-header {
|
||||
margin-top: 20rpx;
|
||||
position: relative;
|
||||
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
@ -277,7 +271,21 @@ onMounted(() => {
|
||||
color: #333333;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.header{
|
||||
background: #8B2316;
|
||||
color: #fff;
|
||||
margin-bottom: 20rpx;
|
||||
.section{
|
||||
padding:20rpx;
|
||||
margin-bottom: 10rpx;
|
||||
}
|
||||
.section-content{
|
||||
padding-left:0rpx;
|
||||
}
|
||||
.diagnosis-text{
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
.no-report-text {
|
||||
font-size: 28rpx;
|
||||
color: #999999;
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
|
||||
|
||||
<!-- 顶部导航栏 -->
|
||||
<navBar title="意见反馈"></navBar>
|
||||
<navBar :title="'意见反馈'"></navBar>
|
||||
|
||||
<!-- 反馈输入区域 -->
|
||||
<view class="feedback-input-container">
|
||||
@ -126,6 +126,7 @@
|
||||
|
||||
/* 反馈输入区域 */
|
||||
.feedback-input-container {
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
padding: 30rpx;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<view class="visit-note-page">
|
||||
<uni-nav-bar
|
||||
<navBar :title="'随访详情'" />
|
||||
<!-- <uni-nav-bar
|
||||
left-icon="left"
|
||||
title="随访详情"
|
||||
@clickLeft="goBack"
|
||||
@ -11,7 +12,7 @@
|
||||
backgroundColor="#eee"
|
||||
>
|
||||
|
||||
</uni-nav-bar>
|
||||
</uni-nav-bar> -->
|
||||
|
||||
<!-- 患者行 -->
|
||||
<view class="row" @click="noop">
|
||||
@ -41,6 +42,7 @@
|
||||
import { onLoad,onShow } from '@dcloudio/uni-app'
|
||||
import api from '@/api/api.js'
|
||||
const patientName = ref('')
|
||||
import navBar from '@/components/navBar/navBar.vue'
|
||||
const note = ref('请近日来医院复诊、复查')
|
||||
const datetime = ref('')
|
||||
const followUpUuid = ref('')
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
<template>
|
||||
<view class="group-edit-page">
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
:title="groupUuid ? '编辑分组' : '新建分组'"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
|
||||
:border="false"
|
||||
backgroundColor="#eee"
|
||||
>
|
||||
@ -15,6 +17,8 @@
|
||||
</template>
|
||||
</uni-nav-bar>
|
||||
|
||||
</view>
|
||||
<view class="contentbox">
|
||||
<!-- 分组名称 -->
|
||||
<view class="section-header">分组名称</view>
|
||||
<view class="name-row">
|
||||
@ -46,6 +50,7 @@
|
||||
</view>
|
||||
|
||||
|
||||
</view>
|
||||
|
||||
|
||||
<!-- 底部删除按钮 -->
|
||||
@ -194,6 +199,9 @@
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.contentbox{
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
}
|
||||
.group-edit-page{
|
||||
min-height: 100vh;
|
||||
background: #f5f5f5;
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
<template>
|
||||
<view class="group-manage-page">
|
||||
<view class="nabox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="分组管理"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
:border="false"
|
||||
backgroundColor="#eee"
|
||||
>
|
||||
@ -14,6 +14,7 @@
|
||||
<view class="save-text" @click="saveGroups">保存</view>
|
||||
</template>
|
||||
</uni-nav-bar>
|
||||
</view>
|
||||
|
||||
<!-- 已选中的分组 -->
|
||||
<view class="selected-section">
|
||||
@ -166,6 +167,7 @@ const saveGroups = () => {
|
||||
color: #333;
|
||||
}
|
||||
.selected-section {
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
min-height: 300rpx;
|
||||
padding: 30rpx;
|
||||
border-bottom: 1rpx solid #f0f0f0;
|
||||
|
||||
@ -1,20 +1,22 @@
|
||||
<template>
|
||||
<view class="bank-card-page">
|
||||
<!-- 顶部导航栏 -->
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="常用银行卡"
|
||||
@clickLeft="goBack()"
|
||||
@clickLeft="goBack"
|
||||
right-text="添加"
|
||||
@clickRight="addBankCard"
|
||||
fixed
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
|
||||
:border="false"
|
||||
backgroundColor="#eeeeee"
|
||||
>
|
||||
</uni-nav-bar>
|
||||
|
||||
</view>
|
||||
<!-- 银行卡列表 -->
|
||||
<view class="card-list">
|
||||
<view class="card-item" v-for="(card, index) in bankCards" :key="card.uuid">
|
||||
@ -42,18 +44,35 @@ import navTo from '@/utils/navTo';
|
||||
import api from '@/api/api';
|
||||
import empty from "@/components/empty/empty.vue"
|
||||
const bankCards = ref([]);
|
||||
|
||||
import { onLoad,onBackPress } from '@dcloudio/uni-app';
|
||||
const from = ref('');
|
||||
onLoad((options) => {
|
||||
if(options.from){
|
||||
from.value = options.from;
|
||||
}
|
||||
});
|
||||
onBackPress(() => {
|
||||
if(!from.value){
|
||||
uni.navigateBack();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
// 银行卡数据
|
||||
const getBankCardList = () => {
|
||||
api.bankCardList({}).then(res => {
|
||||
if (res.code === 200 && res.data.bankList) {
|
||||
bankCards.value = res.data.bankList;
|
||||
|
||||
if (res.code === 200 && res.data) {
|
||||
bankCards.value = res.data;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const goBack = () => {
|
||||
if(!from.value){
|
||||
plus.runtime.quit();
|
||||
}else{
|
||||
uni.navigateBack();
|
||||
}
|
||||
};
|
||||
|
||||
const addBankCard = () => {
|
||||
@ -98,6 +117,7 @@ onMounted(() => {
|
||||
|
||||
/* 银行卡列表样式 */
|
||||
.card-list {
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
padding: 30rpx;
|
||||
|
||||
.card-item {
|
||||
|
||||
@ -1,17 +1,20 @@
|
||||
<template>
|
||||
<view class="idcard-auth-page">
|
||||
<!-- 顶部导航栏 -->
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
:title="currentStep === 1 ? '身份验证' : '添加银行卡'"
|
||||
@clickLeft="goBack()"
|
||||
fixed
|
||||
@clickLeft="goBack"
|
||||
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
|
||||
:border="false"
|
||||
backgroundColor="#eeeeee"
|
||||
>
|
||||
</uni-nav-bar>
|
||||
</view>
|
||||
<!-- 内容区域 -->
|
||||
<view class="content-area">
|
||||
<!-- 进度指示器 -->
|
||||
@ -90,9 +93,10 @@
|
||||
v-model="formData.cardNumber"
|
||||
placeholder-style="color: #cccccc"
|
||||
/>
|
||||
<view class="info-icon">
|
||||
<text class="icon-text">!</text>
|
||||
|
||||
</view>
|
||||
<view class="info-icon" @click="showInfo('card')">
|
||||
<text class="icon-text">!</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="form-item">
|
||||
@ -104,9 +108,10 @@
|
||||
v-model="formData.mobile"
|
||||
placeholder-style="color: #cccccc"
|
||||
/>
|
||||
<view class="info-icon">
|
||||
<text class="icon-text">!</text>
|
||||
|
||||
</view>
|
||||
<view class="info-icon" @click="showInfo('phone')">
|
||||
<text class="icon-text">!</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -145,6 +150,18 @@
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<unidialog
|
||||
:visible="cardVisible"
|
||||
:showCancel="false"
|
||||
:title="cardTitle"
|
||||
:content="cardContent"
|
||||
:showConfirm="true"
|
||||
:confirmText="'知道了'"
|
||||
@close="cardVisible=false"
|
||||
@confirm="cardVisible=false"
|
||||
>
|
||||
|
||||
</unidialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -153,7 +170,10 @@ import stepImg from "@/static/add_card_no.png"
|
||||
import stepActiveImg from "@/static/add_card_yes.png"
|
||||
import navTo from '@/utils/navTo';
|
||||
import api from '@/api/api';
|
||||
|
||||
import unidialog from '@/components/dialog/dialog.vue';
|
||||
const cardContent = ref('暂支持以下银行:农业银行、建设银行、光大银行、平安银行、兴业银行、中信银行、邮政储蓄银行、民生银行、中国银行、工商银行、交通银行、浦发银行、广发银行、华夏银行、招商银行、北京银行、上海银行。');
|
||||
const cardTitle = ref('银行卡说明');
|
||||
const cardVisible = ref(true);
|
||||
const formData = ref({
|
||||
name: '',
|
||||
idNumber: '',
|
||||
@ -163,7 +183,16 @@ const formData = ref({
|
||||
|
||||
const isLoading = ref(false);
|
||||
const currentStep = ref(1); // 当前步骤,1表示身份信息,2表示添加银行卡
|
||||
|
||||
const showInfo = (type) => {
|
||||
if (type === 'card') {
|
||||
cardTitle.value = '银行卡说明';
|
||||
cardContent.value = '暂支持以下银行:农业银行、建设银行、光大银行、平安银行、兴业银行、中信银行、邮政储蓄银行、民生银行、中国银行、工商银行、交通银行、浦发银行、广发银行、华夏银行、招商银行、北京银行、上海银行。';
|
||||
} else if (type === 'phone') {
|
||||
cardTitle.value = '手机号说明';
|
||||
cardContent.value = '银行预留的手机号码是办理银行卡时所填写的手机号码。没有预留,手机号码已经忘记或者已经停用,请联系银行客服更新处理';
|
||||
}
|
||||
cardVisible.value = true;
|
||||
};
|
||||
// 短信弹框相关
|
||||
const showSmsDialog = ref(false);
|
||||
const smsCode = ref('');
|
||||
@ -337,7 +366,7 @@ const onCancelSms = () => {
|
||||
}
|
||||
|
||||
.content-area {
|
||||
padding-top: 160rpx;
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
padding: 0rpx 0rpx 0;
|
||||
}
|
||||
|
||||
@ -487,7 +516,25 @@ const onCancelSms = () => {
|
||||
border-color: #8B2316;
|
||||
}
|
||||
}
|
||||
.info-icon {
|
||||
flex:1;
|
||||
position: absolute;
|
||||
right: 20rpx;
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
border-radius: 50%;
|
||||
background: #fff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: 2rpx solid #8B2316;
|
||||
|
||||
.icon-text {
|
||||
font-size: 20rpx;
|
||||
color: #8B2316;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
.input-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@ -509,24 +556,7 @@ const onCancelSms = () => {
|
||||
}
|
||||
}
|
||||
|
||||
.info-icon {
|
||||
flex:1;
|
||||
position: absolute;
|
||||
right: 20rpx;
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
border-radius: 50%;
|
||||
background: #f0f0f0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
.icon-text {
|
||||
font-size: 20rpx;
|
||||
color: #cccccc;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
<template v-slot:right>
|
||||
<view class="nav-right" >
|
||||
<view class="collect-img" @click="clearMsg" >
|
||||
<image class="img-icon" :src="clearImg" mode="aspectFill" />
|
||||
<image class="img-icon" :src="clearImg" />
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
@ -83,10 +83,13 @@
|
||||
|
||||
<!-- 其他模块 - 卡片样式 -->
|
||||
<view v-else>
|
||||
<view class="card" v-for="(msg, idx) in msgList" :key="msg.id" @click="goMsgDetail(msg)">
|
||||
<view class="card-cell" v-for="(msg, idx) in msgList" :key="msg.id" @click="goMsgDetail(msg)">
|
||||
<view class="card-time">{{ msg.create_date }}</view>
|
||||
<view class="card" >
|
||||
<view class="card-title" :class="{'active':msg.is_read==0}">{{ msg.title }}</view>
|
||||
<view class="card-content">{{ msg.content }}</view>
|
||||
<view class="card-time">{{ msg.create_date }}</view>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -189,8 +192,9 @@
|
||||
if (res.confirm) {
|
||||
api.appMesageRead().then(res => {
|
||||
console.log(res);
|
||||
});
|
||||
getUnReadList();
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -202,27 +206,53 @@
|
||||
};
|
||||
//readMsg(msg.id);
|
||||
if(msg.extra.module==4){
|
||||
if(msg.extra.type==17 || msg.extra.type==40){
|
||||
uni.showToast({
|
||||
title: '暂停中',
|
||||
icon: 'none'
|
||||
});
|
||||
}else{
|
||||
uni.sendNativeEvent('goCourseDetail', {
|
||||
msg: {
|
||||
id:msg.extra.id
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}else if(msg.extra.module==2){
|
||||
if(msg.extra.type==19){
|
||||
let url=`/pages_app/myCourseware/myCourseware?from=msg`
|
||||
navTo({
|
||||
url: url
|
||||
})
|
||||
}
|
||||
|
||||
}else{
|
||||
let url="";
|
||||
if(msg.extra.module==1 && msg.extra.type==36){
|
||||
url=`/pages_app/myPoint/myPoint?from=msg`
|
||||
}else if(msg.extra.module==1 && msg.extra.type==31){
|
||||
url=`/pages_app/myPoint/myPoint?from=msg`
|
||||
}else if(msg.extra.module==1 && msg.extra.type==35){
|
||||
uni.setStorageSync('lookWelfare', 'useWelfare');
|
||||
url=`/pages_app/myWelfare/myWelfare?from=msg`
|
||||
}else if(msg.extra.module==3 && msg.extra.type==12){
|
||||
url=`/pages_app/myPatient/myPatient`
|
||||
}
|
||||
navTo({
|
||||
url: url
|
||||
})
|
||||
}else if(msg.extra.module==1 && msg.extra.type==31){
|
||||
url=`/pages_app/myPoint/myPoint?from=msg`
|
||||
navTo({
|
||||
url: url
|
||||
})
|
||||
}else if(msg.extra.module==1 && msg.extra.type==35){
|
||||
//uni.setStorageSync('lookWelfare', 'useWelfare');
|
||||
url=`/pages_app/myWelfareCard/myWelfareCard?from=msg`
|
||||
navTo({
|
||||
url: url
|
||||
})
|
||||
}else if(msg.extra.module==3 && msg.extra.type==12){
|
||||
url=`/pages_app/myPatient/myPatient?from=msg`
|
||||
navTo({
|
||||
url: url
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
// 下拉刷新
|
||||
@ -379,8 +409,12 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.collect-img {
|
||||
width: 34rpx;
|
||||
height: 34rpx;
|
||||
width: 50rpx;
|
||||
height: 50rpx;
|
||||
.img-icon{
|
||||
width: 50rpx;
|
||||
height: 50rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
.msg-page {
|
||||
@ -445,7 +479,7 @@
|
||||
.msg-list {
|
||||
position: fixed;
|
||||
// 减去导航与宫格的高度
|
||||
top: 360rpx; // 让列表起始位置在宫格下方
|
||||
top: calc(var(--status-bar-height) + 44px + 230rpx);
|
||||
padding: 20rpx 24rpx 40rpx;
|
||||
box-sizing: border-box;
|
||||
bottom: 0rpx;
|
||||
@ -486,6 +520,20 @@
|
||||
}
|
||||
}
|
||||
|
||||
.card-cell{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
margin-bottom: 30rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.card-time {
|
||||
width:100%;
|
||||
margin:10rpx 0;
|
||||
font-size: 30rpx;
|
||||
color: #666;
|
||||
text-align: center;
|
||||
}
|
||||
.card {
|
||||
background: #fff;
|
||||
border-radius: 16rpx;
|
||||
@ -510,11 +558,7 @@
|
||||
margin-bottom: 14rpx;
|
||||
}
|
||||
|
||||
.card-time {
|
||||
font-size: 24rpx;
|
||||
color: $muted;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 聊天列表样式
|
||||
|
||||
@ -1,16 +1,19 @@
|
||||
<template>
|
||||
<view class="bill-details-page">
|
||||
<!-- 顶部导航栏 -->
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="账单明细"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
|
||||
:border="false"
|
||||
backgroundColor="#eeeeee"
|
||||
></uni-nav-bar>
|
||||
</view>
|
||||
|
||||
<!-- 表格头部 -->
|
||||
<view class="table-header">
|
||||
@ -72,9 +75,16 @@ const total = ref(0)
|
||||
const isFirstPage = ref(true)
|
||||
const isLastPage = ref(false)
|
||||
|
||||
const stopRefresh = () => {
|
||||
refreshing.value = false
|
||||
}
|
||||
|
||||
// 获取订单列表
|
||||
const getOrderList = async (isRefresh = false) => {
|
||||
if (loading.value) return
|
||||
if (loading.value) {
|
||||
if (isRefresh) stopRefresh()
|
||||
return
|
||||
}
|
||||
|
||||
loading.value = true
|
||||
|
||||
@ -93,7 +103,8 @@ const getOrderList = async (isRefresh = false) => {
|
||||
}
|
||||
|
||||
// 处理订单数据
|
||||
const processedList = list.map(item => ({
|
||||
const safeList = Array.isArray(list) ? list : []
|
||||
const processedList = safeList.map(item => ({
|
||||
id: item.trade_no,
|
||||
typeName: item.type_name,
|
||||
userName: item.user_name,
|
||||
@ -117,12 +128,16 @@ const getOrderList = async (isRefresh = false) => {
|
||||
})
|
||||
} finally {
|
||||
loading.value = false
|
||||
refreshing.value = false
|
||||
stopRefresh()
|
||||
}
|
||||
}
|
||||
|
||||
// 刷新数据
|
||||
const onRefresh = () => {
|
||||
if (loading.value) {
|
||||
stopRefresh()
|
||||
return
|
||||
}
|
||||
refreshing.value = true
|
||||
page.value = 1
|
||||
isLastPage.value = false
|
||||
@ -182,10 +197,13 @@ onMounted(() => {
|
||||
|
||||
// 表格头部样式
|
||||
.table-header {
|
||||
background-color: #e0e0e0;
|
||||
background-color: #fff;
|
||||
position: fixed;
|
||||
display: flex;
|
||||
width: 100%;
|
||||
padding: 20rpx 30rpx;
|
||||
margin-top: 170rpx; /* 为固定导航栏留出空间 */
|
||||
box-sizing: border-box;
|
||||
top:calc(var(--status-bar-height) + 44px); /* 为固定导航栏留出空间 */
|
||||
border-bottom: 1rpx solid #ccc;
|
||||
|
||||
.header-cell {
|
||||
@ -224,11 +242,16 @@ onMounted(() => {
|
||||
|
||||
// 交易记录列表样式
|
||||
.transaction-list {
|
||||
background-color: #f5f5f5;
|
||||
top:calc(var(--status-bar-height) + 44px + 130rpx);
|
||||
position: fixed;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0rpx;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.transaction-item {
|
||||
background-color: #f8f8f8;
|
||||
|
||||
display: flex;
|
||||
padding: 20rpx 30rpx;
|
||||
border-bottom: 1rpx solid #e5e5e5;
|
||||
|
||||
@ -1,16 +1,17 @@
|
||||
<template>
|
||||
<view class="my-account-page">
|
||||
<!-- 顶部导航栏 -->
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="我的账户"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
:border="false"
|
||||
backgroundColor="#eeeeee"
|
||||
></uni-nav-bar>
|
||||
</view>
|
||||
|
||||
<!-- 账户余额区域 -->
|
||||
<view class="account-summary">
|
||||
@ -21,7 +22,7 @@
|
||||
<text class="balance-amount">{{ (accountBalance/100).toFixed(2) }}</text>
|
||||
|
||||
<!-- 账户信息详情 -->
|
||||
<view class="account-details">
|
||||
<!-- <view class="account-details">
|
||||
<view class="detail-item">
|
||||
<text class="detail-label">单次提现限额</text>
|
||||
<text class="detail-value">{{ (withdrawalBalanceMaxOnce/100).toFixed(2) }}元</text>
|
||||
@ -34,7 +35,7 @@
|
||||
<text class="detail-label">最低提现金额</text>
|
||||
<text class="detail-value">{{ (lessWithdrawalBalance/100).toFixed(2) }}元</text>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
|
||||
<!-- 操作选项 -->
|
||||
@ -47,7 +48,7 @@
|
||||
<text class="action-title">提现</text>
|
||||
<text class="action-subtitle">提现金额不得少于{{ (lessWithdrawalBalance/100).toFixed(2) }}元</text>
|
||||
</view>
|
||||
<text class="action-arrow">></text>
|
||||
<uni-icons type="right" size="25" color="#999"></uni-icons>
|
||||
</view>
|
||||
|
||||
<view class="action-item" @click="handleBillDetails">
|
||||
@ -57,7 +58,7 @@
|
||||
<view class="action-content">
|
||||
<text class="action-title">账单明细</text>
|
||||
</view>
|
||||
<text class="action-arrow">></text>
|
||||
<uni-icons type="right" size="25" color="#999"></uni-icons>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -70,6 +71,19 @@
|
||||
import { ref, onMounted } from 'vue'
|
||||
import api from '@/api/api.js'
|
||||
import docUrl from '@/utils/docUrl'
|
||||
import { onLoad,onBackPress } from '@dcloudio/uni-app';
|
||||
const from = ref('');
|
||||
onLoad((options) => {
|
||||
if(options.from){
|
||||
from.value = options.from;
|
||||
}
|
||||
});
|
||||
onBackPress(() => {
|
||||
if(!from.value){
|
||||
plus.runtime.quit();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
// 响应式数据
|
||||
const accountBalance = ref(0)
|
||||
const withdrawalBalanceMaxOnce = ref(0)
|
||||
@ -86,13 +100,17 @@ onMounted(() => {
|
||||
|
||||
// 方法
|
||||
const goBack = () => {
|
||||
uni.navigateBack()
|
||||
if(!from.value){
|
||||
plus.runtime.quit();
|
||||
}else{
|
||||
uni.navigateBack();
|
||||
}
|
||||
}
|
||||
|
||||
const handleWithdrawal = () => {
|
||||
if(accountBalance.value < lessWithdrawalBalance.value){
|
||||
uni.showToast({
|
||||
title: `提现金额不得少于${(lessWithdrawalBalance/100).toFixed(2)}元`,
|
||||
title: `提现金额不得少于${(lessWithdrawalBalance.value/100).toFixed(2)}元`,
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
@ -150,9 +168,10 @@ const getMyAccount = async () => {
|
||||
|
||||
// 账户余额区域样式
|
||||
.account-summary {
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
background: linear-gradient(135deg, #8B2316, #A0522D);
|
||||
margin: 30rpx;
|
||||
border-radius: 20rpx;
|
||||
// margin: 30rpx;
|
||||
// border-radius: 20rpx;
|
||||
padding: 60rpx 40rpx;
|
||||
text-align: center;
|
||||
box-shadow: 0 8rpx 24rpx rgba(139, 35, 22, 0.3);
|
||||
@ -164,7 +183,7 @@ const getMyAccount = async () => {
|
||||
.profile-avatar {
|
||||
width: 120rpx;
|
||||
height: 120rpx;
|
||||
border-radius: 60rpx;
|
||||
border-radius: 20rpx;
|
||||
border: 4rpx solid rgba(255, 255, 255, 0.3);
|
||||
object-fit: cover;
|
||||
}
|
||||
@ -223,10 +242,10 @@ const getMyAccount = async () => {
|
||||
// 操作选项样式
|
||||
.action-items {
|
||||
background-color: #ffffff;
|
||||
margin: 0 30rpx;
|
||||
border-radius: 20rpx;
|
||||
margin-top: 30rpx;
|
||||
// border-radius: 20rpx;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.08);
|
||||
// box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.08);
|
||||
|
||||
.action-item {
|
||||
display: flex;
|
||||
|
||||
@ -1,16 +1,17 @@
|
||||
<template>
|
||||
<view class="withdrawal-page">
|
||||
<!-- 顶部导航栏 -->
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="提现"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
:border="false"
|
||||
backgroundColor="#eeeeee"
|
||||
></uni-nav-bar>
|
||||
</view>
|
||||
|
||||
<!-- 主内容区域 -->
|
||||
<view class="main-content">
|
||||
@ -51,8 +52,8 @@
|
||||
<text class="amount-value">{{ withdrawalAmount}}</text>
|
||||
</view>
|
||||
<view class="amount-details">
|
||||
<text class="tax-info">扣除个人所得税<text class="highlight-red">{{ (incomeTax / 100).toFixed(2) }}元</text></text>
|
||||
<text class="fee-info">扣除提现手续费<text class="highlight-red">{{ (withdrawalBalanceFee / 100).toFixed(2) }}元</text></text>
|
||||
<text class="tax-info">扣除个人所得税<text class="highlight-red">{{ incomeTax}}元</text></text>
|
||||
<!-- <text class="fee-info">扣除提现手续费<text class="highlight-red">{{ (withdrawalBalanceFee / 100).toFixed(2) }}元</text></text> -->
|
||||
<text class="actual-amount">此次提现实际到账<text class="highlight-red">{{ actualAmount}}元</text></text>
|
||||
</view>
|
||||
</view>
|
||||
@ -132,10 +133,11 @@ onMounted(() => {
|
||||
// 计算提现金额
|
||||
const calculateAmounts = () => {
|
||||
// 提现金额 = 账户余额 - 个人所得税 - 提现手续费
|
||||
const totalDeduction = incomeTax.value + withdrawalBalanceFee.value
|
||||
const amount = accountBalance.value - totalDeduction
|
||||
withdrawalAmount.value = accountBalance.value > 0 ? (accountBalance.value/100).toFixed(2) : '0.00'
|
||||
actualAmount.value = amount > 0 ? (amount/100).toFixed(2) : '0.00'
|
||||
// const totalDeduction = incomeTax.value + withdrawalBalanceFee.value
|
||||
// const amount = accountBalance.value - totalDeduction
|
||||
// withdrawalAmount.value = accountBalance.value > 0 ? (accountBalance.value/100).toFixed(2) : '0.00'
|
||||
// actualAmount.value = amount > 0 ? (amount/100).toFixed(2) : '0.00'
|
||||
|
||||
}
|
||||
|
||||
// 初始化数据
|
||||
@ -173,7 +175,7 @@ const getMyAccount = async () => {
|
||||
withdrawalBalanceFee.value = res.data.withdrawalBalanceFee
|
||||
lessWithdrawalBalance.value = res.data.lessWithdrawalBalance
|
||||
// 获取账户信息后计算金额
|
||||
calculateAmounts()
|
||||
//calculateAmounts()
|
||||
// 然后获取个人所得税
|
||||
getIncomeTax(accountBalance.value)
|
||||
}
|
||||
@ -187,10 +189,13 @@ const getIncomeTax = async (amount) => {
|
||||
try {
|
||||
const res = await api.getIncomeTax({amount: amount})
|
||||
console.log('个人所得税:', res)
|
||||
if (res && res.code === 200 && res.data) {
|
||||
incomeTax.value = res.data.incomeTax || 0
|
||||
if (res.code ==200) {
|
||||
incomeTax.value = (res.data.tax/100).toFixed(2) || 0
|
||||
withdrawalAmount.value = (amount/100).toFixed(2) || 0
|
||||
actualAmount.value = (res.data.actual_amount/100).toFixed(2) || 0
|
||||
|
||||
// 获取税费后重新计算金额
|
||||
calculateAmounts()
|
||||
//calculateAmounts()
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取个人所得税失败:', error)
|
||||
@ -405,7 +410,7 @@ const onCancelSms = () => {
|
||||
|
||||
// 主内容区域
|
||||
.main-content {
|
||||
padding: 0 30rpx;
|
||||
|
||||
}
|
||||
|
||||
// 加载状态
|
||||
@ -433,7 +438,7 @@ const onCancelSms = () => {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 30rpx 0;
|
||||
padding: 30rpx;
|
||||
|
||||
.section-title {
|
||||
font-size: 32rpx;
|
||||
@ -456,7 +461,8 @@ const onCancelSms = () => {
|
||||
.bank-card-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 30rpx 0;
|
||||
padding: 30rpx;
|
||||
background-color: #ffffff;
|
||||
|
||||
.bank-logo {
|
||||
width: 60rpx;
|
||||
@ -520,8 +526,8 @@ const onCancelSms = () => {
|
||||
|
||||
// 金额区域
|
||||
.amount-section {
|
||||
padding: 40rpx 0;
|
||||
|
||||
padding: 40rpx 30rpx;
|
||||
background-color: #ffffff;
|
||||
.amount-title {
|
||||
display: block;
|
||||
font-size: 32rpx;
|
||||
@ -556,7 +562,7 @@ const onCancelSms = () => {
|
||||
margin-bottom: 12rpx;
|
||||
|
||||
.highlight-red {
|
||||
color: #8B2316;
|
||||
color: red;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
210
pages_app/myCourseware/coursewareDetail.vue
Normal file
210
pages_app/myCourseware/coursewareDetail.vue
Normal file
@ -0,0 +1,210 @@
|
||||
<template>
|
||||
<view class="detail-page">
|
||||
<navBar title="订单详情" />
|
||||
|
||||
<view class="order-card">
|
||||
<view class="order-top">
|
||||
<text class="download-no">下载课件号: {{ detail.downloadNo || "--" }}</text>
|
||||
<text class="pay-status">{{ detail.statusText || "--" }}</text>
|
||||
</view>
|
||||
|
||||
<view class="section-divider"></view>
|
||||
|
||||
<view class="course-title">{{ detail.title || "--" }}</view>
|
||||
|
||||
|
||||
|
||||
<view class="info-list">
|
||||
<view class="info-row">
|
||||
<text class="info-label">课件作者:</text>
|
||||
<text class="info-value">{{ detail.author || "--" }}</text>
|
||||
</view>
|
||||
<view class="info-row">
|
||||
<text class="info-label">金额:</text>
|
||||
<text class="info-value amount">{{ detail.amountText || "--" }}</text>
|
||||
</view>
|
||||
<view class="info-row">
|
||||
<text class="info-label">创建时间:</text>
|
||||
<text class="info-value">{{ detail.createTime || "--" }}</text>
|
||||
</view>
|
||||
<view class="info-row">
|
||||
<text class="info-label">支付方式:</text>
|
||||
<text class="info-value">{{ detail.payType || "--" }}</text>
|
||||
</view>
|
||||
<view class="info-row">
|
||||
<text class="info-label">支付时间:</text>
|
||||
<text class="info-value">{{ detail.payTime || "--" }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from "vue";
|
||||
import { onLoad } from "@dcloudio/uni-app";
|
||||
import api from "@/api/api.js";
|
||||
|
||||
const coursewareId = ref("");
|
||||
const detail = ref({
|
||||
downloadNo: "",
|
||||
statusText: "",
|
||||
title: "",
|
||||
author: "",
|
||||
amountText: "",
|
||||
createTime: "",
|
||||
payType: "",
|
||||
payTime: "",
|
||||
});
|
||||
|
||||
const formatDateTime = (value) => {
|
||||
if (!value) return "";
|
||||
if (typeof value === "string" && value.includes("-")) return value;
|
||||
const timeNum = Number(value);
|
||||
if (!timeNum) return "";
|
||||
const ms = timeNum < 10000000000 ? timeNum * 1000 : timeNum;
|
||||
const d = new Date(ms);
|
||||
const y = d.getFullYear();
|
||||
const m = String(d.getMonth() + 1).padStart(2, "0");
|
||||
const day = String(d.getDate()).padStart(2, "0");
|
||||
const h = String(d.getHours()).padStart(2, "0");
|
||||
const min = String(d.getMinutes()).padStart(2, "0");
|
||||
const s = String(d.getSeconds()).padStart(2, "0");
|
||||
return `${y}-${m}-${day} ${h}:${min}:${s}`;
|
||||
};
|
||||
|
||||
const formatAmount = (value) => {
|
||||
if (value === undefined || value === null || value === "") return "";
|
||||
const num = Number(value);
|
||||
if (Number.isNaN(num)) return "";
|
||||
const amount = num > 1000 ? num / 100 : num;
|
||||
return `${amount.toFixed(2)}元`;
|
||||
};
|
||||
|
||||
const formatStatus = (raw) => {
|
||||
if (raw === undefined || raw === null) return "";
|
||||
const text = String(raw).toLowerCase();
|
||||
if (text === "paid" || text === "success" || text === "1" || text === "2") return "已支付";
|
||||
if (text === "unpaid" || text === "0" || text === "created") return "未支付";
|
||||
return String(raw);
|
||||
};
|
||||
|
||||
const formatPayType = (raw) => {
|
||||
if (raw === undefined || raw === null || raw === "") return "免费";
|
||||
const text = String(raw).toLowerCase();
|
||||
if (text === "0" || text === "free") return "免费";
|
||||
if (text === "1" || text.includes("wx") || text.includes("wechat")) return "微信";
|
||||
if (text === "2" || text.includes("ali")) return "支付宝";
|
||||
if (text === "3" || text.includes("balance")) return "余额";
|
||||
return String(raw);
|
||||
};
|
||||
|
||||
const fetchCoursewareDetail = async () => {
|
||||
if (!coursewareId.value) return;
|
||||
try {
|
||||
const res = await api.getGanDanFileOrder({
|
||||
order_id: coursewareId.value,
|
||||
});
|
||||
if (res.code !== 200 || !res.data) return;
|
||||
|
||||
const data = res.data;
|
||||
detail.value = {
|
||||
downloadNo: data.order_id || data.download_no || data.gandanfile_order_id || data.id || "",
|
||||
statusText: formatStatus(data.order_status || data.status || data.pay_status || ""),
|
||||
title: data.title || data.name || data.file_name || "",
|
||||
author: data.provider_name || data.author || data.nickname || "",
|
||||
amountText: formatAmount(data.pay_amount || data.total_fee || data.amount || data.price || 0),
|
||||
createTime: formatDateTime(data.create_date || data.create_time || data.order_time || ""),
|
||||
payType: formatPayType(data.pay_type_name || data.pay_type || data.payment_method || ""),
|
||||
payTime: formatDateTime(data.pay_date || data.pay_time || ""),
|
||||
};
|
||||
} catch (error) {
|
||||
uni.showToast({
|
||||
title: "获取详情失败",
|
||||
icon: "none",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
onLoad((options) => {
|
||||
coursewareId.value = options.id;
|
||||
fetchCoursewareDetail();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.detail-page {
|
||||
min-height: 100vh;
|
||||
background: #f5f5f5;
|
||||
}
|
||||
|
||||
.order-card {
|
||||
background: #fff;
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
}
|
||||
|
||||
.order-top {
|
||||
min-height: 88rpx;
|
||||
padding: 0 30rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.download-no {
|
||||
font-size: 32rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.pay-status {
|
||||
font-size: 32rpx;
|
||||
color: #8b2316;
|
||||
}
|
||||
|
||||
.section-divider {
|
||||
height: 16rpx;
|
||||
background: #f5f5f5;
|
||||
}
|
||||
|
||||
.course-title {
|
||||
padding: 20rpx 30rpx;
|
||||
color: #8b2316;
|
||||
font-size: 32rpx;
|
||||
line-height: 1.5;
|
||||
word-break: break-all;
|
||||
border-bottom: 2rpx solid #ccc;
|
||||
}
|
||||
|
||||
.info-list {
|
||||
padding: 24rpx 30rpx;
|
||||
}
|
||||
|
||||
.info-row {
|
||||
min-height: 56rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 10rpx;
|
||||
}
|
||||
|
||||
.info-row:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.info-label {
|
||||
font-size: 18rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.info-value {
|
||||
max-width: 68%;
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
text-align: right;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.amount {
|
||||
color:red;
|
||||
}
|
||||
</style>
|
||||
@ -1,18 +1,7 @@
|
||||
<template>
|
||||
<navBar title="我的课件" />
|
||||
<view class="my-courseware-page">
|
||||
<!-- 顶部导航栏 -->
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="我的课件"
|
||||
@cviewckLeft="goBack"
|
||||
fixed
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
:border="false"
|
||||
backgroundColor="#eeeeee"
|
||||
>
|
||||
|
||||
</uni-nav-bar>
|
||||
|
||||
<!-- 标签页导航 -->
|
||||
<view class="tab-nav">
|
||||
@ -37,11 +26,11 @@
|
||||
<view class="summary-bar">
|
||||
<view class="summary-item">
|
||||
<up-image :src="downLoadImg" width="36rpx" height="36rpx" ></up-image>
|
||||
<text class="summary-text">{{ activeTab === 'download' ? '下载账户' : '分享账户' }}: {{ downloadCount }}</text>
|
||||
<text class="summary-text">{{ totalAmount}}</text>
|
||||
</view>
|
||||
<view class="summary-item">
|
||||
<up-image :src="moneyImg" width="36rpx" height="36rpx" ></up-image>
|
||||
<text class="summary-text">{{ activeTab === 'download' ? '文件数量' : '分享文件' }}: {{ totalAmount }}</text>
|
||||
<text class="summary-text">{{ downloadCount }}</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -74,7 +63,7 @@
|
||||
<text class="label">时间:</text>
|
||||
<text class="value">{{ item.time }}</text>
|
||||
</view>
|
||||
<view class="courseware-status">
|
||||
<view class="courseware-status" v-if="activeTab === 'download'">
|
||||
<text class="label">状态:</text>
|
||||
<text class="value status-paid">{{ item.status }}</text>
|
||||
</view>
|
||||
@ -97,6 +86,8 @@
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue';
|
||||
import api from '@/api/api';
|
||||
import navTo from '@/utils/navTo.js';
|
||||
import { onLoad } from '@dcloudio/uni-app';
|
||||
import downLoadImg from "@/static/course_download.png"
|
||||
import moneyImg from "@/static/course_yuan.png"
|
||||
const activeTab = ref('download');
|
||||
@ -105,8 +96,8 @@ const loading = ref(false);
|
||||
const noMore = ref(false);
|
||||
const page = ref(1);
|
||||
const pageSize = ref(10);
|
||||
const downloadCount = ref(4);
|
||||
const totalAmount = ref('20.00');
|
||||
const downloadCount = ref(0);
|
||||
const totalAmount = ref(0);
|
||||
|
||||
const coursewareList = ref([]);
|
||||
|
||||
@ -118,6 +109,12 @@ const goBack = () => {
|
||||
uni.navigateBack();
|
||||
};
|
||||
|
||||
onLoad((options) => {
|
||||
if(options.from){
|
||||
//from.value = options.from;
|
||||
switchTab('share')
|
||||
}
|
||||
})
|
||||
const switchTab = (tab) => {
|
||||
activeTab.value = tab;
|
||||
// 切换标签时重置数据
|
||||
@ -132,36 +129,9 @@ const onItemClick = (item) => {
|
||||
console.log('点击课件:', item);
|
||||
|
||||
if (activeTab.value === 'download') {
|
||||
// 下载标签页的处理逻辑
|
||||
if (item.download_path) {
|
||||
uni.downloadFile({
|
||||
url: item.download_path,
|
||||
success: (res) => {
|
||||
if (res.statusCode === 200) {
|
||||
uni.openDocument({
|
||||
filePath: res.tempFilePath,
|
||||
success: () => {
|
||||
console.log('打开文档成功');
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('打开文档失败:', err);
|
||||
uni.showToast({ title: '无法打开此文件', icon: 'none' });
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('下载失败:', err);
|
||||
uni.showToast({ title: '下载失败', icon: 'none' });
|
||||
}
|
||||
});
|
||||
} else {
|
||||
uni.showToast({ title: `点击了下载课件: ${item.name}`, icon: 'none' });
|
||||
}
|
||||
} else {
|
||||
// 分享标签页的处理逻辑
|
||||
uni.showToast({ title: `点击了分享课件: ${item.name}`, icon: 'none' });
|
||||
// 这里可以添加分享相关的操作,比如查看分享详情、重新分享等
|
||||
navTo({
|
||||
url: `/pages_app/myCourseware/coursewareDetail?id=${item.order_id}`
|
||||
})
|
||||
}
|
||||
};
|
||||
|
||||
@ -175,7 +145,7 @@ const onRefresh = () => {
|
||||
if (res.code === 200 && res.data) {
|
||||
const data = res.data.list;
|
||||
// 更新摘要信息
|
||||
downloadCount.value = res.data.downloadTotalAccount || 0;
|
||||
downloadCount.value = (res.data.downloadTotalAccount/100).toFixed(2) || 0;
|
||||
totalAmount.value = res.data.downloadFileCount || 0;
|
||||
|
||||
// 处理课件列表数据
|
||||
@ -203,7 +173,7 @@ const onRefresh = () => {
|
||||
if (res.code === 200 && res.data) {
|
||||
const data = res.data.list;
|
||||
// 更新摘要信息 - 分享数据使用不同的字段
|
||||
downloadCount.value = res.data.shareTotalAccount || 0;
|
||||
downloadCount.value = (res.data.shareTotalAccount/100).toFixed(2) || 0;
|
||||
totalAmount.value = res.data.shareloadFileCount || 0;
|
||||
|
||||
// 处理分享列表数据
|
||||
@ -305,7 +275,7 @@ const onLoadMore = () => {
|
||||
background: #ffffff;
|
||||
border-bottom: 2rpx solid #f0f0f0;
|
||||
position: fixed;
|
||||
top: 180rpx;
|
||||
top: calc(var(--status-bar-height) + 44px);
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 10;
|
||||
@ -332,20 +302,21 @@ const onLoadMore = () => {
|
||||
|
||||
.summary-bar {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
align-items: center;
|
||||
background: #8B2316;
|
||||
padding: 20rpx 30rpx;
|
||||
position: fixed;
|
||||
top: 260rpx; // 标签页导航下方
|
||||
top: calc(var(--status-bar-height) + 44px + 124rpx); // 标签页导航下方
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 10;
|
||||
|
||||
.summary-item {
|
||||
flex:1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
justify-content: flex-start;
|
||||
.summary-text {
|
||||
color: #ffffff;
|
||||
font-size: 28rpx;
|
||||
@ -355,7 +326,7 @@ const onLoadMore = () => {
|
||||
}
|
||||
|
||||
.courseware-list {
|
||||
height: calc(100vh - 180rpx - 116rpx - 80rpx);
|
||||
// height: calc(100vh - 180rpx - 116rpx - 80rpx);
|
||||
position: fixed;
|
||||
top: 336rpx; // 调整顶部位置,为固定的摘要栏腾出空间
|
||||
bottom: 0;
|
||||
|
||||
@ -2,16 +2,19 @@
|
||||
|
||||
<view class="flower-page">
|
||||
<!-- 顶部统计栏(与截图一致:两项) -->
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="我的鲜花"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
|
||||
:border="false"
|
||||
backgroundColor="#eeeeee"
|
||||
/>
|
||||
</view>
|
||||
|
||||
<view class="stats-bar">
|
||||
<view class="stat">
|
||||
@ -60,10 +63,10 @@
|
||||
<view v-if="noMore && records.length > 0" class="no-more">
|
||||
<text>没有更多数据了</text>
|
||||
</view>
|
||||
<view class="debug-actions">
|
||||
<!-- <button @click="testLoadMore" size="mini" type="primary">测试加载更多</button>
|
||||
<text class="debug-info">当前页: {{ page }}, 加载中: {{ loading }}, 无更多: {{ noMore }}</text> -->
|
||||
</view>
|
||||
<!-- <view class="debug-actions">
|
||||
<button @click="testLoadMore" size="mini" type="primary">测试加载更多</button>
|
||||
<text class="debug-info">当前页: {{ page }}, 加载中: {{ loading }}, 无更多: {{ noMore }}</text>
|
||||
</view> -->
|
||||
</scroll-view>
|
||||
</view>
|
||||
</template>
|
||||
@ -74,6 +77,19 @@ import flowerImg from "@/static/flowers.png"
|
||||
import moneyImg from "@/static/mind_totle_money.png"
|
||||
import emptyImg from "@/static/icon_empty.png"
|
||||
import api from '@/api/api.js';
|
||||
import { onBackPress,onLoad } from '@dcloudio/uni-app';
|
||||
const from=ref('');
|
||||
onLoad((options) => {
|
||||
if(options.from){
|
||||
from.value = options.from;
|
||||
}
|
||||
});
|
||||
onBackPress(() => {
|
||||
if(!from.value){
|
||||
plus.runtime.quit();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
// 与截图一致的顶部两项统计:总鲜花数与累计金额
|
||||
const stat = ref({ totalCount: 0, totalAmount: 0.0 });
|
||||
|
||||
@ -91,11 +107,11 @@ const scrollTop = ref(0);
|
||||
|
||||
|
||||
const goBack = () => {
|
||||
uni.navigateBack({
|
||||
fail() {
|
||||
uni.redirectTo({ url: '/pages/index/index' });
|
||||
if(!from.value){
|
||||
plus.runtime.quit();
|
||||
}else{
|
||||
uni.navigateBack();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const getFlowerList = () => {
|
||||
@ -225,7 +241,7 @@ $card: #ffffff;
|
||||
|
||||
.stats-bar {
|
||||
display: flex;
|
||||
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
align-items: center;
|
||||
padding: 24rpx 30rpx;
|
||||
background: #fff;
|
||||
|
||||
@ -1,20 +1,6 @@
|
||||
<template>
|
||||
|
||||
<navBar :title="from == 'msg' ? '新的患者' : '我的患者'" />
|
||||
<view class="new-patient-page">
|
||||
|
||||
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="我的患者"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
:border="false"
|
||||
backgroundColor="#eeeeee"
|
||||
/>
|
||||
|
||||
|
||||
<!-- 提醒区域 -->
|
||||
<view class="reminder-section">
|
||||
<view class="reminder-icon">
|
||||
@ -65,6 +51,7 @@
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<empty v-if="applyList.length == 0 && historyList.length == 0" :emptyDesc="'暂无新随访申请患者'" />
|
||||
|
||||
<!-- 底部按钮 -->
|
||||
<view class="bottom-button">
|
||||
@ -75,11 +62,25 @@
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue';
|
||||
import { onLoad,onShow} from '@dcloudio/uni-app';
|
||||
import { onLoad,onShow,onBackPress} from '@dcloudio/uni-app';
|
||||
import goImg from "@/static/go_big.png"
|
||||
import api from '@/api/api.js'
|
||||
import docUrl from "@/utils/docUrl"
|
||||
import navTo from "@/utils/navTo.js"
|
||||
import empty from "@/components/empty/empty.vue"
|
||||
import navBar from "@/components/navBar/navBar.vue"
|
||||
const from=ref('');
|
||||
onLoad((options) => {
|
||||
if(options.from){
|
||||
from.value = options.from;
|
||||
}
|
||||
});
|
||||
onBackPress(() => {
|
||||
if(!from.value){
|
||||
plus.runtime.quit();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
// 响应式数据
|
||||
const pendingRequest = ref({
|
||||
name: '陈新华',
|
||||
@ -91,7 +92,11 @@ const historyList = ref([]);
|
||||
|
||||
// 方法
|
||||
const goBack = () => {
|
||||
if(!from.value){
|
||||
plus.runtime.quit();
|
||||
}else{
|
||||
uni.navigateBack();
|
||||
}
|
||||
};
|
||||
|
||||
const rejectRequest = () => {
|
||||
@ -316,6 +321,7 @@ const addPatient = () => {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
padding: 30rpx;
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
background-color: #ffffff;
|
||||
margin-bottom: 20rpx;
|
||||
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
<template>
|
||||
<view class="content">
|
||||
<!-- 顶部导航栏 -->
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="患者详情"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
:border="false"
|
||||
backgroundColor="#eeeeee"
|
||||
>
|
||||
@ -17,6 +17,7 @@
|
||||
</view>
|
||||
</template>
|
||||
</uni-nav-bar>
|
||||
</view>
|
||||
|
||||
<!-- 头部信息卡片 -->
|
||||
<view class="card header-card">
|
||||
@ -157,10 +158,20 @@
|
||||
const editDesc = ()=> uni.showToast({ title:'编辑描述', icon:'none' })
|
||||
const sendMessage = async()=>{
|
||||
let userId=uni.getStorageSync('userInfo').uuid.toLowerCase();
|
||||
let conversationId=userId+'|1|'+patientInfo.value.uuid.toLowerCase();
|
||||
await uni.$UIKitStore.uiStore.selectConversation(conversationId)
|
||||
navTo({
|
||||
url:'/pages_chat/chat/index'
|
||||
// let conversationId=userId+'|1|'+patientInfo.value.uuid.toLowerCase();
|
||||
// await uni.$UIKitStore.uiStore.selectConversation(conversationId)
|
||||
// navTo({
|
||||
// url:'/pages_chat/chat/index'
|
||||
// })
|
||||
uni.sendNativeEvent('goSendMsg', {
|
||||
msg: {
|
||||
patientuuid: patientInfo.value.uuid,
|
||||
nickname:nickname.value,
|
||||
realName:patientInfo.value.realName,
|
||||
photo:patientInfo.value.photo,
|
||||
}
|
||||
},ret => {
|
||||
console.log(ret);
|
||||
})
|
||||
};
|
||||
const nickname = ref('');
|
||||
@ -255,7 +266,9 @@
|
||||
.nav-right { padding-right: 20rpx; }
|
||||
|
||||
.card { background:#ffffff; padding: 20rpx; padding-top: 0;}
|
||||
.header-card { display:flex; padding-top: 20rpx;}
|
||||
.header-card {
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
display:flex; padding-top: 20rpx;}
|
||||
.avatar { width: 140rpx; height: 140rpx; border-radius: 12rpx; margin-right: 20rpx; }
|
||||
.base-info { flex:1; }
|
||||
.name-row { display:flex; align-items:center; margin-bottom: 10rpx; }
|
||||
|
||||
@ -2,13 +2,15 @@
|
||||
<view class="patient-group-page">
|
||||
|
||||
<!-- 头部 -->
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="患者分组"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
|
||||
:border="false"
|
||||
backgroundColor="#eeeeee"
|
||||
>
|
||||
@ -16,6 +18,7 @@
|
||||
<view class="save-text" @click="addGroup">新建</view>
|
||||
</template>
|
||||
</uni-nav-bar>
|
||||
</view>
|
||||
<!-- 筛选排序栏 -->
|
||||
<view class="filter-sort-bar">
|
||||
<view class="sort-section" @click="toggleGroupSort">
|
||||
@ -62,9 +65,9 @@
|
||||
<view v-if="showInnerSort" class="popup-mask" @click="closeInnerSort"></view>
|
||||
|
||||
<!-- 患者列表 -->
|
||||
<scroll-view class="patient-list-section" scroll-y="true" :style="{ height: scrollViewHeight }">
|
||||
<scroll-view class="patient-list-section" scroll-y="true" >
|
||||
<!-- 分组循环渲染 -->
|
||||
<view class="groupcell" v-for="(group, gi) in groups" :key="group.uuid || gi">
|
||||
<view class="groupcell" v-for="(group, gi) in groups" :key="group.uuid || gi" style="flex-direction: row;">
|
||||
<view class="section-title" @click="toggleGroup(gi)">
|
||||
<view class="left">
|
||||
<view class="imgbox" :class="{ 'active':openGroups[gi] }">
|
||||
@ -79,15 +82,16 @@
|
||||
</view>
|
||||
</view>
|
||||
<view class="patient-list" v-if="openGroups[gi]">
|
||||
<view class="patient-item" v-for="(patient, index) in (group.patientList || [])" :key="patient.uuid || index">
|
||||
<view class="patient-item" v-for="(patient, index) in getVisiblePatients(group, gi)" :key="patient.uuid || index" @click="goPatientDetail(patient.uuid)">
|
||||
<view class="patient-avatar">
|
||||
<up-image :src="docUrl + patient.photo" width="80rpx" height="80rpx" mode="aspectFill"></up-image>
|
||||
<up-image :src="patient._photoUrl" width="80rpx" height="80rpx" mode="aspectFill"></up-image>
|
||||
</view>
|
||||
<view class="patient-info">
|
||||
<view class="patient-name">{{ patient.realName || patient.nickname || '-' }}</view>
|
||||
<view class="follow-up-time">随访于{{ formatYMD(patient.join_date) }}</view>
|
||||
<view class="patient-name">{{ patient._displayName }}</view>
|
||||
<view class="follow-up-time">随访于{{ patient._formattedJoinDate }}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view v-if="isGroupRendering(group, gi)" class="rendering-tip">加载中...</view>
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
@ -96,7 +100,7 @@
|
||||
|
||||
<script setup>
|
||||
import { ref, computed, onMounted } from 'vue';
|
||||
import { onShow } from "@dcloudio/uni-app";
|
||||
import { onShow,onBackPress,onLoad } from "@dcloudio/uni-app";
|
||||
import upImg from "@/static/triangle_green_theme.png"
|
||||
import downImg from "@/static/triangle_normal.png"
|
||||
import groupRightImg from "@/static/groupright_big.png"
|
||||
@ -107,10 +111,36 @@ import dayjs from 'dayjs'
|
||||
import navTo from '@/utils/navTo.js'
|
||||
const list_sort = ref(0);
|
||||
const group_sort = ref(0);
|
||||
|
||||
const from = ref('');
|
||||
onLoad((options) => {
|
||||
if(options.from){
|
||||
from.value = options.from;
|
||||
}
|
||||
});
|
||||
onShow(() => {
|
||||
uni.showLoading({
|
||||
title: '加载中...',
|
||||
mask: true
|
||||
});
|
||||
fetchGroupList();
|
||||
});
|
||||
const goPatientDetail = (uuid) => {
|
||||
navTo({
|
||||
url: `/pages_app/patientDetail/patientDetail?uuid=${uuid}`
|
||||
})
|
||||
}
|
||||
onBackPress(() => {
|
||||
if(!from.value){
|
||||
uni.navigateBack();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
// 分组数据与展开状态
|
||||
const groups = ref([]);
|
||||
const openGroups = ref({});
|
||||
const groupRenderCount = ref({});
|
||||
const INITIAL_RENDER_COUNT = 20;
|
||||
const BATCH_RENDER_COUNT = 20;
|
||||
|
||||
const formatYMD = (val) => {
|
||||
if (!val) return '';
|
||||
@ -122,9 +152,6 @@ const formatYMD = (val) => {
|
||||
const groupSortTitle = computed(() => group_sort.value === 0 ? '按首字母' : '分组人数');
|
||||
const innerSortTitle = computed(() => list_sort.value === 0 ? '按首字母' : '随访时间');
|
||||
|
||||
onShow(() => {
|
||||
fetchGroupList();
|
||||
});
|
||||
|
||||
const fetchGroupList = async () => {
|
||||
const res = await api.groupList({
|
||||
@ -134,15 +161,74 @@ const fetchGroupList = async () => {
|
||||
group_sort:group_sort.value
|
||||
});
|
||||
if(res.code === 200){
|
||||
groups.value = Array.isArray(res.data) ? res.data : [];
|
||||
groups.value = Array.isArray(res.data) ? preprocessGroups(res.data) : [];
|
||||
// 初始化展开状态:默认收起
|
||||
openGroups.value = {};
|
||||
groupRenderCount.value = {};
|
||||
groups.value.forEach((_, idx) => openGroups.value[idx] = false);
|
||||
|
||||
uni.hideLoading();
|
||||
}
|
||||
};
|
||||
|
||||
const toggleGroup = (idx) => {
|
||||
openGroups.value[idx] = !openGroups.value[idx];
|
||||
if (openGroups.value[idx]) {
|
||||
startProgressiveRender(idx);
|
||||
}
|
||||
};
|
||||
|
||||
const preprocessGroups = (rawGroups) => {
|
||||
return rawGroups.map((group) => {
|
||||
const list = Array.isArray(group.patientList) ? group.patientList : [];
|
||||
list.forEach((patient) => {
|
||||
patient._formattedJoinDate = formatYMD(patient.join_date);
|
||||
patient._displayName = patient.realName || patient.nickname || '-';
|
||||
patient._photoUrl = `${docUrl}${patient.photo || ''}`;
|
||||
});
|
||||
return {
|
||||
...group,
|
||||
patientList: list
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
const startProgressiveRender = (idx) => {
|
||||
const group = groups.value[idx];
|
||||
if (!group) return;
|
||||
const total = (group.patientList || []).length;
|
||||
if (!total) {
|
||||
groupRenderCount.value[idx] = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
groupRenderCount.value[idx] = Math.min(INITIAL_RENDER_COUNT, total);
|
||||
if (total <= INITIAL_RENDER_COUNT) return;
|
||||
|
||||
const loadNextBatch = () => {
|
||||
if (!openGroups.value[idx]) return;
|
||||
const current = groupRenderCount.value[idx] || 0;
|
||||
if (current >= total) return;
|
||||
groupRenderCount.value[idx] = Math.min(current + BATCH_RENDER_COUNT, total);
|
||||
if (groupRenderCount.value[idx] < total) {
|
||||
setTimeout(loadNextBatch, 16);
|
||||
}
|
||||
};
|
||||
|
||||
setTimeout(loadNextBatch, 16);
|
||||
};
|
||||
|
||||
const getVisiblePatients = (group, idx) => {
|
||||
const list = group?.patientList || [];
|
||||
const renderCount = groupRenderCount.value[idx] || 0;
|
||||
if (renderCount >= list.length) return list;
|
||||
return list.slice(0, renderCount);
|
||||
};
|
||||
|
||||
const isGroupRendering = (group, idx) => {
|
||||
const total = (group?.patientList || []).length;
|
||||
const rendered = groupRenderCount.value[idx] || 0;
|
||||
return total > 0 && rendered < total;
|
||||
};
|
||||
|
||||
const editGroup = (group) => {
|
||||
@ -201,7 +287,11 @@ const chooseInnerSort = (type) => {
|
||||
|
||||
// 方法
|
||||
const goBack = () => {
|
||||
if(!from.value){
|
||||
plus.runtime.quit();
|
||||
}else{
|
||||
uni.navigateBack();
|
||||
}
|
||||
};
|
||||
|
||||
const createNew = () => {
|
||||
@ -218,6 +308,9 @@ const createNew = () => {
|
||||
.patient-group-page {
|
||||
min-height: 100vh;
|
||||
background-color: #f5f5f5;
|
||||
.groupcell{
|
||||
flex-direction: row!important;
|
||||
}
|
||||
}
|
||||
|
||||
/* 弹窗样式 */
|
||||
@ -388,7 +481,7 @@ const createNew = () => {
|
||||
padding: 20rpx 30rpx;
|
||||
background-color: #ffff;
|
||||
position: fixed;
|
||||
top: 180rpx;
|
||||
top: calc(var(--status-bar-height) + 44px);
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 9;
|
||||
@ -525,5 +618,12 @@ const createNew = () => {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.rendering-tip {
|
||||
padding: 16rpx 30rpx 24rpx;
|
||||
font-size: 24rpx;
|
||||
color: #999;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -1,10 +1,37 @@
|
||||
<template>
|
||||
<view class="content">
|
||||
<!-- 顶部导航栏 -->
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
:title="title"
|
||||
@clickLeft="goBack"
|
||||
|
||||
color="#8B2316"
|
||||
|
||||
:border="false"
|
||||
backgroundColor="#eee"
|
||||
>
|
||||
<template #right>
|
||||
<view class="nav-right" v-if="activeTab === 'message'">
|
||||
<uni-icons type="search" size="24" color="#8B2316" @click="searchPatients"></uni-icons>
|
||||
<uni-icons type="staff" size="24" color="#8B2316" @click="managePatients" style="margin-left: 30rpx;"></uni-icons>
|
||||
</view>
|
||||
<view class="nav-right" v-else-if="activeTab === 'list'">
|
||||
<uni-icons type="search" size="24" color="#8B2316" @click="searchPatients"></uni-icons>
|
||||
<uni-icons type="plusempty" size="24" color="#8B2316" @click="goCode" style="margin-left: 30rpx;" ></uni-icons>
|
||||
</view>
|
||||
<view class="nav-right" v-else-if="activeTab === 'plan'" @click="showAddMenu">
|
||||
<view class="save-btn">添加</view>
|
||||
</view>
|
||||
</template>
|
||||
</uni-nav-bar>
|
||||
</view>
|
||||
<!-- 顶部导航栏 -->
|
||||
<!-- <uni-nav-bar
|
||||
left-icon="left"
|
||||
:title="title"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
@ -25,7 +52,7 @@
|
||||
</view>
|
||||
|
||||
</template>
|
||||
</uni-nav-bar>
|
||||
</uni-nav-bar> -->
|
||||
|
||||
<!-- 消息列表区域 -->
|
||||
<scroll-view
|
||||
@ -36,7 +63,7 @@
|
||||
:refresher-triggered="isRefreshing"
|
||||
@refresherrefresh="onRefresh"
|
||||
>
|
||||
<ConversationList />
|
||||
<!-- <ConversationList /> -->
|
||||
<!-- 消息项 -->
|
||||
<!-- <view class="message-item" v-for="(item, index) in messageList" :key="item.id || index" @click="openMessage(item)">
|
||||
<view class="message-avatar">
|
||||
@ -69,7 +96,14 @@
|
||||
|
||||
<!-- 患者列表区域 -->
|
||||
<view class="patient-list" v-if="activeTab === 'list'">
|
||||
|
||||
|
||||
<view class="listbox">
|
||||
<!-- 使用 up-index-list 索引组件,数据动态渲染 -->
|
||||
<up-index-list :index-list="indexList" v-if="loadFinish" >
|
||||
|
||||
<!-- 特殊操作项 -->
|
||||
<template #header>
|
||||
<view class="special-actions" >
|
||||
<view class="action-item" @click="addNewPatient">
|
||||
<view class="action-icon new-patient">
|
||||
@ -93,10 +127,7 @@
|
||||
<uni-icons type="right" size="20" color="#999"></uni-icons>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="listbox">
|
||||
<!-- 使用 up-index-list 索引组件,数据动态渲染 -->
|
||||
<up-index-list :index-list="indexList" custom-nav-height="180rpx" v-if="patientList.length > 0">
|
||||
</template>
|
||||
<template v-for="group in patientGroups" :key="group.letter" >
|
||||
<up-index-item >
|
||||
<up-index-anchor :text="group.letter" />
|
||||
@ -104,13 +135,12 @@
|
||||
<view class="group-section">
|
||||
<view class="patient-item" v-for="item in group.items" :key="item.uuid || item.id" >
|
||||
<template v-if="item.placeholder">
|
||||
|
||||
<view class="patient-avatar-placeholder">
|
||||
<uni-icons type="person" size="32" color="#ffffff"></uni-icons>
|
||||
<uni-icons type="person" size="32" color="#ffffff" @click="goPatientDetail(item.uuid)"></uni-icons>
|
||||
</view>
|
||||
</template>
|
||||
<template v-else>
|
||||
<image class="patient-avatar" :src="docUrl+item.photo" mode="aspectFill"></image>
|
||||
<image class="patient-avatar" :src="docUrl+item.photo" mode="aspectFill" @click="goPatientDetail(item.uuid)"></image>
|
||||
</template>
|
||||
<view class="patient-info" @click="goPatientDetail(item.uuid)">
|
||||
<text class="patient-name">{{ item.realName }}</text>
|
||||
@ -127,7 +157,7 @@
|
||||
</up-index-item>
|
||||
</template>
|
||||
</up-index-list>
|
||||
<empty v-else></empty>
|
||||
<empty v-if="patientList.length === 0"></empty>
|
||||
</view>
|
||||
</view>
|
||||
<view class="plan" v-if="activeTab === 'plan'">
|
||||
@ -207,6 +237,7 @@
|
||||
</view>
|
||||
<view class="tab-item" :class="{active: activeTab === 'list'}" @click="switchTab('list')">
|
||||
<text class="tab-text">患者列表</text>
|
||||
<view class="tab-dot" v-if="hasNewPatient"><uni-badge class="uni-badge-left-margin" :text="applyList.length" :offset="[-3, -3]" size="small" /></view>
|
||||
</view>
|
||||
<view class="tab-item" :class="{active: activeTab === 'plan'}" @click="switchTab('plan')">
|
||||
<text class="tab-text">随访计划</text>
|
||||
@ -218,17 +249,30 @@
|
||||
|
||||
<script setup>
|
||||
import { ref, getCurrentInstance, computed } from 'vue';
|
||||
import { onShow,onLoad} from "@dcloudio/uni-app";
|
||||
import { onShow,onLoad,onBackPress} from "@dcloudio/uni-app";
|
||||
import dayImg from "@/static/visit_data11.png"
|
||||
import planImg from "@/static/visitplan.png"
|
||||
import api from '@/api/api.js';
|
||||
import navTo from '@/utils/navTo.js';
|
||||
import docUrl from '@/utils/docUrl.js';
|
||||
const patientList = ref([]);
|
||||
const navHeight = ref(40);
|
||||
onBackPress(() => {
|
||||
plus.runtime.quit();
|
||||
return true;
|
||||
});
|
||||
const getNavHeight = () => {
|
||||
const systemInfo = uni.getSystemInfoSync();
|
||||
console.log(2223);
|
||||
console.log(systemInfo);
|
||||
navHeight.value = systemInfo.statusBarHeight + 44;
|
||||
console.log(navHeight.value);
|
||||
}
|
||||
import pinyin from 'pinyin';
|
||||
import dayjs from 'dayjs'
|
||||
import lineImg from "@/static/item_visitplan_fg.png"
|
||||
import ConversationList from './conversation-list/index.vue'
|
||||
const loadFinish = ref(false);
|
||||
//import ConversationList from './conversation-list/index.vue'
|
||||
const title = ref('患者消息');
|
||||
const goPatientDetail = (uuid) => {
|
||||
navTo({
|
||||
@ -323,10 +367,11 @@
|
||||
}
|
||||
// 根据 patientList 构建按拼音首字母的分组
|
||||
const buildGroupsFromPatients = () => {
|
||||
|
||||
const map = new Map();
|
||||
patientList.value.forEach((p) => {
|
||||
const name = p.realName;
|
||||
const first = getFirstLetter(name).toUpperCase();
|
||||
const first = name?getFirstLetter(name).toUpperCase():'#';
|
||||
const letter = /^[A-Z]$/.test(first) ? first : '#';
|
||||
if (!map.has(letter)) map.set(letter, []);
|
||||
map.get(letter).push(p);
|
||||
@ -334,11 +379,22 @@
|
||||
const letters = Array.from(map.keys()).sort((a,b) => a.localeCompare(b));
|
||||
patientGroups.value = letters.map(l => ({ letter: l, items: map.get(l) }));
|
||||
rebuildIndexList();
|
||||
if(patientList.value.length > 4000){
|
||||
loadFinish.value = true;
|
||||
setTimeout(() => {
|
||||
uni.hideLoading();
|
||||
|
||||
}, 10000);
|
||||
}else{
|
||||
uni.hideLoading();
|
||||
loadFinish.value = true;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// 申请列表数据
|
||||
const applyList = ref([]);
|
||||
const hasNewPatient = computed(() => applyList.value.length > 0);
|
||||
|
||||
// 刷新状态
|
||||
const isRefreshing = ref(false);
|
||||
@ -412,13 +468,6 @@
|
||||
});
|
||||
}
|
||||
};
|
||||
const goBack = () => {
|
||||
uni.reLaunch({
|
||||
url: "/pages/index/index?from=push"
|
||||
})
|
||||
|
||||
};
|
||||
|
||||
const patientListByGBK = async () => {
|
||||
|
||||
const res = await api.patientListByGBK();
|
||||
@ -536,10 +585,20 @@
|
||||
switch(tab) {
|
||||
case 'message':
|
||||
// 患者消息页面逻辑 - 刷新申请列表
|
||||
getApplyList();
|
||||
title.value = '患者消息';
|
||||
uni.sendNativeEvent('goPatientMsg', {
|
||||
msg: 'goPatientMsg'
|
||||
},ret => {
|
||||
console.log(ret);
|
||||
})
|
||||
// getApplyList();
|
||||
// title.value = '患者消息';
|
||||
break;
|
||||
case 'list':
|
||||
uni.showLoading({
|
||||
title: '加载中...',
|
||||
mask: true
|
||||
});
|
||||
patientListByGBK();
|
||||
title.value = '患者列表';
|
||||
// 显示患者列表
|
||||
break;
|
||||
@ -556,14 +615,14 @@
|
||||
// 添加新患者
|
||||
const addNewPatient = () => {
|
||||
navTo({
|
||||
url: '/pages_app/myPatient/myPatient'
|
||||
url: '/pages_app/myPatient/myPatient?from=patientMsg'
|
||||
})
|
||||
};
|
||||
|
||||
// 管理患者分组
|
||||
const managePatientGroups = () => {
|
||||
navTo({
|
||||
url: '/pages_app/patientGroup/patientGroup'
|
||||
url: '/pages_app/patientGroup/patientGroup?from=patientMsg'
|
||||
})
|
||||
};
|
||||
|
||||
@ -582,7 +641,9 @@
|
||||
url: '/pages_app/visit/visit?from=patientMsg'
|
||||
});
|
||||
};
|
||||
|
||||
const goBack = () => {
|
||||
plus.runtime.quit();
|
||||
}
|
||||
// 添加日程
|
||||
const addSchedule = () => {
|
||||
showAddMenuFlag.value = false;
|
||||
@ -605,6 +666,7 @@
|
||||
|
||||
// 页面显示时加载数据
|
||||
onLoad((options) => {
|
||||
getNavHeight();
|
||||
if(options.from == 'push'){
|
||||
fromType.value='push';
|
||||
}
|
||||
@ -612,7 +674,15 @@
|
||||
loadMessageList();
|
||||
computeListHeight();
|
||||
getApplyList();
|
||||
patientListByGBK();
|
||||
|
||||
if(options.type=='list'){
|
||||
activeTab.value='list';
|
||||
switchTab('list')
|
||||
}
|
||||
if(options.type=='plan'){
|
||||
activeTab.value='plan';
|
||||
switchTab('plan')
|
||||
}
|
||||
|
||||
});
|
||||
onShow(() => {
|
||||
@ -789,6 +859,13 @@
|
||||
transition: color 0.3s;
|
||||
}
|
||||
|
||||
.tab-dot {
|
||||
position: absolute;
|
||||
top: 18rpx;
|
||||
right: 28rpx;
|
||||
|
||||
}
|
||||
|
||||
&.active {
|
||||
.tab-text {
|
||||
color: #8B2316;
|
||||
@ -809,18 +886,21 @@
|
||||
|
||||
// 患者列表样式
|
||||
.patient-list {
|
||||
// position: fixed;
|
||||
width: 100%;
|
||||
|
||||
height:calc(100vh - 265rpx);
|
||||
margin-top:calc(var(--status-bar-height) + 44px);
|
||||
height:calc(100vh - var(--status-bar-height) - 44px - 103rpx);
|
||||
overflow-y: scroll;
|
||||
display: flex;
|
||||
flex-direction:column;
|
||||
background-color: #ffffff;
|
||||
margin-top: 20rpx;
|
||||
padding-bottom: 500rpx;
|
||||
position: relative;
|
||||
|
||||
bottom: 103rpx;
|
||||
|
||||
.listbox{
|
||||
flex:1;
|
||||
padding-bottom: 100rpx;
|
||||
|
||||
}
|
||||
.groups-scroll {
|
||||
display: none;
|
||||
@ -1058,7 +1138,7 @@
|
||||
/* 随访计划样式 */
|
||||
.plan{
|
||||
position: fixed;
|
||||
top: 180rpx;
|
||||
top:calc(var(--status-bar-height) + 44px);
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom:110rpx;
|
||||
|
||||
@ -1,15 +1,19 @@
|
||||
<template>
|
||||
<view class="remark-page">
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="设置备注和分组"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
|
||||
:border="false"
|
||||
backgroundColor="#eee"
|
||||
/>
|
||||
</view>
|
||||
<view class="contentbox">
|
||||
<view class="form-block">
|
||||
<view class="label">备注</view>
|
||||
<input class="input" v-model.trim="remark" :placeholder="groupInfo.nickname || '给患者添加备注名'" placeholder-class="ph" maxlength="20"/>
|
||||
@ -25,6 +29,7 @@
|
||||
<view class="label">描述</view>
|
||||
<textarea class="textarea" v-model.trim="note" :placeholder="groupInfo.note || '补充患者关键信息,方便随访患者'" placeholder-class="ph" auto-height maxlength="140"/>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="bottom-bar">
|
||||
<button class="save-btn" @click="updateNicknameNote">保存</button>
|
||||
@ -98,8 +103,11 @@
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.contentbox{
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
}
|
||||
.remark-page{
|
||||
min-height: 100vh;
|
||||
height: 100vh;
|
||||
background: #f7f7f7;
|
||||
padding-bottom: 140rpx;
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<view class="setting-page">
|
||||
<uni-nav-bar
|
||||
<navBar :title="'常用设置'"></navBar>
|
||||
<!-- <uni-nav-bar
|
||||
left-icon="left"
|
||||
title="常用设置"
|
||||
@clickLeft="goBack"
|
||||
@ -11,7 +12,7 @@
|
||||
backgroundColor="#eee"
|
||||
>
|
||||
|
||||
</uni-nav-bar>
|
||||
</uni-nav-bar> -->
|
||||
|
||||
<view class="list-block">
|
||||
<view class="cell" @click="goRemark">
|
||||
@ -65,6 +66,7 @@
|
||||
import { ref } from 'vue'
|
||||
import navTo from '@/utils/navTo.js'
|
||||
import { onLoad, onShow } from '@dcloudio/uni-app'
|
||||
import navBar from '@/components/navBar/navBar.vue'
|
||||
import api from '@/api/api.js'
|
||||
import unidialog from '@/components/dialog/dialog.vue'
|
||||
const patientUuid = ref('')
|
||||
@ -137,7 +139,11 @@
|
||||
background:#f7f7f7;
|
||||
}
|
||||
.list-block{
|
||||
margin-top: 20rpx;
|
||||
position: fixed;
|
||||
top: calc(var(--status-bar-height) + 44px);
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: #fff;
|
||||
.cell{
|
||||
display: flex;
|
||||
|
||||
@ -113,10 +113,21 @@
|
||||
</view>
|
||||
<unidialog
|
||||
:visible="pptVisible"
|
||||
:content="pptContent"
|
||||
:showCancel="false"
|
||||
:showConfirm="true"
|
||||
:confirmText="'知道了'"
|
||||
@close="pptVisible=false"
|
||||
@confirm="pptConfirm"
|
||||
></unidialog>
|
||||
>
|
||||
<template v-slot:content>
|
||||
<view class="ppt-content">
|
||||
<image :src="contactImg" width="80rpx" height="80rpx" class="contact-img" @longpress.stop.prevent="saveContactImgToAlbum"></image>
|
||||
<view class="ppt-content-title">
|
||||
<text style="color:#666">APP下载课件为pdf格式,扫码联系平台文献助手获取原版PPT。</text>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
</unidialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -132,6 +143,7 @@
|
||||
import downLoadImg from "@/static/wdxz.png"
|
||||
import pptImg from "@/static/pdf.png"
|
||||
import wordImg from "@/static/word.png"
|
||||
import contactImg from "@/static/contact.png"
|
||||
import api from '@/api/api.js';
|
||||
import navTo from '@/utils/navTo.js';
|
||||
const isFilterActive=ref(false)
|
||||
@ -148,7 +160,50 @@
|
||||
const pageSize = ref(10);
|
||||
const pptConfirm=()=>{
|
||||
pptVisible.value=false;
|
||||
feedBack();
|
||||
//feedBack();
|
||||
}
|
||||
const saveContactImgToAlbum = () => {
|
||||
uni.getImageInfo({
|
||||
src: contactImg,
|
||||
success: (imgRes) => {
|
||||
uni.saveImageToPhotosAlbum({
|
||||
filePath: imgRes.path,
|
||||
success: () => {
|
||||
uni.showToast({
|
||||
title: '图片已保存到相册',
|
||||
icon: 'none'
|
||||
});
|
||||
},
|
||||
fail: (err) => {
|
||||
const errMsg = (err && err.errMsg) || '';
|
||||
if (errMsg.includes('auth deny') || errMsg.includes('authorize no response') || errMsg.includes('denied')) {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '请先在系统设置中允许访问相册',
|
||||
showCancel: true,
|
||||
confirmText: '去设置',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
uni.openSetting();
|
||||
}
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
uni.showToast({
|
||||
title: '保存失败,请稍后重试',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
fail: () => {
|
||||
uni.showToast({
|
||||
title: '图片读取失败',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 响应式数据
|
||||
@ -512,6 +567,12 @@
|
||||
$submit-btn-color: #20b2aa;
|
||||
$theme-color: #8B2316;
|
||||
$white: #fff;
|
||||
.contact-img{
|
||||
width: 280rpx;
|
||||
height: 280rpx;
|
||||
margin: 0 auto;
|
||||
display: block;
|
||||
}
|
||||
// 混合器
|
||||
@mixin flex-center {
|
||||
display: flex;
|
||||
|
||||
@ -109,6 +109,24 @@
|
||||
@close="freeClose"
|
||||
@confirm="freeConfirm"
|
||||
></unidialog>
|
||||
|
||||
<!-- 下载课件弹窗(非 App 端使用组件,App 端使用原生弹窗) -->
|
||||
<!-- #ifndef APP-PLUS -->
|
||||
<unidialog
|
||||
:visible="pptVisible"
|
||||
@close="closePptDownloadTip"
|
||||
@confirm="closePptDownloadTip"
|
||||
>
|
||||
<template v-slot:content>
|
||||
<view class="ppt-content">
|
||||
<image :src="contactImg" width="80rpx" height="80rpx" class="contact-img"></image>
|
||||
<view class="ppt-content-title">
|
||||
<text>APP下载课件为pdf格式,扫码联系平台文献助手获取原版PPT。</text>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
</unidialog>
|
||||
<!-- #endif -->
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -125,6 +143,7 @@ import friendImg from "@/static/share_wxc.png";
|
||||
import logoImg from "@/static/weiboShare.png";
|
||||
import downloadStore from "@/store/downloadStorePpt.js";
|
||||
import unidialog from "@/components/dialog/dialog.vue";
|
||||
import contactImg from "@/static/contact.png"
|
||||
import downloadImg from "@/static/ppt_dw.png";
|
||||
const freeVisible = ref(false);
|
||||
const freeContent = ref('');
|
||||
@ -136,10 +155,321 @@ import isAndroid from "@/utils/platform.js";
|
||||
const isFirstDownload = ref(false);
|
||||
const path=ref('');
|
||||
const from=ref('');
|
||||
const pptVisible = ref(false);
|
||||
const nativeDownloadMaskView = ref(null);
|
||||
const nativeDownloadPopupView = ref(null);
|
||||
const nativeDownloadPopupShowing = ref(false);
|
||||
const nativeDownloadPopupInfo = ref({
|
||||
screenW: 0,
|
||||
screenH: 0,
|
||||
dialogW: 0,
|
||||
dialogH: 0,
|
||||
dialogLeft: 0,
|
||||
dialogTop: 0,
|
||||
imageTop: 0,
|
||||
imageLeft: 0,
|
||||
imageSize: 0,
|
||||
buttonTop: 0,
|
||||
buttonH: 0
|
||||
});
|
||||
let downloadLongPressTimer = null;
|
||||
let downloadLongPressTriggered = false;
|
||||
const showPptDownloadTip = () => {
|
||||
// #ifdef APP-PLUS
|
||||
showNativeDownloadPopup();
|
||||
// #endif
|
||||
// #ifndef APP-PLUS
|
||||
pptVisible.value = true;
|
||||
// #endif
|
||||
};
|
||||
const closePptDownloadTip = () => {
|
||||
// #ifdef APP-PLUS
|
||||
closeNativeDownloadPopup();
|
||||
// #endif
|
||||
// #ifndef APP-PLUS
|
||||
pptVisible.value = false;
|
||||
// #endif
|
||||
};
|
||||
const freeConfirm = () => {
|
||||
freeVisible.value = false;
|
||||
downloadGanDanFile();
|
||||
};
|
||||
const clearDownloadLongPressTimer = () => {
|
||||
if (downloadLongPressTimer) {
|
||||
clearTimeout(downloadLongPressTimer);
|
||||
downloadLongPressTimer = null;
|
||||
}
|
||||
};
|
||||
const getDownloadRelativePoint = (e, info) => {
|
||||
let x = 0;
|
||||
let y = 0;
|
||||
if (e.clientX !== undefined && e.clientY !== undefined) {
|
||||
x = e.clientX;
|
||||
y = e.clientY;
|
||||
} else if (e.pageX !== undefined && e.pageY !== undefined) {
|
||||
x = e.pageX;
|
||||
y = e.pageY;
|
||||
} else if (e.touches && e.touches.length > 0) {
|
||||
x = e.touches[0].clientX || e.touches[0].pageX || 0;
|
||||
y = e.touches[0].clientY || e.touches[0].pageY || 0;
|
||||
} else if (e.changedTouches && e.changedTouches.length > 0) {
|
||||
x = e.changedTouches[0].clientX || e.changedTouches[0].pageX || 0;
|
||||
y = e.changedTouches[0].clientY || e.changedTouches[0].pageY || 0;
|
||||
}
|
||||
if (!x || !y) return null;
|
||||
let relativeX = x;
|
||||
let relativeY = y;
|
||||
// 不同机型/端上报坐标有差异:可能是屏幕坐标,也可能是面板内坐标
|
||||
if (!(x >= 0 && x <= info.dialogW && y >= 0 && y <= info.dialogH)) {
|
||||
relativeX = x - info.dialogLeft;
|
||||
relativeY = y - info.dialogTop;
|
||||
}
|
||||
if (relativeX < 0 || relativeX > info.dialogW || relativeY < 0 || relativeY > info.dialogH) {
|
||||
return null;
|
||||
}
|
||||
return { relativeX, relativeY };
|
||||
};
|
||||
const isPointInDownloadImageArea = (point, info) => {
|
||||
if (!point) return false;
|
||||
const { relativeX, relativeY } = point;
|
||||
return relativeX >= info.imageLeft &&
|
||||
relativeX <= info.imageLeft + info.imageSize &&
|
||||
relativeY >= info.imageTop &&
|
||||
relativeY <= info.imageTop + info.imageSize;
|
||||
};
|
||||
const saveNativePopupImageToAlbum = () => {
|
||||
// #ifdef APP-PLUS
|
||||
try {
|
||||
const localPath = plus.io.convertLocalFileSystemURL('_www/static/contact.png') || '_www/static/contact.png';
|
||||
uni.saveImageToPhotosAlbum({
|
||||
filePath: localPath,
|
||||
success: () => {
|
||||
uni.showToast({
|
||||
title: '图片已保存到相册',
|
||||
icon: 'none'
|
||||
});
|
||||
},
|
||||
fail: (err) => {
|
||||
const errMsg = (err && err.errMsg) || '';
|
||||
if (errMsg.includes('auth deny') || errMsg.includes('authorize no response') || errMsg.includes('denied')) {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '请先在系统设置中允许访问相册',
|
||||
showCancel: true,
|
||||
confirmText: '去设置',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
uni.openSetting();
|
||||
}
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
uni.showToast({
|
||||
title: '保存失败,请稍后重试',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
uni.showToast({
|
||||
title: '保存失败,请稍后重试',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
// #endif
|
||||
};
|
||||
|
||||
function createNativeDownloadPopup() {
|
||||
// #ifdef APP-PLUS
|
||||
if (nativeDownloadMaskView.value || nativeDownloadPopupView.value) return;
|
||||
const screenW = plus.screen.resolutionWidth;
|
||||
const screenH = plus.screen.resolutionHeight;
|
||||
const dialogW = uni.upx2px(620);
|
||||
const dialogH = uni.upx2px(660);
|
||||
const dialogLeft = Math.round((screenW - dialogW) / 2);
|
||||
const dialogTop = Math.round((screenH - dialogH) / 2);
|
||||
const buttonH = uni.upx2px(96);
|
||||
const buttonTop = dialogH - buttonH;
|
||||
const titleTop = uni.upx2px(46);
|
||||
const imageSize = uni.upx2px(280);
|
||||
const imageTop = titleTop + uni.upx2px(72);
|
||||
const imageLeft = Math.round((dialogW - imageSize) / 2);
|
||||
const textTop = imageTop + imageSize + uni.upx2px(36);
|
||||
|
||||
nativeDownloadPopupInfo.value = {
|
||||
screenW,
|
||||
screenH,
|
||||
dialogW,
|
||||
dialogH,
|
||||
dialogLeft,
|
||||
dialogTop,
|
||||
imageTop,
|
||||
imageLeft,
|
||||
imageSize,
|
||||
buttonTop,
|
||||
buttonH
|
||||
};
|
||||
|
||||
nativeDownloadMaskView.value = new plus.nativeObj.View('native-download-mask', {
|
||||
left: '0px',
|
||||
top: '0px',
|
||||
width: screenW + 'px',
|
||||
height: screenH + 'px',
|
||||
zindex: 99996,
|
||||
touchable: true,
|
||||
interceptTouchEvent: true
|
||||
}, [
|
||||
{ tag: 'rect', id: 'mask', position: { left: '0px', top: '0px', width: screenW + 'px', height: screenH + 'px' }, color: 'rgba(0,0,0,0.5)' }
|
||||
]);
|
||||
|
||||
nativeDownloadPopupView.value = new plus.nativeObj.View('native-download-panel', {
|
||||
left: dialogLeft + 'px',
|
||||
top: dialogTop + 'px',
|
||||
width: dialogW + 'px',
|
||||
height: dialogH + 'px',
|
||||
zindex: 99997,
|
||||
touchable: true,
|
||||
interceptTouchEvent: true
|
||||
}, []);
|
||||
|
||||
nativeDownloadPopupView.value.drawRect({
|
||||
color: '#FFFFFF',
|
||||
radius: uni.upx2px(24)
|
||||
}, {
|
||||
left: '0px',
|
||||
top: '0px',
|
||||
width: dialogW + 'px',
|
||||
height: dialogH + 'px'
|
||||
});
|
||||
|
||||
nativeDownloadPopupView.value.drawText('温馨提示', {
|
||||
left: '0px',
|
||||
top: titleTop + 'px',
|
||||
width: dialogW + 'px',
|
||||
height: uni.upx2px(56) + 'px'
|
||||
}, {
|
||||
size: uni.upx2px(34) + 'px',
|
||||
color: '#8B2316',
|
||||
align: 'center',
|
||||
verticalAlign: 'middle',
|
||||
weight: '500'
|
||||
});
|
||||
|
||||
try {
|
||||
nativeDownloadPopupView.value.drawBitmap('_www/static/contact.png', {}, {
|
||||
left: imageLeft + 'px',
|
||||
top: imageTop + 'px',
|
||||
width: imageSize + 'px',
|
||||
height: imageSize + 'px'
|
||||
});
|
||||
} catch (e) {}
|
||||
|
||||
nativeDownloadPopupView.value.drawText('APP下载课件为pdf格式,扫码联系', {
|
||||
left: uni.upx2px(60) + 'px',
|
||||
top: textTop + 'px',
|
||||
width: (dialogW - uni.upx2px(120)) + 'px',
|
||||
height: uni.upx2px(44) + 'px'
|
||||
}, {
|
||||
size: uni.upx2px(28) + 'px',
|
||||
color: '#666666',
|
||||
align: 'center',
|
||||
verticalAlign: 'middle'
|
||||
});
|
||||
|
||||
nativeDownloadPopupView.value.drawText('平台文献助手获取原版PPT。', {
|
||||
left: uni.upx2px(60) + 'px',
|
||||
top: (textTop + uni.upx2px(48)) + 'px',
|
||||
width: (dialogW - uni.upx2px(120)) + 'px',
|
||||
height: uni.upx2px(44) + 'px'
|
||||
}, {
|
||||
size: uni.upx2px(28) + 'px',
|
||||
color: '#666666',
|
||||
align: 'center',
|
||||
verticalAlign: 'middle'
|
||||
});
|
||||
|
||||
nativeDownloadPopupView.value.drawRect({ color: '#F0F0F0' }, {
|
||||
left: '0px',
|
||||
top: (buttonTop - 1) + 'px',
|
||||
width: dialogW + 'px',
|
||||
height: '1px'
|
||||
});
|
||||
|
||||
nativeDownloadPopupView.value.drawText('知道了', {
|
||||
left: '0px',
|
||||
top: buttonTop + 'px',
|
||||
width: dialogW + 'px',
|
||||
height: buttonH + 'px'
|
||||
}, {
|
||||
size: uni.upx2px(32) + 'px',
|
||||
color: '#000',
|
||||
align: 'center',
|
||||
verticalAlign: 'middle',
|
||||
weight: '500'
|
||||
});
|
||||
|
||||
const handleDownloadMaskClick = () => {
|
||||
clearDownloadLongPressTimer();
|
||||
closeNativeDownloadPopup();
|
||||
};
|
||||
const handleDownloadPanelTouchStart = (e) => {
|
||||
const info = nativeDownloadPopupInfo.value;
|
||||
const point = getDownloadRelativePoint(e, info);
|
||||
clearDownloadLongPressTimer();
|
||||
downloadLongPressTriggered = false;
|
||||
if (!isPointInDownloadImageArea(point, info)) return;
|
||||
downloadLongPressTimer = setTimeout(() => {
|
||||
downloadLongPressTriggered = true;
|
||||
saveNativePopupImageToAlbum();
|
||||
}, 600);
|
||||
};
|
||||
const handleDownloadPanelTouchEnd = () => {
|
||||
clearDownloadLongPressTimer();
|
||||
};
|
||||
const handleDownloadPanelClick = (e) => {
|
||||
const info = nativeDownloadPopupInfo.value;
|
||||
const point = getDownloadRelativePoint(e, info);
|
||||
if (!point) return;
|
||||
if (downloadLongPressTriggered) {
|
||||
downloadLongPressTriggered = false;
|
||||
return;
|
||||
}
|
||||
const { relativeY } = point;
|
||||
if (relativeY >= info.buttonTop) {
|
||||
closeNativeDownloadPopup();
|
||||
}
|
||||
};
|
||||
|
||||
nativeDownloadMaskView.value.addEventListener('click', handleDownloadMaskClick, false);
|
||||
nativeDownloadMaskView.value.addEventListener('touchstart', handleDownloadMaskClick, false);
|
||||
nativeDownloadPopupView.value.addEventListener('click', handleDownloadPanelClick, false);
|
||||
nativeDownloadPopupView.value.addEventListener('touchstart', handleDownloadPanelTouchStart, false);
|
||||
nativeDownloadPopupView.value.addEventListener('touchend', handleDownloadPanelTouchEnd, false);
|
||||
nativeDownloadPopupView.value.addEventListener('touchcancel', handleDownloadPanelTouchEnd, false);
|
||||
// #endif
|
||||
}
|
||||
|
||||
function showNativeDownloadPopup() {
|
||||
// #ifdef APP-PLUS
|
||||
if (nativeDownloadPopupShowing.value) return;
|
||||
if (!nativeDownloadMaskView.value || !nativeDownloadPopupView.value) {
|
||||
createNativeDownloadPopup();
|
||||
}
|
||||
nativeDownloadMaskView.value && nativeDownloadMaskView.value.show();
|
||||
nativeDownloadPopupView.value && nativeDownloadPopupView.value.show();
|
||||
nativeDownloadPopupShowing.value = true;
|
||||
// #endif
|
||||
}
|
||||
|
||||
function closeNativeDownloadPopup() {
|
||||
// #ifdef APP-PLUS
|
||||
if (!nativeDownloadPopupShowing.value) return;
|
||||
nativeDownloadMaskView.value && nativeDownloadMaskView.value.hide();
|
||||
nativeDownloadPopupView.value && nativeDownloadPopupView.value.hide();
|
||||
nativeDownloadPopupShowing.value = false;
|
||||
// #endif
|
||||
}
|
||||
|
||||
// 删除任务
|
||||
const removeTask = (index) => {
|
||||
@ -239,7 +569,9 @@ onLoad((options) => {
|
||||
path.value =decodeURIComponent(options.src);
|
||||
from.value = options.from;
|
||||
checkUser(options);
|
||||
//showNativeDownloadPopup();
|
||||
//ganDanFileDetials();
|
||||
|
||||
});
|
||||
onUnload(() => {
|
||||
uni.$off('paySuccess');
|
||||
@ -269,6 +601,7 @@ onShow(() => {
|
||||
downLoadStatus.value = 'completed';
|
||||
}else if(downloadTasks.value[i].status == 'downloading') {
|
||||
downLoadStatus.value = 'loading';
|
||||
//showPptDownloadTip();
|
||||
}else if(downloadTasks.value[i].status == 'paused') {
|
||||
downLoadStatus.value = 'paused';
|
||||
}else if(downloadTasks.value[i].status == 'failed') {
|
||||
@ -742,10 +1075,12 @@ const createGanDanFileOrder=()=>{
|
||||
})
|
||||
};
|
||||
const downLoadByType=()=>{
|
||||
|
||||
if(orderInfo.value.price==0){
|
||||
downloadGanDanFile('free');
|
||||
}else if(orderInfo.value.price>0){
|
||||
if(orderInfo.value.welfareNum>0){
|
||||
|
||||
//freeVisible.value = true;
|
||||
freeContent.value = '您还有'+orderInfo.value.welfareNum+'次免费下载机会,希望本次下载免费吗?';
|
||||
uni.showModal({
|
||||
@ -790,6 +1125,7 @@ const downLoadByType=()=>{
|
||||
}
|
||||
}
|
||||
const downloadGanDanFile = (type) => {
|
||||
showPptDownloadTip();
|
||||
let order_id='';
|
||||
if(type=='free'){
|
||||
order_id='FREE';
|
||||
@ -1020,6 +1356,7 @@ const startDownload = (index) => {
|
||||
if (!taskItem) return;
|
||||
hasDownload.value = true;
|
||||
downLoadStatus.value = 'loading';
|
||||
//showPptDownloadTip();
|
||||
const task = uni.downloadFile({
|
||||
url: taskItem.url,
|
||||
success: (res1) => {
|
||||
@ -1243,11 +1580,14 @@ const shareToMoments = () => {
|
||||
// 页面隐藏/卸载时清理原生弹窗
|
||||
onHide(() => {
|
||||
// #ifdef APP-PLUS
|
||||
clearDownloadLongPressTimer();
|
||||
closeNativePopup();
|
||||
closeNativeDownloadPopup();
|
||||
// #endif
|
||||
});
|
||||
onUnload(() => {
|
||||
// #ifdef APP-PLUS
|
||||
clearDownloadLongPressTimer();
|
||||
try{
|
||||
nativeMaskView.value && nativeMaskView.value.close && nativeMaskView.value.close();
|
||||
nativePopupView.value && nativePopupView.value.close && nativePopupView.value.close();
|
||||
@ -1255,6 +1595,13 @@ onUnload(() => {
|
||||
nativeMaskView.value = null;
|
||||
nativePopupView.value = null;
|
||||
popupShowing.value = false;
|
||||
try{
|
||||
nativeDownloadMaskView.value && nativeDownloadMaskView.value.close && nativeDownloadMaskView.value.close();
|
||||
nativeDownloadPopupView.value && nativeDownloadPopupView.value.close && nativeDownloadPopupView.value.close();
|
||||
}catch(e){}
|
||||
nativeDownloadMaskView.value = null;
|
||||
nativeDownloadPopupView.value = null;
|
||||
nativeDownloadPopupShowing.value = false;
|
||||
// #endif
|
||||
});
|
||||
</script>
|
||||
@ -1289,7 +1636,12 @@ onUnload(() => {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.contact-img{
|
||||
width: 280rpx;
|
||||
height: 280rpx;
|
||||
margin: 0 auto;
|
||||
display: block;
|
||||
}
|
||||
.download-bar {
|
||||
position: fixed;
|
||||
top:calc(var(--status-bar-height) + 44px);
|
||||
|
||||
@ -1,13 +1,15 @@
|
||||
<template>
|
||||
<view class="content">
|
||||
<!-- 顶部导航栏 -->
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="添加日程"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
|
||||
:border="false"
|
||||
backgroundColor="#eee"
|
||||
>
|
||||
@ -17,6 +19,7 @@
|
||||
</view>
|
||||
</template>
|
||||
</uni-nav-bar>
|
||||
</view>
|
||||
|
||||
<!-- 主要内容区域 -->
|
||||
<view class="main-content">
|
||||
@ -296,8 +299,13 @@
|
||||
|
||||
/* 主要内容区域 */
|
||||
.main-content {
|
||||
position: fixed;
|
||||
top: calc(var(--status-bar-height) + 44px);
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
|
||||
margin-top: 20rpx;
|
||||
// margin-top: 20rpx;
|
||||
}
|
||||
|
||||
/* 表单区域样式 */
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
<template>
|
||||
<view class="select-page">
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="选择患者"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
:border="false"
|
||||
backgroundColor="#eee"
|
||||
>
|
||||
@ -16,6 +16,7 @@
|
||||
</view>
|
||||
</template>
|
||||
</uni-nav-bar>
|
||||
</view>
|
||||
|
||||
<!-- 搜索框 -->
|
||||
<view class="search-bar">
|
||||
@ -51,22 +52,32 @@
|
||||
const selectedIds = ref([])
|
||||
const patientList = ref([])
|
||||
const selectedDetail = ref([])
|
||||
|
||||
const availablePatientList = ref([])
|
||||
// 计算属性:显示所有患者,但标记已选中的状态
|
||||
const availablePatientList = computed(() => {
|
||||
return patientList.value
|
||||
})
|
||||
// const availablePatientList = computed(() => {
|
||||
// return patientList.value
|
||||
// })
|
||||
const patientListByGBK = async () => {
|
||||
|
||||
const res = await api.patientListByGBK();
|
||||
if(res.code == 1){
|
||||
patientList.value = res.data;
|
||||
|
||||
|
||||
availablePatientList.value = res.data;
|
||||
if(res.data.length > 1000){
|
||||
setTimeout(() => {
|
||||
uni.hideLoading();
|
||||
}, 5000);
|
||||
}else{
|
||||
uni.hideLoading();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
onLoad((options) => {
|
||||
uni.showLoading({
|
||||
title: '加载中...',
|
||||
mask: true
|
||||
})
|
||||
if(options.from == 'chatMsg'){
|
||||
from.value = 'chatMsg';
|
||||
}
|
||||
@ -79,9 +90,11 @@
|
||||
uni.removeStorageSync('preSelectedIds')
|
||||
}
|
||||
} catch (e) {}
|
||||
patientListByGBK();
|
||||
})
|
||||
onShow(() => {
|
||||
patientListByGBK();
|
||||
|
||||
|
||||
// 根据已选中的ID更新selectedDetail
|
||||
updateSelectedDetail();
|
||||
});
|
||||
@ -112,7 +125,12 @@
|
||||
}
|
||||
|
||||
const onSearch = () => {
|
||||
patientList.value = patientList.value.filter(p => p.realName.indexOf(keyword.value) !== -1 || (p.nickname && p.nickname.indexOf(keyword.value) !== -1) || p.mobile.indexOf(keyword.value) !== -1)
|
||||
if(keyword.value.replace(/\s/g, "")){
|
||||
availablePatientList.value = patientList.value.filter(p => p.realName.indexOf(keyword.value) !== -1 || (p.nickname && p.nickname.indexOf(keyword.value) !== -1) || p.mobile.indexOf(keyword.value) !== -1)
|
||||
}else{
|
||||
availablePatientList.value = patientList.value
|
||||
}
|
||||
|
||||
}
|
||||
const goBack = () => uni.navigateBack()
|
||||
const confirmSelect = () => {
|
||||
@ -143,14 +161,17 @@
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.select-page{
|
||||
min-height: 100vh; background:#fefefe;
|
||||
min-height: 100vh; background:#fefefe;overflow: hidden;
|
||||
}
|
||||
.confirm-text{ color:#fff; font-size: 28rpx;white-space: nowrap; }
|
||||
.confirm-btn{ background:#7f7f7f; padding: 10rpx 18rpx; border-radius: 26rpx; }
|
||||
.confirm-btn.active{ background:#8B2316; }
|
||||
.search-bar{
|
||||
|
||||
border: 2rpx solid #eee;
|
||||
margin: 20rpx 30rpx; display:flex; align-items:center; gap: 16rpx;
|
||||
margin: 0rpx 30rpx; display:flex;
|
||||
margin-top: calc(var(--status-bar-height) + 64px);
|
||||
align-items:center; gap: 16rpx;
|
||||
.input-wrap{ flex:1; background:#fff; border-radius: 12rpx; padding: 16rpx 20rpx; }
|
||||
.search-input{ font-size: 28rpx; color:#333; }
|
||||
.ph{ color:#bfbfbf; }
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
<template>
|
||||
<view class="select-page">
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="选择患者"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
:border="false"
|
||||
backgroundColor="#eee"
|
||||
>
|
||||
@ -16,6 +16,7 @@
|
||||
</view>
|
||||
</template> -->
|
||||
</uni-nav-bar>
|
||||
</view>
|
||||
|
||||
<!-- 搜索框 -->
|
||||
<view class="search-bar">
|
||||
@ -50,22 +51,32 @@
|
||||
const selectedIds = ref([])
|
||||
const patientList = ref([])
|
||||
const selectedDetail = ref([])
|
||||
|
||||
const availablePatientList = ref([])
|
||||
// 计算属性:显示所有患者,但标记已选中的状态
|
||||
const availablePatientList = computed(() => {
|
||||
return patientList.value
|
||||
})
|
||||
// const availablePatientList = computed(() => {
|
||||
// return patientList.value
|
||||
// })
|
||||
const patientListByGBK = async () => {
|
||||
|
||||
const res = await api.patientListByGBK();
|
||||
if(res.code == 1){
|
||||
patientList.value = res.data;
|
||||
|
||||
|
||||
availablePatientList.value = res.data;
|
||||
if(res.data.length > 1000){
|
||||
setTimeout(() => {
|
||||
uni.hideLoading();
|
||||
}, 5000);
|
||||
}else{
|
||||
uni.hideLoading();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
onLoad(() => {
|
||||
uni.showLoading({
|
||||
title: '加载中...',
|
||||
mask: true
|
||||
})
|
||||
// 读取已选中的成员ID
|
||||
try {
|
||||
const preSelected = uni.getStorageSync('preSelectedIds')
|
||||
@ -75,9 +86,10 @@
|
||||
uni.removeStorageSync('preSelectedIds')
|
||||
}
|
||||
} catch (e) {}
|
||||
patientListByGBK();
|
||||
})
|
||||
onShow(() => {
|
||||
patientListByGBK();
|
||||
|
||||
// 根据已选中的ID更新selectedDetail
|
||||
updateSelectedDetail();
|
||||
});
|
||||
@ -115,7 +127,12 @@
|
||||
}
|
||||
|
||||
const onSearch = () => {
|
||||
patientList.value = patientList.value.filter(p => p.realName.indexOf(keyword.value) !== -1 || (p.nickname && p.nickname.indexOf(keyword.value) !== -1) || p.mobile.indexOf(keyword.value) !== -1)
|
||||
if(keyword.value.replace(/\s/g, "")){
|
||||
availablePatientList.value = patientList.value.filter(p => p.realName.indexOf(keyword.value) !== -1 || (p.nickname && p.nickname.indexOf(keyword.value) !== -1) || p.mobile.indexOf(keyword.value) !== -1)
|
||||
}else{
|
||||
availablePatientList.value = patientList.value
|
||||
}
|
||||
//patientList.value = patientList.value.filter(p => p.realName.indexOf(keyword.value) !== -1 || (p.nickname && p.nickname.indexOf(keyword.value) !== -1) || p.mobile.indexOf(keyword.value) !== -1)
|
||||
}
|
||||
const goBack = () => uni.navigateBack()
|
||||
const confirmSelect = (id) => {
|
||||
@ -135,14 +152,16 @@
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.select-page{
|
||||
min-height: 100vh; background:#fefefe;
|
||||
min-height: 100vh; background:#fefefe;overflow: hidden;
|
||||
}
|
||||
.confirm-text{ color:#fff; font-size: 28rpx;white-space: nowrap; }
|
||||
.confirm-btn{ background:#7f7f7f; padding: 10rpx 18rpx; border-radius: 26rpx; }
|
||||
.confirm-btn.active{ background:#8B2316; }
|
||||
.search-bar{
|
||||
border: 2rpx solid #eee;
|
||||
margin: 20rpx 30rpx; display:flex; align-items:center; gap: 16rpx;
|
||||
margin: 20rpx 30rpx;
|
||||
margin-top: calc(var(--status-bar-height) + 64px);
|
||||
display:flex; align-items:center; gap: 16rpx;
|
||||
.input-wrap{ flex:1; background:#fff; border-radius: 12rpx; padding: 16rpx 20rpx; }
|
||||
.search-input{ font-size: 28rpx; color:#333; }
|
||||
.ph{ color:#bfbfbf; }
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="肝胆视频"
|
||||
title="肝胆视频1"
|
||||
@clickLeft="goBack"
|
||||
color="#8B2316"
|
||||
:border="false"
|
||||
|
||||
@ -1,13 +1,15 @@
|
||||
<template>
|
||||
<view class="content">
|
||||
<!-- 顶部导航栏 -->
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="添加随访计划"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
|
||||
:border="false"
|
||||
backgroundColor="#eee"
|
||||
>
|
||||
@ -17,6 +19,8 @@
|
||||
</view>
|
||||
</template>
|
||||
</uni-nav-bar>
|
||||
</view>
|
||||
<!-- -->
|
||||
|
||||
<!-- 患者选择 -->
|
||||
<view class="form-section" @click="selectPatient">
|
||||
@ -140,8 +144,9 @@
|
||||
show.value=false;
|
||||
}
|
||||
const goVisitNote=(idx,note)=>{
|
||||
let name=patientName.value?encodeURIComponent(patientName.value):'';
|
||||
navTo({
|
||||
url: '/pages_app/visitNote/visitNote?idx='+idx+'¬e='+encodeURIComponent(note)+'&patient_name='+encodeURIComponent(patientName.value),
|
||||
url: '/pages_app/visitNote/visitNote?idx='+idx+'¬e='+encodeURIComponent(note)+'&patient_name='+encodeURIComponent(name),
|
||||
events: {
|
||||
onVisitNoteSubmit: ({ note, idx }) => {
|
||||
console.log('onVisitNoteSubmit', note, idx)
|
||||
@ -216,7 +221,7 @@
|
||||
if (!isNaN(parsed.getTime())) baseDate = parsed;
|
||||
}
|
||||
const nextDate = addMonths(baseDate, 3);
|
||||
visits.value.push({ id, date: formatDate(nextDate) });
|
||||
visits.value.push({ id, date: formatDate(nextDate),note:defaultContent });
|
||||
// 下一帧滚动到新项
|
||||
nextTick(()=>{ scrollIntoViewId.value = `visit-${id}`; });
|
||||
};
|
||||
@ -317,7 +322,8 @@
|
||||
.submit-text { font-size: 32rpx; color: #8B2316; font-weight: 500; }
|
||||
|
||||
.form-section {
|
||||
margin-top: 20rpx;
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
// margin-top: 20rpx;
|
||||
display: flex; align-items: center; justify-content: space-between;
|
||||
padding: 30rpx; background: #ffffff; border-bottom: 1rpx solid #f0f0f0;
|
||||
.section-label { width: 160rpx; flex-shrink: 0; }
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
<template>
|
||||
<view class="visit-note-page">
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="添加随访计划"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
:border="false"
|
||||
backgroundColor="#eee"
|
||||
>
|
||||
@ -16,11 +16,13 @@
|
||||
</view>
|
||||
</template>
|
||||
</uni-nav-bar>
|
||||
</view>
|
||||
|
||||
<view class="contentbox">
|
||||
<!-- 患者行 -->
|
||||
<view class="row" @click="noop">
|
||||
<text class="row-label">患者</text>
|
||||
<text class="row-value">{{ patientName }}</text>
|
||||
<text class="row-value">{{ patientName?patientName:'' }}</text>
|
||||
</view>
|
||||
|
||||
<!-- 标题栏 -->
|
||||
@ -31,6 +33,7 @@
|
||||
<textarea class="note-textarea" v-model.trim="note" placeholder="请填写随访内容" auto-height :maxlength="200" />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -41,7 +44,9 @@
|
||||
const note = ref('请近日来医院复诊、复查')
|
||||
const idx = ref(0)
|
||||
onLoad((options) => {
|
||||
patientName.value =decodeURIComponent( options?.patient_name )
|
||||
console.log(options.patient_name==undefined)
|
||||
patientName.value =options.patient_name ?decodeURIComponent(options.patient_name):'';
|
||||
console.log(patientName.value)
|
||||
if (options?.note) note.value = decodeURIComponent(options.note)
|
||||
if (options?.idx) idx.value = options.idx
|
||||
|
||||
@ -62,6 +67,9 @@
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.contentbox{
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
}
|
||||
.visit-note-page{
|
||||
min-height: 100vh; background:#f5f5f5;
|
||||
}
|
||||
@ -78,7 +86,7 @@
|
||||
|
||||
.note-box{ background:#fff; padding: 20rpx 24rpx; }
|
||||
.note-textarea{
|
||||
width: 100%; min-height: 260rpx; background:#e5e5e5; border-radius: 0; padding: 20rpx; font-size: 32rpx; color:#111;
|
||||
box-sizing: border-box;width: 100%; min-height: 260rpx; background:#e5e5e5; border-radius: 0; padding: 20rpx; font-size: 32rpx; color:#111;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
1164
pages_app/webview/webviewClass.vue
Normal file
1164
pages_app/webview/webviewClass.vue
Normal file
File diff suppressed because it is too large
Load Diff
@ -100,13 +100,21 @@ const addNew = () => {
|
||||
}
|
||||
|
||||
.list-container {
|
||||
padding: 24rpx;
|
||||
top: calc(var(--status-bar-height) + 54px);
|
||||
width: 100%;
|
||||
bottom: 120rpx;
|
||||
left: 0rpc;
|
||||
right: 0rpx;
|
||||
overflow-y: scroll;
|
||||
position: fixed;
|
||||
|
||||
}
|
||||
|
||||
.card {
|
||||
background-color: #fff;
|
||||
border-radius: 16rpx;
|
||||
overflow: hidden;
|
||||
margin: 0 30rpx 20rpx;
|
||||
margin-bottom: 20rpx;
|
||||
box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.04);
|
||||
}
|
||||
|
||||
1545
pages_chat/chat/message/message-input copy.vue
Normal file
1545
pages_chat/chat/message/message-input copy.vue
Normal file
File diff suppressed because it is too large
Load Diff
@ -361,8 +361,8 @@ const patientListByGBK = async () => {
|
||||
};
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
conversationType: V2NIMConst.V2NIMConversationType
|
||||
to: string
|
||||
conversationType?: V2NIMConst.V2NIMConversationType
|
||||
to?: string
|
||||
isGroupSend?: boolean
|
||||
replyMsgsMap?: {
|
||||
[key: string]: V2NIMMessageForUI
|
||||
@ -371,12 +371,25 @@ const props = withDefaults(
|
||||
{}
|
||||
)
|
||||
const emits = defineEmits(['send'])
|
||||
/** 会话ID */
|
||||
const conversationId =
|
||||
props.conversationType ===
|
||||
/** 会话ID(群发场景可不传 to / conversationType) */
|
||||
const getConversationId = () => {
|
||||
if (!props.to || props.conversationType === undefined) return ''
|
||||
return props.conversationType ===
|
||||
V2NIMConst.V2NIMConversationType.V2NIM_CONVERSATION_TYPE_P2P
|
||||
? uni.$UIKitNIM.V2NIMConversationIdUtil.p2pConversationId(props.to)
|
||||
: uni.$UIKitNIM.V2NIMConversationIdUtil.teamConversationId(props.to)
|
||||
}
|
||||
const ensureConversationId = () => {
|
||||
const cid = getConversationId()
|
||||
if (!cid) {
|
||||
uni.showToast({
|
||||
title: '会话信息缺失',
|
||||
icon: 'none',
|
||||
})
|
||||
return ''
|
||||
}
|
||||
return cid
|
||||
}
|
||||
|
||||
/** 输入框内容 */
|
||||
const inputText = ref('')
|
||||
@ -643,7 +656,7 @@ const handleSendTextMsg = (type:string) => {
|
||||
const ext = onAtMembersExtHandler()
|
||||
let mallText='纽娃复合营养素固体饮料主要成分是:蜂花粉、乳清蛋白粉、灰树花粉、低聚木糖、蚕蛹氨基酸、麦芽粉、薏苡仁粉、烟酸、磷脂,以及其他调味品、辅助原料。科学配比制成,含有丰富的蛋白质、氨基酸、维生素、微量元素及其他营养元素,点击链接了解详情。'
|
||||
let text = type==='mall'?mallText:replaceEmoji(inputText.value)
|
||||
const textMsg = uni.$UIKitNIM.V2NIMMessageCreator.createTextMessage(text)
|
||||
//const textMsg = uni.$UIKitNIM.V2NIMMessageCreator.createTextMessage(text)
|
||||
//let serverExtension={"gdxz_nickName":"测试","gdxz_sessionType":"general"};
|
||||
if(props.isGroupSend){
|
||||
emits('send',{
|
||||
@ -655,7 +668,8 @@ const handleSendTextMsg = (type:string) => {
|
||||
replyMsg.value = undefined
|
||||
selectedAtMembers.value = [];
|
||||
}else{
|
||||
|
||||
const conversationId = ensureConversationId()
|
||||
if (!conversationId) return
|
||||
uni.$UIKitStore.msgStore
|
||||
.sendMessageActive({
|
||||
msg: textMsg as unknown as V2NIMMessage,
|
||||
@ -696,6 +710,8 @@ const handleSendFileMsg = () => {
|
||||
// @ts-ignore
|
||||
const fileName = res?.tempFiles?.[0]?.name
|
||||
if (filePath && fileName) {
|
||||
const conversationId = ensureConversationId()
|
||||
if (!conversationId) return
|
||||
const fileMsg = uni.$UIKitNIM.V2NIMMessageCreator.createFileMessage(
|
||||
filePath,
|
||||
fileName
|
||||
@ -797,9 +813,9 @@ const handleSendImageMsg = () => {
|
||||
count: 1,
|
||||
sizeType: ['compressed'],
|
||||
success: (res) => {
|
||||
const imgMsg = uni.$UIKitNIM.V2NIMMessageCreator.createImageMessage(
|
||||
res.tempFilePaths[0]
|
||||
)
|
||||
// const imgMsg = uni.$UIKitNIM.V2NIMMessageCreator.createImageMessage(
|
||||
// res.tempFilePaths[0]
|
||||
// )
|
||||
if(props.isGroupSend){
|
||||
const fileManager = uni.getFileSystemManager();
|
||||
fileManager.readFile({
|
||||
@ -816,6 +832,8 @@ const handleSendImageMsg = () => {
|
||||
}
|
||||
})
|
||||
}else{
|
||||
const conversationId = ensureConversationId()
|
||||
if (!conversationId) return
|
||||
uni.$UIKitStore.msgStore
|
||||
.sendMessageActive({
|
||||
msg: imgMsg as unknown as V2NIMMessage,
|
||||
@ -888,13 +906,15 @@ const senCustomMsg = (type:string) => {
|
||||
text="[视频科普]";
|
||||
rawStr=`{\"gdxz_content\":${content},\"gdxz_ext_data\":\"[视频科普]\",\"gdxz_id\":${id},\"gdxz_img\":\"http://doc.igandan.org/app/book/pdf/2019/20190613152617.png\",\"gdxz_title\":${title},\"gdxz_type\":\"[视频科普]\",\"gdxz_url\":${path}}`
|
||||
}
|
||||
const customMsg = uni.$UIKitNIM.V2NIMMessageCreator.createCustomMessage(text,rawStr)
|
||||
//const customMsg = uni.$UIKitNIM.V2NIMMessageCreator.createCustomMessage(text,rawStr)
|
||||
if(props.isGroupSend){
|
||||
emits('send',{
|
||||
content:msg_content,
|
||||
msg_type:msg_type,
|
||||
})
|
||||
}else{
|
||||
const conversationId = ensureConversationId()
|
||||
if (!conversationId) return
|
||||
uni.$UIKitStore.msgStore
|
||||
.sendMessageActive({
|
||||
msg: customMsg as unknown as V2NIMMessage,
|
||||
@ -959,6 +979,8 @@ const handleSendVideoMsg = (type: string, event: any) => {
|
||||
compressed: true,
|
||||
maxDuration: 60,
|
||||
success: (res) => {
|
||||
const conversationId = ensureConversationId()
|
||||
if (!conversationId) return
|
||||
const videoMsg = uni.$UIKitNIM.V2NIMMessageCreator.createVideoMessage(
|
||||
res.tempFilePath
|
||||
)
|
||||
@ -990,6 +1012,8 @@ const handleSendVideoMsg = (type: string, event: any) => {
|
||||
|
||||
/** 发送语音消息 */
|
||||
const handleSendAudioMsg = (filePath: string, duration: number) => {
|
||||
const conversationId = ensureConversationId()
|
||||
if (!conversationId) return
|
||||
const audioMsg =
|
||||
uni.$UIKitNIM.V2NIMMessageCreator.createAudioMessage(filePath)
|
||||
|
||||
|
||||
@ -147,7 +147,7 @@ onLoad((options) => {
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.edit-address-page { min-height: 100vh; background: #fff; }
|
||||
.form-container { padding: 24rpx; }
|
||||
.form-container { padding: 24rpx;margin-top: calc(var(--status-bar-height) + 44px); }
|
||||
|
||||
.form-item { display: flex; align-items: center; justify-content: space-between; padding: 24rpx 0; }
|
||||
.form-item.column { flex-direction: column; align-items: flex-start; }
|
||||
|
||||
@ -1,7 +1,22 @@
|
||||
<template>
|
||||
<view class="page">
|
||||
<!-- 顶部导航 -->
|
||||
<navBar title="群发消息" />
|
||||
<!-- <navBar title="群发消息" /> -->
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="群发消息"
|
||||
@clickLeft="goBack"
|
||||
|
||||
color="#8B2316"
|
||||
|
||||
:border="false"
|
||||
backgroundColor="#eee"
|
||||
>
|
||||
|
||||
</uni-nav-bar>
|
||||
</view>
|
||||
|
||||
<!-- 下拉刷新和上拉加载容器 -->
|
||||
<scroll-view
|
||||
@ -32,6 +47,9 @@
|
||||
<view class="line phone" v-if="item.msg_type==1">
|
||||
{{ item.msg_content }}
|
||||
</view>
|
||||
<view class="line phone imgwrap" v-if="item.msg_type==2">
|
||||
<image :src="getMsgImageUrl(item)" class="imgbox" mode="aspectFill" @click="previewMsgImage(item)"></image>
|
||||
</view>
|
||||
<view class="line phone" v-if="item.msg_type==3" @click="onDetail(item)">
|
||||
<view class="custom">
|
||||
<view class="title">{{JSON.parse(item.msg_content).summary }}</view>
|
||||
@ -131,7 +149,7 @@
|
||||
import { ref, onMounted } from 'vue'
|
||||
import navBar from '@/components/navBar/navBar.vue'
|
||||
import api from '@/api/api.js'
|
||||
import { onShow } from '@dcloudio/uni-app'
|
||||
import { onShow,onBackPress,onLoad } from '@dcloudio/uni-app'
|
||||
import docUrl from '@/utils/docUrl.js'
|
||||
import navTo from '@/utils/navTo.js'
|
||||
const currentTime = ref('')
|
||||
@ -145,7 +163,25 @@ const refreshing=ref(false);
|
||||
const loading=ref(false);
|
||||
const hasMore=ref(true);
|
||||
const pad = (n) => (n < 10 ? `0${n}` : `${n}`)
|
||||
|
||||
const from = ref('');
|
||||
onLoad((options) => {
|
||||
if(options.from){
|
||||
from.value = options.from;
|
||||
}
|
||||
});
|
||||
onBackPress(() => {
|
||||
if(!from.value){
|
||||
plus.runtime.quit();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
const goBack = () => {
|
||||
if(!from.value){
|
||||
plus.runtime.quit();
|
||||
}else{
|
||||
uni.navigateBack();
|
||||
}
|
||||
}
|
||||
// 格式化时间显示
|
||||
const formatTime = (dateStr) => {
|
||||
if (!dateStr) return ''
|
||||
@ -231,6 +267,25 @@ const onDetail = (item) => {
|
||||
url: `/pages_app/webview/webview?url=${encodeURIComponent(path)}`,
|
||||
})
|
||||
}
|
||||
const getMsgImageUrl = (item) => {
|
||||
const content = item?.msg_content || '';
|
||||
if (!content) return '';
|
||||
if (content.startsWith('http://') || content.startsWith('https://') || content.startsWith('data:image')) {
|
||||
return content;
|
||||
}
|
||||
return docUrl + content;
|
||||
}
|
||||
const previewMsgImage = (item) => {
|
||||
const imageUrl = getMsgImageUrl(item);
|
||||
if (!imageUrl) {
|
||||
uni.showToast({ title: '图片地址无效', icon: 'none' });
|
||||
return;
|
||||
}
|
||||
uni.previewImage({
|
||||
current: imageUrl,
|
||||
urls: [imageUrl]
|
||||
});
|
||||
}
|
||||
// 上拉加载更多
|
||||
const onLoadMore = async () => {
|
||||
if(!hasMore.value || loading.value) return;
|
||||
@ -506,4 +561,14 @@ $red: #D32F2F;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
.imgbox{
|
||||
width: 200rpx;
|
||||
height:200rpx;
|
||||
}
|
||||
.imgwrap{
|
||||
width:100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -1,13 +1,15 @@
|
||||
<template>
|
||||
<view class="page" @touchstart="handleTapContent">
|
||||
<!-- 顶部导航 -->
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="群发消息"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
|
||||
:border="false"
|
||||
backgroundColor="#eee"
|
||||
>
|
||||
@ -17,6 +19,7 @@
|
||||
</view>
|
||||
</template>
|
||||
</uni-nav-bar>
|
||||
</view>
|
||||
|
||||
<!-- 警告提示区域 -->
|
||||
<view class="warning-section">
|
||||
@ -224,6 +227,7 @@ $red: #d32f2f;
|
||||
background: #fff8e1;
|
||||
border-left: 6rpx solid #ff9800;
|
||||
margin: 20rpx 30rpx;
|
||||
margin-top: calc(var(--status-bar-height) + 64px);
|
||||
border-radius: 8rpx;
|
||||
|
||||
.warning-icon {
|
||||
|
||||
@ -179,6 +179,7 @@ const submitInfo = () => {
|
||||
/* 主内容区域 */
|
||||
.content-area {
|
||||
padding: 40rpx 30rpx;
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
@ -342,6 +342,7 @@ const confirmPublish = () => {
|
||||
|
||||
/* 主内容区域 */
|
||||
.content-area {
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
padding: 40rpx 30rpx;
|
||||
}
|
||||
|
||||
|
||||
@ -1,13 +1,15 @@
|
||||
<template>
|
||||
<view class="outpatient-page">
|
||||
<!-- 导航栏 -->
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="出/停诊公告"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
|
||||
color="#8B2316"
|
||||
height="180rpx"
|
||||
|
||||
:border="false"
|
||||
backgroundColor="#eee"
|
||||
>
|
||||
@ -18,6 +20,7 @@
|
||||
</view>
|
||||
</template>
|
||||
</uni-nav-bar>
|
||||
</view>
|
||||
|
||||
<!-- 标签页 -->
|
||||
<view class="tab-container">
|
||||
@ -136,10 +139,11 @@
|
||||
<script setup>
|
||||
import { ref, reactive } from 'vue'
|
||||
import api from '@/api/api'
|
||||
import {onShow,onUnload,onLoad} from '@dcloudio/uni-app'
|
||||
import {onShow,onUnload,onLoad,onBackPress} from '@dcloudio/uni-app'
|
||||
import navTo from '@/utils/navTo'
|
||||
const page=ref(1);
|
||||
// 响应式数据
|
||||
const from = ref('');
|
||||
const currentTab = ref('suspension')
|
||||
const remarks = ref('')
|
||||
|
||||
@ -147,6 +151,17 @@ const note = ref('')
|
||||
|
||||
const outpatientSchedules = ref([])
|
||||
const outPatientList = ref([]);
|
||||
onBackPress(() => {
|
||||
if(!from.value){
|
||||
plus.runtime.quit();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
onLoad((options) => {
|
||||
if(options.from){
|
||||
from.value = options.from;
|
||||
}
|
||||
});
|
||||
const getListOutPatient = async () => {
|
||||
const res = await api.listOutPatient({
|
||||
page:page.value,
|
||||
@ -225,14 +240,11 @@ const getTypeText = (type) => {
|
||||
}
|
||||
// 方法
|
||||
const goBack = () => {
|
||||
uni.navigateBack({
|
||||
delta: 1,
|
||||
fail() {
|
||||
uni.redirectTo({
|
||||
url: '/pages/index/index'
|
||||
})
|
||||
if(!from.value){
|
||||
plus.runtime.quit();
|
||||
}else{
|
||||
uni.navigateBack();
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const share = () => {
|
||||
@ -248,9 +260,7 @@ const addNew = () => {
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
onLoad((options) => {
|
||||
|
||||
})
|
||||
onShow(() => {
|
||||
getStopOutPatientList();
|
||||
getListOutPatient();
|
||||
@ -490,6 +500,7 @@ const deleteSchedule = async (uuid) => {
|
||||
|
||||
/* 标签页样式 */
|
||||
.tab-container {
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background-color: #fff;
|
||||
|
||||
@ -110,7 +110,7 @@ const submit = () => {
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.stop-page { min-height: 100vh; background: #fff; }
|
||||
.content-area { padding: 30rpx; }
|
||||
.content-area { padding: 30rpx; margin-top: calc(var(--status-bar-height) + 44px);}
|
||||
|
||||
.form-section { margin-bottom: 40rpx; }
|
||||
.section-head { display: flex; justify-content: space-between; align-items: center; }
|
||||
|
||||
BIN
static/argee_no.png
Normal file
BIN
static/argee_no.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.2 KiB |
BIN
static/argee_sure.png
Normal file
BIN
static/argee_sure.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.8 KiB |
BIN
static/contact.png
Normal file
BIN
static/contact.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.6 KiB |
BIN
static/reading.png
Normal file
BIN
static/reading.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.4 KiB |
@ -115,14 +115,14 @@ export const request = (url, data = {}, method = 'post', loading = false, conten
|
||||
}else if (res.data.code == 200 || res.data.code == 1 || res.data.code == "1" || res.data.code == "200" ){
|
||||
e(res.data)
|
||||
}else if (res.data.code == 401 || res.data.code == 403 || res.data.code ==
|
||||
405 || res.data.code == 406 || res.data.code == 37006) {
|
||||
405 || res.data.code == 406 || res.data.code == 37006 || res.data.code == 35002) {
|
||||
uni.hideLoading();
|
||||
if(process.env.UNI_PLATFORM == "mp-weixin"){
|
||||
uni.redirectTo({url:'/pages_app/login/login'})
|
||||
}
|
||||
// else{
|
||||
// uni.navigateTo({url:'/pages_app/login/login'})
|
||||
// }
|
||||
else{
|
||||
uni.navigateTo({url:'/pages_app/login/login'})
|
||||
}
|
||||
uni.sendNativeEvent('getNewToken', {
|
||||
msg: 'getNewToken'
|
||||
},ret => {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user