Explorar el Código

feat: 添加医保2.0页面

carver hace 1 año
padre
commit
a43908d999
Se han modificado 23 ficheros con 1975 adiciones y 845 borrados
  1. 141 135
      .mini-ide/compileMode.json
  2. 43 39
      antbuilder/core/utils/appLifecycle.js
  3. 277 272
      antbuilder/core/utils/request.js
  4. 143 72
      antbuilder/core/utils/ywtService.js
  5. 12 0
      antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao-result/index.acss
  6. 8 0
      antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao-result/index.axml
  7. 40 0
      antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao-result/index.js
  8. 7 0
      antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao-result/index.json
  9. 0 0
      antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao-result/service.js
  10. BIN
      antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao/assets/icon-close.png
  11. BIN
      antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao/assets/info-icon.png
  12. BIN
      antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao/assets/medical-logo.png
  13. 320 0
      antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao/index.acss
  14. 125 0
      antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao/index.axml
  15. 363 0
      antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao/index.js
  16. 7 0
      antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao/index.json
  17. 94 0
      antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao/service.js
  18. 5 5
      antbuilder/industry/hospitalV2/components/hospital-payment-detail/index.axml
  19. 288 208
      antbuilder/industry/hospitalV2/components/hospital-payment-detail/index.js
  20. 11 60
      antbuilder/industry/hospitalV2/components/hospital-payment/index.js
  21. 4 1
      antbuilder/industry/hospitalV2/pages/page-no-pull/index.axml
  22. 52 50
      antbuilder/industry/hospitalV2/pages/page-no-pull/index.json
  23. 35 3
      antbuilder/industry/hospitalV2/utils/tradePay.js

+ 141 - 135
.mini-ide/compileMode.json

@@ -1,136 +1,142 @@
 {
-  "modes": [
-    {
-      "title": "线下挂号",
-      "page": "antbuilder/core/pages/one/index",
-      "pageQuery": "pageUuid=E1164483A3294302925DE7FD2088ED36&serviceCode=",
-      "query": ""
-    },
-    {
-      "title": "门诊缴费",
-      "page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
-      "pageQuery": "pageType=hospital-payment&title=门诊缴费",
-      "query": ""
-    },
-    {
-      "title": "挂号记录",
-      "page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
-      "pageQuery": "pageType=subscribe-record&title=预约挂号记录&serviceCode=",
-      "query": ""
-    },
-    {
-      "title": "报告查询",
-      "page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
-      "pageQuery": "pageType=report-list&title=检验检查&serviceCode=",
-      "query": ""
-    },
-    {
-      "title": "住院押金缴纳",
-      "page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
-      "pageQuery": "pageType=deposit&title=住院押金&backBtnColor=#000&background=#fff&color=#000&header=show",
-      "query": ""
-    },
-    {
-      "title": "日清单",
-      "page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
-      "pageQuery": "pageType=inventory-day&title=日清单&serviceCode=&backBtnColor=#000&background=#fff&color=#000&header=show",
-      "query": ""
-    },
-    {
-      "title": "核酸检测",
-      "page": "antbuilder/core/pages/one/index",
-      "pageQuery": "nucleic-acid-campus=&pageUuid=B8628CFD95D5478DB4259B6B30FEE7FF&serviceCode=",
-      "query": ""
-    },
-    {
-      "title": "线下挂号(正式)",
-      "page": "antbuilder/core/pages/one/index",
-      "pageQuery": "pageUuid=FB98AEA24A5D40F6BC7B19D3C399AE86&serviceCode=",
-      "query": ""
-    },
-    {
-      "title": "核酸检测(正式)",
-      "page": "antbuilder/core/pages/one/index",
-      "pageQuery": "nucleic-acid-campus=&pageUuid=F07BB429AE094875984BD611DEE7AF80&serviceCode=",
-      "query": ""
-    },
-    {
-      "title": "门诊测试-1",
-      "page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
-      "pageQuery": "depCode=513&departmentId=705&header=show&hospitalId=41&pageType=hospital-num-source&title=胸外科门诊(黄石院区)",
-      "query": ""
-    },
-    {
-      "title": "门诊测试-2",
-      "page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
-      "pageQuery": "depCode=279&departmentId=495&header=show&hospitalId=41&pageType=hospital-num-source&title=呼吸内科专科(沙河院区)",
-      "query": ""
-    },
-    {
-      "title": "医生测试",
-      "page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
-      "pageQuery": "depCode=381",
-      "query": ""
-    },
-    {
-      "title": "医生测试-2",
-      "page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
-      "pageQuery": "depCode=381&depId=658&doctorCode=1296&doctorId=302246&header=show&hospitalId=41&pageType=doctor-page&title=医生主页",
-      "query": ""
-    },
-    {
-      "title": "核酸检测-test",
-      "page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
-      "pageQuery": "depCode=500&departmentId=670&header=show&hospitalId=41&pageType=hospital-num-source&title=核酸检测(黄石院区)",
-      "query": ""
-    },
-    {
-      "title": "太和就诊人管理",
-      "page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
-      "pageQuery": "pageType=patient-list&serviceCode=&title=就诊人管理",
-      "query": ""
-    },
-    {
-      "title": "太和挂号",
-      "page": "antbuilder/core/pages/one/index",
-      "pageQuery": "pageUuid=242F78C3173842779C94374F081236E9&serviceCode=",
-      "query": ""
-    },
-    {
-      "title": "太和门诊缴费",
-      "page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
-      "pageQuery": "pageType=hospital-payment&title=门诊缴费&serviceCode=",
-      "query": ""
-    },
-    {
-      "title": "太和报告查询",
-      "page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
-      "pageQuery": "pageType=report-list&title=检验检查&serviceCode=",
-      "query": ""
-    },
-    {
-      "title": "太和挂号记录",
-      "page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
-      "pageQuery": "pageType=subscribe-record&title=预约挂号记录&serviceCode=",
-      "query": ""
-    },
-    {
-      "title": "太和押金缴纳",
-      "page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
-      "pageQuery": "pageType=deposit&title=住院押金&serviceCode=&backBtnColor=#000&background=#fff&color=#000&header=show",
-      "query": ""
-    },
-    {
-      "title": "太和住院清单",
-      "page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
-      "pageQuery": "pageType=inventory-day&title=日清单&serviceCode=&backBtnColor=#000&background=#fff&color=#000&header=show",
-      "query": ""
-    },
-    {
-      "title": "太和整体入驻",
-      "page": "antbuilder/core/pages/one/index",
-      "pageQuery": "",
-      "query": ""
-    }
-  ]
-}
+	"modes": [
+		{
+			"title": "线下挂号",
+			"page": "antbuilder/core/pages/one/index",
+			"pageQuery": "pageUuid=E1164483A3294302925DE7FD2088ED36&serviceCode=",
+			"query": ""
+		},
+		{
+			"title": "门诊缴费",
+			"page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
+			"pageQuery": "pageType=hospital-payment&title=门诊缴费",
+			"query": ""
+		},
+		{
+			"title": "挂号记录",
+			"page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
+			"pageQuery": "pageType=subscribe-record&title=预约挂号记录&serviceCode=",
+			"query": ""
+		},
+		{
+			"title": "报告查询",
+			"page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
+			"pageQuery": "pageType=report-list&title=检验检查&serviceCode=",
+			"query": ""
+		},
+		{
+			"title": "住院押金缴纳",
+			"page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
+			"pageQuery": "pageType=deposit&title=住院押金&backBtnColor=#000&background=#fff&color=#000&header=show",
+			"query": ""
+		},
+		{
+			"title": "日清单",
+			"page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
+			"pageQuery": "pageType=inventory-day&title=日清单&serviceCode=&backBtnColor=#000&background=#fff&color=#000&header=show",
+			"query": ""
+		},
+		{
+			"title": "核酸检测",
+			"page": "antbuilder/core/pages/one/index",
+			"pageQuery": "nucleic-acid-campus=&pageUuid=B8628CFD95D5478DB4259B6B30FEE7FF&serviceCode=",
+			"query": ""
+		},
+		{
+			"title": "线下挂号(正式)",
+			"page": "antbuilder/core/pages/one/index",
+			"pageQuery": "pageUuid=FB98AEA24A5D40F6BC7B19D3C399AE86&serviceCode=",
+			"query": ""
+		},
+		{
+			"title": "核酸检测(正式)",
+			"page": "antbuilder/core/pages/one/index",
+			"pageQuery": "nucleic-acid-campus=&pageUuid=F07BB429AE094875984BD611DEE7AF80&serviceCode=",
+			"query": ""
+		},
+		{
+			"title": "门诊测试-1",
+			"page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
+			"pageQuery": "depCode=513&departmentId=705&header=show&hospitalId=41&pageType=hospital-num-source&title=胸外科门诊(黄石院区)",
+			"query": ""
+		},
+		{
+			"title": "门诊测试-2",
+			"page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
+			"pageQuery": "depCode=279&departmentId=495&header=show&hospitalId=41&pageType=hospital-num-source&title=呼吸内科专科(沙河院区)",
+			"query": ""
+		},
+		{
+			"title": "医生测试",
+			"page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
+			"pageQuery": "depCode=381",
+			"query": ""
+		},
+		{
+			"title": "医生测试-2",
+			"page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
+			"pageQuery": "depCode=381&depId=658&doctorCode=1296&doctorId=302246&header=show&hospitalId=41&pageType=doctor-page&title=医生主页",
+			"query": ""
+		},
+		{
+			"title": "核酸检测-test",
+			"page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
+			"pageQuery": "depCode=500&departmentId=670&header=show&hospitalId=41&pageType=hospital-num-source&title=核酸检测(黄石院区)",
+			"query": ""
+		},
+		{
+			"title": "太和就诊人管理",
+			"page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
+			"pageQuery": "pageType=patient-list&serviceCode=&title=就诊人管理",
+			"query": ""
+		},
+		{
+			"title": "太和挂号",
+			"page": "antbuilder/core/pages/one/index",
+			"pageQuery": "pageUuid=242F78C3173842779C94374F081236E9&serviceCode=",
+			"query": ""
+		},
+		{
+			"title": "太和门诊缴费",
+			"page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
+			"pageQuery": "pageType=hospital-payment&title=门诊缴费&serviceCode=",
+			"query": ""
+		},
+		{
+			"title": "太和报告查询",
+			"page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
+			"pageQuery": "pageType=report-list&title=检验检查&serviceCode=",
+			"query": ""
+		},
+		{
+			"title": "太和挂号记录",
+			"page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
+			"pageQuery": "pageType=subscribe-record&title=预约挂号记录&serviceCode=",
+			"query": ""
+		},
+		{
+			"title": "太和押金缴纳",
+			"page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
+			"pageQuery": "pageType=deposit&title=住院押金&serviceCode=&backBtnColor=#000&background=#fff&color=#000&header=show",
+			"query": ""
+		},
+		{
+			"title": "太和住院清单",
+			"page": "antbuilder/industry/hospitalV2/pages/page-no-pull/index",
+			"pageQuery": "pageType=inventory-day&title=日清单&serviceCode=&backBtnColor=#000&background=#fff&color=#000&header=show",
+			"query": ""
+		},
+		{
+			"title": "太和整体入驻",
+			"page": "antbuilder/core/pages/one/index",
+			"pageQuery": "",
+			"query": ""
+		},
+		{
+			"title": "QA首页",
+			"page": "antbuilder/core/pages/home/index",
+			"pageQuery": "",
+			"query": "proxyEnv=test"
+		}
+	]
+}

+ 43 - 39
antbuilder/core/utils/appLifecycle.js

@@ -1,45 +1,49 @@
-import { autoSetUid, checkAppVersion } from './jsapi';
-import { executeHooks } from './registerHooks';
-import { imgSrcPrefix } from './constants';
+import { autoSetUid, checkAppVersion } from "./jsapi";
+import { executeHooks } from "./registerHooks";
+import { imgSrcPrefix } from "./constants";
 
 export function onDefaultAppLaunch(options) {
-  const appIdRes = my.getAppIdSync();
-  this.globalData.appId = appIdRes.appId;
-  this.globalData.launchOptions = options;
-  autoSetUid();
-  checkAppVersion();
-  executeHooks('onAppLaunch', {
-    context: this,
-    args: [options],
-  });
+	if (options && options.query.proxyEnv) {
+		this.globalData.proxyEnv = options.query.proxyEnv;
+	}
+	const appIdRes = my.getAppIdSync();
+	this.globalData.appId = appIdRes.appId;
+	this.globalData.launchOptions = options;
+	autoSetUid();
+	checkAppVersion();
+	executeHooks("onAppLaunch", {
+		context: this,
+		args: [options],
+	});
 }
 
-
 export const defaultGlobalData = {
-  ticketData: { // 票据信息
-    ticket: '',
-    expiresTime: 0,
-  },
-  settingData: {
-    loginType: null,
-    scopes: [],
-    showRegion: null,
-  },
-  regionData: {
-    regionCode: null,
-    accuracy: null,
-    longitude: null,
-    latitude: null,
-    cityAdcode: null,
-    mktCode: null,
-    regionList: [],
-  },
-  imgSrcPrefix,
-  isUserLogin: false,
-  userInfo: null,
-  appId: '',
-  templateUUID: '',
-  isInitialized: false,
-  pagesQuery: {}, // 全局可传参的数据
-  getTicketing: false,
+	ticketData: {
+		// 票据信息
+		ticket: "",
+		expiresTime: 0,
+	},
+	proxyEnv: "prod",
+	settingData: {
+		loginType: null,
+		scopes: [],
+		showRegion: null,
+	},
+	regionData: {
+		regionCode: null,
+		accuracy: null,
+		longitude: null,
+		latitude: null,
+		cityAdcode: null,
+		mktCode: null,
+		regionList: [],
+	},
+	imgSrcPrefix,
+	isUserLogin: false,
+	userInfo: null,
+	appId: "",
+	templateUUID: "",
+	isInitialized: false,
+	pagesQuery: {}, // 全局可传参的数据
+	getTicketing: false,
 };

+ 277 - 272
antbuilder/core/utils/request.js

@@ -1,307 +1,312 @@
 import { getIn } from "herculex/dist/utils/manipulate";
 import {
-  host,
-  getTicketUrl,
-  ywtHost,
-  terminal,
-  ywtEnvVersionPrefix,
+	host,
+	getTicketUrl,
+	ywtHost,
+	terminal,
+	ywtEnvVersionPrefix,
 } from "./constants";
 import { getSilentAuthCode, getAppId, getServerTime } from "./jsapi";
 import { joinUrl } from "./format";
 import { getCurrentStore } from "../../../antbuilder/core/utils/index";
 
 function showErrorMessgage({ isShowError, error }) {
-  if (isShowError) {
-    my.showToast({
-      type: "fail",
-      content: error && (error.msg || error.errorMessage),
-      duration: 3000,
-    });
-  }
+	if (isShowError) {
+		my.showToast({
+			type: "fail",
+			content: error && (error.msg || error.errorMessage),
+			duration: 3000,
+		});
+	}
 }
 
 async function checkTimeExpire(time) {
-  if (!time) return false;
-  const [err, res] = await getServerTime();
-  const currentTime = err ? new Date().getTime() : +res.time;
-  return time < currentTime;
+	if (!time) return false;
+	const [err, res] = await getServerTime();
+	const currentTime = err ? new Date().getTime() : +res.time;
+	return time < currentTime;
 }
 
 export function _request({
-  url,
-  method = "post",
-  data = {},
-  headers = {},
-  isShowLoadig = false,
-  isShowError = false,
+	url,
+	method = "post",
+	data = {},
+	headers = {},
+	isShowLoadig = false,
+	isShowError = false,
 } = {}) {
-  return new Promise((resolve) => {
-    if (isShowLoadig) {
-      my.showLoading();
-    }
-    // eslint-disable-next-line no-undef
-    const app = getApp();
-    my.request({
-      url: url.startsWith("http") ? url : joinUrl(host, url),
-      method,
-      data: Object.assign(data, {
-        userId: app.globalData.ywtUserId || "",
-        appId: app.globalData.appId || "",
-        alipayUid: app.globalData.alipayUid,
-        terminal,
-      }),
-      headers: {
-        "content-type": "application/x-www-form-urlencoded",
-        ticket: app.globalData.ticketData.ticket, // todo test
-        appId: app.globalData.appId, // todo test
-        ...headers,
-      },
-      dataType: "json",
-      success(res) {
-        const result = res.data || {};
-        const code = +result.code;
-        if (result && code === 200) {
-          resolve([
-            null,
-            {
-              data: result.data,
-              code,
-            },
-          ]);
-        } else if (code === 20002 || code === 20001 || code === 20008) {
-          resolve([
-            null,
-            {
-              code,
-              data: null,
-            },
-          ]);
-        } else if (code === 401) {
-          resolve([null, result]);
-        } else if (code >= 600) {
-          // 自定义错误
-          showErrorMessgage({
-            isShowError: true,
-            error: { msg: result.msg || "未知错误" },
-          });
-          my.hideLoading();
-          resolve([result, null]);
-        } else {
-          showErrorMessgage({
-            isShowError,
-            error: result,
-          });
-          resolve([result, null]);
-        }
-      },
-      fail(err) {
-        showErrorMessgage({
-          isShowError,
-          error: err,
-        });
-        resolve([err, null]);
-      },
-      complete() {
-        if (isShowLoadig) {
-          my.hideLoading();
-        }
-      },
-    });
-  });
+	return new Promise((resolve) => {
+		if (isShowLoadig) {
+			my.showLoading();
+		}
+		// eslint-disable-next-line no-undef
+		const app = getApp();
+		my.request({
+			url: url.startsWith("http") ? url : joinUrl(host, url),
+			method,
+			data: Object.assign(data, {
+				userId: app.globalData.ywtUserId || "",
+				appId: app.globalData.appId || "",
+				alipayUid: app.globalData.alipayUid,
+				terminal,
+			}),
+			headers: {
+				"content-type": "application/x-www-form-urlencoded",
+				"X-CMO-ENV": getApp().globalData.proxyEnv || "",
+				ticket: app.globalData.ticketData.ticket, // todo test
+				appId: app.globalData.appId, // todo test
+				...headers,
+			},
+			dataType: "json",
+			success(res) {
+				const result = res.data || {};
+				const code = +result.code;
+				if (result && code === 200) {
+					resolve([
+						null,
+						{
+							data: result.data,
+							code,
+						},
+					]);
+				} else if (code === 20002 || code === 20001 || code === 20008) {
+					resolve([
+						null,
+						{
+							code,
+							data: null,
+						},
+					]);
+				} else if (code === 401) {
+					resolve([null, result]);
+				} else if (code >= 600) {
+					// 自定义错误
+					showErrorMessgage({
+						isShowError: true,
+						error: { msg: result.msg || "未知错误" },
+					});
+					my.hideLoading();
+					resolve([result, null]);
+				} else {
+					showErrorMessgage({
+						isShowError,
+						error: result,
+					});
+					resolve([result, null]);
+				}
+			},
+			fail(err) {
+				showErrorMessgage({
+					isShowError,
+					error: err,
+				});
+				resolve([err, null]);
+			},
+			complete() {
+				if (isShowLoadig) {
+					my.hideLoading();
+				}
+			},
+		});
+	});
 }
 
 export const ywtEnvUrl = {
-  "3508C5373A7C4BF18BF3F835FA2B5146": "https://api-qa.ywtinfo.com/",
-  F0C507F7F24C4E1E95924A02B8617DC7: "https://api.ywtinfo.com/",
-  "1374B32A31454A2E90E09FF738866E02": "https://api.ywtinfo.com/", // 太和QA
-  A94C3DEE59344D0184C3902418DB6D81: "https://api-qa.ywtinfo.com/",
+	"3508C5373A7C4BF18BF3F835FA2B5146": "https://api-qa.ywtinfo.com/",
+	F0C507F7F24C4E1E95924A02B8617DC7: "https://api.ywtinfo.com/",
+	"1374B32A31454A2E90E09FF738866E02": "https://api.ywtinfo.com/", // 太和QA
+	A94C3DEE59344D0184C3902418DB6D81: "https://api-qa.ywtinfo.com/",
 };
 
 export function _ywtRequest({
-  url,
-  method = "post",
-  data = {},
-  headers = {},
-  isShowLoadig = false,
-  isShowError = false,
+	url,
+	method = "post",
+	data = {},
+	headers = {},
+	isShowLoadig = false,
+	isShowError = false,
 } = {}) {
-  return new Promise((resolve) => {
-    if (isShowLoadig) {
-      my.showLoading();
-    }
-    const app = getApp();
-    const ywtRequestUrl =
-      ywtEnvUrl[app.globalData.templateUUID] + ywtEnvVersionPrefix;
-    my.request({
-      url: url.startsWith("http") ? url : joinUrl(ywtRequestUrl, url),
-      method,
-      data: Object.assign(data, {
-        userId: app.globalData.ywtUserId || "",
-        appId: app.globalData.appId || "",
-        alipayUid: app.globalData.alipayUid,
-        terminal,
-      }),
-      headers: {
-        ...headers,
-      },
-      dataType: "json",
-      success(res) {
-        const result = res.data || {};
-        const code = +result.code;
-        if (result && code === 0) {
-          resolve([
-            null,
-            {
-              data: result.data,
-              code,
-            },
-          ]);
-        } else if (code === 20002 || code === 20001 || code === 20008) {
-          resolve([
-            null,
-            {
-              code,
-              data: null,
-            },
-          ]);
-        } else if (code >= 600) {
-          // 自定义错误
-          showErrorMessgage({
-            isShowError: true,
-            error: { msg: result.msg || "未知错误" },
-          });
-          my.hideLoading();
-          resolve([result, null]);
-        } else {
-          showErrorMessgage({
-            isShowError,
-            error: result,
-          });
-          resolve([result, null]);
-        }
-      },
-      fail(err) {
-        showErrorMessgage({
-          isShowError,
-          error: err,
-        });
-        resolve([err, null]);
-      },
-      complete() {
-        if (isShowLoadig) {
-          my.hideLoading();
-        }
-      },
-    });
-  });
+	const proxyEnv = getApp().globalData.proxyEnv || "";
+	return new Promise((resolve) => {
+		if (isShowLoadig) {
+			my.showLoading();
+		}
+		const app = getApp();
+		let domain = "https://api.ywtinfo.com/";
+		if (proxyEnv && proxyEnv === "test") {
+			domain = "https://api-qa.ywtinfo.com/";
+		}
+		const ywtRequestUrl = domain + ywtEnvVersionPrefix;
+		my.request({
+			url: url.startsWith("http") ? url : joinUrl(ywtRequestUrl, url),
+			method,
+			data: Object.assign(data, {
+				userId: app.globalData.ywtUserId || "",
+				appId: app.globalData.appId || "",
+				alipayUid: app.globalData.alipayUid,
+				terminal,
+			}),
+			headers: {
+				...headers,
+			},
+			dataType: "json",
+			success(res) {
+				const result = res.data || {};
+				const code = +result.code;
+				if (result && code === 0) {
+					resolve([
+						null,
+						{
+							data: result.data,
+							code,
+						},
+					]);
+				} else if (code === 20002 || code === 20001 || code === 20008) {
+					resolve([
+						null,
+						{
+							code,
+							data: null,
+						},
+					]);
+				} else if (code >= 600) {
+					// 自定义错误
+					showErrorMessgage({
+						isShowError: true,
+						error: { msg: result.msg || "未知错误" },
+					});
+					my.hideLoading();
+					resolve([result, null]);
+				} else {
+					showErrorMessgage({
+						isShowError,
+						error: result,
+					});
+					resolve([result, null]);
+				}
+			},
+			fail(err) {
+				showErrorMessgage({
+					isShowError,
+					error: err,
+				});
+				resolve([err, null]);
+			},
+			complete() {
+				if (isShowLoadig) {
+					my.hideLoading();
+				}
+			},
+		});
+	});
 }
 
 export async function getTicket() {
-  // eslint-disable-next-line no-undef
-  const app = getApp();
-  const { appId } = app.globalData;
-  if (!appId) {
-    app.globalData.appId = getAppId();
-  }
-  const [err, res] = await getSilentAuthCode();
-  if (err) return [err, null];
-  const data = {
-    authCode: res.authCode,
-    appId: app.globalData.appId,
-  };
-  const result = await _request({
-    url: getTicketUrl,
-    data,
-  });
-  return result;
+	// eslint-disable-next-line no-undef
+	const app = getApp();
+	const { appId } = app.globalData;
+	if (!appId) {
+		app.globalData.appId = getAppId();
+	}
+	const [err, res] = await getSilentAuthCode();
+	if (err) return [err, null];
+	const data = {
+		authCode: res.authCode,
+		appId: app.globalData.appId,
+	};
+	const result = await _request({
+		url: getTicketUrl,
+		data,
+	});
+	return result;
 }
 
 export async function setTicket() {
-  const app = getApp();
-  const { expiresTime } = app.globalData.ticketData;
-  console.log("expiresTime", expiresTime);
-  // 如果当前其他请求更新了ticket,则不用重新请求
-  if (expiresTime && (await checkTimeExpire(expiresTime))) {
-    console.log(
-      "checkTimeExpire(expiresTime)",
-      await checkTimeExpire(expiresTime)
-    );
-    return;
-  }
-  // 如果没有ticket正在请求,则在gloabl上增加setTicket
-  if (!app.globalData.getTicketing) {
-    app.globalData.setTicket = (async function () {
-      app.globalData.getTicketing = true;
-      const [err, res] = await getTicket();
-      if (err) {
-        return [err, null];
-      }
-      // eslint-disable-next-line no-undef
-      app.globalData.ticketData.ticket = res.data.ticket;
-      app.globalData.ticketData.expiresTime = res.data.expiresTime;
-      app.globalData.getTicketing = false;
-      return [null, res];
-    })();
-  }
-  // 如果ticket正在请求,则返回正在请求的ticket
-  return app.globalData.setTicket;
+	const app = getApp();
+	const { expiresTime } = app.globalData.ticketData;
+	console.log("expiresTime", expiresTime);
+	// 如果当前其他请求更新了ticket,则不用重新请求
+	if (expiresTime && (await checkTimeExpire(expiresTime))) {
+		console.log(
+			"checkTimeExpire(expiresTime)",
+			await checkTimeExpire(expiresTime)
+		);
+		return;
+	}
+	// 如果没有ticket正在请求,则在gloabl上增加setTicket
+	if (!app.globalData.getTicketing) {
+		app.globalData.setTicket = (async function () {
+			app.globalData.getTicketing = true;
+			const [err, res] = await getTicket();
+			if (err) {
+				return [err, null];
+			}
+			// eslint-disable-next-line no-undef
+			app.globalData.ticketData.ticket = res.data.ticket;
+			app.globalData.ticketData.expiresTime = res.data.expiresTime;
+			app.globalData.getTicketing = false;
+			return [null, res];
+		})();
+	}
+	// 如果ticket正在请求,则返回正在请求的ticket
+	return app.globalData.setTicket;
 }
 
 export default async function request(options) {
-  const app = getApp();
-  // 如果没有ticket直接请求ticket
-  if (!app.globalData.ticketData.ticket && !options.noNeedTicket) {
-    await setTicket();
-  }
-  const [err, res] = await _request(options);
-  if (err) return [err, null];
-  const code = +getIn(res, ["code"], "");
-  if (code === 20001 || code === 20002 || code === 20008) {
-    console.log("code ===>", code);
-    const [error] = await setTicket();
-    if (!error) {
-      const result = await request(options);
-      return result;
-    }
-    return [error, null];
-  } else if (code === 401) {
-    // 手动发起请求
-    const currentStore = getCurrentStore();
-    const { dispatchGlobal } = currentStore;
-    const scopes = "auth_user";
-    /* 这里表示如果不是通过按钮触发的手机号登录,需要打开按钮弹窗 */
-    // if (currentScope !== scopes) {
-    // await dispatch.call(currentStore, "launchPhone");
-    // }
-    const success = await dispatchGlobal("doLogin", { scopes });
-    /* 登录失败 */
-    if (!success) {
-      showErrorMessgage({
-        isShowError: true,
-        error: { msg: "登录失败" },
-      });
-      my.navigateBack();
-      return;
-    }
-    const result = await request(options);
-    return result;
-  }
-  const data = res.data || null;
-  return [null, data];
+	const app = getApp();
+	// 如果没有ticket直接请求ticket
+	if (!app.globalData.ticketData.ticket && !options.noNeedTicket) {
+		await setTicket();
+	}
+	const [err, res] = await _request(options);
+	if (err) return [err, null];
+	const code = +getIn(res, ["code"], "");
+	if (code === 20001 || code === 20002 || code === 20008) {
+		console.log("code ===>", code);
+		const [error] = await setTicket();
+		if (!error) {
+			const result = await request(options);
+			return result;
+		}
+		return [error, null];
+	} else if (code === 401) {
+		// 手动发起请求
+		const currentStore = getCurrentStore();
+		const { dispatchGlobal } = currentStore;
+		const scopes = "auth_user";
+		/* 这里表示如果不是通过按钮触发的手机号登录,需要打开按钮弹窗 */
+		// if (currentScope !== scopes) {
+		// await dispatch.call(currentStore, "launchPhone");
+		// }
+		const success = await dispatchGlobal("doLogin", { scopes });
+		/* 登录失败 */
+		if (!success) {
+			showErrorMessgage({
+				isShowError: true,
+				error: { msg: "登录失败" },
+			});
+			my.navigateBack();
+			return;
+		}
+		const result = await request(options);
+		return result;
+	}
+	const data = res.data || null;
+	return [null, data];
 }
 
 export async function ywtRequest(options) {
-  const [err, res] = await _ywtRequest(options);
-  if (err) return [err, null];
-  const code = +getIn(res, ["code"], "");
-  if (code === 20001 || code === 20002 || code === 20008) {
-    const [error] = await setTicket();
-    if (!error) {
-      const result = await ywtRequest(options);
-      return result;
-    }
-    return [error, null];
-  }
-  const data = res.data || null;
-  return [null, data];
+	const [err, res] = await _ywtRequest(options);
+	if (err) return [err, null];
+	const code = +getIn(res, ["code"], "");
+	if (code === 20001 || code === 20002 || code === 20008) {
+		const [error] = await setTicket();
+		if (!error) {
+			const result = await ywtRequest(options);
+			return result;
+		}
+		return [error, null];
+	}
+	const data = res.data || null;
+	return [null, data];
 }

+ 143 - 72
antbuilder/core/utils/ywtService.js

@@ -4,104 +4,175 @@ import { terminal } from "./constants";
 
 // 进行授权
 export async function ywtAuth(data) {
-  const [err, res] = await ywtRequest({
-    url: "/auth/bind",
-    method: "post",
-    data,
-  });
-  if (err || !res) return [err, null];
-  return [null, res];
+	const [err, res] = await ywtRequest({
+		url: "/auth/bind",
+		method: "post",
+		data,
+	});
+	if (err || !res) return [err, null];
+	return [null, res];
 }
 
 // 获取挂号时段
 export async function doctorSchedule(data) {
-  const [err, res] = await ywtRequest({
-    url: "/register/doctorSchedule",
-    method: "post",
-    data,
-  });
-  if (err || !res) return [err, null];
-  return [null, res];
+	const [err, res] = await ywtRequest({
+		url: "/register/doctorSchedule",
+		method: "post",
+		data,
+	});
+	if (err || !res) return [err, null];
+	return [null, res];
 }
 
 // 获取就医须知
 export async function getRegisteredAnnouncement(data) {
-  const [err, res] = await ywtRequest({
-    url: "/register/getRegisteredAnnouncement",
-    method: "post",
-    data,
-  });
-  if (err || !res) return [err, null];
-  return [null, res];
+	const [err, res] = await ywtRequest({
+		url: "/register/getRegisteredAnnouncement",
+		method: "post",
+		data,
+	});
+	if (err || !res) return [err, null];
+	return [null, res];
 }
 
 // 获取就诊指南
 export async function getGuideList(data) {
-  const [err, res] = await ywtRequest({
-    url: "/commonAnnouncement/getGuideList",
-    method: "post",
-    data,
-  });
-  if (err || !res) return [err, null];
-  return [null, res];
+	const [err, res] = await ywtRequest({
+		url: "/commonAnnouncement/getGuideList",
+		method: "post",
+		data,
+	});
+	if (err || !res) return [err, null];
+	return [null, res];
 }
 
 // 获取医院介绍
 export async function getIntroduce(data) {
-  const [err, res] = await ywtRequest({
-    url: "/introduce/getIntroduce",
-    method: "post",
-    data,
-  });
-  if (err || !res) return [err, null];
-  return [null, res];
+	const [err, res] = await ywtRequest({
+		url: "/introduce/getIntroduce",
+		method: "post",
+		data,
+	});
+	if (err || !res) return [err, null];
+	return [null, res];
 }
 
 // 支付完成后提交 authCode
 export async function submitAuthCode(data) {
-  const [err, res] = await ywtRequest({
-    url: "/auth/submitAuthCode",
-    method: "post",
-    data,
-  });
-  if (err || !res) return [err, null];
-  return [null, res];
+	const [err, res] = await ywtRequest({
+		url: "/auth/submitAuthCode",
+		method: "post",
+		data,
+	});
+	if (err || !res) return [err, null];
+	return [null, res];
 }
 
 // 消息推送授权
 export async function getSubscribeAuth() {
-  const [err, authResult] = await getAuthUser(["hospital_order"]);
-  if (err) {
-    my.showToast({
-      type: "fail",
-      content: "智能消息推送授权失败",
-    });
-    return [err, null];
-  } else {
-    const [error, result] = await submitAuthCode({
-      authCode: authResult.authCode,
-    });
-    if (error) {
-      my.showToast({
-        type: "fail",
-        content: "消息订阅失败",
-      });
-    }
-    return [error, result];
-  }
+	const [err, authResult] = await getAuthUser(["hospital_order"]);
+	if (err) {
+		my.showToast({
+			type: "fail",
+			content: "智能消息推送授权失败",
+		});
+		return [err, null];
+	} else {
+		const [error, result] = await submitAuthCode({
+			authCode: authResult.authCode,
+		});
+		if (error) {
+			my.showToast({
+				type: "fail",
+				content: "消息订阅失败",
+			});
+		}
+		return [error, result];
+	}
 }
 
 // 数据埋点记录
 export async function recordOpLog({ type }) {
-  const [err, res] = await ywtRequest({
-    url: "/dev/opLog",
-    method: "post",
-    data: {
-      type,
-      terminal: terminal,
-      userType: 1,
-    },
-  });
-  if (err || !res) return [err, null];
-  return [null, res];
+	const [err, res] = await ywtRequest({
+		url: "/dev/opLog",
+		method: "post",
+		data: {
+			type,
+			terminal: terminal,
+			userType: 1,
+		},
+	});
+	if (err || !res) return [err, null];
+	return [null, res];
+}
+
+// 医保2.0预结算
+export async function prePayConfirm({
+	patientId,
+	clinicCode,
+	hisOrdNum,
+	orderSum,
+	payInsType,
+	orderInsType,
+	payAuthNo,
+	authNo,
+	medicalCardInstId,
+	medicalCardId,
+	consumeType,
+}) {
+	const [err, res] = await ywtRequest({
+		url: "/outpatient/prePayConfirm",
+		method: "post",
+		data: {
+			patientId,
+			clinicCode,
+			hisOrdNum,
+			orderSum,
+			payInsType,
+			orderInsType,
+			payAuthNo,
+			authNo,
+			medicalCardInstId,
+			medicalCardId,
+			consumeType,
+		},
+	});
+	if (err || !res) return [err, null];
+	return [null, res];
+}
+
+// 撤销预结算
+export async function revokeSettle({
+	hisOrderNo,
+	insuDivId,
+	hisPatientId,
+	isInsV2,
+}) {
+	const [err, res] = await ywtRequest({
+		url: "/outpatient/revokeSettle",
+		method: "post",
+		data: {
+			hisOrderNo,
+			insuDivId,
+			hisPatientId,
+			isInsV2,
+		},
+	});
+	if (err || !res) return [err, null];
+	return [null, res];
+}
+
+// 支付宝获取业务授权
+export async function getPayAuthInfo({ authCode, callUrl, reqBizNo }) {
+	const [err, res] = await ywtRequest({
+		url: "/outpatient/getPayAuthInfo",
+		method: "post",
+		data: {
+			authCode,
+			callUrl,
+			reqBizNo,
+		},
+	});
+	if (err || !res) return [err, null];
+	return [null, res];
 }

+ 12 - 0
antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao-result/index.acss

@@ -0,0 +1,12 @@
+.ybv2-result {
+  display: flex;
+  align-content: center;
+  margin-top: 50px;
+  flex-direction: column;
+  text-align: center;
+}
+
+.ybv2-result .text{
+  margin: 20px 0;
+  font-size: 26px;
+}

+ 8 - 0
antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao-result/index.axml

@@ -0,0 +1,8 @@
+<wrapper>
+  <!-- 新页面 -->
+  <view class="ybv2-result">
+    <icon type="success" size="{{ 60 }}"/>
+    <view class="text">支付成功</view>
+    <view>{{ sec }}秒后自动跳转</view>
+  </view>
+</wrapper>

+ 40 - 0
antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao-result/index.js

@@ -0,0 +1,40 @@
+import { createSubscribe } from "applet-page-component";
+
+Component(
+	createSubscribe({
+		onShow() {},
+	})({
+		props: {},
+		data: {
+			isPaySuccess: true,
+			sec: 3,
+		},
+
+		didMount() {
+			this.init();
+		},
+
+		methods: {
+			init() {
+				const _this = this;
+
+				const myInterval = () => {
+					if (_this.data.sec > 0) {
+						_this.setData({
+							sec: _this.data.sec - 1,
+						});
+					} else {
+						clearInterval(myIntervalId);
+						// 支付成功后暂时返回首页,方便通过验收
+						const len = getCurrentPages().length;
+						my.navigateBack({
+							delta: len + 1,
+						});
+					}
+				};
+
+				const myIntervalId = setInterval(myInterval, 1000);
+			},
+		},
+	})
+);

+ 7 - 0
antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao-result/index.json

@@ -0,0 +1,7 @@
+{
+  "component": true,
+  "usingComponents": {
+    "wrapper": "../components/wrapper/index",
+    "am-icon": "mini-ali-ui/es/am-icon/index"
+  }
+}

+ 0 - 0
antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao-result/service.js


BIN
antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao/assets/icon-close.png


BIN
antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao/assets/info-icon.png


BIN
antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao/assets/medical-logo.png


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 320 - 0
antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao/index.acss


+ 125 - 0
antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao/index.axml

@@ -0,0 +1,125 @@
+<wrapper>
+  <!-- 新页面 -->
+  <view class="ybv2">
+    <view class="page-index">
+      <view class="hd">
+        <view class="info">
+          <view class="info-hd">付款给</view>
+          <view class="info-bd">南方医院太和分院</view>
+        </view>
+        <view class="info-icon">
+          
+        </view>
+        <view class="bg"></view>
+      </view>
+      <view class="bd">
+        <view class="box">
+          <view class="box-hd">
+            <view class="box-hd-label">费用总额</view>
+            <view class="box-hd-value">{{isCulculate ? '核算中': preConfirmInfo.feeSumamt || 0 + "元"}}</view>
+          </view>
+          <view class="box-bd">
+            <view class="box-item">
+              <view class="box-bd-label">医保基金支付</view>
+              <view class="box-bd-value">{{isCulculate ? '核算中': preConfirmInfo.fundPay || 0 + "元"}}</view>
+            </view>
+            <view class="box-item">
+              <view class="box-bd-label">个人帐户支付</view>
+              <view class="box-bd-value">{{isCulculate ? '核算中': preConfirmInfo.psnAcctPay || 0 +  "元"}}</view>
+            </view>
+            <view class="box-item">
+              <view class="box-bd-label">其他抵扣金额</view>
+              <view class="box-bd-value">0元</view>
+            </view>
+          </view>
+          <view class="box-ft">
+            <view class="box-ft-label">现金支付</view>
+            <view class="box-ft-value">{{isCulculate ? '核算中': preConfirmInfo.ownPayAmt || 0 +  "元"}}</view>
+          </view>
+          <view
+            class="box-append"
+            onTap="handleActionsheet"
+          >
+            查看明细
+          </view>
+        </view>
+
+        <!-- 个帐支付 -->
+        <view className="personal-pay">
+          <view className="title">个人账户支付</view>
+          <view className="btns">
+            <button  data-valuex="{{ true }}" onTap="handleIsUserPersonalAccount" className="{{isUserPersonalAccount ? 'y' : 'n'}}">使用</button>
+            <button  data-valuex="{{ false }}" onTap="handleIsUserPersonalAccount" className="{{!isUserPersonalAccount ? 'y' : 'n'}}">不使用</button>
+          </view>
+        </view>
+        
+        <view class="bd-append">
+          <view class="bd-append-icon"></view>
+          <view class="bd-append-text">医保移动支付</view>
+        </view>
+      </view>
+      <view class="ft">
+        <view class="pay">
+          <view class="pay-label">您还需支付:</view>
+          <view class="pay-value">{{isCulculate ? '核算中': "¥" + (preConfirmInfo.ownPayAmt || "0")}}</view>
+        </view>
+        <view
+          class="{{!canPay ? 'disable btn' : 'btn'}}"
+          onTap="onPay"
+        >
+          去支付
+        </view>
+      </view>
+      <view
+        class="actionsheet"
+        style="{{ display: actionsheetVisible ? 'block' : 'none' }}"
+      >
+        <view
+          class="actionsheet-mask"
+          onTap="handleActionsheet"
+        ></view>
+        <view class="actionsheet-panel">
+          <view class="actionsheet-hd">
+            <view class="actionsheet-hd-tt">处方明细</view>
+            <view
+              class="actionsheet-icon-close"
+              onTap="handleActionsheet"
+            ></view>
+          </view>
+          <view class="actionsheet-bd">
+              <view a:for="{{ prescriptionList }}" class="actionsheet-box" key="{{item.title}}">
+                <view class="actionsheet-box-hd">{{item.title}}</view>
+                <view class="actionsheet-box-bd">
+                    <view
+                      class="actionsheet-box-item"
+                      key="{{ boxItem.label }}"
+                      a:for="{{ item.list }}"
+                      a:for-item="boxItem"
+                    >
+                      <view class="actionsheet-box-item-label-wrap">
+                        <view class="actionsheet-box-item-label">
+                          {{boxItem.label}}
+                        </view>
+                        <view class="actionsheet-box-item-sublabel">
+                          {{boxItem.subLabel}}
+                        </view>
+                      </view>
+                      <view
+                        class="{{
+                          boxItem.highlight
+                            ? 'actionsheet-box-item-value em'
+                            : 'actionsheet-box-item-value'
+                        }}"
+                      >
+                        {{boxItem.value}}
+                      </view>
+                    </view>
+                </view>
+              </view>
+          </view>
+        </view>
+      </view>
+    </view>
+    <!-- <view a:elif class="loading-page"></view> -->
+  </view>
+</wrapper>

+ 363 - 0
antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao/index.js

@@ -0,0 +1,363 @@
+import qs from "qs";
+import { getYbParams, generateRandomFourDigitNumber } from "./service";
+import { tradePay } from "../../utils/tradePay";
+import {
+	prePayConfirm,
+	getPayAuthInfo,
+	revokeSettle,
+} from "../../../../core/utils/ywtService";
+import history from "../../utils/history";
+import { createSubscribe } from "applet-page-component";
+
+Component(
+	createSubscribe({
+		onShow() {
+			this.init("onShow");
+		},
+	})({
+		props: {},
+		data: {
+			authCode: undefined,
+			canPay: false,
+			prescriptionList: [],
+			actionsheetVisible: false,
+			isUserPersonalAccount: true,
+			isCulculate: false,
+			preConfirmInfo: {},
+		},
+
+		didMount() {
+			this.init("didMount");
+		},
+
+		didUnmount() {
+			this._paying = false;
+		},
+
+		methods: {
+			init(type) {
+				this.getPayDetail(this.$page.data.query);
+				this.hanldeGetPayAuthInfo(type);
+			},
+
+			async hanldeGetPayAuthInfo(type) {
+				if (this._paying) return;
+				const app = getApp();
+				const {
+					hisOrderNo: hisOrdNum,
+					authCode,
+					reqBizNo,
+				} = this.$page.data.query;
+				const _this = this;
+				const ramdonNum = generateRandomFourDigitNumber();
+				const userId = app.globalData.ywtUserId || "";
+				const queryReqBizNo = reqBizNo || `${hisOrdNum}-${userId}-${ramdonNum}`;
+				const query = Object.assign(this.$page.data.query, {
+					reqBizNo: queryReqBizNo,
+				});
+				const qsResult = `?${qs.stringify(query)}`;
+				const callUrl = encodeURIComponent(
+					`antbuilder/industry/hospitalV2/pages/page-no-pull/index${qsResult}`
+				);
+				if (type === "onShow") {
+					my.getAuthCode({
+						scopes: ["nhsamp", "auth_user"], // 主动授权:auth_user,静默授权:auth_base。或者其它scopes
+						success: (res) => {
+							if (res.authCode) {
+								_this.requestGetPayAuthInfo(
+									res.authCode,
+									callUrl,
+									queryReqBizNo,
+									type
+								);
+							}
+						},
+					});
+				} else {
+					this.requestGetPayAuthInfo(authCode, callUrl, queryReqBizNo, type);
+				}
+			},
+
+			async requestGetPayAuthInfo(authCode, callUrl, reqBizNo, lifeType) {
+				const _this = this;
+				const [err, result] = await getPayAuthInfo({
+					authCode,
+					callUrl,
+					reqBizNo,
+				});
+				if (!err) {
+					const { payAuthNo, authNo, medicalCardInstId, medicalCardId } =
+						result;
+					if (result.authNo) {
+						this.setData(
+							{
+								payAuthNo,
+								authNo,
+								medicalCardInstId,
+								medicalCardId,
+								isCulculate: true,
+							},
+							() => {
+								_this.handlePrePayConfirm();
+							}
+						);
+						return;
+					}
+					if (result.authUrl && lifeType === "didMount") {
+						// 跳转医保授权页面
+						my.ap.openURL({
+							url: result.authUrl,
+							fail(e) {
+								console.log("err", e);
+								my.navigateBack();
+							},
+						});
+					} else {
+						my.navigateBack();
+					}
+				} else {
+				}
+			},
+
+			async handlePrePayConfirm() {
+				console.log(
+					"this.$page.data.query handlePrePayConfirm ==>",
+					this.$page.data.query
+				);
+				console.log("this.$page.data handlePrePayConfirm ==>", this.$page.data);
+				my.showLoading({ mask: true });
+				try {
+					const {
+						hisOrderNo: hisOrdNum,
+						hisPatientId: patientId,
+						hisClinicCode: clinicCode,
+						total: orderSum,
+						orderInsType,
+					} = this.$page.data.query;
+					const {
+						payAuthNo,
+						authNo,
+						medicalCardInstId,
+						medicalCardId,
+						isUserPersonalAccount,
+					} = this.data;
+
+					const [err, result] = await prePayConfirm({
+						patientId,
+						clinicCode,
+						hisOrdNum,
+						orderSum,
+						payInsType: "2",
+						orderInsType,
+						payAuthNo,
+						authNo,
+						medicalCardInstId,
+						medicalCardId,
+						consumeType: isUserPersonalAccount ? 0 : 2,
+					});
+					if (!err) {
+						// 预结算成功
+						const ybData = getYbParams(result);
+						this.setData({
+							preConfirmInfo: Object.assign(result, ybData),
+							isCulculate: false,
+							canPay: true,
+						});
+					} else {
+						console.log("err ==>", err, typeof err, JSON.stringify(err));
+						my.navigateBack();
+					}
+				} finally {
+					my.hideLoading();
+				}
+			},
+
+			parseDetailItems(detailItems) {
+				const list = detailItems
+					? JSON.parse(decodeURIComponent(detailItems || ""))
+					: [];
+				const newList = list.map((item) => {
+					return {
+						label: `${item.itemName}*${item.itemNum}`,
+						// subLabel: `${item.unit || ""}`,
+						value: `${item.amount || 0}元`,
+					};
+				});
+				return newList || [];
+			},
+
+			async handleIsUserPersonalAccount(e) {
+				const _this = this;
+				const { valuex } = e.currentTarget.dataset;
+				const { hisOrderNo, hisPatientId } = this.$page.data.query;
+				const { preConfirmInfo, isUserPersonalAccount } = this.data;
+				if (isUserPersonalAccount === valuex) return;
+				my.showLoading();
+				this.setData(
+					{
+						isUserPersonalAccount: valuex,
+						isCulculate: true,
+					},
+					async () => {
+						const [err, result] = await revokeSettle({
+							hisOrderNo,
+							insuDivId: preConfirmInfo.insuDivId || "",
+							hisPatientId,
+							isInsV2: true,
+						});
+						if (!err) {
+							_this.handlePrePayConfirm();
+						} else {
+							my.showToast({
+								type: "fail",
+								content: "撤销预结算失败",
+								duration: 2000,
+								complete() {
+									my.hideLoading();
+									my.navigateBack();
+								},
+							});
+						}
+					}
+				);
+			},
+
+			getPayDetail(query) {
+				let infoList = [];
+				if (query) {
+					infoList = [
+						{
+							title: "就诊信息",
+							list: [
+								// { label: "门诊类别", value: info.deptName },
+								{ label: "门诊科室", value: query.deptName },
+								{ label: "医生姓名", value: query.doctorName },
+								{ label: "处方时间", value: query.prescribeDate },
+								{
+									label: "费用总额",
+									value: parseFloat(query.total / 100, 2) || 0 + "元",
+									highlight: true,
+								},
+							],
+						},
+						{
+							title: "费用信息",
+							list: this.parseDetailItems(query.orderItems),
+						},
+					];
+					this.setData({ prescriptionList: infoList });
+				}
+			},
+
+			// 查看更多
+			openForm() {
+				this.setData({
+					expand: !this.data.expand,
+				});
+			},
+
+			medicareExpand() {
+				this.setData({
+					medicareExpand: !this.data.medicareExpand,
+				});
+			},
+
+			handleActionsheet() {
+				this.setData({
+					actionsheetVisible: !this.data.actionsheetVisible,
+				});
+			},
+
+			// 发起支付
+			async onPay(e) {
+				const { canPay } = this.data;
+				if (!canPay) return;
+				this._paying = true;
+				const {
+					hisPatientId,
+					age,
+					sex,
+					orderId,
+					hisOrderNo,
+					amount,
+					deptName,
+					doctorName,
+					doctorCode,
+					hisClinicCode,
+					total,
+					name,
+					orderInsType,
+					prescribeDate,
+					payInsType = "2",
+					medInsFee,
+					selfFee,
+					payName,
+					patName,
+					outTradeNo,
+				} = this.$page.data.query;
+				const {
+					preConfirmInfo: { invoiceNo, insuAdmDr, insUploadFeeResp },
+					isUserPersonalAccount,
+				} = this.data;
+				let result = false;
+				try {
+					my.showLoading();
+					// 门诊订单
+					result = await tradePay(
+						{
+							useBalance: false,
+							useMedicare: true,
+							outTradeNo,
+							hisPatientId,
+							age,
+							sex,
+							orderId,
+							hisOrderNo,
+							amount,
+							deptName,
+							doctorName,
+							doctorCode,
+							total,
+							hisClinicCode,
+							name,
+							prescribeDate,
+							orderInsType,
+							payInsType,
+							totalFee: total,
+							medInsFee,
+							selfFee,
+							payName,
+							patName,
+							invoiceNo,
+							insuAdmDr,
+							insUploadFeeResp,
+							consumeType: isUserPersonalAccount ? 0 : 2,
+						},
+						{
+							tradeType: "Outpatient",
+						}
+					);
+				} catch (error) {
+					console.log("error ===>", error);
+				} finally {
+					my.hideLoading();
+				}
+
+				if (result) {
+					this._paying = false;
+					console.log("pay result ===>", result);
+					// 支付成功后返回列表页
+					// my.navigateBack();
+
+					history.replace({
+						title: "支付成功",
+						query: {},
+						pageType: "hospital-payment-detail-yibao-result",
+					});
+				} else {
+					this._paying = false;
+				}
+			},
+		},
+	})
+);

+ 7 - 0
antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao/index.json

@@ -0,0 +1,7 @@
+{
+  "component": true,
+  "usingComponents": {
+    "wrapper": "../components/wrapper/index",
+    "am-icon": "mini-ali-ui/es/am-icon/index"
+  }
+}

+ 94 - 0
antbuilder/industry/hospitalV2/components/hospital-payment-detail-yibao/service.js

@@ -0,0 +1,94 @@
+import request from '../../service/request'; // 查询订单状态
+
+function payDetail(data) {
+  return request.post('/miniProRequest.pay.payDetail', data);
+}
+
+/**
+ * 获取医保缴费字段
+ * @param  {object} obj
+ */
+function getYbParams(obj) {
+  if (!obj || !obj.insUploadFeeResp) return {};
+  const list = obj.insUploadFeeResp.split(":");
+  const params = {};
+
+  // 总额:feeSumamt
+  // 医保支付:fundPay
+  // 个人支付:psnAcctPay
+  // 现金支付:ownPayAmt
+
+  list.map((i, index) => {
+    if (i.includes("feeSumamt")) {
+      let innerList = i.split(",");
+      let value = "";
+      if (innerList[0].includes("feeSumamt")) {
+        value = innerList[1];
+      } else {
+        value = list[index + 1].split(",")[0];
+      }
+      params.feeSumamt = value
+        .replaceAll('"', "")
+        .replaceAll("}", "")
+        .replaceAll("{", "")
+        .replaceAll("\\", "");
+    }
+
+    if (i.includes("fundPay")) {
+      let innerList = i.split(",");
+      let value = "";
+      if (innerList[0].includes("fundPay")) {
+        value = innerList[1];
+      } else {
+        value = list[index + 1].split(",")[0];
+      }
+      params.fundPay = value
+        .replaceAll('"', "")
+        .replaceAll("}", "")
+        .replaceAll("{", "")
+        .replaceAll("\\", "");
+    }
+
+    if (i.includes("ownPayAmt")) {
+      let innerList = i.split(",");
+      let value = "";
+      if (innerList[0].includes("ownPayAmt")) {
+        value = innerList[1];
+      } else {
+        value = list[index + 1].split(",")[0];
+      }
+      params.ownPayAmt = value
+        .replaceAll('"', "")
+        .replaceAll("}", "")
+        .replaceAll("{", "")
+        .replaceAll("\\", "");
+    }
+
+    if (i.includes("psnAcctPay")) {
+      let innerList = i.split(",");
+      let value = "";
+      if (innerList[0].includes("psnAcctPay")) {
+        value = innerList[1];
+      } else {
+        value = list[index + 1].split(",")[0];
+      }
+      params.psnAcctPay = value
+        .replaceAll('"', "")
+        .replaceAll("}", "")
+        .replaceAll("{", "")
+        .replaceAll("\\", "");
+    }
+  });
+
+  return params;
+}
+
+function generateRandomFourDigitNumber() {
+  return Math.floor(Math.random() * (9999 - 1000 + 1)) + 1000;
+}
+
+export default {
+  payDetail,
+  getYbParams,
+  generateRandomFourDigitNumber
+};

+ 5 - 5
antbuilder/industry/hospitalV2/components/hospital-payment-detail/index.axml

@@ -132,19 +132,19 @@
     </block>
 
     <block a:if="{{ order.status === 0 && order.amount > 0 }}">
-      <view class="payment-fixed" a:if="{{ prder.type === 3 && order.medicareBinded }}">
+      <view class="payment-fixed">
         <view class="patient-fixed-bottom">
           <view class="patient-fixed-btn white" onTap="onPay">自费支付</view>
-          <view class="patient-fixed-btn" onTap="onPay" data-medicareBinded="{{ true }}">医保支付</view>
+          <view class="patient-fixed-btn" onTap="onYbPay" data-medicareBinded="{{ true }}">医保支付</view>
         </view>
       </view>
 
-      <view class="payment-fixed" a:else>
+      <!-- <view class="payment-fixed" a:else>
         <view>暂不支持医保支付,如有需要请去人工窗口/自助机缴费</view>
         <view class="patient-fixed-bottom">
-          <view class="patient-fixed-btn space" onTap="onPay">付</view>
+          <view class="patient-fixed-btn space" onTap="onPay">自费支付</view>
         </view>
-      </view>
+      </view> -->
     </block>
   </view>
 </wrapper>

+ 288 - 208
antbuilder/industry/hospitalV2/components/hospital-payment-detail/index.js

@@ -1,206 +1,240 @@
 import { payDetail } from "./service";
 import { tradePay } from "../../utils/tradePay";
 import history from "../../utils/history";
+import { getYbParams } from "../hospital-payment-detail-yibao/service";
 import { reportApi, reportCmPV_YL } from "../../utils/cloudMonitorHelper";
-import { getSubscribeAuth } from "../../../../core/utils/ywtService";
+import {
+	getSubscribeAuth,
+	prePayConfirm,
+} from "../../../../core/utils/ywtService";
 import { createSubscribe } from "applet-page-component";
 
-Component({
-	props: {},
-	data: {
-		order: {
-			orderItems: [
+Component(
+	createSubscribe({
+		onShow() {
+			this.payDetail(this.$page.data.query);
+		},
+	})({
+		props: {},
+		data: {
+			order: {
+				orderItems: [
+					// {
+					//   itemName: '项目名称',
+					//   itemNum: 2,
+					//   amount: 999.99,
+					// },
+				],
+				depName: "",
+				outTradeNo: "",
+				tradeNo: "",
+				type: null,
+				// 1-挂号费订单 2-充值订单 3-诊间缴费订单
+				userName: "",
+				cardNum: "",
+				amount: 0,
+				createTime: "",
+				payTime: "",
+				payType: null,
+				// 1-自费 2-医保 3-其他
+				status: null,
+				// 0-待支付 1-已支付 9-已取消
+				medicareBinded: false,
+				idNum: "",
+				customInfo: "",
+				payDetails: "",
+				payDate: "",
+				doctorName: "",
+				reportRemind: "",
+				checkRemind: "",
+				medicineRemind: "",
+				refundRemind: "",
+				receiptRemind: "",
+			},
+			// 订单项
+			fromItem: [
+				{
+					label: "就诊人",
+					key: "name",
+				},
+				{
+					label: "病人ID号",
+					key: "hisPatientId",
+				},
+				{
+					label: "就诊科室",
+					key: "deptName",
+				},
+				{
+					label: "医生",
+					key: "doctorName",
+				},
+				// {
+				// 	label: "费用日期",
+				// 	key: "payDate",
+				// },
+				// {
+				// 	label: "支付单号",
+				// 	key: "outTradeNo",
+				// },
+				{
+					label: "开单时间",
+					key: "prescribeDate",
+				},
 				// {
-				//   itemName: '项目名称',
-				//   itemNum: 2,
-				//   amount: 999.99,
+				// 	label: "付款时间",
+				// 	key: "payTime",
 				// },
 			],
-			depName: "",
-			outTradeNo: "",
-			tradeNo: "",
-			type: null,
-			// 1-挂号费订单 2-充值订单 3-诊间缴费订单
-			userName: "",
-			cardNum: "",
-			amount: 0,
-			createTime: "",
-			payTime: "",
-			payType: null,
-			// 1-自费 2-医保 3-其他
-			status: null,
-			// 0-待支付 1-已支付 9-已取消
-			medicareBinded: false,
-			idNum: "",
-			customInfo: "",
-			payDetails: "",
-			payDate: "",
-			doctorName: "",
-			reportRemind: "",
-			checkRemind: "",
-			medicineRemind: "",
-			refundRemind: "",
-			receiptRemind: "",
-		},
-		// 订单项
-		fromItem: [
-			{
-				label: "就诊人",
-				key: "name",
+			medicareExpand: false,
+			expand: false,
+			medicare: {
+				total: 0,
+				own: 0,
+				detail: {},
 			},
-			{
-				label: "病人ID号",
-				key: "hisPatientId",
-			},
-			{
-				label: "就诊科室",
-				key: "deptName",
-			},
-			{
-				label: "医生",
-				key: "doctorName",
-			},
-			// {
-			// 	label: "费用日期",
-			// 	key: "payDate",
-			// },
-			// {
-			// 	label: "支付单号",
-			// 	key: "outTradeNo",
-			// },
-			{
-				label: "开单时间",
-				key: "prescribeDate",
-			},
-			// {
-			// 	label: "付款时间",
-			// 	key: "payTime",
-			// },
-		],
-		medicareExpand: false,
-		expand: false,
-		medicare: {
-			total: 0,
-			own: 0,
-			detail: {},
+			checkRemind: {},
 		},
-		checkRemind: {},
-	},
 
-	didMount() {
-		this.payDetail(this.$page.data.query);
-		/* 服务办结,门诊缴费 */
-
-		reportApi("门诊缴费");
-		/* 服务预警,门诊缴费 */
+		didMount() {
+			this.payDetail(this.$page.data.query);
+			/* 服务办结,门诊缴费 */
 
-		reportCmPV_YL({
-			title: "门诊缴费",
-		});
-	},
+			reportApi("门诊缴费");
+			/* 服务预警,门诊缴费 */
 
-	methods: {
-		saveSubscribe(ref) {
-			this.subscribe = ref;
+			reportCmPV_YL({
+				title: "门诊缴费",
+			});
 		},
 
-		payDetail(send) {
-			const { orderItems } = send;
-			const status0OrderItems = JSON.parse(
-				decodeURIComponent(orderItems || "")
-			);
-			const newSend = Object.assign({}, send);
-			delete newSend["orderItems"];
-			payDetail(newSend).then((data) => {
-				const payDetails = JSON.parse(data.payDetails || "{}");
-				const detail = payDetails["医保支付"] || {};
-				let total = 0;
-				Object.entries(detail).forEach(([k, v]) => {
-					detail[k] = numFix(v);
-					total += v * 1;
+		methods: {
+			saveSubscribe(ref) {
+				this.subscribe = ref;
+			},
+
+			payDetail(send) {
+				const { orderItems } = send;
+				const status0OrderItems = JSON.parse(
+					decodeURIComponent(orderItems || "")
+				);
+				const newSend = Object.assign({}, send);
+				delete newSend["orderItems"];
+				payDetail(newSend).then((data) => {
+					const payDetails = JSON.parse(data.payDetails || "{}");
+					const detail = payDetails["医保支付"] || {};
+					let total = 0;
+					Object.entries(detail).forEach(([k, v]) => {
+						detail[k] = numFix(v);
+						total += v * 1;
+					});
+					this.setData({
+						order: Object.assign({}, this.data.order, data, {
+							orderItems: data.orderItems ? data.orderItems : status0OrderItems,
+						}),
+						medicare: {
+							total: numFix(total),
+							own: numFix(payDetails["自费支付金额"]) || "0.00",
+							detail,
+						},
+						checkRemind: JSON.parse(data.checkRemind || "{}"),
+					});
 				});
-				this.setData({
-					order: Object.assign({}, this.data.order, data, {
-						orderItems: data.orderItems ? data.orderItems : status0OrderItems,
-					}),
-					medicare: {
-						total: numFix(total),
-						own: numFix(payDetails["自费支付金额"]) || "0.00",
-						detail,
-					},
-					checkRemind: JSON.parse(data.checkRemind || "{}"),
+			},
+
+			async handlePrePayConfirm() {
+				return new Promise(async (resolve) => {
+					const {
+						hisOrderNo: hisOrdNum,
+						hisPatientId: patientId,
+						hisClinicCode: clinicCode,
+						total: orderSum,
+						orderInsType,
+					} = this.$page.data.query;
+					const {
+						payAuthNo = "",
+						authNo = "",
+						medicalCardInstId = "",
+						medicalCardId = "",
+					} = this.data;
+					const [err, result] = await prePayConfirm({
+						patientId,
+						clinicCode,
+						hisOrdNum,
+						orderSum,
+						payInsType: "1",
+						orderInsType,
+						payAuthNo,
+						authNo,
+						medicalCardInstId,
+						medicalCardId,
+					});
+					if (!err) {
+						// 预结算成功
+						const ybData = getYbParams(result);
+						const preConfirmInfo = Object.assign(result, ybData);
+						this.setData(
+							{
+								preConfirmInfo,
+							},
+							resolve(preConfirmInfo)
+						);
+					}
 				});
-			});
-		},
+			},
 
-		// 查看更多
-		openForm() {
-			this.setData({
-				expand: !this.data.expand,
-			});
-		},
+			// 查看更多
+			openForm() {
+				this.setData({
+					expand: !this.data.expand,
+				});
+			},
 
-		medicareExpand() {
-			this.setData({
-				medicareExpand: !this.data.medicareExpand,
-			});
-		},
+			medicareExpand() {
+				this.setData({
+					medicareExpand: !this.data.medicareExpand,
+				});
+			},
 
-		// 发起支付
-		async onPay(e) {
-			const { medicareBinded = false } = e.target.dataset;
-			const { order: oreder } = this.data;
-			let result = false;
-			try {
-				my.showLoading();
-				// 获取授权
-				await getSubscribeAuth();
+			// 发起支付
+			async onPay(e) {
+				const { medicareBinded = false } = e.target.dataset;
+				const { orderInsType, medInsFee, selfFee, payName, patName } =
+					this.$page.data.query;
+				const { order: oreder } = this.data;
+				let result = false;
+				const { invoiceNo = "" } = await this.handlePrePayConfirm();
+				try {
+					my.showLoading();
+					// 获取授权
+					await getSubscribeAuth();
 
-				if (oreder.type === 1) {
-					result = await tradePay(
-						{
-							type: oreder.type,
-							idNum: oreder.outTradeNo,
-							depName: oreder.depName,
-						},
-						{
-							tradeType: "Appointment",
-						}
-					);
-				} else if (oreder.type === 2) {
-					// 充值
-					result = await tradePay(
-						{
-							type: oreder.type,
-							idNum: oreder.outTradeNo,
-							amount: oreder.amount,
-						},
-						{
-							tradeType: "Appointment",
-						}
-					);
-				} else {
-					// 门诊订单
-					const {
-						hisPatientId,
-						age,
-						sex,
-						orderId,
-						hisOrderNo,
-						amount,
-						deptName,
-						doctorName,
-						doctorCode,
-						total,
-						hisClinicCode,
-						name,
-						prescribeDate,
-					} = oreder;
-					result = await tradePay(
-						{
-							useBalance: !medicareBinded,
-							useMedicare: medicareBinded,
-							outTradeNo: oreder.outTradeNo,
+					if (oreder.type === 1) {
+						result = await tradePay(
+							{
+								type: oreder.type,
+								idNum: oreder.outTradeNo,
+								depName: oreder.depName,
+							},
+							{
+								tradeType: "Appointment",
+							}
+						);
+					} else if (oreder.type === 2) {
+						// 充值
+						result = await tradePay(
+							{
+								type: oreder.type,
+								idNum: oreder.outTradeNo,
+								amount: oreder.amount,
+							},
+							{
+								tradeType: "Appointment",
+							}
+						);
+					} else {
+						// 门诊订单
+						const {
 							hisPatientId,
 							age,
 							sex,
@@ -214,37 +248,83 @@ Component({
 							hisClinicCode,
 							name,
 							prescribeDate,
-						},
-						{
-							tradeType: "Outpatient",
-						}
-					);
+						} = oreder;
+						result = await tradePay(
+							{
+								useBalance: !medicareBinded,
+								useMedicare: medicareBinded,
+								outTradeNo: oreder.outTradeNo,
+								hisPatientId,
+								age,
+								sex,
+								orderId,
+								hisOrderNo,
+								amount,
+								deptName,
+								doctorName,
+								doctorCode,
+								total,
+								hisClinicCode,
+								name,
+								prescribeDate,
+								// 新增参数
+								invoiceNo,
+								orderInsType,
+								totalFee: total,
+								payInsType: "1",
+								medInsFee,
+								selfFee,
+								payName,
+								patName,
+							},
+							{
+								tradeType: "Outpatient",
+							}
+						);
+					}
+				} catch (error) {
+					console.log("error ===>", error);
+				} finally {
+					my.hideLoading();
 				}
-			} catch (error) {
-				console.log("error ===>", error);
-			} finally {
-				my.hideLoading();
-			}
-			// 支付成功刷新页面
-			this.payDetail(this.$page.data.query);
-			if (result) {
-				// 支付成功后返回列表页
-				my.navigateBack();
-			}
-		},
+				// 支付成功刷新页面
+				this.payDetail(this.$page.data.query);
+				if (result) {
+					// 支付成功后返回列表页
+					my.navigateBack();
+				}
+			},
 
-		hrefTo() {
-			my.ap.navigateToAlipayPage({
-				path: "alipays://platformapi/startapp?appId=77700284&page=pages/medical/index?chInfo=YY_xiaochengxu",
-			});
-		},
+			async onYbPay() {
+				const query = this.$page.data.query;
+				await getSubscribeAuth();
+				my.getAuthCode({
+					scopes: ["nhsamp", "auth_user"], // 主动授权:auth_user,静默授权:auth_base。或者其它scopes
+					success: (res) => {
+						if (res.authCode) {
+							history.push({
+								title: "确认支付",
+								query: Object.assign(query, { authCode: res.authCode }),
+								pageType: "hospital-payment-detail-yibao",
+							});
+						}
+					},
+				});
+			},
 
-		toH5(e) {
-			const { url } = e.target.dataset;
-			history.toH5(url);
+			hrefTo() {
+				my.ap.navigateToAlipayPage({
+					path: "alipays://platformapi/startapp?appId=77700284&page=pages/medical/index?chInfo=YY_xiaochengxu",
+				});
+			},
+
+			toH5(e) {
+				const { url } = e.target.dataset;
+				history.toH5(url);
+			},
 		},
-	},
-});
+	})
+);
 
 function numFix(val) {
 	const num = val * 1;

+ 11 - 60
antbuilder/industry/hospitalV2/components/hospital-payment/index.js

@@ -150,6 +150,11 @@ Component(
 						hisClinicCode,
 						deptName,
 						orderItems,
+						orderInsType,
+						medInsFee,
+						selfFee,
+						payName,
+						patName,
 					},
 				} = e.target.dataset;
 				history.push({
@@ -174,7 +179,12 @@ Component(
 						total,
 						hisClinicCode,
 						deptName,
+						orderInsType,
 						orderItems: encodeURIComponent(JSON.stringify(orderItems || "")),
+						medInsFee,
+						selfFee,
+						payName,
+						patName,
 					},
 					pageType: "hospital-payment-detail",
 				});
@@ -182,66 +192,7 @@ Component(
 
 			// 付款
 			async onPayment(e) {
-				const { medicareBinded = false, item } = e.target.dataset; // 同意订阅消息后发起支付
-				try {
-					my.showLoading();
-					// 获取智能消息推送授权
-					await getSubscribeAuth();
-					// 挂号
-					if (item.type === 1) {
-						await tradePay(
-							{
-								type: item.type,
-								idNum: item.outTradeNo,
-								depName: item.depName,
-							},
-							{
-								tradeType: "Appointment",
-							}
-						);
-					} else if (item.type === 2) {
-						// 充值
-						await tradePay(
-							{
-								type: item.type,
-								idNum: item.outTradeNo,
-								amount: item.amount,
-							},
-							{
-								tradeType: "Appointment",
-							}
-						);
-					} else {
-						// 门诊订单
-						await tradePay(
-							{
-								useBalance: !medicareBinded,
-								useMedicare: medicareBinded,
-								outTradeNo: item.outTradeNo,
-								...item,
-							},
-							{
-								tradeType: "Outpatient",
-							}
-						);
-					}
-				} catch (error) {
-				} finally {
-					my.hideLoading();
-				}
-				this.scrollRef.refresh();
-				// 支付成功去订单详情页
-				this.toDetail({
-					target: {
-						dataset: {
-							outTradeNo: item.outTradeNo,
-							type: item.type ? item.type : 0,
-							...item,
-						},
-					},
-				}); // 发起消息订阅
-
-				// this.subscribe.subscribeMessage();
+				this.toDetail(e);
 			},
 		},
 	})

+ 4 - 1
antbuilder/industry/hospitalV2/pages/page-no-pull/index.axml

@@ -83,5 +83,8 @@
   <hospital-introduce componentData="{{ componentData }}"  a:elif="{{ pageType === 'hospital-introduce' }}" />
   <!-- 院区选择页面 -->
   <select-hospital-area-introduce componentData="{{ componentData }}"  a:elif="{{ pageType === 'select-hospital-area-introduce' }}" />
-
+  <!-- 医保2.0 支付页面 -->
+  <hospital-payment-detail-yibao componentData="{{ componentData }}" a:elif="{{ pageType === 'hospital-payment-detail-yibao' }}" />
+  <!-- 医保2.0 支付成功页面 -->
+  <hospital-payment-detail-yibao-result componentData="{{ componentData }}" a:elif="{{ pageType === 'hospital-payment-detail-yibao-result' }}" />
 </block>

+ 52 - 50
antbuilder/industry/hospitalV2/pages/page-no-pull/index.json

@@ -1,51 +1,53 @@
 {
-  "defaultTitle": "",
-  "transparentTitle": "auto",
-  "backgroundColor": "#FFFFFF",
-  "usingComponents": {
-    "deposit-list": "../../components/deposit-list/index",
-    "pay-result": "../../components/pay-result/index",
-    "mas-adc-nav-bar": "@mas.io/adc-nav-bar/es/index",
-    "inventory-day": "../../components/inventory-day/index",
-    "deposit": "../../components/deposit/index",
-    "hospital-project": "../../components/hospital-project/index",
-    "hospital-home": "../../components/hospital-home/index",
-    "booking-detail": "../../components/booking-detail/index",
-    "follow-up-notice": "../../components/follow-up-notice/index",
-    "select-department": "../../components/select-department/index",
-    "service-agreement": "../../components/service-agreement/index",
-    "hospital-num-source": "../../components/hospital-num-source/index",
-    "select-hospital-area": "../../components/select-hospital-area/index",
-    "general-services": "../../components/general-services/generalServices",
-    "report-details-list": "../../components/report-details-list/reportDetailsList",
-    "doctor-profile-item": "../../components/doctor-profile-item/doctorProfileItem",
-    "doctor-page": "../../components/doctor-page/index",
-    "order-pay": "../../components/order-pay/index",
-    "appointment-result": "../../components/appointment-result/index",
-    "hospital-recharge": "../../components/hospital-recharge/index",
-    "patient-list": "../../components/patient-list/index",
-    "patient-detail": "../../components/patient-detail/index",
-    "patient-detail-edit": "../../components/patient-detail-edit/index",
-    "patient-detail-phone": "../../components/patient-detail-phone/index",
-    "hospital-payment": "../../components/hospital-payment/index",
-    "hospital-payment-detail": "../../components/hospital-payment-detail/index",
-    "line-up-record": "../../components/line-up-record/index",
-    "edit-patient": "../../components/edit-patient/index",
-    "subscribe-record": "../../components/subscribe-record/index",
-    "report-list": "../../components/report-list/index",
-    "payment-success": "../../components/payment-success/index",
-    "admission-record": "../../components/admission-record/index",
-    "add-inpatient-information": "../../components/add-inpatient-information/index",
-    "add-inpatient": "../../components/add-inpatient/index",
-    "registration-result": "../../components/registration-result/index",
-    "settlement": "../../components/settlement/index",
-    "discharge-settlement-detail": "../../components/discharge-settlement-detail/index",
-    "pre-settlement": "../../components/pre-settlement/index",
-    "discharge-settlement": "../../components/discharge-settlement/index",
-    "patient-guide": "../../components/patient-guide/index",
-    "hospital-introduce": "../../components/hospital-introduce/index",
-    "select-hospital-area-introduce": "../../components/select-hospital-area-introduce/index"
-  },
-  "allowsBounceVertical": "NO",
-  "pullRefresh": false
-}
+	"defaultTitle": "",
+	"transparentTitle": "auto",
+	"backgroundColor": "#FFFFFF",
+	"usingComponents": {
+		"deposit-list": "../../components/deposit-list/index",
+		"pay-result": "../../components/pay-result/index",
+		"mas-adc-nav-bar": "@mas.io/adc-nav-bar/es/index",
+		"inventory-day": "../../components/inventory-day/index",
+		"deposit": "../../components/deposit/index",
+		"hospital-project": "../../components/hospital-project/index",
+		"hospital-home": "../../components/hospital-home/index",
+		"booking-detail": "../../components/booking-detail/index",
+		"follow-up-notice": "../../components/follow-up-notice/index",
+		"select-department": "../../components/select-department/index",
+		"service-agreement": "../../components/service-agreement/index",
+		"hospital-num-source": "../../components/hospital-num-source/index",
+		"select-hospital-area": "../../components/select-hospital-area/index",
+		"general-services": "../../components/general-services/generalServices",
+		"report-details-list": "../../components/report-details-list/reportDetailsList",
+		"doctor-profile-item": "../../components/doctor-profile-item/doctorProfileItem",
+		"doctor-page": "../../components/doctor-page/index",
+		"order-pay": "../../components/order-pay/index",
+		"appointment-result": "../../components/appointment-result/index",
+		"hospital-recharge": "../../components/hospital-recharge/index",
+		"patient-list": "../../components/patient-list/index",
+		"patient-detail": "../../components/patient-detail/index",
+		"patient-detail-edit": "../../components/patient-detail-edit/index",
+		"patient-detail-phone": "../../components/patient-detail-phone/index",
+		"hospital-payment": "../../components/hospital-payment/index",
+		"hospital-payment-detail": "../../components/hospital-payment-detail/index",
+		"line-up-record": "../../components/line-up-record/index",
+		"edit-patient": "../../components/edit-patient/index",
+		"subscribe-record": "../../components/subscribe-record/index",
+		"report-list": "../../components/report-list/index",
+		"payment-success": "../../components/payment-success/index",
+		"admission-record": "../../components/admission-record/index",
+		"add-inpatient-information": "../../components/add-inpatient-information/index",
+		"add-inpatient": "../../components/add-inpatient/index",
+		"registration-result": "../../components/registration-result/index",
+		"settlement": "../../components/settlement/index",
+		"discharge-settlement-detail": "../../components/discharge-settlement-detail/index",
+		"pre-settlement": "../../components/pre-settlement/index",
+		"discharge-settlement": "../../components/discharge-settlement/index",
+		"patient-guide": "../../components/patient-guide/index",
+		"hospital-introduce": "../../components/hospital-introduce/index",
+		"select-hospital-area-introduce": "../../components/select-hospital-area-introduce/index",
+		"hospital-payment-detail-yibao": "../../components/hospital-payment-detail-yibao/index",
+		"hospital-payment-detail-yibao-result": "../../components/hospital-payment-detail-yibao-result/index"
+	},
+	"allowsBounceVertical": "NO",
+	"pullRefresh": false
+}

+ 35 - 3
antbuilder/industry/hospitalV2/utils/tradePay.js

@@ -45,6 +45,18 @@ function outpatient(params) {
 		hisClinicCode,
 		name,
 		prescribeDate,
+		// 医保2.0 新增参数
+		orderInsType,
+		payInsType,
+		consumeType,
+		totalFee,
+		medInsFee,
+		selfFee,
+		payName,
+		patName,
+		invoiceNo,
+		insuAdmDr,
+		insUploadFeeResp,
 	} = params;
 	return tradeNoForOrder({
 		useBalance: params.useBalance,
@@ -66,8 +78,20 @@ function outpatient(params) {
 		hisClinicCode,
 		name,
 		prescribeDate,
+		// 医保2.0 新增参数
+		orderInsType,
+		payInsType,
+		consumeType,
+		totalFee,
+		medInsFee,
+		selfFee,
+		payName,
+		patName,
+		invoiceNo,
+		insuAdmDr,
+		insUploadFeeResp,
 	}).then((tradeData) => {
-		if (tradeData.tradeNo) {
+		if (tradeData.tradeNo || tradeData.orderStr) {
 			// 发起支付
 			return _tradePay(tradeData);
 		} else {
@@ -97,13 +121,20 @@ function _tradePay(
 	tradeData = {
 		tradeNo: "",
 		outTradeNo: "",
+		orderStr: "",
 	}
 ) {
+	const obj = tradeData.orderStr
+		? { orderStr: tradeData.orderStr }
+		: { tradeNO: tradeData.tradeNo };
 	return new Promise((resolve, reject) => {
+		console.log("obj ==>", obj);
 		my.tradePay({
-			tradeNO: tradeData.tradeNo,
-
+			// tradeNO: tradeData.tradeNo,
+			...obj,
 			success(payRes) {
+				console.log("success payRes ==>", payRes);
+				console.log("triggerPay ==>", tradeData);
 				// 4000 订单处理失败
 				// 6001 用途中途取消支付
 				// 6002 网络链接出错
@@ -146,6 +177,7 @@ function _tradePay(
 			},
 
 			fail: (payRes) => {
+				console.log("fail payRes ==>", payRes);
 				// 订单支付异常
 				reject(
 					compareResult({

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio