liukang 2 years ago
parent
commit
11f9ce4bbe
100 changed files with 4682 additions and 2502 deletions
  1. 24 14
      .hbuilderx/launch.json
  2. 461 7
      App.vue
  3. 4 0
      components/chat/chat.css
  4. 271 0
      components/chat/chat.vue
  5. 394 0
      components/chat/emediaInvite/emediaInvite.css
  6. 240 0
      components/chat/emediaInvite/emediaInvite.vue
  7. 65 0
      components/chat/inputbar/inputbar.css
  8. 227 0
      components/chat/inputbar/inputbar.vue
  9. 73 0
      components/chat/inputbar/suit/audio/audio.css
  10. 347 0
      components/chat/inputbar/suit/audio/audio.vue
  11. 14 0
      components/chat/inputbar/suit/audio/record_status.js
  12. 39 0
      components/chat/inputbar/suit/emoji/emoji.css
  13. 82 0
      components/chat/inputbar/suit/emoji/emoji.vue
  14. 169 0
      components/chat/inputbar/suit/image/image.vue
  15. 95 0
      components/chat/inputbar/suit/location/location.vue
  16. 65 0
      components/chat/inputbar/suit/main/main.css
  17. 189 0
      components/chat/inputbar/suit/main/main.vue
  18. 65 0
      components/chat/inputbar/suit/ptopcall/ptopcall.vue
  19. 110 0
      components/chat/inputbar/suit/videoComp/videoComp.vue
  20. 148 0
      components/chat/msglist/msglist.css
  21. 323 0
      components/chat/msglist/msglist.vue
  22. 25 0
      components/chat/msglist/type/audio/audio.css
  23. 178 0
      components/chat/msglist/type/audio/audio.vue
  24. 62 0
      components/chat/msglist/type/audio/audioCtxFactory.js
  25. 5 0
      components/chat/msglist/type/audio/playStatus.js
  26. 56 0
      components/chat/msgpackager.js
  27. 195 0
      components/chat/msgstorage.js
  28. 14 0
      components/chat/msgtype.js
  29. 0 0
      components/chat/multiemedia/index.css
  30. 484 0
      components/chat/multiemedia/index.nvue
  31. 110 0
      components/longPressModal/index.vue
  32. 3 1
      components/menuList/menuList.vue
  33. 29 12
      components/my-order/my-order.vue
  34. 1 1
      components/news-module/news-module.vue
  35. 6 1
      components/order-top/order-top.vue
  36. 4 2
      components/share-model/share-model.vue
  37. 29 0
      components/swipedelete/swipedelete.css
  38. 68 0
      components/swipedelete/swipedelete.vue
  39. 1 0
      index.html
  40. 7 2
      manifest.json
  41. BIN
      nativePlugins/AP-FaceDetectModule/.DS_Store
  42. 0 3
      nativePlugins/AP-FaceDetectModule/ReadMe.txt
  43. BIN
      nativePlugins/AP-FaceDetectModule/android/.DS_Store
  44. BIN
      nativePlugins/AP-FaceDetectModule/android/APSecuritySDK-DeepSec-7.0.1.20211220.aar
  45. BIN
      nativePlugins/AP-FaceDetectModule/android/Android-AliyunDevice-FG-10022.2.aar
  46. BIN
      nativePlugins/AP-FaceDetectModule/android/aliyunfaceverify.aar
  47. BIN
      nativePlugins/AP-FaceDetectModule/android/android-aliyunbasicstl-sdk-release-1.6.0-20220414192835.aar
  48. BIN
      nativePlugins/AP-FaceDetectModule/android/android-aliyuncomm-sdk-release-1.6.0-20220414192835.aar
  49. BIN
      nativePlugins/AP-FaceDetectModule/android/android-aliyunface-sdk-release-1.6.0-20220414192835.aar
  50. BIN
      nativePlugins/AP-FaceDetectModule/android/android-aliyunocr-sdk-release-1.6.0-20220414192835.aar
  51. BIN
      nativePlugins/AP-FaceDetectModule/android/photinus-1.0.1.220217162928.aar
  52. BIN
      nativePlugins/AP-FaceDetectModule/android/tygerservice-1.0.0.220407164130.aar
  53. BIN
      nativePlugins/AP-FaceDetectModule/ios/.DS_Store
  54. 0 66
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.bundle/en.strings
  55. 0 101
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.bundle/id.strings
  56. 0 101
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.bundle/ja.strings
  57. 0 101
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.bundle/ko.strings
  58. 0 64
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.bundle/zh-HK.strings
  59. 0 66
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.bundle/zh-Hans.strings
  60. 0 66
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.bundle/zh-Hant.strings
  61. BIN
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/.DS_Store
  62. BIN
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/APBToygerFacade
  63. 0 66
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/APBToygerFacade.bundle/en.strings
  64. 0 101
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/APBToygerFacade.bundle/id.strings
  65. 0 101
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/APBToygerFacade.bundle/ja.strings
  66. 0 101
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/APBToygerFacade.bundle/ko.strings
  67. 0 64
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/APBToygerFacade.bundle/zh-HK.strings
  68. 0 66
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/APBToygerFacade.bundle/zh-Hans.strings
  69. 0 66
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/APBToygerFacade.bundle/zh-Hant.strings
  70. 0 76
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerBaseTask.h
  71. 0 44
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerBehavlogManager.h
  72. 0 23
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerCherryDetectTask.h
  73. 0 26
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerCherryUploadTask.h
  74. 0 126
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerDataCenter.h
  75. 0 22
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerDetectTask.h
  76. 0 37
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerFacade.h
  77. 0 130
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerFacadeDefine.h
  78. 0 25
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerPresentTask.h
  79. 0 168
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerRemoteConfig.h
  80. 0 27
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerUploadTask.h
  81. 0 104
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerUtils.h
  82. 0 13
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerViewController.h
  83. BIN
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Info.plist
  84. 0 6
      nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Modules/module.modulemap
  85. BIN
      nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/.DS_Store
  86. BIN
      nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/APPSecuritySDK
  87. BIN
      nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/APPSecuritySDK-Info.plist
  88. 0 122
      nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APDID.h
  89. 0 41
      nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APDeviceColor.h
  90. 0 32
      nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APDynamic.h
  91. 0 21
      nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskConfigReportRequest.h
  92. 0 19
      nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskConfigReportResponse.h
  93. 0 20
      nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskConfigServiceProtocol.h
  94. 0 14
      nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskFileUploadProtocol.h
  95. 0 21
      nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskLoggerProtocol.h
  96. 0 30
      nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskRPCProtocol.h
  97. 0 29
      nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskRemoteLoggerProtocol.h
  98. 0 68
      nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskReportRequest.h
  99. 0 65
      nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskReportResponse.h
  100. 0 20
      nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskRpcConfiguration.h

+ 24 - 14
.hbuilderx/launch.json

@@ -1,16 +1,26 @@
-{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
-  // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
-    "version": "0.0",
-    "configurations": [{
-     	"default" : 
-     	{
-     		"launchtype" : "local"
-     	},
-     	"mp-weixin" : 
-     	{
-     		"launchtype" : "local"
-     	},
-     	"type" : "uniCloud"
-     }
+{
+    // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+    // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+    "version" : "0.0",
+    "configurations" : [
+        {
+        	"app-plus" : 
+        	{
+        		"launchtype" : "local"
+        	},
+        	"default" : 
+        	{
+        		"launchtype" : "local"
+        	},
+        	"mp-weixin" : 
+        	{
+        		"launchtype" : "local"
+        	},
+        	"type" : "uniCloud"
+        },
+        {
+            "playground" : "custom",
+            "type" : "uni-app:app-ios"
+        }
     ]
 }

+ 461 - 7
App.vue

@@ -1,4 +1,80 @@
 <script>
+	let WebIM = (wx.WebIM = require("./utils/WebIM")["default"]);
+	let msgStorage = require("./components/chat/msgstorage");
+	let msgType = require("./components/chat/msgtype");
+	let disp = require("./utils/broadcast");
+	let logout = false;
+	function ack(receiveMsg) {
+	  // 处理未读消息回执
+	  var bodyId = receiveMsg.id; // 需要发送已读回执的消息id
+	
+	  var ackMsg = new WebIM.message("read", WebIM.conn.getUniqueId());
+	  ackMsg.set({
+	    id: bodyId,
+	    to: receiveMsg.from,
+	  });
+	  WebIM.conn.send(ackMsg.body);
+	}
+	function onMessageError(err) {
+	  if (err.type === "error") {
+	    uni.showToast({
+	      title: err.errorText,
+	    });
+	    return false;
+	  }
+	
+	  return true;
+	}
+	function getCurrentRoute() {
+	  let pages = getCurrentPages();
+	  if (pages.length > 0) {
+	    let currentPage = pages[pages.length - 1];
+	    return currentPage.route;
+	  }
+	  return "/";
+	}
+	
+	
+	// 包含陌生人版本
+	function calcUnReadSpot(message) {
+	  let myName = uni.getStorageSync("myUsername");
+	  uni.getStorageInfo({
+	    success: function (res) {
+	      let storageKeys = res.keys;
+	      let newChatMsgKeys = [];
+	      let historyChatMsgKeys = [];
+	      storageKeys.forEach((item) => {
+	        if (item.indexOf(myName) > -1 && item.indexOf("rendered_") == -1) {
+	          newChatMsgKeys.push(item);
+	        }
+	      });
+	      let count = newChatMsgKeys.reduce(function (result, curMember, idx) {
+	        let chatMsgs;
+	        chatMsgs = uni.getStorageSync(curMember) || [];
+	        return result + chatMsgs.length;
+	      }, 0);
+	
+	      getApp().globalData.unReadMessageNum = count;
+	      disp.fire("em.unreadspot", message);
+	    },
+	  });
+	}
+	
+	function saveGroups() {
+	  var me = this;
+	  return WebIM.conn.getGroup({
+	    limit: 50,
+	    success: function (res) {
+	      uni.setStorage({
+	        key: "listGroup",
+	        data: res.data,
+	      });
+	    },
+	    error: function (err) {
+	      console.log(err);
+	    },
+	  });
+	}
 	import amap from './common/amap-wx.130.js'
 	var amapPlugin = new amap.AMapWX({  
 		key: 'bb69713f3c3d3c85e2662d313daa47b9'
@@ -7,7 +83,71 @@
 	var that = ''
 	export default {
 		globalData: {
-			
+			unReadMessageNum: 0,
+			userInfo: null,
+			saveFriendList: [],
+			saveGroupInvitedList: [],
+			isIPX: false, //是否为iphone X
+			conn: {
+				closed: false,
+				curOpenOpt: {},
+					
+				open(opt) {
+					uni.showLoading({
+						title: "正在初始化客户端..",
+						mask: true,
+					});
+					this.curOpenOpt = opt;
+					WebIM.conn.open(opt);
+					this.closed = false;
+				},
+					
+				reopen() {
+					if (this.closed) {
+						//this.open(this.curOpenOpt);
+						WebIM.conn.open(this.curOpenOpt);
+						this.closed = false;
+					}
+				},
+			},
+			onLoginSuccess: function(myName) {
+				uni.hideLoading();
+				uni.redirectTo({
+					url: "../chat/chat?myName=" + myName,
+				});
+			},
+					
+			getUserInfo(cb) {
+				var me = this;
+					
+				if (this.userInfo) {
+					typeof cb == "function" && cb(this.userInfo);
+				} else {
+					// 调用登录接口
+					uni.login({
+						success() {
+							uni.getUserInfo({
+								success(res) {
+									me.userInfo = res.userInfo;
+									typeof cb == "function" && cb(me.userInfo);
+								},
+							});
+						},
+					});
+				}
+			},
+					
+			checkIsIPhoneX: function() {
+				const me = this;
+				uni.getSystemInfo({
+					success: function(res) {
+						// 根据 model 进行判断
+						if (res.model && res.model.search("iPhone X") != -1) {
+							me.isIPX = true;
+						}
+					},
+				});
+			},
 			getLoca: function() {
 				var city = uni.getStorageSync('city')
 				return new Promise((resolve, reject) => {
@@ -49,7 +189,318 @@
 		onLaunch: function() {
 			console.log('App Launch')
 			this.HXlogin()
-			this.HXlisten()
+			var me = this;
+			var logs = uni.getStorageSync("logs") || [];
+			logs.unshift(Date.now());
+			uni.setStorageSync("logs", logs); //
+			
+			disp.on("em.main.ready", function() {
+				calcUnReadSpot();
+			});
+			disp.on("em.chatroom.leave", function() {
+				calcUnReadSpot();
+			});
+			disp.on("em.chat.session.remove", function() {
+				calcUnReadSpot();
+			});
+			disp.on("em.chat.audio.fileLoaded", function() {
+				calcUnReadSpot();
+			});
+			disp.on("em.main.deleteFriend", function() {
+				calcUnReadSpot();
+			});
+			disp.on("em.chat.audio.fileLoaded", function() {
+				calcUnReadSpot();
+			}); //
+			
+			WebIM.conn.listen({
+				onOpened(message) {
+					console.log('>>>>>>环信登录成功啦')
+				},
+			
+				onReconnect() {
+					uni.showToast({
+						title: "重连中...",
+						duration: 2000,
+					});
+				},
+			
+				onSocketConnected() {
+					uni.showToast({
+						title: "socket连接成功",
+						duration: 2000,
+					});
+				},
+			
+				onClosed() {
+					uni.showToast({
+						title: "网络已断开",
+						icon: "none",
+						duration: 2000,
+					});
+					uni.redirectTo({
+						url: "/pages/login/codeLogin/codeLogin",
+					});
+					me.globalData.conn.closed = true;
+					WebIM.conn.close();
+				},
+			
+				onInviteMessage(message) {
+					me.globalData.saveGroupInvitedList.push(message);
+					disp.fire("em.invite.joingroup", message); // uni.showModal({
+					// 	title: message.from + " 已邀你入群 " + message.roomid,
+					// 	success(){
+					// 		disp.fire("em.invite.joingroup", message);
+					// 	},
+					// 	error(){
+					// 		disp.fire("em.invite.joingroup", message);
+					// 	}
+					// });
+				},
+			
+				onReadMessage(message) {
+					//console.log('已读', message)
+				},
+			
+				//onPresence为旧版 ,建议参考最新增删好友api文档 :http://docs-im.easemob.com/im/web/basics/buddy
+				onPresence(message) {
+			
+					switch (message.type) {
+						case "unsubscribe":
+							break;
+							// 好友邀请列表
+						case "subscribe":
+							for (let i = 0; i < me.globalData.saveFriendList.length; i++) {
+								if (me.globalData.saveFriendList[i].from === message.from) {
+									me.globalData.saveFriendList[i] = message;
+									disp.fire("em.subscribe");
+									return;
+								}
+							}
+							msgStorage.saveReceiveMsg(message, 'INFORM'); //存添加好友消息,方便展示通知
+							me.globalData.saveFriendList.push(message);
+							disp.fire("em.subscribe");
+			
+							break;
+			
+						case "subscribed":
+							uni.showToast({
+								title: "添加成功",
+								duration: 1000,
+							});
+							disp.fire("em.subscribed");
+							break;
+			
+						case "unsubscribed":
+							disp.fire("em.unsubscribed");
+							break;
+						case "direct_joined":
+							saveGroups();
+							uni.showToast({
+								title: "已进群",
+								duration: 1000,
+							});
+							break;
+						case "memberJoinPublicGroupSuccess":
+							saveGroups();
+							uni.showToast({
+								title: "已进群",
+								duration: 1000,
+							});
+							break;
+						case "invite":
+							// 防止重复添加
+							for (let i = 0; i < me.globalData.saveGroupInvitedList.length; i++) {
+								if (me.globalData.saveGroupInvitedList[i].from === message.from) {
+									me.globalData.saveGroupInvitedList[i] = message;
+									disp.fire("em.invite.joingroup")
+									return;
+								}
+							}
+							me.globalData.saveGroupInvitedList.push(message);
+							disp.fire("em.invite.joingroup");
+							msgStorage.saveReceiveMsg(message, 'INFORM'); //存添加好友消息,方便展示通知
+							break;
+						case "unavailable":
+							disp.fire("em.contacts.remove");
+							disp.fire("em.group.leaveGroup", message);
+							break;
+			
+						case "deleteGroupChat":
+							disp.fire("em.invite.deleteGroup", message);
+							break;
+			
+						case "leaveGroup":
+							disp.fire("em.group.leaveGroup", message);
+							break;
+			
+						case "removedFromGroup":
+							disp.fire("em.group.leaveGroup", message);
+							break;
+			
+						default:
+							break;
+					}
+				},
+			
+				onRoster(message) {
+					// let pages = getCurrentPages();
+					// if(pages[0]){
+					// 	pages[0].onShow();
+					// }
+				},
+			
+				onVideoMessage(message) {
+					console.log("onVideoMessage: ", message);
+			
+					if (message) {
+						msgStorage.saveReceiveMsg(message, msgType.VIDEO);
+					}
+			
+					calcUnReadSpot(message);
+					ack(message);
+				},
+			
+				onAudioMessage(message) {
+					console.log("onAudioMessage", message);
+			
+					if (message) {
+						if (onMessageError(message)) {
+							msgStorage.saveReceiveMsg(message, msgType.AUDIO);
+						}
+			
+						calcUnReadSpot(message);
+						ack(message);
+					}
+				},
+			
+				onCmdMessage(message) {
+					console.log("onCmdMessage", message);
+			
+					if (message) {
+						if (onMessageError(message)) {
+							msgStorage.saveReceiveMsg(message, msgType.CMD);
+						}
+			
+						calcUnReadSpot(message);
+						ack(message);
+					}
+				},
+			
+				// onLocationMessage(message){
+				// 	console.log("Location message: ", message);
+				// 	if(message){
+				// 		msgStorage.saveReceiveMsg(message, msgType.LOCATION);
+				// 	}
+				// },
+				onTextMessage(message) {
+					console.log("onTextMessage", message);
+			 
+					if (message) {
+						if (onMessageError(message)) {
+							msgStorage.saveReceiveMsg(message, msgType.TEXT);
+						}
+			
+						calcUnReadSpot(message);
+						ack(message);
+					}
+				},
+			
+				onEmojiMessage(message) {
+					console.log("onEmojiMessage", message);
+			
+					if (message) {
+						if (onMessageError(message)) {
+							msgStorage.saveReceiveMsg(message, msgType.EMOJI);
+						}
+			
+						calcUnReadSpot(message);
+						ack(message);
+					}
+				},
+			
+				onPictureMessage(message) {
+					console.log("onPictureMessage", message);
+			
+					if (message) {
+						if (onMessageError(message)) {
+							msgStorage.saveReceiveMsg(message, msgType.IMAGE);
+						}
+			
+						calcUnReadSpot(message);
+						ack(message);
+					}
+				},
+			
+				onFileMessage(message) {
+					console.log("onFileMessage", message);
+			
+					if (message) {
+						if (onMessageError(message)) {
+							msgStorage.saveReceiveMsg(message, msgType.FILE);
+						}
+			
+						calcUnReadSpot(message);
+						ack(message);
+					}
+				},
+			
+				// 各种异常
+				onError(error) {
+					console.log(error); // 16: server-side close the websocket connection
+					// if (error.type == WebIM.statusCode.WEBIM_CONNCTION_DISCONNECTED) {
+					//   // if(error.type == WebIM.statusCode.WEBIM_CONNCTION_DISCONNECTED && !logout){
+					//   // if(WebIM.conn.autoReconnectNumTotal < WebIM.conn.autoReconnectNumMax){
+					//   // 	return;
+					//   // }
+					//   uni.showToast({
+					//     title: "websocket 断开",
+					//     duration: 1000
+					//   });
+					//   uni.redirectTo({
+					//     url: "../login/login"
+					//   });
+					//   logout = true;
+					//   return;
+					// } // 8: offline by multi login
+			
+					// if (error.type == WebIM.statusCode.WEBIM_CONNCTION_SERVER_ERROR) {
+					//   uni.showToast({
+					//     title: "offline by multi login",
+					//     duration: 1000
+					//   });
+					//   uni.redirectTo({
+					//     url: "../login/login"
+					//   });
+					// }
+			
+					if (error.type == WebIM.statusCode.WEBIM_CONNCTION_OPEN_ERROR) {
+						uni.hideLoading();
+						disp.fire("em.error.passwordErr"); // uni.showModal({
+						// 	title: "用户名或密码错误",
+						// 	confirmText: "OK",
+						// 	showCancel: false
+						// });
+					}
+			
+					if (error.type == WebIM.statusCode.WEBIM_CONNCTION_AUTH_ERROR) {
+						uni.hideLoading();
+						disp.fire("em.error.tokenErr");
+					}
+			
+					if (error.type == "socket_error") {
+						///sendMsgError
+						console.log("socket_errorsocket_error", error);
+						uni.showToast({
+							title: "网络已断开",
+							icon: "none",
+							duration: 2000,
+						});
+						disp.fire("em.error.sendMsgErr", error);
+					}
+				},
+			});
+			this.globalData.checkIsIPhoneX();
 		},
 		onShow: function() {
 			console.log('App Show')
@@ -58,7 +509,7 @@
 			console.log('App Hide')
 		},
 		methods: {
-			HXlisten(){
+			/* HXlisten(){
 				console.log('<<<<<<环信监听',uni.WebIM)
 				uni.WebIM.conn.listen({
 					onOpened: function () {
@@ -152,17 +603,20 @@
 						console.log("收到整个会话已读的回执",message);
 					}      //收到整个会话已读的回执,在对方发送channel ack时会在这个回调里收到消息
 				});
-			},
+			}, */
 			HXlogin() {
-				var userId = uni.getStorageSync('id')
+				var userId = uni.getStorageSync('myUsername')
 				var options = {
-					user: userId.toString(),
-					pwd	: '123456',
+					user: userId,
+					pwd	: '12345678',
 					appKey: uni.WebIM.config.appkey,
 					success: function() {
 						var lianjie = uni.WebIM.conn.isOpened()
+						var my = uni.getStorageSync("myUsername");
+						uni.setStorageSync('myUsername',my)
 					},
 					error: function() {
+						
 					}
 				}
 				uni.WebIM.conn.open(options);

+ 4 - 0
components/chat/chat.css

@@ -0,0 +1,4 @@
+.main {
+	width: 100%;
+	height: 100%;
+}

+ 271 - 0
components/chat/chat.vue

@@ -0,0 +1,271 @@
+<template>
+  <view class="main">
+    <view class="main">
+      <chatSuitAudio
+        ref="chatSuitAudio"
+        :username="username"
+        :chatType="chatType"
+        @newAudioMsg="saveSendMsg"
+      ></chatSuitAudio>
+
+      <chatMsglist
+        ref="chatMsglist"
+        :username="username"
+        @msglistTap="normalScroll"
+		@clickMsg="clickMsg"
+        id="chat-msglist"
+      ></chatMsglist>
+    </view>
+    <chatInputbar
+      ref="chatInputbar"
+      :username="username"
+      :chatType="chatType"
+      @newTextMsg="saveSendMsg"
+      @newImageMsg="saveSendMsg"
+      @newLocationMsg="saveSendMsg"
+      @newVideoMsg="saveSendMsg"
+      @tapSendAudio="toggleRecordModal"
+      @inputFocused="shortScroll"
+      @inputBlured="normalScroll"
+	  @makeVideoCall="onMakeVideoCall"
+	  @makeAudioCall="onMakeAudioCall"
+	  v-show="!showEmediaInvite"
+    ></chatInputbar>
+	
+	<chatEmediaInvite 
+		:username="username" 
+		:action="action"
+		@onStartConfr="onStartConfr"
+		@goBack="onGoBack"
+		v-if="showEmediaInvite"/>
+		
+	<!-- <chatMultiEmedia
+		style="{display: multiEmediaVisible}"
+		:username="username" 
+		:groupId="groupId"
+		:action="emediaAction"
+		@inviteMember="onInviteMember"
+		@createConfrSuccess="onCreateConfrSuccess"
+		@hangup="onHangup"
+		v-if="showmultiEmedia"/> -->
+  </view>
+  
+</template>
+
+<script>
+let msgStorage = require("./msgstorage");
+let msgType = require("./msgtype");
+import chatMsglist from "./msglist/msglist";
+import chatInputbar from "./inputbar/inputbar";
+import chatSuitAudio from "./inputbar/suit/audio/audio";
+import chatEmediaInvite from "./emediaInvite/emediaInvite.vue"
+import chatMultiEmedia from "./multiemedia/index.nvue"
+export default {
+  data() {
+    return {
+    __comps__: {
+        msglist: null,
+        inputbar: null,
+        audio: null,
+    },
+	inputbarVisible: 'block',
+	action: null,
+	pubUrl: '',
+	subUrl: '',
+	showEmedia: false,
+	showmultiEmedia: false,
+	showEmediaInvite: false,
+	emediaAction: null,
+	multiEmediaVisible: 'block',
+	confrId: '',
+	groupId: '',
+	confrMember: []
+    };
+  },
+
+  components: {
+    chatMsglist,
+    chatInputbar,
+    chatSuitAudio,
+	chatEmediaInvite,
+	chatMultiEmedia
+  },
+  props: {
+    username: {
+      type: Object,
+      default: () => ({}),
+    },
+    chatType: {
+      type: String,
+      default: msgType.chatType.SINGLE_CHAT,
+    },
+  },
+  computed: {
+	computedUserName(){
+	  return this.username
+	}
+  },
+
+  mounted() {
+	this.username = uni.username;
+	uni.$on('createConfrSuccess', this.onCreateConfrSuccess)
+  },
+
+  moved() {},
+
+  destroyed() {},
+
+  methods: {
+    toggleRecordModal() {
+      this.$refs.chatSuitAudio.toggleRecordModal();
+    },
+
+    normalScroll() {
+      this.$refs.chatMsglist.normalScroll();
+	  this.$refs.chatInputbar.cancelEmoji();
+	  this.$refs.chatInputbar.closeFunModal();
+    },
+	clickMsg(msg){
+		this.$emit('onClickInviteMsg', msg)
+		console.log('点击消息上一级', msg)
+		
+	},
+    shortScroll() {
+      this.$refs.chatMsglist.shortScroll();
+    },
+
+    saveSendMsg(evt) {
+      msgStorage.saveMsg(evt.msg, evt.type);
+	  this.$refs.chatInputbar.cancelEmoji();
+	  this.$refs.chatInputbar.closeFunModal()
+    },
+
+    getMore() {
+      this.$refs.chatMsglist.getHistoryMsg();
+    },
+	onMakeVideoCall(){
+		this.showEmediaInvite= true
+		this.inputbarVisible= 'none'
+		this.action= 'create'
+		console.log(this.showEmediaInvite)
+	},
+	onStartConfr(data){
+		console.log('发起邀请的回调', data)
+		this.showEmediaInvite= false
+		this.showmultiEmedia= true
+		this.multiEmediaVisible= 'block'
+		this.inputbarVisible= 'none'
+		this.confrMember= data.confrMember
+		this.emediaAction={
+			action: 'create'
+		}
+		
+		this.$emit('onMakeVideoCall', {
+			confrMember: data.confrMember,
+			groupId: this.username.groupId
+		})
+	},
+	onCreateConfrSuccess(data){
+		console.log('创建会成功议回调', data)
+		this.sconfrId= data.confrId
+		getApp().globalData.confrId = data.confrId
+		this.sendInviteMsg(this.confrMember, data.confrId, data)
+	},
+	onGoBack(){
+		this.showEmediaInvite= false
+		this.showmultiEmedia= true
+		this.multiEmediaVisible= 'block'
+		this.inputbarVisible= 'none'
+		this.confrMember= []
+	},
+
+	onInviteMember(e){
+		let username = this.username;
+		if(!this.username.groupId){
+			username.groupId = e.detail
+		}
+		
+		this.action= 'invite'
+		this.showEmediaInvite= true
+		this.inputbarVisible= 'none'
+		//showmultiEmedia: false
+		this.multiEmediaVisible= 'none'
+	},
+	onMakeAudioCall(){
+		this.showEmediaInvite= true
+		this.showmultiEmedia= false
+		this.inputbarVisible= 'none'
+	},
+	onClickInviteMsg(data){
+		console.log('收到邀请消息')
+		console.log(data)
+		let confrId = data.conferenceId
+		let msg_extension = typeof(data.msg_extension) == 'string'?JSON.parse(data.msg_extension):data.msg_extension
+		let password = data.password || ''
+		this.emediaAction= {
+			action: 'join',
+			confrId: confrId,
+			password: password,
+			roomName: data.roomName || ''
+		},
+		this.showEmediaInvite= false,
+		this.showmultiEmedia= true,
+		this.inputbarVisible= 'none',
+		this.groupId= msg_extension.group_id
+	},
+	onHangup(){
+		this.showEmediaInvite= false,
+		this.showmultiEmedia= false,
+		this.inputbarVisible= 'block'
+		getApp().globalData.confrId = ''
+	},
+	sendInviteMsg(members, confrId, data){
+		console.log("%c members","background: green")
+		console.log(members)
+		console.log('进入发邀请的函数', members)
+		console.log('this.username.groupId----', this.username.groupId)
+		
+		console.log('confrId', confrId)
+		console.log('data', data)
+		members&&members.forEach((value) => {
+			let id = uni.WebIM.conn.getUniqueId();
+			let msg = new uni.WebIM.message('txt', id);
+
+			msg.set({
+				msg: wx.WebIM.conn.context.userId + ' invite you to video call',
+				from: wx.WebIM.conn.context.userId,
+				to: value,
+				roomType: false,
+				chatType: 'singleChat',
+				ext: {
+					msg_extension: JSON.stringify({
+						inviter: wx.WebIM.conn.context.userId,
+						group_id: this.username.groupId
+					}),
+					// roomName: data&&data.roomName || '',
+					password: '123456',
+					conferenceId: getApp().globalData.confrId
+				},
+				success(id, serverMsgId){
+					console.log('发送邀请消息成功 to: '+value)
+					//disp.fire('em.chat.sendSuccess', id, me.data.userMessage);
+				},
+				fail(id, serverMsgId){
+					console.log('发送邀请消息失败了')
+				}
+			});
+			
+			// if(this.chatType == msgType.chatType.CHAT_ROOM){
+			// 	msg.setGroup("groupchat");
+			// }
+			console.log('发送邀请', msg.body)
+			uni.WebIM.conn.send(msg.body);
+
+		})
+	},
+  },
+};
+</script>
+<style>
+@import "./chat.css";
+</style>

+ 394 - 0
components/chat/emediaInvite/emediaInvite.css

@@ -0,0 +1,394 @@
+page{
+	height: 100%;
+	width: 100%;
+}
+.wraper{ 
+	height: 100%;
+	position: fixed;
+	z-index: 999;
+	width: 100%;
+	top: 0;
+	left: 0;
+	background: #fff;
+}
+.main_title{
+	background-color: #fff;
+	width: 100%;
+	height: 128rpx;
+	position: fixed;
+	top: 0;
+	z-index: 9;
+}
+.main_title text{
+	line-height: 96rpx;
+	font-size: 64rpx;
+	font-weight: 400;
+	margin-left: 32rpx;
+}
+.main_title_hide{
+	top: -128rpx;
+	transition: top 0.5s;
+}
+.main_title_show{
+	top: 0;
+	transition: top 0.5s;
+}
+.search,.search_input {
+	width: 100%;
+	height: 88rpx;
+	background-color: #fff;
+	display: flex;
+	align-items: center;
+	top: 0;
+	left: 0;
+}
+.search {
+	justify-content: space-around;
+}
+.search_input {
+	justify-content: space-around;
+}
+.search view, .search_input view {
+	height: 64rpx;
+	line-height: 64rpx;
+	background-color: #F5F5F5;
+	border-radius: 16rpx;
+	text-align: center;
+	display: flex;
+	align-items: center;
+	margin: 0 32rpx;
+}
+.search view {
+	width: 100%;
+	justify-content: center;
+	align-items: center;
+}
+.search image {
+	display: block;
+	width: 6%;
+	height: 53%;
+	margin-right: 10rpx;
+}
+.search_input view {
+	padding-left: 24rpx;
+	text-align: left;
+	flex: 1;
+	margin: 0 28rpx 0 32rpx;
+}
+.search icon,.search_input icon {
+	display: inline-block;
+	margin: 8rpx 12rpx 0;
+	font-size: 24rpx;
+}
+.search text {
+	font-size: 30rpx;
+	color: #9B9B9B;
+}
+
+.search_input text {
+	display: inline-block;
+	height: 60rpx;
+	line-height: 60rpx;
+	font-size: 30rpx;
+	color: #0873DE;
+	margin-right: 32rpx;
+}
+.search_input input {
+	font-size: 28rpx;
+	width: 90%;
+}
+
+.scrollWraper{
+	flex: 1;
+	position: relative;
+}
+
+/*.contain {
+	margin-top: 40px;
+}*/
+.chat,.chat_groups,.chat_lists{
+	position: relative;
+	width: 100%;
+	height: 90rpx;
+	display: flex;
+	align-items: center;
+}
+.chat,.chat_groups {
+	border-bottom: 0.5px solid #E5E5E5;
+}
+.chat image {
+	width: 6%;
+	height: 50%;
+	margin:0 26rpx 0 20rpx;
+}
+.chat .em-msgNum {
+	position: absolute;
+	right: 20rpx;
+	height: 34rpx;
+	border-radius: 20rpx;
+	min-width: 30rpx;
+	background: #f04134;
+	color: #fff;
+	line-height: 40rpx;
+	text-align: center;
+	padding: 0px 4rpx 4rpx 4rpx;
+}
+.chat_groups image {
+	width: 8%;
+	height: 54%;
+	margin:0 20rpx 0 16rpx;
+}
+.chat_lists image {
+	width: 12%;
+	height: 100%;
+	margin-right: 4rpx;
+}
+.chat text,.chat_groups text,.chat_lists text {
+	font-size: 28rpx;
+}
+.numbers {
+	width: 100%;
+	height: 100rpx;
+}
+.nbr_header {
+	height: 2rpx;
+	background-color: #D4D4D4;
+	line-height: 40rpx;
+	padding-left: 32rpx;
+}
+.nbr_body {
+	width: 70%;
+	height: 100rpx;
+	display: inline-block;
+	font-size: 32rpx;
+	line-height: 100rpx;
+	margin-right: 0;
+	float: left;
+}
+.mask {
+	background-color: black;
+	opacity: 0.4;
+	position: absolute;
+	top: 40rpx;
+	left: 0;
+	right: 0;
+	bottom: 0;
+}
+.delete {
+	width: 60rpx;
+	height: 70rpx;
+	float: right;
+	margin-top: 12rpx;
+}
+.delete image {
+	width: 32rpx;
+	height: 4rpx;
+}
+.info {
+	margin-top: 10rpx;
+	width: 12%;
+	height: 80rpx;
+	display: inline-block;
+	float: left;
+}
+.info image {
+	width: 68%;
+	height: 70%;
+	display: inline-block;
+	margin: 12rpx auto auto 12rpx;
+}
+
+.otherItem{
+	height: 108rpx;
+	display: flex;
+  	align-items: center;
+  	border-bottom: 0.5px solid #E5E5E5;
+  	margin:0 32rpx;
+  	position: relative;
+}
+.otherItem image{
+	width: 72rpx;
+	height: 72rpx;
+	margin: 0 22rpx 0 0;
+}
+.otherItem text{
+	font-size: 34rpx;
+	color: #000;
+}
+.otherItem .line{
+	position: absolute;
+	bottom: 0;
+	width: 100%;
+	height:.5px;
+}
+
+.content{
+	box-sizing: border-box; 
+} 
+
+.location{
+	width: 100%;
+} 
+.location_top{
+	height: 76rpx;
+	line-height: 76rpx;
+	background: #f4f4f4;
+	color: #606660;
+	font-size: 28rpx;
+	padding: 0 20rpx;
+} 
+.location_bottom{
+	height: 140rpx;
+	line-height: 140rpx;
+	color: #d91f16;
+	font-size: 28rpx;
+	border-top: 0.5px #E5E5E5 solid;
+	border-bottom: 0.5px #E5E5E5 solid;
+	padding: 0 20rpx;
+	align-items: center;
+	display: -webkit-flex;
+} 
+.address_top{
+	height: 80rpx;
+    line-height: 70rpx;
+    background: #FAFAFA;
+    color: #9B9B9B;
+    font-size: 17px;
+    padding: 10rpx 32rpx;
+} 
+.address_bottom{
+	height: 108rpx;
+	line-height: 108rpx;
+	background: #fff;
+	color: #000000;
+	font-size: 34rpx;
+	border-bottom: 0.5px #E5E5E5 solid;
+	margin: 0 32rpx;
+	display: flex;
+	align-items: center;
+} 
+.address_bottom image{
+	width: 72rpx;
+	height: 72rpx;
+	margin-right: 24rpx;
+}
+.address_bottom text{
+	overflow: hidden;
+	text-overflow: ellipsis;
+	flex: 1;
+}
+.location_img{
+	width: 48rpx;
+	height: 48rpx;
+	position: absolute;
+	right: 20rpx;
+	top: 125rpx;
+} 
+.add_city{
+	width: 228rpx;
+	height: 60rpx;
+	line-height: 60rpx;
+	text-align: center;
+	border: 0.5px solid #E5E5E5;
+	color: #000000;
+	margin-right: 20rpx;
+} 
+.add_citying{
+	width: 228rpx;
+	height: 60rpx;
+	line-height: 60rpx;
+	text-align: center;
+	border: 2rpx solid #09bb07;
+	color: #09bb07;
+	margin-right: 20rpx;
+} 
+.orientation{
+	white-space:normal;
+	display: inline-block;
+ 	width: 45rpx;
+ 	height:50rpx;
+	font-size: 28rpx;
+	font-weight: bold;
+ 	color: rgb(88, 87, 87);
+ 	text-align: center;
+} 
+.orientation_region{
+	padding: 10rpx 0px; 
+	width: 28rpx;
+	font-size: 20rpx;
+	position: fixed;
+	top: 50%;
+	right: 0;
+	transform:translate(0,-50%);
+	border-radius: 10px
+} 
+.orientation_city{
+	height: 24rpx;
+	width: 24rpx;
+	line-height: 24rpx;
+	font-size: 18rpx;
+	color: #000;
+	text-align: center;
+} 
+.active{
+	color: #fff;
+	background-color: #0873DE;
+	border-radius: 50%;
+}
+.list-fixed{
+	position: fixed;
+	width: 100%;
+	z-index: 999; 
+	height: 56rpx;
+	line-height: 56rpx; 
+	background: #EBEBEB;
+	color: #999999;
+	font-size: 28rpx;
+	padding: 0 20rpx;
+	top: 128rpx;
+}
+.fixed-title{
+	color:#2cc1d1;
+}
+
+.goTop{
+	top: 0;
+	transition: top 0.5s;
+	padding-bottom: 104rpx!important;
+}
+.goTopX{
+	top: 0rpx;
+	transition: top 0.5s;
+	padding-bottom: 140rpx!important;
+}
+.goback{
+	top: 128rpx;
+	transition: top 0.5s;
+}
+.fixedTitleTop{
+	top: 0;
+}
+.tap_mask{
+	width: 100%;
+	overflow: hidden;
+}
+.btnWraper{
+	align-items: center;
+	justify-content: center;
+	display: flex;
+	flex-direction: column;
+}
+.button{
+	width: 80%;
+	height: 80rpx;
+	background: green;
+	border-radius: 40rpx;
+	right: 0;
+	left: 0;
+	color: #fff;
+	font-size: 16px;
+	margin: 10rpx;
+}
+.red{
+	background: red;
+}

+ 240 - 0
components/chat/emediaInvite/emediaInvite.vue

@@ -0,0 +1,240 @@
+<template>
+	<view class="wraper">
+		<view class="search" v-if="search_btn">
+			<view bindtap="openSearch">
+				<icon type="search" size="13"></icon>
+				<text>搜索</text>
+			</view>
+		</view>
+	
+		<view class="search_input" v-if="search_friend">
+			<view>
+				<icon type="search" size="13"></icon>
+				<input placeholder="搜索" 
+					placeholder-style="color:#CFCFCF;line-height:20px;font-size:12px;" 
+					auto-focus
+					confirm-type="search"
+					type='text'
+					bindconfirm="onSearch"
+					bindinput="onInput"
+					:value="input_code"
+					></input>
+					<icon type="clear" size="13" catchtap='clearInput' v-if="show_clear"></icon>
+			</view>
+			<text bindtap="cancel">取消</text>
+		</view>
+		
+		<scroll-view
+			class="content" 
+			enable-back-to-top
+			scroll-y="true"
+			scroll-with-animation="true" 
+			:style="{height: second_height + 'px'}"
+		> 
+	
+		<checkbox-group v-for="(item,index) in renderList" :data-item="item" :key="index"  :id="item.id" :data-id='item.id' @change="checkboxChange"> 
+	
+			<view class="tap_mask" @tap="into_room" :data-username="item.member||item.owner">
+	          	<view class="address_bottom" :data-username="item.member||item.owner" @tap="into_room">
+					<image src="../../../static/images/theme2x.png" @tap="into_room" :data-username="item.member||item.owner"></image>
+		          	<text @tap="into_room" :data-username="item.member||item.owner">{{item.member||item.owner}}</text>
+		          	<checkbox :value="item.member||item.owner" :checked="item.checked" :disabled="item.disabled"/>
+	      		</view>
+	  		</view>
+	
+		</checkbox-group>
+		</scroll-view>
+	
+		<view class="btnWraper">
+			<button class="button" @tap="startConfr">{{buttonText}}</button>
+			<button class="button red" @tap="goBack">返回</button>
+		</view>
+	
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				search_btn: true,
+				search_friend: false,
+				groupMember: [],
+				serchList: [],
+		
+				checkedValue: [],
+				renderList: [],
+				buttonText: '发起会议',
+				second_height: 450,
+				show_clear: false,
+			}
+		},
+		props: {
+		  username: {
+		    type: Object,
+		    default: () => ({})
+		  },
+		  action: {
+		    type: String,
+		    default: ''
+		  }
+		},
+		mounted() {
+			console.log('邀请页面的参数', this)
+			console.log(this.properties)
+			var that = this
+			// 获取系统信息
+			wx.getSystemInfo({
+				success: function (res) {
+					console.log('height=' + res.windowHeight);
+					console.log('width=' + res.windowWidth);
+					// 计算主体部分高度,单位为px
+					that.second_height= res.windowHeight - res.windowWidth / 750 * 300
+				}
+			})
+
+			if(this.action == 'invite'){
+				this.buttonText= '邀请'
+			}
+
+			var roomId = this.username&&this.username.groupId
+			console.log('roomId', this.username)
+			roomId&&this.getGroupMember(roomId)
+		},
+		methods: {
+			getGroupMember: function(roomId){
+				var me = this;
+				// 获取群成员
+				var pageNum = 1,
+					pageSize = 1000;
+				var options = {
+					pageNum: pageNum,
+					pageSize: pageSize,
+					groupId: roomId,
+					success: function(resp){
+						console.log('获取群成员', resp)
+						if(resp && resp.data){
+							me.groupMember= resp.data
+							me.getRenderList(resp.data)
+						}
+					},
+					error: function(err){
+	
+					}
+				};
+				uni.WebIM.conn.listGroupMember(options);
+			},
+	
+			getRenderList(list){
+				console.log('this.checkedValue', this.checkedValue)
+				let serchList = list.map((item) => {
+					for (var i = 0; i < this.checkedValue.length; i++) {
+						if((item.member&&item.member.indexOf(this.checkedValue[i]) != -1) || (item.owner&&item.owner.indexOf(this.checkedValue[i]) != -1)){
+							item.checked = true
+							return item
+							break;
+						}else{
+							item.checked = false
+						}
+					}
+					return item
+				})
+	
+				serchList.forEach((item) => {
+					if(item.member == wx.WebIM.conn.context.userId || item.owner == wx.WebIM.conn.context.userId){
+						item.disabled = true
+					}
+					
+				})
+				this.renderList= serchList
+				console.log('serchList >>>>', serchList)
+	
+			},
+	
+	
+			checkboxChange: function (e) {
+				console.log('checkbox发生change事件,携带value值为:', e)
+				if(this.checkedValue.indexOf(e.detail.value) == -1 && e.detail.value[0]){
+					this.checkedValue.push(e.detail.value[0])
+					console.log(this.checkedValue)
+				}else{
+					let value = e.target.dataset.item.name
+					this.checkedValue.splice(this.checkedValue.indexOf(value), 1)
+					console.log(this.checkedValue)
+				}
+			},
+	
+			openSearch: function(){
+				this.search_btn= false,
+				this.search_friend= true,
+				this.show_mask= true,
+				this.gotop= true
+			},
+	
+			cancel: function(){
+				this.search_btn= true,
+				this.search_friend= false,
+				this.gotop= false
+				//this.getBrands(this.member)
+			},
+	
+			
+	
+			onInput(e){
+	
+				let inputValue = e.detail.value
+				if (inputValue) {
+					this.show_clear= true
+				} else {
+					this.show_clear= false
+				}
+			},
+	
+			clearInput: function(){
+				this.input_code= ''
+				this.show_clear= false
+			},
+	
+			cancel: function(){
+				this.search_btn= true
+				this.search_friend= false
+				let original = this.groupMember||[]
+				this.getRenderList(original)
+			},
+	
+			onSearch: function(val){
+				let searchValue = val.detail.value
+				let member = this.groupMember;
+				let serchList = [];
+				member.forEach((item, index)=>{
+					if(String(item.member).indexOf(searchValue) != -1 || String(item.owner).indexOf(searchValue) != -1){
+						serchList.push(item)
+					}
+				})
+				// this.setData({
+				// 	groupMember: serchList
+				// })
+	
+				this.getRenderList(serchList)
+			},
+	
+			startConfr(){
+				this.$emit('onStartConfr', {confrMember: this.checkedValue, action: this.action, groupId: this.username.groupId})
+				this.checkedValue= []
+			},
+	
+			goBack(){
+				this.checkedValue=[]
+				this.$emit('goBack')
+			},
+			
+			into_room(){
+				
+			}
+		}
+	}
+</script>
+<style>
+@import "./emediaInvite.css";
+</style>
+

+ 65 - 0
components/chat/inputbar/inputbar.css

@@ -0,0 +1,65 @@
+.room_bar {
+	width: 100%;
+	height: auto;
+	border-top: 1px solid rgba(0 0 0 0.5);
+	position: fixed;
+	bottom: 0;
+	right: 0;
+	z-index: 999;
+	background-color: #FFFFFF;
+	transform: translateZ(1000px);
+}
+
+.other_func {
+	width: 100%;
+	/* height: 60rpx; */
+	display: flex;
+}
+.other_func_X{
+	/* height: 128rpx; */
+}
+
+.other_func image {
+	width: 54px;
+	height: 54px;
+	display: block;
+	margin-bottom: 5px;
+}
+
+.open_emoji,
+.send_image,
+.open_camera,
+.v-record {
+	margin-left: 48rpx;
+	text-align: center;
+	color: #b7b7b7;
+    font-size: 13px;
+}
+
+
+.v-record .icon-record {
+	width: 18rpx;
+	height: 40rpx;
+}
+.v-record{
+	margin-left: 48rpx;
+}
+
+.fun_list {
+	margin-top: 30px;
+	width: 100%;
+	height: 145px;
+	background-color: #dddddd;
+	padding-top: 10px;
+	padding-left: 3%;
+	display: none;
+}
+.showFunModal {
+	width: 100%;
+	height: 145px;
+	padding-top: 10px;
+	display: block;
+	background-color: #f2f2f2;
+}
+
+

+ 227 - 0
components/chat/inputbar/inputbar.vue

@@ -0,0 +1,227 @@
+<template>
+  <view class="room_bar">
+    <chatSuitEmoji
+      ref="chatSuitEmoji"
+      @newEmojiStr="emojiAction"
+    ></chatSuitEmoji>
+    <chatSuitMain
+      ref="chatSuitMain"
+      :username="username"
+      :chatType="chatType"
+      @inputFocused="closeAllModal"
+      @openEmoji="openEmoji"
+      @openRecordModal="toggleRecordModal"
+      @openFunModal="openFunModal"
+    ></chatSuitMain>
+    <chatSuitImage
+      ref="chatSuitImage"
+      :username="username"
+      :chatType="chatType"
+    ></chatSuitImage>
+    <!-- <chat-suit-location id="chat-suit-location" username="{{ username }}"></chat-suit-location> -->
+    <!-- <chat-suit-video ref="chatSuitVideo" :username="username"></chat-suit-video> -->
+    <chatSuitPtopcall
+      ref="chatSuitPtopcall"
+      :chatType="chatType"
+      @makeVideoCall="onMakeVideoCall"
+    >
+    </chatSuitPtopcall>
+
+    <swiper
+      :class="showFunModal"
+      :indicator-dots="true"
+      :autoplay="false"
+      :interval="5000"
+      :duration="1000"
+    >
+      <swiper-item>
+        <view :class="'other_func ' + (isIPX ? 'other_func_X' : '')">
+          <view class="open_camera" @tap="openCamera">
+            <image src="/static/images/camora.png"></image>
+            相机
+          </view>
+          <view class="send_image" @tap="sendImage">
+            <image src="/static/images/pic.png"></image>
+            相册
+          </view>
+
+          <view
+            class="send_image"
+            @tap="edit_group"
+            v-show="chatType === 'chatRoom'"
+          >
+            <image src="/static/images/pic.png"></image>
+            群信息
+          </view>
+
+          <!-- <view class="send_image" @tap="sendVideo">
+            <image
+              src="/static/images/video.png"
+              style="height: 20px; width: 20px"
+            ></image>
+          </view>
+          <view class="send_image" bind:tap="sendLocation">
+            <image
+              src="../../../static/images/iconLocation2x.png"
+              style="height: 18px"
+            />
+          </view>
+
+          <view class="v-record" @tap="callVideo" v-if="username.groupId">
+            <image
+              src="/static/images/call2x.png"
+              style="height: 24px; width: 15px"
+            />
+          </view> -->
+        </view>
+      </swiper-item>
+    </swiper>
+  </view>
+</template>
+
+<script>
+let RecordStatus = require("./suit/audio/record_status").RecordStatus;
+let msgType = require("../msgtype");
+import chatSuitEmoji from "./suit/emoji/emoji";
+import chatSuitImage from "./suit/image/image";
+import chatSuitLocation from "./suit/location/location";
+import chatSuitMain from "./suit/main/main";
+import chatSuitPtopcall from "./suit/ptopcall/ptopcall.vue";
+
+// import chatSuitVideo from "./suit/videoComp/videoComp"
+
+let FUNMODAL_STATUS = {
+  OPENED: "showFunModal",
+  CLOSED: "fun_list",
+};
+
+export default {
+  data() {
+    return {
+      recordStatus: RecordStatus.HIDE,
+      RecordStatus,
+      __comps__: {
+        main: null,
+        emoji: null,
+        image: null,
+        location: null,
+        video: null,
+      },
+      isIPX: "",
+      showFunModal: FUNMODAL_STATUS.CLOSED,
+    };
+  },
+
+  components: {
+    chatSuitEmoji,
+    chatSuitImage,
+    chatSuitLocation,
+    chatSuitMain,
+    chatSuitPtopcall,
+    // chatSuitVideo
+  },
+  props: {
+    username: {
+      type: Object,
+      default: () => ({}),
+    },
+    chatType: {
+      type: String,
+      default: msgType.chatType.SINGLE_CHAT,
+    },
+  },
+
+  // lifetimes
+  created() {},
+
+  beforeMount() {},
+
+  moved() {},
+
+  destroyed() {},
+
+  onLoad() {
+    this.isIPX= false
+    // let comps = this.$data.__comps__;
+    // comps.main = this.selectComponent("#chatSuitMain");
+    // comps.emoji = this.selectComponent("#chatSuitEmoji");
+    // comps.image = this.selectComponent("#chatSuitImage");
+  },
+
+  methods: {
+    // 事件有长度限制:仅限 26 字符
+    toggleRecordModal() {
+      this.$emit("tapSendAudio", null, {
+        bubbles: true,
+        composed: true,
+      });
+    },
+
+    // sendVideo(){
+    // 	this.$refs.chatSuitVideo.sendVideo();
+    // },
+    openCamera() {
+      this.$refs.chatSuitImage.openCamera();
+    },
+
+    openEmoji() {
+        setTimeout(() => {
+        this.showFunModal= FUNMODAL_STATUS.CLOSED
+      }, 100);
+      this.$refs.chatSuitEmoji.openEmoji();
+    },
+
+    cancelEmoji() {
+      this.$refs.chatSuitEmoji.cancelEmoji();
+    },
+
+    sendImage() {
+      this.$refs.chatSuitImage.sendImage();
+    },
+
+    sendLocation() {
+      // this.data.__comps__.location.sendLocation();
+    },
+
+    emojiAction(evt) {
+      this.$refs.chatSuitMain.emojiAction(evt.msg);
+    },
+
+    callVideo() {
+      this.$refs.chatSuitPtopcall.show();
+    },
+
+    onMakeVideoCall() {
+      console.log("onMakeVideoCall -> inputbar");
+      this.$emit("makeVideoCall", null, "single");
+    },
+
+    openFunModal() {
+      this.showFunModal= FUNMODAL_STATUS.OPENED
+      this.cancelEmoji()
+    },
+    closeFunModal() {
+      this.showFunModal= FUNMODAL_STATUS.CLOSED
+      this.cancelEmoji()
+    },
+    closeAllModal(){
+      this.cancelEmoji()
+      this.closeFunModal()
+    },
+    edit_group() {
+      var nameList = {
+        myName: this.username.myName,
+        groupName: this.username.your,
+        roomId: this.username.groupId,
+      };
+      uni.navigateTo({ 
+        url:
+          "../groupSetting/groupSetting?groupInfo=" + JSON.stringify(nameList),
+      });
+    },
+  },
+};
+</script>
+<style>
+@import "./inputbar.css";
+</style>

+ 73 - 0
components/chat/inputbar/suit/audio/audio.css

@@ -0,0 +1,73 @@
+.modal {
+	position: absolute;
+	top: 0;
+	right: 0;
+	left: 0;
+	bottom: 0;
+	width: 100%;
+	height: 100%;
+	z-index: 999;
+	/*display: flex;
+	justify-content: center;
+	align-items: center;*/
+}
+
+.modal-record .modal-body {
+	width: 480rpx;
+	height: 440rpx;
+	background-color: #fff;
+	display: flex;
+	flex-direction: column;
+	justify-content: center;
+	align-items: center;
+	border-radius: 3px;
+	box-shadow: 0 0 32rpx rgba(0, 0, 0, 0.15);
+	position: fixed;
+	bottom: 480rpx;
+	left: 50%;
+	margin-left: -240rpx;
+}
+
+.modal-record .desc {
+	color: rgb(112, 126, 137);
+	font-size: 13px;
+	margin-bottom: 40rpx;
+	display: block;
+	height: 30rpx;
+	width: 100%;
+	text-align: center;
+}
+
+.modal-record .dot {
+	width: 128rpx;
+	height: 128rpx;
+	border-radius: 50%;
+	background-color: #0873DE;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+}
+
+.dot image {
+	width: 44rpx;
+	height: 64rpx;
+}
+
+.sound-waves {
+  width: 100%;
+  box-sizing: border-box;
+  padding-left:10%;
+  margin-top: 80rpx;
+  height: 80rpx;
+  text-align: center;
+}
+ 
+.sound-waves view {
+  transition: all 0.5s;
+  width: 1%;
+  margin-left: 1.5%;
+  margin-right: 1.5%;
+  height: 160rpx;
+  background-color: #aaa;
+  float: left;
+}

+ 347 - 0
components/chat/inputbar/suit/audio/audio.vue

@@ -0,0 +1,347 @@
+<template>
+  <view
+    v-if="recordStatus != RecordStatus.HIDE"
+    class="modal modal-record"
+    @tap="toggleRecordModal"
+  >
+    <view class="modal-body" @tap.stop="toggleWithoutAction">
+      <view class="sound-waves">
+        <view
+          v-for="(item, index) in radomheight"
+          :key="index"
+          :style="'height:' + item + 'rpx;margin-top:-' + item / 2 + 'rpx'"
+        ></view>
+        <view style="clear: both; width: 0; height: 0"></view>
+      </view>
+      <text class="desc">{{ RecordDesc[recordStatus] }}</text>
+      <view
+        class="dot"
+        @touchstart="handleRecording"
+        @touchmove="handleRecordingMove"
+        @touchend="handleRecordingCancel"
+      >
+        <image class="icon-mic" src="/static/images/send.png"></image>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+let WebIM = require("../../../../../utils/WebIM")["default"];
+let msgType = require("../../../msgtype");
+let RECORD_CONST = require("./record_status");
+let RecordStatus = RECORD_CONST.RecordStatus;
+let RecordDesc = RECORD_CONST.RecordDesc;
+let disp = require("../../../../../utils/broadcast");
+let msgStorage = require("../../../msgstorage");
+let RunAnimation = false;
+let recordTimeInterval = null;
+const InitHeight = [50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50];
+
+export default {
+  data() {
+    return {
+      changedTouches: null,
+      recordStatus: RecordStatus.HIDE,
+      RecordStatus,
+      RecordDesc,
+      // 模板中有引用
+      radomheight: InitHeight,
+      recorderManager: uni.getRecorderManager(),
+      recordClicked: false,
+      isLongPress: false,
+      recordTime: 0
+    };
+  },
+
+  components: {},
+  props: {
+    username: {
+      type: Object,
+      default: () => ({})
+    },
+    chatType: {
+      type: String,
+      default: msgType.chatType.SINGLE_CHAT
+    }
+  },
+
+  // lifetimes
+  created() {},
+
+  beforeMount() {},
+
+  moved() {},
+
+  destroyed() {
+    clearInterval(recordTimeInterval)
+    this.recordTime = 0
+  },
+
+  mounted() {},
+
+  methods: {
+    toggleWithoutAction(e) {// 阻止 tap 冒泡
+    },
+
+    toggleRecordModal() {
+      this.recordStatus = this.recordStatus == RecordStatus.HIDE ? RecordStatus.SHOW : RecordStatus.HIDE
+      this.radomheight = InitHeight
+    },
+
+    handleRecordingMove(e) {
+      var touches = e.touches[0];
+      var changedTouches = this.changedTouches;
+
+      if (!changedTouches) {
+        return;
+      }
+
+      if (this.recordStatus == RecordStatus.SWIPE) {
+        if (changedTouches.pageY - touches.pageY < 20) {
+          this.recordStatus = RecordStatus.HOLD
+        }
+      }
+
+      if (this.recordStatus == RecordStatus.HOLD) {
+        if (changedTouches.pageY - touches.pageY > 20) {
+          this.recordStatus = RecordStatus.SWIPE
+        }
+      }
+    },
+
+    handleRecording(e) {
+		console.log('开始点击',uni.getSystemInfoSync())
+		if(uni.getSystemInfoSync().app === "alipay"){
+			// https://forum.alipay.com/mini-app/post/7301031?ant_source=opendoc_recommend
+			uni.showModal({
+				content: '支付宝小程序不支持语音消息,请查看支付宝相关api了解详情'
+			})
+			return
+		}
+      let me = this;
+	  
+      me.recordClicked = true
+      setTimeout(() => {
+        if (me.recordClicked == true) {
+          executeRecord();
+        }
+      }, 350);
+
+      function executeRecord() {
+        if (uni.getSetting) {
+        uni.getSetting({
+          success: res => {
+            clearInterval(recordTimeInterval);
+            me.recordTime = 0
+            let recordAuth = res.authSetting['scope.record'];
+
+            if (recordAuth == false) {
+              //已申请过授权,但是用户拒绝
+              uni.openSetting({
+                success: function (res) {
+                  let recordAuth = res.authSetting['scope.record'];
+
+                  if (recordAuth == true) {
+                    uni.showToast({
+                      title: "授权成功",
+                      icon: "success"
+                    });
+                  } else {
+                    uni.showToast({
+                      title: "请授权录音",
+                      icon: "none"
+                    });
+                  }
+
+                  me.isLongPress = false
+                }
+              });
+            } else if (recordAuth == true) {
+              // 用户已经同意授权
+              startRecord();
+            } else {
+              // 第一次进来,未发起授权
+              uni.authorize({
+                scope: 'scope.record',
+                success: () => {
+                  //授权成功
+                  uni.showToast({
+                    title: "授权成功",
+                    icon: "success"
+                  });
+                }
+              });
+            }
+          },
+          fail: function () {
+            uni.showToast({
+              title: "鉴权失败,请重试",
+              icon: "none"
+            });
+          }
+        })
+        return
+         }else{
+          startRecord()
+          return
+        }
+      }
+
+      function startRecord() {
+        clearInterval(recordTimeInterval);
+        me.recordTime = 0
+        me.changedTouches = e.touches[0];
+        me.recordStatus = RecordStatus.HOLD
+        RunAnimation = true;
+        me.myradom();
+        let recorderManager = me.recorderManager || uni.getRecorderManager();
+        recorderManager.onStart(() => {
+          // console.log("开始录音...");
+          recordTimeInterval = setInterval(()=>{
+            me.recordTime ++
+          },1000)
+          
+        });
+        recorderManager.start({
+          format: "mp3"
+        }); // 超时
+
+        setTimeout(function () {
+          me.handleRecordingCancel();
+          RunAnimation = false;
+        }, 100000);
+      }
+    },
+
+    handleRecordingCancel() {
+      RunAnimation = false;
+      let recorderManager = this.recorderManager; // 向上滑动状态停止:取消录音发放
+
+      if (this.recordStatus == RecordStatus.SWIPE) {
+        this.recordStatus = RecordStatus.RELEASE
+      } else {
+        this.recordStatus = RecordStatus.HIDE
+        this.recordClicked = false
+      }
+
+      recorderManager.onStop(res => {
+        // console.log("结束录音...", res);
+        clearInterval(recordTimeInterval);
+        let duration = this.recordTime * 1000;
+        if (this.recordStatus == RecordStatus.RELEASE) {
+          console.log("user canceled");
+          this.recordStatus = RecordStatus.HIDE
+          return;
+        }
+
+        if (duration <= 1000) {
+          uni.showToast({
+            title: "录音时间太短",
+            icon: "none"
+          });
+        } else {
+          // 上传
+          this.uploadRecord(res.tempFilePath, duration);
+        }
+        	clearInterval(recordTimeInterval);
+					this.recordStatus = RecordStatus.HIDE
+					this.recordTime = 0;
+      }); // 停止录音
+
+      recorderManager.stop();
+    },
+
+    isGroupChat() {
+      return this.chatType == msgType.chatType.CHAT_ROOM;
+    },
+
+    getSendToParam() {
+      return this.isGroupChat() ? this.username.groupId : this.username.your;
+    },
+
+    uploadRecord(tempFilePath, dur) {
+      var str = WebIM.config.appkey.split("#");
+      var me = this;
+      var token = WebIM.conn.context.accessToken;
+      uni.uploadFile({
+        url: "https://a1.easemob.com/" + str[0] + "/" + str[1] + "/chatfiles",
+        filePath: tempFilePath,
+		fileType: 'audio',
+        name: "file",
+        header: {
+          "Content-Type": "multipart/form-data",
+          Authorization: "Bearer " + token
+        },
+
+        success(res) {
+          var id = WebIM.conn.getUniqueId();
+          var msg = new WebIM.message(msgType.AUDIO, id);
+          var dataObj = JSON.parse(res.data); // 接收消息对象
+
+          msg.set({
+            apiUrl: WebIM.config.apiURL,
+            accessToken: token,
+            body: {
+              type: msgType.AUDIO,
+              url: dataObj.uri + "/" + dataObj.entities[0].uuid,
+              filetype: "",
+              filename: tempFilePath,
+              accessToken: token,
+              length: Math.ceil(dur / 1000)
+            },
+            from: me.username.myName,
+            to: me.getSendToParam(),
+            roomType: false,
+            chatType: me.chatType,
+            success: function (argument) {
+              disp.fire('em.chat.sendSuccess', id);
+            }
+          });
+
+          if (me.isGroupChat()) {
+            msg.setGroup("groupchat");
+          }
+
+          msg.body.length = Math.ceil(dur / 1000); //console.log('发送的语音消息', msg.body)
+
+          WebIM.conn.send(msg.body);
+                let obj = {
+                  msg: msg,
+                  type: msgType.AUDIO
+                }
+                me.saveSendMsg(obj);
+        }
+
+      });
+    },
+    saveSendMsg(evt) {
+      msgStorage.saveMsg(evt.msg, evt.type);
+    },
+
+    myradom() {
+      const that = this;
+      var _radomheight = that.radomheight;
+
+      for (var i = 0; i < that.radomheight.length; i++) {
+        //+1是为了避免为0
+        _radomheight[i] = 100 * Math.random().toFixed(2) + 10;
+      }
+
+      that.radomheight = _radomheight
+
+      if (RunAnimation) {
+        setTimeout(function () {
+          that.myradom();
+        }, 500);
+      } else {
+        return;
+      }
+    }
+
+  }
+};
+</script>
+<style>
+@import "./audio.css";
+</style>

+ 14 - 0
components/chat/inputbar/suit/audio/record_status.js

@@ -0,0 +1,14 @@
+module.exports = {
+  RecordDesc: {
+    0: "长按开始录音",
+    2: "向上滑动取消",
+    3: "松开手取消"
+  },
+  RecordStatus: {
+    SHOW: 0,
+    HIDE: 1,
+    HOLD: 2,
+    SWIPE: 3,
+    RELEASE: 4
+  }
+};

+ 39 - 0
components/chat/inputbar/suit/emoji/emoji.css

@@ -0,0 +1,39 @@
+.emoji_list {
+	margin-top: 30px;
+	width: 100%;
+	height: 145px;
+	background-color: #dddddd;
+	padding-top: 10px;
+	padding-left: 3%;
+	display: none;
+}
+
+.showEmoji {
+	width: 100%;
+	height: 145px;
+	padding-top: 10px;
+	padding-left: 3%;
+	display: block;
+}
+
+.emoji_list image,
+.showEmoji image {
+	width: 26px;
+	height: 26px;
+	margin: 5px 2%;
+}
+
+.emoji {
+	width: 26px;
+	height: 26px;
+	margin: 0 0;
+}
+
+.emoji_item {
+	display: flex;
+	justify-content: space-around;
+	margin-right: 20px;
+}
+.last_item{
+	justify-content:flex-end !important
+}

+ 82 - 0
components/chat/inputbar/suit/emoji/emoji.vue

@@ -0,0 +1,82 @@
+<template>
+<swiper :class="show" :indicator-dots="indicatorDots" :autoplay="autoplay" :interval="interval" :duration="duration">
+	<block>
+		<swiper-item>
+			<view class="emoji_item">
+				<image v-for="(item, index) in emojiObj.map1" :key="index" :src="'../../../../' + emojiObj.path + item" @tap="sendEmoji" :data-emoji="index"></image>
+			</view>
+			<view class="emoji_item">
+				<image v-for="(item, index) in emojiObj.map2" :key="index" :src="'../../../../' +emojiObj.path + item" @tap="sendEmoji" :data-emoji="index"></image>
+			</view>
+			<view class="emoji_item">
+				<image v-for="(item, index) in emojiObj.map3" :key="index" :src="'../../../../' +emojiObj.path + item" @tap="sendEmoji" :data-emoji="index"></image>
+			</view>
+		</swiper-item>
+	</block>
+	<block class="second">
+		<swiper-item>
+			<view class="emoji_item">
+				<image v-for="(item, index) in emojiObj.map4" :key="index" :src="'../../../../' +emojiObj.path + item" @tap="sendEmoji" :data-emoji="index"></image>
+			</view>
+			<view class="emoji_item">
+				<image v-for="(item, index) in emojiObj.map5" :key="index" :src="'../../../../' +emojiObj.path + item" @tap="sendEmoji" :data-emoji="index"></image>
+			</view>
+			<view class="emoji_item last_item">
+				<image v-for="(item, index) in emojiObj.map6" :key="index" :src="'../../../../' +emojiObj.path + item" @tap="sendEmoji" :data-emoji="index"></image>
+			</view>
+		</swiper-item>
+	</block>
+</swiper>
+</template>
+
+<script>
+let WebIM = require("../../../../../utils/WebIM")["default"];
+let msgType = require("../../../msgtype");
+let EMOJI_STATUS = {
+  OPENED: "showEmoji",
+  CLOSED: "emoji_list"
+};
+
+export default {
+  data() {
+    return {
+      show: EMOJI_STATUS.CLOSED,
+      emoji: WebIM.Emoji,
+      emojiObj: WebIM.EmojiObj,
+      interval: 5000,
+      duration: 1000,
+      autoplay: false,
+      indicatorDots: true // 显示面板指示点
+
+    };
+  },
+
+  components: {},
+  props: {},
+  methods: {
+    openEmoji() {
+      this.show=EMOJI_STATUS.OPENED
+    },
+
+    cancelEmoji() {
+      this.show= EMOJI_STATUS.CLOSED
+    },
+
+    // 输出 emoji
+    sendEmoji(event) {
+      var emoji = event.target.dataset.emoji;
+      this.$emit("newEmojiStr", {
+        msg: emoji,
+        type: msgType.EMOJI
+      }, {
+        bubbles: true,
+        composed: true
+      });
+    }
+
+  }
+};
+</script>
+<style>
+@import "./emoji.css";
+</style>

+ 169 - 0
components/chat/inputbar/suit/image/image.vue

@@ -0,0 +1,169 @@
+<template>
+	<view></view>
+</template>
+<script>
+	let WebIM = require("../../../../../utils/WebIM")["default"];
+	let msgType = require("../../../msgtype");
+	let disp = require("../../../../../utils/broadcast");
+	let msgStorage = require("../../../msgstorage");
+	export default {
+		data() {
+			return {};
+		},
+
+		components: {},
+		props: {
+			username: {
+				type: Object,
+				default: () => ({})
+			},
+			chatType: {
+				type: String,
+				default: msgType.chatType.SINGLE_CHAT
+			}
+		},
+		methods: {
+			openCamera() {
+				var me = this;
+				uni.chooseImage({
+					count: 1,
+					sizeType: ["original", "compressed"],
+					sourceType: ["camera"],
+
+					success(res) {
+						me.upLoadImage(res);
+					}
+
+				});
+			},
+
+			sendImage() {
+				var me = this;
+				uni.chooseImage({
+					count: 1,
+					sizeType: ["original", "compressed"],
+					sourceType: ["album"],
+
+					success(res) {
+						console.log('选择的图片', res)
+						me.upLoadImage(res);
+					}
+
+				});
+			},
+
+			isGroupChat() {
+				return this.chatType == msgType.chatType.CHAT_ROOM;
+			},
+
+			getSendToParam() {
+				return this.isGroupChat() ? this.username.groupId : this.username.your;
+			},
+
+			upLoadImage(res) {
+				var me = this;
+				var tempFilePaths = res.tempFilePaths;
+				var token = WebIM.conn.context.accessToken;
+				uni.getImageInfo({
+					src: res.tempFilePaths[0],
+
+					success(res) {
+						var allowType = {
+							jpg: true,
+							jpeg: true,
+							gif: true,
+							png: true,
+							bmp: true
+						};
+						var str = WebIM.config.appkey.split("#");
+						var width = res.width;
+						var height = res.height;
+						var index = res.path.lastIndexOf(".");
+						console.log('index>>',index);
+						var filetype = ~index && res.path.slice(index + 1) || "";
+						if (!res.type) {
+							uni.showToast({
+								title: "H5端,uni-app暂未支持",
+                      			icon: "none"
+							})
+						}
+						if (filetype.toLowerCase() in allowType || res.type in allowType) {
+							uni.uploadFile({
+								url: "https://a1.easemob.com/" + str[0] + "/" + str[1] + "/chatfiles",
+								filePath: tempFilePaths[0],
+								fileType: 'image',
+								name: "file",
+								header: {
+									// "Content-Type": "multipart/form-data",
+									'Content-Type': 'application/x-www-form-urlencoded',
+									Authorization: "Bearer " + token
+								},
+								success: (res)=>{
+									console.log('上传图片成功', res)
+									if (res.statusCode == 400) {
+										// 图片上传阿里云检验不合法
+										// var errData = JSON.parse(res.data);
+										// if (errData.error === 'content improper') {
+										uni.showToast({
+											title: "图片检测不合法",
+											duration: 1000
+										});
+										return false
+										// }
+									}
+									var data = res.data;
+									var dataObj = JSON.parse(data);
+									var id = WebIM.conn.getUniqueId(); // 生成本地消息 id
+
+									var msg = new WebIM.message(msgType.IMAGE, id);
+									var file = {
+										type: msgType.IMAGE,
+										size: {
+											width: width,
+											height: height
+										},
+										url: dataObj.uri + "/" + dataObj.entities[0].uuid,
+										filetype: filetype,
+										filename: tempFilePaths[0]
+									};
+									msg.set({
+										apiUrl: WebIM.config.apiURL,
+										body: file,
+										from: me.username.myName,
+										to: me.getSendToParam(),
+										roomType: false,
+										chatType: me.chatType,
+										success: function(argument) {
+											disp.fire('em.chat.sendSuccess', id);
+										}
+									});
+
+									if (me.chatType == msgType.chatType.CHAT_ROOM) {
+										msg.setGroup("groupchat");
+									}
+
+									WebIM.conn.send(msg.body);
+									let obj = {
+										msg: msg,
+										type: msgType.IMAGE
+									}
+									me.saveSendMsg(obj);
+								},
+								fail: (err) => {
+									console.log('上传失败', err)
+								},
+								complete: (err) => {
+									console.log('上传完成', err)
+								}
+							});
+						}
+					}
+				});
+			},
+			saveSendMsg(evt) {
+				msgStorage.saveMsg(evt.msg, evt.type);
+			}
+
+		}
+	};
+</script>

+ 95 - 0
components/chat/inputbar/suit/location/location.vue

@@ -0,0 +1,95 @@
+<template>
+<view></view>
+</template>
+<script>
+let WebIM = require("../../../../../utils/WebIM")["default"];
+let msgType = require("../../../msgtype");
+let msgStorage = require("../../../msgstorage");
+export default {
+  data() {
+    return {};
+  },
+
+  components: {},
+  props: {
+    username: {
+      type: Object,
+      default: () => ({})
+    },
+    chatType: {
+      type: String,
+      default: msgType.chatType.SINGLE_CHAT
+    }
+  },
+  methods: {
+    isGroupChat() {
+      return this.chatType == msgType.chatType.CHAT_ROOM;
+    },
+
+    getSendToParam() {
+      return this.isGroupChat() ? this.username.groupId : this.username.your;
+    },
+
+    sendLocation() {
+      var me = this;
+      uni.authorize({
+        scope: "scope.userLocation",
+
+        fail() {
+          uni.showToast({
+            title: "已拒绝",
+            icon: "none"
+          });
+        },
+
+        success() {
+          uni.chooseLocation({
+            fail() {
+              console.log(arguments);
+            },
+
+            complete() {
+              console.log(arguments);
+            },
+
+            success(respData) {
+              var id = WebIM.conn.getUniqueId();
+              var msg = new WebIM.message(msgType.LOCATION, id);
+              msg.set({
+                msg: "",
+                from: me.username.myName,
+                to: me.getSendToParam(),
+                roomType: false,
+                lng: respData.longitude,
+                lat: respData.latitude,
+                addr: respData.address,
+                chatType: me.chatType,
+
+                success(id, serverMsgId) {}
+
+              });
+
+              if (me.chatType == msgType.chatType.CHAT_ROOM) {
+                msg.setGroup("groupchat");
+              }
+
+              WebIM.conn.send(msg.body);
+                let obj = {
+                  msg: msg,
+                  type: msgType.IMAGE
+                }
+              me.saveSendMsg(obj);
+            }
+
+          });
+        }
+
+      });
+    },
+    saveSendMsg(evt) {
+      msgStorage.saveMsg(evt.msg, evt.type);
+    }
+
+  }
+};
+</script>

+ 65 - 0
components/chat/inputbar/suit/main/main.css

@@ -0,0 +1,65 @@
+
+.text-input {
+	width: 100%;
+	/* height: 100rpx; */
+	padding: 0;
+	display: block;
+}
+
+.news {
+	width: 100%;
+	font-size: 14px;
+	padding: 0 10px;
+	display: inline-block;
+	margin: 10rpx;
+	line-height: 48rpx;
+	position:relative;
+	top: 0;
+	background-color: #fff;
+	border-radius: 16px;
+	flex: 1;
+	max-height: 200rpx;
+	min-height: 60rpx;
+}
+
+.send_btn {
+	width: 80rpx;
+	height: 60rpx;
+	line-height: 60rpx;
+	font-size: 17px;
+	color: #000;
+	padding: 0;
+	display: inline-block;
+	float: right;
+	margin: 8rpx 16rpx auto auto;
+	background-color: #fff;
+}
+
+.f-row{
+	/* height:100rpx; */
+	display:flex;
+	align-items:center;
+	background-color: #f2f2f2;
+}
+.send-btn-style{
+	font-size: 10px;
+	background-color: #2196F3;
+	color: #fff;
+    margin-right: 10px;
+}
+.hover{
+	background-color:#075ca1
+}
+.icon-mic{
+	width: 22px;
+    height: 22px;
+	padding: 5px 10px;
+	position: relative;
+	top: 2px;
+}
+.f-row-x{
+	padding-bottom: 30px;
+	display:flex;
+	align-items:center;
+	background-color: #f2f2f2;
+}

+ 189 - 0
components/chat/inputbar/suit/main/main.vue

@@ -0,0 +1,189 @@
+<template>
+  <!-- <chat-suit-emoji id="chat-suit-emoji" bind:newEmojiStr="emojiAction"></chat-suit-emoji> -->
+  <form class="text-input">
+    <view :class="isIPX ?'f-row-x' :'f-row'">
+      <!-- 发送语音 -->
+      <view>
+        <image class="icon-mic" src="/static/images/voice.png" @tap="openRecordModal"></image>
+      </view>
+      <!-- 输入框 -->
+      <textarea
+        class="f news"
+        type="text"
+        cursor-spacing="65"
+        confirm-type='done'
+        v-model="inputMessage"
+        @confirm="sendMessage"
+        @input="bindMessage"
+        @tap="focus"
+        @focus="focus"
+        @blur="blur"
+        :confirm-hold="isIPX ? true : false"
+        auto-height
+        :show-confirm-bar='false'
+        maxlength="300"
+      />
+      <view>
+        <image class="icon-mic" src="/static/images/Emoji.png" @tap="openEmoji"></image>
+      </view>
+      <view v-show="!inputMessage" @tap="openFunModal">
+        <image class="icon-mic" src="/static/images/ad.png"></image>
+      </view>
+       <button 
+        class="send-btn-style" 
+        hover-class='hover'
+        @tap="sendMessage"
+        v-show="inputMessage" 
+      >发送</button>
+    </view>
+  </form>
+</template>
+
+<script>
+let WebIM = require("../../../../../utils/WebIM")["default"];
+let msgType = require("../../../msgtype");
+let disp = require("../../../../../utils/broadcast");
+let msgStorage = require("../../../msgstorage");
+
+export default {
+  data() {
+    return {
+      inputMessage: "",
+      // render input 的值
+      userMessage: "", // input 的实时值
+      isIPX: false,
+    };
+  },
+
+  components: {},
+  props: {
+    username: {
+      type: Object,
+      default: () => ({}),
+    },
+    chatType: {
+      type: String,
+      default: msgType.chatType.SINGLE_CHAT,
+    },
+  },
+
+  // lifetimes
+  created() {
+    this.isIPX= getApp().globalData.isIPX
+  },
+
+  beforeMount() {},
+
+  moved() {},
+
+  destroyed() {},
+
+  mounted() {},
+
+  methods: {
+    focus() {
+      this.$emit("inputFocused", null, {
+        bubbles: true,
+      });
+    },
+    blur() {
+      this.$emit("inputBlured", null, {
+        bubbles: true,
+      });
+    },
+
+    isGroupChat() {
+      return this.chatType == msgType.chatType.CHAT_ROOM;
+    },
+
+    getSendToParam() {
+      return this.isGroupChat() ? this.username.groupId : this.username.your;
+    },
+
+    bindMessage(e) {
+      this.userMessage= e.detail.value
+    },
+
+    emojiAction(emoji) {
+      var str;
+      var msglen = this.userMessage.length - 1;
+
+      if (emoji && emoji != "[del]") {
+        str = this.userMessage + emoji;
+      } else if (emoji == "[del]") {
+        let start = this.userMessage.lastIndexOf("[");
+        let end = this.userMessage.lastIndexOf("]");
+        let len = end - start;
+
+        if (end != -1 && end == msglen && len >= 3 && len <= 4) {
+          str = this.userMessage.slice(0, start);
+        } else {
+          str = this.userMessage.slice(0, msglen);
+        }
+      }
+      this.userMessage = str;
+      this.inputMessage = str;
+    },
+
+    sendMessage() {
+      let me = this;
+      String.prototype.trim = function () {
+        return this.replace(/(^\s*)|(\s*$)/g, "");
+      };
+      if (!this.userMessage.trim()) {
+        return;
+      }
+      let id = WebIM.conn.getUniqueId();
+      let msg = new WebIM.message(msgType.TEXT, id);
+      msg.set({
+        msg: this.userMessage,
+        from: this.username.myName,
+        to: this.getSendToParam(),
+        // roomType: false,
+        chatType: this.chatType,
+        success(id, serverMsgId) {
+          console.log("成功了");
+          // 关闭表情弹窗
+          me.$parent.cancelEmoji()
+          me.$parent.closeFunModal()
+          disp.fire("em.chat.sendSuccess", id, me.userMessage);
+        },
+        fail(id, serverMsgId) {
+          console.log("失败了");
+        },
+      });
+	  
+      if (this.chatType == msgType.chatType.CHAT_ROOM) {
+        // msg.setGroup("groupchat");
+		msg.setChatType("groupchat");
+      }
+        WebIM.conn.send(msg.body);
+        let obj = {
+          msg: msg,
+          type: msgType.TEXT,
+        };
+        this.saveSendMsg(obj);
+      this.userMessage = "";
+      this.inputMessage = "";
+      uni.hideKeyboard();
+    },
+
+    saveSendMsg(evt) {
+      msgStorage.saveMsg(evt.msg, evt.type);
+    },
+
+    openEmoji(){
+      this.$emit('openEmoji')
+    },
+    openRecordModal(){
+      this.$emit('openRecordModal')
+    },
+    openFunModal(){
+      this.$emit('openFunModal')
+    }
+  },
+};
+</script>
+<style>
+@import "./main.css";
+</style>

+ 65 - 0
components/chat/inputbar/suit/ptopcall/ptopcall.vue

@@ -0,0 +1,65 @@
+<template>
+	<view v-if="visible" class="wraper">
+		<view>
+			<button type="default" @tap="callVideo">会议模式</button>
+			<button
+				type="default"
+				@tap="cancel"
+			> 取消 </button>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				visible: false
+			}
+		},
+		methods: {
+			show(){
+				this.visible= true
+			},
+			cancel(){
+				console.log('取消')
+				this.visible= false
+				/* this.setData({
+					visible: false
+				}) */
+			},
+	
+			callAudio(){
+				//this.triggerEvent('makeAudioCall', 'single')
+				this.$emit("makeAudioCall", null, 'single');
+				this.cancel()
+			},
+	
+			callVideo(){
+				console.log('callVideo')
+				this.$emit("makeVideoCall", null, 'single');
+				//this.triggerEvent('makeVideoCall', 'single')
+				this.cancel()
+			}
+		}
+	}
+</script>
+
+<style>
+.wraper{
+	position: fixed;
+	bottom: 0;
+	height: 200rpx;
+	width: 100%;
+	z-index: 9;
+	background: #FFFFFF;
+}
+.other-button-hover {
+  background-color: blue;
+}
+.button-cancel {
+	position: absolute;
+	width: 100%;
+	bottom: 0;
+}
+</style>

+ 110 - 0
components/chat/inputbar/suit/videoComp/videoComp.vue

@@ -0,0 +1,110 @@
+<template>
+  <div></div>
+</template>
+
+<script>
+let WebIM = require("../../../../../utils/WebIM")["default"];
+let msgType = require("../../../msgtype");
+let msgStorage = require("../../../msgstorage");
+let disp = require("../../../../../utils/broadcast");
+
+export default {
+  data() {
+    return {};
+  },
+
+  components: {},
+  props: {
+    username: {
+      type: Object,
+      default: () => ({}),
+    },
+    chatType: {
+      type: String,
+      default: msgType.chatType.SINGLE_CHAT,
+    },
+  },
+  methods: {
+    isGroupChat() {
+      return this.chatType == msgType.chatType.CHAT_ROOM;
+    },
+
+    getSendToParam() {
+      return this.isGroupChat() ? this.username.groupId : this.username.your;
+    },
+
+    // 未启用
+    sendVideo() {
+      var me = this;
+      var token = WebIM.conn.context.accessToken;
+      uni.chooseVideo({
+        sourceType: ["album", "camera"],
+        maxDuration: 60,
+        camera: "back",
+        success(res) {
+          var tempFilePaths = res.tempFilePath;
+          var str = WebIM.config.appkey.split("#");
+          uni.uploadFile({
+            url:
+              "https://a1.easemob.com/" + str[0] + "/" + str[1] + "/chatfiles",
+            filePath: tempFilePaths,
+            name: "file",
+            header: {
+              "Content-Type": "multipart/form-data",
+              Authorization: "Bearer " + token,
+            },
+            success(res) {
+              var data = res.data;
+              var dataObj = JSON.parse(data);
+              var id = WebIM.conn.getUniqueId(); // 生成本地消息id
+              var msg = new WebIM.message(msgType.VIDEO, id);
+              msg.set({
+                apiUrl: WebIM.config.apiURL,
+                accessToken: token,
+                body: {
+                  type: msgType.VIDEO,
+                  url: dataObj.uri + "/" + dataObj.entities[0].uuid,
+                  filetype: "mp4",
+                  filename: tempFilePaths,
+									accessToken: token,
+                },
+                from: me.username.myName,
+                to: me.getSendToParam(),
+                roomType: false,
+                chatType: me.chatType,
+                success: function (argument) {
+									disp.fire('em.chat.sendSuccess', id);
+								}
+              });
+              if (me.isGroupChat()) {
+                msg.setGroup("groupchat");
+              }
+              WebIM.conn.send(msg.body);
+              let obj = {
+                msg: msg,
+                type: msgType.VIDEO,
+              };
+              me.saveSendMsg(obj);
+            },
+          });
+        },
+      });
+    },
+    saveSendMsg(evt) {
+      msgStorage.saveMsg(evt.msg, evt.type);
+    },
+  },
+
+  // lifetimes
+  created() {},
+
+  beforeMount() {},
+
+  moved() {},
+
+  destroyed() {},
+
+  mounted() {},
+};
+</script>
+

+ 148 - 0
components/chat/msglist/msglist.css

@@ -0,0 +1,148 @@
+/*.chat-bg{
+	position:fixed;
+	width: 100%;
+	height: 100%;
+	z-index: 0;
+	top: 50px;
+}*/
+.scroll_view,.scroll_view_change {
+	/* width: 100%;
+	position: absolute;
+	left: 0;
+	right: 0;
+	bottom: 170rpx; */
+	background-color: #FAFAFA;
+	padding-bottom: 100rpx;
+}
+
+.scroll_view_X,
+.scroll_view_change_X{
+	padding-bottom: 230rpx;
+}
+
+
+.message {
+	width: 100%;
+	height: auto;
+	padding: 0 30rpx;
+	position: relative;
+	box-sizing: border-box;
+}
+
+.time {
+	margin: 14rpx 0;
+	text-align: center;
+}
+
+.time .time-text {
+	display: inline-block;
+	padding: 6rpx 20rpx 0 20rpx;
+	font-size: 24rpx;
+	color: #fff;
+	line-height: 28rpx;
+	border-radius: 4rpx;
+	background-color: #dcdcdc;
+}
+
+.user .user-text {
+	margin: auto 100rpx 8rpx;
+	font-size: 20rpx;
+	color: #dcdcdc;
+	display: block;
+}
+
+.avatar {
+	width: 72rpx;
+	height: 72rpx;
+	margin: 0 20rpx 0 0;
+	border-radius: 6rpx;
+	float: left;
+}
+
+.msg {
+	display: inline-block;
+	padding: 20rpx;
+	max-width: calc(85% - 80rpx);
+	min-height: 40rpx; 
+	font-size: 24rpx;
+	/*overflow: hidden;*/
+	text-align: left;
+	word-break: break-all;
+	background-color: #fff;
+	border-radius: 26rpx;
+	position: relative;
+	margin-top: 24rpx;
+}
+
+.msg .msg_poprightarrow {
+	position: absolute;
+	right: -10rpx;
+	height: 18rpx;
+	width: 18rpx;
+	margin-top: -10rpx;
+}
+
+.msg .msg_popleftarrow{
+	position:absolute;
+	left: -14rpx;
+	height: 18rpx;
+	width: 18rpx;
+	margin-top: -10rpx;
+}
+
+.msg .msg-text {
+	line-height: 40rpx;
+	font-size: 32rpx;
+	margin: 0;
+}
+
+/*.msg:before {
+	content: " ";
+	position: absolute;
+	top: 9px;
+	right: 100%;
+	border: 6px solid transparent;
+	border-right-color: #EDEDED;
+}*/
+
+.self {
+	text-align: right;
+}
+
+.self .avatar {
+	float: right;
+	margin: 0 0 0 20rpx;
+}
+
+.user {
+	position: relative;
+	bottom: -30rpx;
+}
+
+.self .msg {
+	background-color: #0873DE;
+	color: #fff;
+}
+
+.self .msg:before {
+	right: inherit;
+	left: 100%;
+	border-right-color: transparent;
+	border-left-color: #b2e281;
+}
+
+.template {
+	display: inline;
+}
+.err{
+	width: 32rpx;
+	height: 32rpx;
+	position: absolute;
+	left: -40rpx;
+}
+.hide{
+	display: none;
+}
+.show{
+	display: block;
+}

+ 323 - 0
components/chat/msglist/msglist.vue

@@ -0,0 +1,323 @@
+<template>
+  <view
+    scroll-y="true"
+    :class="view + ' wrap ' + (isIPX?'scroll_view_X': '')"
+    @tap="onTap"
+    upper-threshold="-50"
+    :scroll-into-view="toView"
+  >
+    <view class="message" v-for="item in chatMsg" :key="item.mid" :id="item.mid">
+      <!-- <view class="time">
+				<text class="time-text">{{ item.time }}</text>
+      </view>-->
+      <view class="main" :class="item.style">
+        <view class="user">
+          <!-- yourname:就是消息的 from -->
+          <text class="user-text">{{ item.time}}</text>
+        </view>
+        <image class="avatar" v-if="item.style == 'self'" :src="item.user.avatarurl?item.user.avatarurl: '/static/images/theme2x.png'" />
+		<image class="avatar" v-else :src="item.your.avatarurl?item.your.avatarurl: '/static/images/theme2x.png'" />
+        <view class="msg">
+          <image
+            class="err"
+            :class="(item.style == 'self' && item.isFail) ?  'show' : 'hide'"
+            src="/static/images/msgerr.png"
+          />
+
+          <image
+            v-if="item.style == 'self'"
+            src="/static/images/poprightarrow2x.png"
+            class="msg_poprightarrow"
+          />
+          <image
+            v-if="item.style == ''"
+            src="/static/images/popleftarrow2x.png"
+            class="msg_popleftarrow"
+          />
+          <view v-if="item.msg.type == 'img' || item.msg.type == 'video'">
+            <image
+              v-if="item.msg.type == 'img'"
+              class="avatar"
+              :src="item.msg.data"
+              style="width:90px; height:120px; margin:2px auto;"
+              mode="aspectFit"
+              @tap="previewImage"
+              :data-url="item.msg.data"
+            />
+            <!-- <video v-if="item.msg.type == 'video'" :src="item.msg.data" controls style="width:300rpx;"/> -->
+          </view>
+          <audio-msg v-if="item.msg.type == 'audio'" :msg="item"></audio-msg>
+          <view v-else-if="item.msg.type == 'txt' || item.msg.type == 'emoji'">
+            <view class="template" v-for="(d_item, d_index) in item.msg.data" :key="d_index">
+              <text
+				        :data-msg="item"
+				        @tap="clickMsg"
+                v-if="d_item.type == 'txt'"
+                class="msg-text"
+                style="float:left;"
+                selectable="true"
+              >{{ d_item.data }}</text>
+
+              <image
+                v-if="d_item.type == 'emoji'"
+                class="avatar"
+                :src="'/static/images/faces/' + d_item.data"
+                style="width:25px; height:25px; margin:0 0 2px 0; float:left;"
+              />
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+  </view>
+  <!-- <view style="height: 1px;"></view> -->
+</template>
+
+
+<script>
+let msgStorage = require("../msgstorage");
+let disp = require("../../../utils/broadcast");
+let LIST_STATUS = {
+  SHORT: "scroll_view_change",
+  NORMAL: "scroll_view"
+};
+let page = 0;
+let Index = 0;
+let curMsgMid = '';
+let isFail = false;
+import audioMsg from "./type/audio/audio";
+
+export default {
+  data() {
+    return {
+      view: LIST_STATUS.NORMAL,
+      toView: "",
+      chatMsg: [],
+      __visibility__: false,
+      isIPX: false
+    };
+  },
+
+  components: {
+    audioMsg
+  },
+  props: {
+    username: {
+      type: Object,
+      default: () => ({})
+    }
+  },
+
+  // lifetimes
+  created() {},
+
+  beforeMount() {
+    this.__visibility__ = true;
+    page = 0;
+    Index = 0;
+  },
+
+  moved() {},
+
+  destroyed() {
+    this.__visibility__ = false;
+	msgStorage.off("newChatMsg", this.dispMsg)
+  },
+
+  mounted(event) {
+    let me = this;
+    if (getApp().globalData.isIPX) {
+      this.isIPX= true
+    }
+	
+	  this.username = uni.username;
+    let username = this.username;
+    let myUsername = uni.getStorageSync("myUsername");
+    let sessionKey = username.groupId ? username.groupId + myUsername : username.your + myUsername;
+    let chatMsg = uni.getStorageSync(sessionKey) || [];
+    this.renderMsg(null, null, chatMsg, sessionKey);
+    uni.setStorageSync(sessionKey, null);
+    disp.on('em.error.sendMsgErr', function (err) {
+      // curMsgMid = err.data.mid;
+      isFail = true;
+      // return;
+      console.log('发送失败了');
+	  return;
+      let msgList = me.chatMsg;
+      msgList.map(item => {
+        if (item.mid.substring(item.mid.length - 10) == curMsgMid.substring(curMsgMid.length - 10)) {
+          item.msg.data[0].isFail = true;
+          item.isFail = true;
+          me.chatMsg= msgList
+        }
+      });
+
+      // if (me.curChatMsg[0].mid == curMsgMid) {
+      //   me.curChatMsg[0].msg.data[0].isShow = false;
+      //   me.curChatMsg[0].isShow = false;
+      // }
+
+      uni.setStorageSync("rendered_" + sessionKey, msgList);
+    });
+    msgStorage.on("newChatMsg", this.dispMsg);
+  },
+
+  methods: {
+    normalScroll() {
+      this.view= LIST_STATUS.NORMAL
+    },
+	dispMsg(renderableMsg, type, curChatMsg, sesskey) {
+	  let me = this;
+	  let username = this.username;
+	  let myUsername = uni.getStorageSync("myUsername");
+	  let sessionKey = username.groupId ? username.groupId + myUsername : username.your + myUsername;
+	  me.curChatMsg = curChatMsg;
+	  
+	  if (!me.__visibility__) return; // 判断是否属于当前会话
+	
+	  if (username.groupId) {
+	    // 群消息的 to 是 id,from 是 name
+	    if (renderableMsg.info.from == username.groupId || renderableMsg.info.to == username.groupId) {
+	      if (sesskey == sessionKey) {
+	        me.renderMsg(renderableMsg, type, curChatMsg, sessionKey, 'newMsg');
+	      }
+	    }
+	  } else if (renderableMsg.info.from == username.your || renderableMsg.info.to == username.your) {
+	    if (sesskey == sessionKey) {
+	      me.renderMsg(renderableMsg, type, curChatMsg, sessionKey, 'newMsg');
+	    }
+	  }
+	},
+    shortScroll() {
+      this.view= LIST_STATUS.SHORT
+    },
+
+    onTap() {
+      this.$emit("msglistTap", null, {
+        bubbles: true
+      });
+    },
+
+    previewImage(event) {
+      var url = event.target.dataset.url;
+      uni.previewImage({
+        urls: [url] // 需要预览的图片 http 链接列表
+
+      });
+    },
+
+    getHistoryMsg() {
+      let me = this;
+      let username = this.username;
+      let myUsername = uni.getStorageSync("myUsername");
+      let sessionKey = username.groupId ? username.groupId + myUsername : username.your + myUsername;
+      let historyChatMsgs = uni.getStorageSync("rendered_" + sessionKey) || [];
+
+      if (Index < historyChatMsgs.length) {
+        let timesMsgList = historyChatMsgs.slice(-Index - 10, -Index);
+        this.chatMsg= timesMsgList.concat(me.chatMsg),
+        this.toView= timesMsgList[timesMsgList.length - 1].mid
+        Index += timesMsgList.length;
+
+        if (timesMsgList.length == 10) {
+          page++;
+        }
+
+        uni.stopPullDownRefresh();
+      }
+    },
+
+    renderMsg(renderableMsg, type, curChatMsg, sessionKey, isnew) {
+      let me = this;
+
+      var historyChatMsgs = uni.getStorageSync("rendered_" + sessionKey) || []; 
+
+      historyChatMsgs = historyChatMsgs.concat(curChatMsg); 
+		
+      if (!historyChatMsgs.length) return;
+	  let user = {}
+	  let your = {}
+	  let myUsername = uni.getStorageSync('myUsername')
+	  uni.WebIM.conn.fetchUserInfoById([myUsername,me.username.your], ['avatarurl','nickname']).then((res) => {
+		  user = res.data[myUsername]
+		  your = res.data[me.username.your]
+		  console.log(res);
+		  historyChatMsgs.map(function(item,index) {
+		  	item.user = user
+			item.your = your
+		  })
+		  if (isnew == 'newMsg') {
+		    this.chatMsg= this.chatMsg.concat(curChatMsg)
+		      // 跳到最后一条
+		    this.toView= historyChatMsgs[historyChatMsgs.length - 1].mid
+		  } else {
+		  		  this.chatMsg= historyChatMsgs.slice(-10)
+		  		    // 跳到最后一条
+		  		  this.toView= historyChatMsgs[historyChatMsgs.length - 1].mid
+		  }
+		  
+		  uni.setStorageSync("rendered_" + sessionKey, historyChatMsgs);
+		  let chatMsg = uni.getStorageSync(sessionKey) || [];
+		  chatMsg.map(function (item, index) {
+		    curChatMsg.map(function (item2, index2) {
+		      if (item2.mid == item.mid) {
+		        chatMsg.splice(index, 1);
+		      }
+		    });
+		  });
+		  uni.setStorageSync(sessionKey, chatMsg);
+		  Index = historyChatMsgs.slice(-10).length;
+		  // setTimeout 兼容支付宝小程序
+		  setTimeout(() => {
+		  		  uni.pageScrollTo({
+		  		    scrollTop: 5000,
+		  		    duration: 300,
+		  		  		fail: (e) => {
+		  		  			//console.log('滚失败了', e)
+		  		  		}
+		  		  });
+		  }, 100)
+		  
+		  if (isFail) {
+		    this.renderFail(sessionKey);
+		  }
+	  })
+		
+		
+     
+    },
+
+    renderFail(sessionKey) {
+      let me = this;
+      let msgList = me.chatMsg;
+      msgList.map(item => {
+        if (item.mid.substring(item.mid.length - 10) == curMsgMid.substring(curMsgMid.length - 10)) {
+          item.msg.data[0].isFail = true;
+          item.isFail = true;
+          me.chatMsg= msgList
+        }
+      });
+
+      if (me.curChatMsg[0].mid == curMsgMid) {
+        me.curChatMsg[0].msg.data[0].isShow = false;
+        me.curChatMsg[0].isShow = false;
+      }
+
+      uni.setStorageSync("rendered_" + sessionKey, msgList);
+      isFail = false;
+    },
+	
+	clickMsg(event){
+		if(typeof(event.target.dataset.msg) == 'object' && 
+			event.target.dataset.msg.msg.ext && 
+			event.target.dataset.msg.msg.ext.msg_extension){
+			this.$emit("clickMsg", event.target.dataset.msg.msg.ext)
+		}
+	}
+
+  }
+};
+</script>
+<style>
+@import "./msglist.css";
+</style>

+ 25 - 0
components/chat/msglist/type/audio/audio.css

@@ -0,0 +1,25 @@
+.audio-player {
+	position: relative;
+	overflow: hidden;
+	display: flex;
+	transition: opacity .5s;
+}
+
+.audio-player .controls {
+	height:40rpx;
+	align-items:center;
+	display:flex;
+}
+
+.audio-player .controls image {
+	height: 48rpx;
+	width: 30rpx;
+	margin: 0 8rpx 0 100rpx;
+}
+
+.audio-player .time {
+	font-size: 34rpx;
+	line-height: 40rpx;
+	flex: 1;
+	text-align: left;
+}

+ 178 - 0
components/chat/msglist/type/audio/audio.vue

@@ -0,0 +1,178 @@
+<template>
+<view class="audio-player" @tap="audioPlay" :style="'opacity: ' + opcity">
+	<text class="time">语音消息 {{ time }}</text>
+	<view class="controls play-btn" @tap="audioPlay">
+		<image :src="style == 'self'? '../../../../../static/images/voicemsgmy.png' : '../../../../../static/images/voicemsg.png'"></image>
+	</view>
+</view>
+</template>
+
+<script>
+let audioCtxFc = require("./audioCtxFactory");
+let playStatus = require("./playStatus");
+
+export default {
+  data() {
+    return {
+      playStatus: playStatus,
+      curStatus: playStatus.STOP,
+      time: "0'",
+      opcity: 1,
+      __comps__: {
+        audioCtx: null
+      },
+      style: ""
+    };
+  },
+
+  components: {},
+  props: {
+    msg: {
+      type: Object,
+      val: {}
+    }
+  },
+  obeyMuteSwitch: false,
+  autoplay: true,
+
+  // lifetimes
+  created() {},
+
+  beforeMount() {
+    this.time=this.msg.msg.length + "''"
+	this.style = this.msg.style
+  },
+
+  moved() {},
+
+  destroyed() {
+    let audioCtx = this.$data.__comps__.audioCtx = audioCtxFc.getCtx(this.msg.mid);
+    this.audioPause(audioCtx);
+    this.delEvent(); //audioCtx.destroy();
+  },
+
+  mounted() {
+    let self = this;
+    let curl = '';
+    let audioCtx = this.$data.__comps__.audioCtx = audioCtxFc.getCtx(this.msg.mid);
+    audioCtx.autoplay = false;
+    audioCtx.loop = false; //
+
+    this.onPlaying = () => {
+      //console.log("onPlaying", JSON.stringify(this.data));
+      this.curStatus= playStatus.PLAYING
+      uni.inter && clearInterval(uni.inter);
+      uni.inter = setInterval(() => {
+        let opcity = this.opcity;
+        this.opcity= opcity == 1 ? 0.4 : 1
+      }, 500);
+    };
+
+    this.onPause = () => {
+      // console.log("onPause", JSON.stringify(this.data));
+      // 第二次播放会立即抛出一个异常的 onPause
+      if (parseInt(this.time, 10) < 1) {
+        return;
+      }
+
+      this.curStatus= playStatus.PAUSE
+      this.opcity= 1 //time:
+    };
+
+    this.onDone = () => {
+      // console.log("onDone", JSON.stringify(this.data));
+	  this.curStatus= playStatus.STOP
+	  this.opcity= 1 //time:
+      clearInterval(uni.inter);
+    }; // 多次播放会丢失这个回调
+
+
+    this.onTimeUpdate = () => {
+      this.time= (audioCtx.currentTime >> 0) + "'"
+    };
+
+    this.onWait = () => {
+      uni.showToast({
+        title: "下载中...",
+        duration: 1000
+      });
+    };
+
+    this.addEvent();
+  },
+
+  methods: {
+    audioPlay() {
+	if(uni.getSystemInfo().app === 'alipay'){
+		// https://forum.alipay.com/mini-app/post/7301031?ant_source=opendoc_recommend
+		uni.showToast({
+			duration: 2000,
+			title: '支付宝小程序不支持音频消息'
+		})
+		return 
+	}
+      uni.inter && clearInterval(uni.inter);
+      let audioCtx = this.$data.__comps__.audioCtx;
+      var curl = '';
+      uni.downloadFile({
+        url: this.msg.msg.data,
+        header: {
+          "X-Requested-With": "XMLHttpRequest",
+          Accept: "audio/mp3",
+          Authorization: "Bearer " + this.msg.msg.token
+        },
+
+        success(res) {
+          curl = res.tempFilePath;
+          console.log('音频本地', audioCtx); //renderableMsg.msg.url = res.tempFilePath;
+
+          audioCtx.src = curl;
+          audioCtx.play();
+        },
+
+        fail(e) {
+          console.log("downloadFile failed", e);
+          uni.showToast({
+            title: "下载失败",
+            duration: 1000
+          });
+        }
+
+      });
+    },
+
+    audioPause(auCtx) {
+      //let audioCtx = this.data.__comps__.audioCtx;
+      let audioCtx = this.$data.__comps__.audioCtx = audioCtxFc.getCtx(this.msg.mid) || auCtx;
+      audioCtx && audioCtx.pause();
+    },
+
+    addEvent() {
+      let audioCtx = this.$data.__comps__.audioCtx;
+      audioCtx.onPlay(this.onPlaying);
+      audioCtx.onPause(this.onPause);
+      audioCtx.onWaiting(this.onPause);
+      audioCtx.onStop(this.onDone);
+      audioCtx.onEnded(this.onDone);
+      audioCtx.onError(this.onDone);
+      audioCtx.onWaiting(this.onWait); //audioCtx.onTimeUpdate(this.onTimeUpdate);
+    },
+
+    delEvent() {
+      let audioCtx = this.$data.__comps__.audioCtx;
+      audioCtx.offPlay(this.onPlaying);
+      audioCtx.offPause(this.onPause);
+      audioCtx.offWaiting(this.onPause);
+      audioCtx.offStop(this.onDone);
+      audioCtx.offEnded(this.onDone);
+      audioCtx.offError(this.onDone);
+      audioCtx.offWaiting(this.onWait); // 多次播放会丢失这个回调,所以不用卸载
+      // audioCtx.offTimeUpdate(this.onTimeUpdate);
+    }
+
+  }
+};
+</script>
+<style>
+@import "./audio.css";
+</style>

+ 62 - 0
components/chat/msglist/type/audio/audioCtxFactory.js

@@ -0,0 +1,62 @@
+// 每一个音频消息都有自己的 ctx。
+// 可以有多个 ctx,每次播放都能知道是哪个 ctx 在调用,从而让其他的 ctx pause。
+// 消息销毁,记得处理 ctx。
+// 主要是同步跨 ctx 的操作,保证只有一个 ctx 播放
+let allCtx = {};
+let inUseCtx = null;
+let allComm = {};
+
+function proxier(ctx) {
+  let __play__ = ctx.play;
+  let __pause__ = ctx.pause;
+  ctx.play = playProxier;
+  ctx.pause = pauseProxier;
+
+  function playProxier() {
+    // 如果正在播放的不是自己,暂停
+    if (inUseCtx && inUseCtx != this) {
+      inUseCtx.pause();
+    }
+
+    __play__.call(this);
+
+    inUseCtx = this;
+  }
+
+  function pauseProxier() {
+    // 只有是自己才 pause
+    if (inUseCtx == this) {
+      __pause__.call(this);
+    }
+  }
+}
+
+module.exports = {
+  getCtx(mid) {
+    let returnCtx = allCtx[mid];
+
+    if (!returnCtx) {
+      returnCtx = uni.createInnerAudioContext();
+      allCtx[mid] = returnCtx;
+      proxier(returnCtx);
+    }
+
+    return returnCtx;
+  },
+
+  getAllCtx() {
+    uni.setStorageSync("allCtx", JSON.stringify(Object.keys(allCtx)));
+    return allCtx;
+  },
+
+  getCommponet(mid, comm) {
+    let curComm = allComm[mid];
+
+    if (!curComm) {
+      allComm[mid] = comm;
+    }
+
+    return allComm;
+  }
+
+};

+ 5 - 0
components/chat/msglist/type/audio/playStatus.js

@@ -0,0 +1,5 @@
+module.exports = {
+  PLAYING: "playing",
+  PAUSE: "pause",
+  STOP: "stop"
+};

+ 56 - 0
components/chat/msgpackager.js

@@ -0,0 +1,56 @@
+let WebIM = require("../../utils/WebIM.js")["default"];
+
+let msgType = require("./msgtype.js");
+
+module.exports = function (sendableMsg, type, myName) {
+  var time = WebIM.time();
+  var renderableMsg = {
+    info: {
+      from: sendableMsg.body.from,
+      to: sendableMsg.body.to
+    },
+    username: sendableMsg.body.from == myName ? sendableMsg.body.to : sendableMsg.body.from,
+    yourname: sendableMsg.body.from,
+    msg: {
+      type: type,
+      url: sendableMsg.body.url ? sendableMsg.body.url : '',
+      data: getMsgData(sendableMsg, type),
+	  ext: sendableMsg.body.ext
+    },
+    style: sendableMsg.body.from == myName ? "self" : "",
+    time: time,
+    mid: sendableMsg.type + sendableMsg.id,
+    chatType: sendableMsg.body.chatType
+  };
+
+  if (type == msgType.IMAGE) {
+    renderableMsg.msg.size = {
+      width: sendableMsg.body.body.size.width,
+      height: sendableMsg.body.body.size.height
+    };
+  } else if (type == msgType.AUDIO) {
+    renderableMsg.msg.length = sendableMsg.body.length;
+  } else if (type == msgType.FILE) {
+    renderableMsg.msg.data = [{
+      data: "[当前不支持此格式消息展示]",
+      type: "txt"
+    }];
+    renderableMsg.msg.type = 'txt';
+  }
+
+  return renderableMsg;
+
+  function getMsgData(sendableMsg, type) {
+    if (type == msgType.TEXT) {
+      return WebIM.parseEmoji(sendableMsg.value.replace(/\n/mg, ""));
+    } else if (type == msgType.EMOJI) {
+      return sendableMsg.value;
+    } else if (type == msgType.IMAGE || type == msgType.VIDEO || type == msgType.AUDIO) {
+      return sendableMsg.body.body.url;
+    } else if (type == msgType.FILE) {
+      return sendableMsg.body.body.msg;
+    }
+
+    return "";
+  }
+};

+ 195 - 0
components/chat/msgstorage.js

@@ -0,0 +1,195 @@
+let Disp = require("../../utils/Dispatcher.js");
+
+let msgPackager = require("./msgpackager.js");
+
+let msgType = require("./msgtype.js");
+
+let msgStorage = new Disp();
+
+let disp = require("../../utils/broadcast.js");
+
+msgStorage.saveReceiveMsg = function (receiveMsg, type) {
+  let sendableMsg;
+
+  if (type == msgType.IMAGE) {
+    sendableMsg = {
+      id: receiveMsg.id,
+      type: type,
+      body: {
+        id: receiveMsg.id,
+        from: receiveMsg.from,
+        to: receiveMsg.to,
+        type: receiveMsg.type,
+        ext: receiveMsg.ext,
+        chatType: receiveMsg.type,
+        toJid: "",
+        body: {
+          type: type,
+          url: receiveMsg.url,
+          filename: receiveMsg.filename,
+          filetype: receiveMsg.filetype,
+          size: {
+            width: receiveMsg.width,
+            height: receiveMsg.height
+          }
+        }
+      }
+    };
+  } else if (type == msgType.TEXT || type == msgType.EMOJI) {
+    sendableMsg = {
+      id: receiveMsg.id,
+      type: type,
+      body: {
+        id: receiveMsg.id,
+        from: receiveMsg.from,
+        to: receiveMsg.to,
+        type: receiveMsg.type,
+        ext: receiveMsg.ext,
+        chatType: receiveMsg.type,
+        toJid: "",
+        body: {
+          type: type,
+          msg: receiveMsg.data
+        }
+      },
+      value: receiveMsg.data
+    };
+  } 
+  else if (type == 'INFORM') { // 通知消息
+    sendableMsg = {
+      body: {
+        from: receiveMsg.from,
+        to: receiveMsg.to,
+        chatType: 'INFORM',
+        gid:receiveMsg.gid ? receiveMsg.gid:'',
+        type:receiveMsg.type
+      },
+    };
+  } else if (type == msgType.FILE) {
+    sendableMsg = {
+      id: receiveMsg.id,
+      type: type,
+      body: {
+        id: receiveMsg.id,
+        length: receiveMsg.file_length,
+        from: receiveMsg.from,
+        to: receiveMsg.to,
+        type: receiveMsg.type,
+        ext: receiveMsg.ext,
+        chatType: receiveMsg.type,
+        toJid: "",
+        body: {
+          type: type,
+          url: receiveMsg.url,
+          filename: receiveMsg.filename,
+          msg: "当前不支持此格式消息展示"
+        }
+      },
+      value: receiveMsg.data
+    };
+  } else if (type == msgType.AUDIO) {
+    sendableMsg = {
+      id: receiveMsg.id,
+      type: type,
+      accessToken: receiveMsg.token || receiveMsg.accessToken,
+      body: {
+        id: receiveMsg.id,
+        length: receiveMsg.length,
+        from: receiveMsg.from,
+        to: receiveMsg.to,
+        type: receiveMsg.type,
+        ext: receiveMsg.ext,
+        chatType: receiveMsg.type,
+        toJid: "",
+        body: {
+          type: type,
+          url: receiveMsg.url,
+          filename: receiveMsg.filename,
+          filetype: receiveMsg.filetype,
+          from: receiveMsg.from,
+          to: receiveMsg.to
+        }
+      }
+    };
+  } else if (type == msgType.VIDEO) {
+    sendableMsg = {
+      id: receiveMsg.id,
+      type: type,
+      accessToken: receiveMsg.token || receiveMsg.accessToken,
+      body: {
+        id: receiveMsg.id,
+        length: receiveMsg.length,
+        from: receiveMsg.from,
+        to: receiveMsg.to,
+        type: receiveMsg.type,
+        ext: receiveMsg.ext,
+        chatType: receiveMsg.type,
+        toJid: "",
+        body: {
+          type: type,
+          url: receiveMsg.url,
+          filename: receiveMsg.filename,
+          filetype: receiveMsg.filetype,
+          from: receiveMsg.from,
+          to: receiveMsg.to
+        },
+      },
+    };
+  } else {
+    return;
+  }
+
+  this.saveMsg(sendableMsg, type, receiveMsg);
+};
+
+msgStorage.saveMsg = function (sendableMsg, type, receiveMsg) {
+  let me = this;
+  let myName = uni.getStorageSync("myUsername");
+  let sessionKey; // 仅用作群聊收消息,发消息没有 receiveMsg
+
+  if (receiveMsg && receiveMsg.type == "groupchat") {
+    sessionKey = receiveMsg.to + myName;
+  } else if (sendableMsg.body.chatType === 'INFORM'){
+    sessionKey = 'INFORM'
+  }
+  
+  // 群聊发 & 单发 & 单收
+  else {
+    sessionKey = sendableMsg.body.from == myName ? sendableMsg.body.to + myName : sendableMsg.body.from + myName;
+  }
+
+  let curChatMsg = uni.getStorageSync(sessionKey) || [];
+  let renderableMsg = msgPackager(sendableMsg, type, myName);
+
+  if (type == msgType.AUDIO) {
+    renderableMsg.msg.length = sendableMsg.body.length;
+    renderableMsg.msg.token = sendableMsg.accessToken;
+  }
+
+  curChatMsg.push(renderableMsg); //console.log('renderableMsgrenderableMsg', renderableMsg)
+
+  if (type == msgType.VIDEO) {
+    renderableMsg.msg.token = sendableMsg.accessToken; //如果是音频则请求服务器转码
+  }
+
+
+  save();
+
+  function save() {
+    uni.setStorage({
+      key: sessionKey,
+      data: curChatMsg,
+
+      success() {
+        if (type == msgType.AUDIO || type == msgType.VIDEO) {
+          disp.fire('em.chat.audio.fileLoaded');
+        }
+
+        me.fire("newChatMsg", renderableMsg, type, curChatMsg, sessionKey);
+      }
+
+    });
+  }
+};
+
+module.exports = msgStorage;

+ 14 - 0
components/chat/msgtype.js

@@ -0,0 +1,14 @@
+module.exports = {
+  IMAGE: "img",
+  TEXT: "txt",
+  LOCATION: "location",
+  VIDEO: "video",
+  AUDIO: "audio",
+  EMOJI: "emoji",
+  FILE: "chat",
+  //
+  chatType: {
+    SINGLE_CHAT: "singleChat",
+    CHAT_ROOM: "chatRoom"
+  }
+};

+ 0 - 0
nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/_CodeSignature/CodeSignature → components/chat/multiemedia/index.css


+ 484 - 0
components/chat/multiemedia/index.nvue

@@ -0,0 +1,484 @@
+<template>
+	<view class="wraper">
+		<view class="infoConnecting">
+			11多人会议
+		</view>
+		<live-pusher class="live-pusher" :url="pubUrl" @netstatus="netstatusChange" :muted="false" :enable-camera="true" id="livePusher"
+		 ref="livePusher" @statechange="statechange" mode="HD" @error="error"></live-pusher>
+		</live-pusher>
+	
+			<view  
+				v-if="subUrls.length > 0"
+				v-for="item in subUrls">
+	
+				<video
+					:id="item.streamId"
+					:src="item.subUrl" 
+					object-fit="contain"
+					autoplay 
+				>
+					<view class="userName">{{item.memName}}</view>
+				</video>
+	
+			</view>
+		<!-- </scroll-view> -->
+	
+	
+		<!-- <view class="controlContent">
+			<view class="emediaContrContent">
+				<view class="controlItem" @tap="toggleCamera" style="{color: devicePositionColor}">
+					<image
+						class="icon-record"
+						:src="'../../../static/images/'+devicePositionIcon+'2x.png'" style="{width:'22px'; height: '24px'}"/>
+					切换摄像头
+				</view>
+				<view class="controlItem" @tap="toggleMuted" style="{color: micphoneColor}">
+					<image
+						class="icon-record"
+						:src="'../../../static/images/'+micphoneIcon+'2x.png'" style="{width:'22px'; height: '24px'}"/>
+					麦克风</view>
+				<view class="controlItem" @tap="togglePlay" style="{color: videoColor}">
+					<image
+						class="icon-record"
+						:src="'../../../static/images/'+videoIcon+'2x.png'" style="{width:'22px'; height: '24px'}"/>
+					视频</view>
+				<view class="controlItem" @tap="toggleBeauty" style="{color: beautyColor}">
+					<image
+						class="icon-record"
+						:src="'../../../static/images/'+beautyIcon+'.png'" style="{width:'16px'; height: '24px'}"/>
+					美颜</view>
+				<view class="controlItem" @tap="inviteMember">
+					<image
+						class="icon-record"
+						src='../../../static/images/invite_white2x.png' style="{width:'22px'; height: '24px'"/>
+					邀请</view>
+			</view>
+	
+			<view class="hangup" @tap="hangup">
+				<image
+					class="icon-record"
+					src='../../../static/images/hangup2x.png'/>
+			</view>
+		</view>
+	 -->
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				pubUrl: "",
+				subUrls: [],
+				showInvite: true,
+				devicePosition: "front",
+				muted: false,
+				playVideoMuted: false,
+		
+				devicePositionIcon: 'switchCamera_white',
+				devicePositionColor: '#fff',
+				micphoneIcon: 'micphone_white',
+				beautyIcon: 'beauty',
+				micphoneColor: '#fff',
+				videoIcon: 'video_white',
+				videoColor: '#fff',
+				beauty: 9,
+				beautyColor: '#fff',
+				myName: '',
+				confrId: '',
+				enableCamera: true,
+				time: '',
+				context: {}
+			}
+		},
+		props: {
+		  username: {
+		    type: Object,
+		    default: () => ({}),
+		  },
+		  action: {
+		    type: Object,
+		    default: {},
+		  },
+		  groupId:{
+		    type: String,
+		    default: '',
+		  },
+		},
+		methods: {
+			joinRoom(data){
+				let me = this;
+				console.log('joinRoom', data)
+				me.context = uni.createLivePusherContext("livePusher", me);
+				console.log('我的播放组件', me.context)
+				var context = this.context
+				if (context && context.ctx && context.ctx.attr && context.ctx.attr.url) {
+					context.stop()
+				}
+				let id = wx.WebIM.conn.getUniqueId();
+				let roomName = 'wxConfr' + id //随机的房间名,防止和别人的房间名冲突
+				let rec = wx.getStorageSync("rec") || false;
+				let recMerge = wx.getStorageSync("recMerge") || false;
+				let params = {
+					roomName,
+					password: '',
+					role: 7,
+					config: {
+						rec,
+						recMerge
+					}
+				}
+				if (data) {
+					params.roomName = data.roomName
+					params.password = data.password
+				}
+				
+				wx.emedia.mgr.joinRoom(params).then((res) => {
+					console.log('res', res)
+					let confrId = res.confrId
+					me.confrId= confrId
+					me.$emit('createConfrSuccess', {confrId: confrId, groupId: me.username.groupId, roomName: params.roomName, password: params.password})
+					
+					console.log('--------+--+----+---+--------')
+					let rtcId = wx.emedia.util.getRtcId()
+					console.log(11111111111111, confrId)
+					wx.emedia.mgr.pubStream(rtcId).then(function(res){
+						console.log('pubUrl-------------', res.data.rtmp)
+						console.log(2222222222222)
+						me.pubUrl= res.data.rtmp
+						setTimeout(() => {
+							console.log('55555555555', me)
+							console.log(me.context)
+							me.context.start()
+						}, 500)
+					}).catch(e => {
+					    console.log(4444444, e)   //404
+					    return f(false);  //即便返回了一个成功的promise,下面的finally也会执行,如果返回的是失败的promise,控制台最后一行会报错uncaught (in promise) 404
+					})
+					.finally( (e) => {
+					    console.log(100,e)  //100
+					})
+					console.log(33333333333333, me.pubUrl)
+				})
+				
+				
+			},
+			createConf(){
+				console.log('>>> createConf');
+				
+				var me = this
+				let rec = wx.getStorageSync("rec") || false;
+				let recMerge = wx.getStorageSync("recMerge") || false;
+				//参数:会议类型 密码 是否录制 是否合并
+				wx.emedia.mgr.createConference(10, '', rec, recMerge).then(function(data){
+					console.log('成功', data)
+					let ticket = data.data.ticket
+					let ticketJosn = JSON.parse(ticket)
+					let confrId = ticketJosn.confrId
+	
+					wx.emedia.mgr.joinConferenceWithTicket(confrId, ticket).then(function(res){
+						console.log('加入会议成功', res)
+					})
+					// wx.emedia.mgr.joinConference(confrId, '').then(function(res){
+					// 	console.log('加入会议成功', res)
+					// })
+					
+					me.confrId = confrId
+					me.$emit('createConfrSuccess', {confrId: confrId, groupId: me.username.groupId})
+				})
+			},
+	
+			joinConf(data){
+				console.log('加入会议 ————-------————')
+				console.log(data)
+				let me = this
+				wx.emedia.mgr.getConferenceTkt(data.confrId, data.password).then(function(res){
+					console.log('申请reqTkt成功', res.data)
+					let ticket = res.data.ticket || ''
+					let tktObj = JSON.parse(ticket)
+					wx.emedia.mgr.joinConferenceWithTicket(data.confrId, ticket).then(function(res){
+						console.log('加入会议成功', res)
+					})
+					me.confrId= tktObj.confrId
+					me.$emit('createConfrSuccess', {confrId: tktObj.confrId, groupId: me.username.groupId})
+				})
+			},
+			
+			togglePlay(){
+				let me = this
+				console.log("%c togglePlay", "color:green")
+	
+				// this.LivePusherContext.stop()
+				this.enableCamera= !me.enableCamera
+				this.pubUrl= me.pubUrl
+				this.videoIcon= this.videoIcon == 'video_white'?'video_gray': 'video_white'
+				this.videoColor= this.videoColor == '#fff'? '#aaa': '#fff'
+				this.LivePusherContext.start()
+				/* this.setData({
+					
+				}, () => {
+					
+				}) */
+			},
+	
+			toggleCamera(){
+				console.log("%c toggleCamera", "color:green")
+				let me = this
+				// me.LivePusherContext.stop()
+				me.LivePusherContext.switchCamera({
+					success: function(){
+						me.devicePosition= me.devicePosition == 'fron' ? 'back' : 'front',
+						me.devicePositionIcon= me.devicePositionIcon =='switchCamera_white'?'switchCamera_gray': 'switchCamera_white',
+						me.devicePositionColor= me.devicePositionColor == '#fff'? '#aaa':'#fff'
+					}
+				})
+
+			},
+	
+			toggleMuted(){
+				console.log("%c toggleMuted", "color:green")
+				this.muted= !this.muted
+				this.micphoneIcon= this.micphoneIcon == 'micphone_white'? 'micphone_gray': 'micphone_white'
+				this.micphoneColor= this.micphoneColor == '#fff'? '#aaa': '#fff'
+			},
+	
+			toggleBeauty(){
+				this.beauty= this.beauty == 0 ? 9 : 0
+				this.beautyColor= this.beautyColor == '#fff'? '#aaa': '#fff'
+				this.beautyIcon= this.beautyIcon == 'beauty' ? 'beauty_gray': 'beauty'
+			},
+	
+			hangup(){
+				console.log('挂断', this.confrId)
+				wx.emedia.mgr.exitConference(this.confrId)
+				this.$emit('hangup')
+				this.stopTimer()
+			},
+			inviteMember(){
+				this.$emit('inviteMember', this.groupId)
+			},
+			// statechange(e){
+			// 	console.log('>>>>>>>>>live-pusher code:', e.detail)
+			// 	if (e.detail.code === 5001) {
+			// 		// 部分安卓手机在接电话时会停止推拉流报错,状态码5001,此时退出会议。 https://developers.weixin.qq.com/community/develop/doc/0006ac6d7a4968fa675a49fef53c00
+			// 		this.hangup()
+			// 		console.error('由于有电话接入,已退出会议')
+			// 	}
+			// },
+			netstatusChange(e){
+				console.log('>>>>>>>>>>net status:', e.detail)
+			},
+	
+			getTimer(){
+				let count = 0;
+				let time = '00:00:00'
+				this.timer = setInterval(() => {
+					count++;
+					let s = showNum(count % 60);
+					let m = showNum(parseInt((count / 60)) % 60)
+					let h = showNum(parseInt(count / 60 / 60))
+					time = `${h}:${m}:${s}`
+					this.time = time
+				}, 1000)
+	
+				function showNum(num) {
+					if (num < 10) {
+						return '0' + num
+					}
+					return num
+				}
+	
+			},
+			stopTimer(){
+				clearInterval(this.timer)
+			},
+			error(err){
+				console.log('EEEEEEEEEEEEE', err)
+			},
+			statechange(state){
+				console.log("SSSSSSSSSSS", state)
+			}
+		},
+		
+		mounted() {
+			console.log('进入')
+			wx.setKeepScreenOn({
+			  keepScreenOn: true
+			})
+			console.log('进入111')
+			this.myName= wx.WebIM.conn.context.userId
+			console.log('进入222')
+			this.getTimer()
+			var me = this
+			let subUrls = []
+			let obj = {};
+			console.log('进入333')
+			this.LivePusherContext = uni.createLivePusherContext('livePusher',this)
+			console.log('this.LivePusherContext ..', this.LivePusherContext)
+			if(this.action&&this.action.action == 'join'){
+				console.log('join')
+				// 音视频sdk提供两种创建、加入会议的api 使用任意一种都可以:(1) 一种是通过会议id ticket 或者 会议id 密码加入会议 如使用下面 joinConf
+				// (2)另一种是通过房间名 密码加入 如使用下面joinRoom
+
+				//this.joinConf(this.action) // (1)
+				//this.joinRoom(this.action) // (2)
+				if (this.action.roomName) {
+					console.log('使用joinroom')
+					this.joinRoom(this.action)
+				}else{
+					console.log('使用joinConf')
+					this.joinConf(this.action)
+				}
+			}else{
+				// 创建会议同样是两种api (1)一种是使用createConf 单纯创建一个会议,需要再申请ticket 或者用密码加入会议 如使用下面的createConf
+				// (2)也可以使用joinRoom,通过房间名、密码创建房间并直接加入 不需再进行加入会议的操作
+				this.joinRoom() // (1)
+				//this.createConf() // (2)
+			}
+			wx.emedia.mgr.onMediaChanaged = function(e){
+				console.log('onMediaChanaged', e)
+			}
+			wx.emedia.mgr.onConferenceExit = function(e){
+				console.log('onConferenceExit', e)
+			}
+			wx.emedia.mgr.onMemberExited = function(reason){
+				console.log('onMemberExited', reason)
+			};
+ 
+			wx.emedia.mgr.onStreamControl = function(mem){
+				console.log('onStreamControl', mem)
+			}
+
+			wx.emedia.mgr.onStreamControl.onSoundChanage = function(a, b, c, d){
+				console.log('onSoundChanage')
+			}
+
+			wx.emedia.mgr.onReconnect = function (res, ent){
+				// 发生断网重连,相当于重新加入会议
+
+				// 清空live-player 否则在原来的后面追加,导致原来的黑屏显示
+				subUrls = []
+
+				// 重新加入恢复到初始状态,防止和控制按钮状态不符
+
+				// 重连后摄像头方向不会改变
+				me.subUrls= []
+				me.showInvite= true
+				me.devicePosition= "front"
+				me.muted= false
+				me.playVideoMuted= false
+				
+				
+				me.micphoneIcon= 'micphone_white'
+				me.micphoneColor= '#fff'
+				me.videoIcon= 'video_white'
+				me.beautyIcon= 'beauty'
+				me.videoColor= '#fff'
+				me.beauty= 9
+				me.beautyColor= '#fff'
+				me.enableCamera= true
+			}
+
+			wx.emedia.mgr.onMemberJoined = function(mem){
+				console.log("++++++++++ member", mem)
+				var jid = wx.WebIM.conn.context.jid
+				let identityName = jid.appKey + '_' + jid.name+ '@' + jid.domain
+				// let identityName = wx.WebIM.conn.context.jid.split("/")[0]
+				// 如果是自己进入会议了,开始发布流
+				if(mem.name == identityName){
+					let rtcId = wx.emedia.util.getRtcId()
+					wx.emedia.mgr.pubStream(rtcId).then(function(res){
+						me.pubUrl= res.data.rtmp
+					})
+
+					var enableCamera = me.enableCamera;
+					console.warn("begin enable camera", me.enableCamera);
+
+					//默认enableCamera为false  关闭摄像头时声音不会有延迟,否则有延迟
+					//所以最好别用autopush
+					me.enableCamera= false
+					me.pubUrl= me.url + 'record_type=audio' || 'https://domain/push_stream'
+					// enableCamera && me.enableCamera= enableCamera
+					/* me.setData({
+						enableCamera: false,
+						pubUrl: me.url + 'record_type=audio' || 'https://domain/push_stream',
+					}, () => {
+						// var enableCameraDefault = true
+						//if(!enableCameraDefault){ //治疗不推流的毛病
+							// console.log('关闭摄像头推流')
+							// setTimeout(() => {
+							// 	me.LivePusherContext.start({
+							// 		success: function () {
+										// console.log('关闭摄像头推流', enableCamera)
+							// 		}
+							// 	})
+							// }, 1500)
+						// }else{
+						// 	me.LivePusherContext.start({
+						   //  	success: function () {
+						   //  		console.log('开始推流了', enableCamera)
+						   //    		enableCamera && me.setData({enableCamera: enableCamera})
+						   //  	}
+						   //  })
+						// }
+					}) */
+				}
+			}
+			wx.emedia.mgr.onStreamAdded = function(stream){
+				console.log('%c onAddStream', 'color: green', stream)
+				let streamId = stream.id
+				// setTimeout(() => {
+					if(subUrls.length > 8){
+						return
+					}
+					wx.emedia.mgr.subStream(streamId).then(function(data){
+						console.log('%c 订阅流成功', 'color:green', data)
+						// let playContext = wx.createLivePlayerContext(streamId, me)
+						let subUrl = {
+							streamId: streamId,
+							subUrl: data.data.rtmp,
+							memName: stream.memName.split("_")[1].split("@")[0],
+							// playContext: playContext
+						}
+						subUrls.push(subUrl)
+						console.log('%c subUrls 11 ....', "background:yellow")
+						console.log(subUrls)
+	
+						me.subUrls= subUrls
+						me.showInvite= false
+					})
+				// }, 2000)
+
+			}
+			wx.emedia.mgr.onStreamRemoved = function(stream){
+				console.log('%c onRemoveStream', 'color: red', stream)
+				subUrls = subUrls.filter((item) => {
+					if(item.streamId != stream.id){
+						return item
+					}else{
+						console.log('%c ------', 'backgroukd:yellow')
+						console.log(item)
+						// item.playContext.stop({
+						// 	success: function(){
+						// 		console.log('关闭成功')
+						// 	},
+						// 	complete: function(){
+						// 		console.log('关闭成功')
+						// 	}
+						// })
+					}
+				})
+				obj[stream.id] = false
+				me.subUrls= subUrls
+				console.log('subUrls', subUrls)
+			},
+			wx.emedia.mgr.onConfrAttrsUpdated = function(e){
+				console.log('onConfrAttrsUpdated: ', e)
+			}
+			
+		},
+	
+	}
+</script>
+
+

+ 110 - 0
components/longPressModal/index.vue

@@ -0,0 +1,110 @@
+<template>
+  <view v-if="showPop" class="shade" @tap="hidePop">
+    <view class="pop" :style="popStyle" :class="{ show: showPop }">
+      <view
+        v-for="(item, index) in popButton"
+        :key="index"
+        @tap="pickerMenu"
+        :data-index="index"
+        >{{ item }}</view
+      >
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  name: "long-press-modal",
+  props: {
+    /* 窗口尺寸 */
+    winSize: {
+      type: Object,
+      default() {
+        return {
+          witdh: 375,
+          height: 603,
+        };
+      },
+    },
+    /* 显示操作弹窗 */
+    showPop: {
+      type: Boolean,
+      default: false,
+    },
+    /* 弹窗按钮列表 */
+    popButton: {
+      type: Array,
+      default() {
+        // 如下
+        // return ["标为关注", "置顶聊天", "删除该聊天"]
+        return [];
+      },
+    },
+    /* 弹窗定位样式 */
+    popStyle: {
+      type: String,
+      default: "",
+    },
+    change:{
+      type:Function,
+    }
+  },
+  methods: {
+    /* 隐藏弹窗 */
+    hidePop() {
+      this.$emit('hidePop')
+    },
+    /* 选择菜单 */
+    pickerMenu() {
+      this.$emit('change')
+      this.hidePop();
+    },
+  },
+};
+</script>
+<style scoped lang="scss">
+/* 遮罩 */
+.shade {
+  position: fixed;
+  z-index: 100;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  -webkit-touch-callout: none;
+
+  .pop {
+    position: fixed;
+    z-index: 101;
+    width: 200upx;
+    box-sizing: border-box;
+    font-size: 28upx;
+    text-align: left;
+    color: #333;
+    background-color: #fff;
+    box-shadow: 0 0 5px rgba(0, 0, 0, 0.5);
+    line-height: 80upx;
+    transition: transform 0.15s ease-in-out 0s;
+    user-select: none;
+    -webkit-touch-callout: none;
+    transform: scale(0, 0);
+
+    &.show {
+      transform: scale(1, 1);
+    }
+
+    & > view {
+      padding: 0 20upx;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+      user-select: none;
+      -webkit-touch-callout: none;
+
+      &:active {
+        background-color: #f3f3f3;
+      }
+    }
+  }
+}
+</style>

+ 3 - 1
components/menuList/menuList.vue

@@ -132,7 +132,9 @@
 			// 菜单选择
 			selectMenu(index,data){
 				this.menuIndex = index
-				this.goods = this.menuLists[index].goods
+				if(this.menuLists) {
+					this.goods = this.menuLists[index].goods
+				}
 				this.title = this.menuLists[index].title
 				this.$emit('listenMenu',data);
 			},

+ 29 - 12
components/my-order/my-order.vue

@@ -8,19 +8,36 @@
 					<view class="type1" v-if="item.status == 2">已报价</view>
 					<view class="type2" v-if="item.status == 3">已匹配</view>
 				</view>
-				<block v-for="(item2,index2) in item.items" :key="index">
-					<view class="box">
-						<view class="text_style1">{{item2.name}}</view>
-						<view class="box_norm hflex acenter" v-if="item.tab !== 4">
-							<view class="text_style2">规格:{{item2.spec}}kg/桶</view>
-							<view class="text_style2">采购数量:{{item2.number}}吨</view>
+				<view v-if="item.items.length<3">
+					<block v-for="(item2,index2) in item.items" :key="index">
+						<view class="box">
+							<view class="text_style1">{{item2.name}}</view>
+							<view class="box_norm hflex acenter" v-if="item.tab !== 4">
+								<view class="text_style2">规格:{{item2.spec}}</view>
+								<view class="text_style2">采购数量:{{item2.number}}</view>
+							</view>
+							<view class="box_norm hflex acenter" v-else>
+								<view class="text_style2">数量/吨位:{{item2.weight}}</view>
+							</view>
+							<view class="text" v-if="item2.standard">质量标准:{{item2.standard}}</view>
 						</view>
-						<view class="box_norm hflex acenter" v-else>
-							<view class="text_style2">数量/吨位:{{item2.weight}}吨</view>
+					</block>
+				</view>
+				<view v-else>
+					<block v-for="(item2,index2) in item.items.slice(0,2)" :key="index">
+						<view class="box">
+							<view class="text_style1">{{item2.name}}</view>
+							<view class="box_norm hflex acenter" v-if="item.tab !== 4">
+								<view class="text_style2">规格:{{item2.spec}}</view>
+								<view class="text_style2">采购数量:{{item2.number}}</view>
+							</view>
+							<view class="box_norm hflex acenter" v-else>
+								<view class="text_style2">数量/吨位:{{item2.weight}}</view>
+							</view>
+							<view class="text" v-if="item2.standard">质量标准:{{item2.standard}}</view>
 						</view>
-						<view class="text" v-if="item2.standard">质量标准:{{item2.standard}}</view>
-					</view>
-				</block>
+					</block>
+				</view>
 				<view class="bottom hflex acenter jbetween" v-if="item.status != 1 && item.tab !== 1">
 					<view class="offer">订单报价:<span style="font-size: 32rpx;color: #222;">{{item.user_order.amount}}</span></view>
 					<view class="btn" @click.stop="toOffer(item.id)">查看详情</view>
@@ -144,7 +161,7 @@
 				margin-right: 8rpx;
 			}
 			.box_norm {
-				width: auto;
+				width: max-content;
 				background-color: #f4f4f4;
 				border-radius: 8rpx;
 				box-sizing: border-box;

+ 1 - 1
components/news-module/news-module.vue

@@ -51,7 +51,7 @@
 				
 			</view>
 		</block>
-		
+		<!-- <u-empty icon="/static/images/comment/zhan.png" text="暂时没有数据哦"> -->
 	</view>
 </template>
 

+ 6 - 1
components/order-top/order-top.vue

@@ -3,7 +3,8 @@
 		<view class="hflex acenter jbetween">
 			<view class="title">客户信息</view>
 			<view class="type1" v-if="type == 1">未报价</view>
-			<view class="type1 type2" v-if="type == 2">已报价</view>
+			<view class="type1" v-if="type == 2 && amount == ''">未报价</view>
+			<view class="type1 type2" v-if="type == 2 && amount !== ''">已报价</view>
 			<view class="type1 type3" v-if="type == 3">已匹配</view>
 		</view>
 		<view class="hflex acenter cell">
@@ -33,6 +34,10 @@
 				type: String,
 				value: '' 
 			},
+			amount: {
+				type: String,
+				value: '' 
+			},
 		},
 		data() {
 			return {

+ 4 - 2
components/share-model/share-model.vue

@@ -35,10 +35,10 @@
 						<image src="/static/images/comment/wx.png" class="item_icon"></image>
 						<view class="item_text">微信好友</view>
 					</button>
-					<button class="vflex acenter jcenter bottom_item" open-type="share">
+					<!-- <button class="vflex acenter jcenter bottom_item" open-type="share">
 						<image src="/static/images/comment/moments.png" class="item_icon"></image>
 						<view class="item_text">朋友圈</view>
-					</button>
+					</button> -->
 					<view class="vflex acenter jcenter bottom_item" @click="saveImg">
 						<image src="/static/images/comment/download.png" class="item_icon"></image>
 						<view class="item_text">保存图片</view>
@@ -243,6 +243,8 @@
 				        	filePath: that.tempImage,
 				        	success: function () {
 				        		console.log('save success');
+								$api.info('保存成功')
+								that.cancel()
 				        	}
 				        });
 				    }

+ 29 - 0
components/swipedelete/swipedelete.css

@@ -0,0 +1,29 @@
+
+.swipedelete-wrapper {
+  transition: all .4s ease;
+  position: relative;
+}
+.swipedelete-btn {
+/*  position:absolute;
+  top:0;
+  right:-180rpx;
+  text-align:center;
+  background: #f00;
+  color:#fff;
+  width:160rpx;
+  height:100%;
+  display:flex;
+  justify-content:center;
+  align-items:center;*/
+  position:absolute;
+	right: -160rpx; 
+	top:0;
+	background-color:#D0021B;
+	width:160rpx;
+	height:100%;
+	text-align:center;
+	color: #fff;
+  display:flex;
+  align-items:center;
+  justify-content:center;
+}

+ 68 - 0
components/swipedelete/swipedelete.vue

@@ -0,0 +1,68 @@
+<template>
+<view class="swipedelete-wrapper" @touchmove="touchMoveHandler" @touchstart="touchStartHandler" :style="'transform:translateX(' + translateX + 'rpx)'">
+	<slot></slot>
+  <view class="swipedelete-btn" @tap="deleteItem">删除</view>
+</view>
+</template>
+
+<script>
+let startX = 0;
+
+export default {
+  data() {
+    return {
+      translateX: 0
+    };
+  },
+
+  components: {},
+  props: {},
+  methods: {
+    deleteItem: function (e) {
+      this.translateX=0
+      this.$emit('deleteChatItem', {}, {
+        bubbles: true
+      });
+    },
+
+    /**
+     * 滑动删除事件-滑动开始
+     */
+    touchStartHandler: function (e) {
+      startX = e.touches[0].pageX;
+    },
+
+    /**
+     * 滑动删除事件-滑动
+     */
+    touchMoveHandler: function (e) {
+      let pageX = e.touches[0].pageX;
+      let moveX = pageX - startX;
+
+      if (Math.abs(moveX) < 80) {
+        return;
+      } // e.target.style.WebkitTransform = `translateX(${moveX}px)`
+
+
+      if (moveX > 0) {
+        // 右滑 隐藏删除
+        if (Math.abs(this.translateX) == 0) {
+          return;
+        } else {
+          this.translateX= 0
+        }
+      } else {
+        // 左滑 显示删除
+        if (Math.abs(this.translateX) >= 160) {
+          return;
+        } else {
+          this.translateX= -160
+        }
+      }
+    }
+  }
+};
+</script>
+<style>
+@import "./swipedelete.css";
+</style>

+ 1 - 0
index.html

@@ -9,6 +9,7 @@
         '<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
         (coverSupport ? ', viewport-fit=cover' : '') + '" />')
     </script>
+	<script type="text/javascript" src="https://cn-shanghai-aliyun-cloudauth.oss-cn-shanghai.aliyuncs.com/web_sdk_js/jsvm_all.js" ></script>
     <title></title>
     <!--preload-links-->
     <!--app-context-->

+ 7 - 2
manifest.json

@@ -41,9 +41,13 @@
                 ]
             },
             /* ios打包配置 */
-            "ios" : {},
+            "ios" : {
+                "dSYMs" : false
+            },
             /* SDK配置 */
-            "sdkConfigs" : {}
+            "sdkConfigs" : {
+                "ad" : {}
+            }
         }
     },
     /* 快应用特有相关 */
@@ -66,6 +70,7 @@
         },
         "requiredPrivateInfos" : [ "getLocation" ]
     },
+    // "lazyCodeLoading" : "requiredComponents"
     "mp-alipay" : {
         "usingComponents" : true
     },

BIN
nativePlugins/AP-FaceDetectModule/.DS_Store


+ 0 - 3
nativePlugins/AP-FaceDetectModule/ReadMe.txt

@@ -1,3 +0,0 @@
-亲,按照下面方法操作
-1.所有的framework都在iOS目录下
-2.把这四个bundle copy到ios目录下"APBToygerFacade.bundle","BioAuthEngine.bundle","ToygerService.bundle","OCRXMedia.bundle", 他们分别在APBToygerFacade.framework,BioAuthEngine.framework,ToygerService.framework,OCRDetectSDKForTech.framework 里面。 

BIN
nativePlugins/AP-FaceDetectModule/android/.DS_Store


BIN
nativePlugins/AP-FaceDetectModule/android/APSecuritySDK-DeepSec-7.0.1.20211220.aar


BIN
nativePlugins/AP-FaceDetectModule/android/Android-AliyunDevice-FG-10022.2.aar


BIN
nativePlugins/AP-FaceDetectModule/android/aliyunfaceverify.aar


BIN
nativePlugins/AP-FaceDetectModule/android/android-aliyunbasicstl-sdk-release-1.6.0-20220414192835.aar


BIN
nativePlugins/AP-FaceDetectModule/android/android-aliyuncomm-sdk-release-1.6.0-20220414192835.aar


BIN
nativePlugins/AP-FaceDetectModule/android/android-aliyunface-sdk-release-1.6.0-20220414192835.aar


BIN
nativePlugins/AP-FaceDetectModule/android/android-aliyunocr-sdk-release-1.6.0-20220414192835.aar


BIN
nativePlugins/AP-FaceDetectModule/android/photinus-1.0.1.220217162928.aar


BIN
nativePlugins/AP-FaceDetectModule/android/tygerservice-1.0.0.220407164130.aar


BIN
nativePlugins/AP-FaceDetectModule/ios/.DS_Store


+ 0 - 66
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.bundle/en.strings

@@ -1,66 +0,0 @@
-/* 
-  en.strings
-  APBToygerFacade
-
-  Created by shouyi.www on 2017/6/1.
-  Copyright © 2017年 Alipay. All rights reserved.
-*/
-
-"APBToygerFacade:取消"="Cancel";
-"APBToygerFacade:再试一次"="Try Again";
-"APBToygerFacade:退出"="Quit";
-"APBToygerFacade:确定"="OK";
-"APBToygerFacade:继续"="Continue";
-"APBToygerFacade:我知道了"="Got it";
-"APBToygerFacade:其他登录方式"="Another login method";
-"APBToygerFacade:刷脸失败"="Face scan failed";
-"APBToygerFacade:当前设备不支持刷脸"="Face scan not supported on your device";
-"APBToygerFacade:当前系统不支持刷脸"="Face scan not supported on your device system";
-"APBToygerFacade:无法启动相机"="No camera permission";
-"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="Please allow to access your camera in \"Settings\"-\"Privacy\"-\"Camera\"";
-"APBToygerFacade:立即开启"="OK";
-"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="Face scan is only available on iOS8 or above";
-"APBToygerFacade:系统错误"="System error";
-"APBToygerFacade:确定退出吗?"="Are you sure to quit face scan?";
-"APBToygerFacade:露个脸就能通过"="You can succeed by simply showing your face";
-"APBToygerFacade:操作超时"="Time out";
-"APBToygerFacade:正对手机,更容易成功"="Face straight at the phone and ensure you have enough light";
-"APBToygerFacade:提示:正对手机,更容易成功"="Face straight at the phone and ensure you have enough light";
-"APBToygerFacade:本次操作失败"="Sorry, face scan failed";
-"APBToygerFacade:网络不给力"="Network connection failed";
-"APBToygerFacade:登录中断"="Login interrupted";
-"APBToygerFacade:验证中断"="Face scan interrupted";
-
-
-"APBToygerFacade:刷脸验证"="Face Scan";
-"APBToygerFacade:请把脸放入框内保持不动"="Put your face into the frame";
-"APBToygerFacade:靠近一点"="Move closer";
-"APBToygerFacade:没有检测到脸"="No face";
-"APBToygerFacade:再清晰一点"="Face not clear";
-"APBToygerFacade:脸部亮一点"="More light";
-"APBToygerFacade:请正对手机"="No face";
-"APBToygerFacade:把脸移入圈内"="No face";
-"APBToygerFacade:离远一点"="Move farther";
-"APBToygerFacade:请保持不动"="Stay still";
-"APBToygerFacade:请注视屏幕"="Open your eyes";
-"APBToygerFacade:眨眨眼"="Blink";
-"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
-
-"APBToygerFacade:选择其他验证方式"="Use a different verification method";
-"APBToygerFacade:拿起手机眨眨眼"="Blink";
-"APBToygerFacade:拿起手机向左摇头"="Turn Head Left";
-"APBToygerFacade:拿起手机向右摇头"="Turn Head Right";
-
-
-"APBToygerFacade:正在处理"="Processing";
-"APBToygerFacade:首次使用,请开通刷脸"="For the first time use, please enable Face Scan";
-"APBToygerFacade:立即开通"="Enable";
-"APBToygerFacade:下次再说"="Later";
-
-"APBToygerFacade:请把手机正对面部"="Face straight at the phone";
-"APBToygerFacade:即将开始人脸检测"="Get ready for face recognition";
-
-"APBToygerFacade:没有认出你"="Face scan failed";
-"APBToygerFacade:未能识别人脸"="Face not detected";
-"APBToygerFacade:人脸检测中"="Face Scan";
-"APBToygerFacade:刷脸失败次数过多,请稍后再试"="Too many failed attempts, please try again later";

+ 0 - 101
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.bundle/id.strings

@@ -1,101 +0,0 @@
-"APBToygerFacade:没有检测到脸"="Tidak ada wajah terdeteksi";
-"APBToygerFacade:靠近一点"="Harap dekatkan wajah";
-"APBToygerFacade:离远一点"="Harap jauhkan wajah";
-"APBToygerFacade:把脸移入圈内"="Posisikan wajah pada lingkaran";
-"APBToygerFacade:请正对手机"="Arahkan wajah lurus menghadap ponsel";
-"APBToygerFacade:请正对手机"="Arahkan wajah lurus menghadap ponsel";
-"APBToygerFacade:再清晰一点"="Perjelas wajah Anda";
-"APBToygerFacade:脸部亮一点"="Terangi wajah Anda";
-"APBToygerFacade:请露出正脸"="Tunjukkan bagian depan wajah Anda";
-"APBToygerFacade:请注视屏幕"="Lihat layar";
-"APBToygerFacade:眨眨眼"="Harap kedipkan mata";
-"APBToygerFacade:请保持不动"="Tetap tenang";
-"APBToygerFacade:再清晰一点"="Perjelas wajah Anda";
-"APBToygerFacade:请正对屏幕"="Arahkan wajah lurus menghadap layar";
-"APBToygerFacade:拿起手机,眨眨眼"="Angkat ponsel Anda dan kedipkan mata";
-"APBToygerFacade:正在处理"="Memproses";
-"APBToygerFacade:确定"="OK";
-"APBToygerFacade:我知道了"="OK";
-"APBToygerFacade:退出"="Keluar";
-"APBToygerFacade:当前系统不支持刷脸"="Sistem saat ini tidak mendukung pengenalan wajah";
-"APBToygerFacade:刷脸仅在高版本及以上系统可用"="Pengenalan wajah hanya dapat dilakukan pada sistem dengan versi yang lebih tinggi";
-"APBToygerFacade:验证中断"="Verifikasi terputus";
-"APBToygerFacade:本次操作失败"="Operasi gagal";
-"APBToygerFacade:刷脸失败"="Pengenalan wajah gagal";
-"APBToygerFacade:正对手机,更容易成功"="Arahkan wajah lurus menghadap ponsel untuk membuat wajah Anda lebih mudah dipindai";
-"APBToygerFacade:操作超时"="Waktu operasi habis";
-"APBToygerFacade:提示:正对手机,更容易成功"="Catatan: Pemindaian lebih mungkin berhasil jika Anda mengarahkan wajah lurus menghadap ponsel Anda";
-"APBToygerFacade:网络不给力"="Kondisi jaringan tidak memenuhi persyaratan";
-"APBToygerFacade:请检查网络"="Periksa konektivitas jaringan";
-"APBToygerFacade:本次操作失败"="Operasi gagal";
-"APBToygerFacade:抱歉,系统出错了,请再试一次"="Terjadi kesalahan sistem. Coba lagi";
-"APBToygerFacade:确定退出吗?"="Apakah Anda yakin ingin keluar?";
-"APBToygerFacade:露个脸就能通过"="Anda hanya perlu memperlihatkan wajah Anda";
-"APBToygerFacade:确定"="OK";
-"APBToygerFacade:取消"="Batalkan";
-"APBToygerFacade:重试"="Coba lagi";
-"APBToygerFacade:操作超时"="Waktu operasi habis";
-"APBToygerFacade:提示:正对手机,更容易成功"="Catatan: Pemindaian lebih mungkin berhasil jika Anda menghadap lurus ke arah ponsel Anda";
-"APBToygerFacade:再试一次"="Harap coba lagi";
-"APBToygerFacade:退出"="Keluar";
-"APBToygerFacade:本次操作失败"="Operasi gagal";
-"APBToygerFacade:刷脸失败次数过多,请稍后再试"="Pengenalan wajah terlalu sering dilakukan. Harap coba lagi nanti";
-"APBToygerFacade:我知道了"="OK";
-"APBToygerFacade:进行闪屏检测"="Deteksi layar splash akan dimulai";
-"APBToygerFacade:拍摄人像面"="Ambil foto samping dengan wajah Anda";
-"APBToygerFacade:拍摄要求"="Persyaratan Foto";
-"APBToygerFacade:证件人像面"="Belakang (Foto Wajah)";
-"APBToygerFacade:人像面"="Kembali";
-"APBToygerFacade:拍摄国徽面"="Ambil foto sisi dengan lambang negara";
-"APBToygerFacade:证件国徽面"="Depan (Foto Lambang Negara)";
-"APBToygerFacade:国徽面"="Depan";
-"APBToygerFacade:拍摄身份证人像面"="Ambil foto bagian belakang kartu identitas Anda";
-"APBToygerFacade:拍摄身份证国徽面"="Ambil foto bagian depan KTP Anda";
-"APBToygerFacade:扫描面部信息,与您的照片对比"="Informasi wajah dipindai dan dibandingkan dengan foto Anda";
-"APBToygerFacade:下一步"="Berikutnya";
-"APBToygerFacade:实人认证"="Verifikasi KTP";
-"APBToygerFacade:拍摄您本人人脸,请确保正对手机,光线充足"="Untuk mengambil foto wajah Anda, arahkan wajah lurus menghadap ponsel Anda";
-"APBToygerFacade:请将身份证置于框内拍摄"="Posisikan kartu identitas Anda di dalam bingkai";
-"APBToygerFacade:请确认信息,若有误请点击修改"="Konfirmasi informasi terkait. Jika terdapat kesalahan pada informasi, ketuk untuk mengubahnya";
-"APBToygerFacade:姓名"="Nama";
-"APBToygerFacade:身份证号"="Nomor KTP";
-"APBToygerFacade:识别失败"="Pengenalan gagal";
-"APBToygerFacade:证件图像未符合要求"="Foto sertifikat tidak memenuhi persyaratan";
-"APBToygerFacade:请按要求拍摄本人有效身份证"="Ambil foto KTP Anda dengan mengikuti persyaratan";
-"APBToygerFacade:重新拍摄"="Ulangi mengambil gambar";
-"APBToygerFacade:识别超时"="Waktu pengenalan habis";
-"APBToygerFacade:网络连接超时,请重新识别"="Waktu koneksi jaringan habis. Harap coba lagi";
-"APBToygerFacade:重新识别"="Kenali lagi";
-"APBToygerFacade:识别中..."="Mengenali";
-"APBToygerFacade:即将进入刷脸页..."="Memasuki halaman pengenalan wajah";
-"APBToygerFacade:拍张照就能通过"="Anda hanya perlu mengambil foto KTP Anda";
-"APBToygerFacade:识别失败次数过多"="Pengenalan gagal berulang kali";
-"APBToygerFacade:请退出后重试"="Harap keluar dan coba lagi";
-"APBToygerFacade:相机权限被禁止,请检查"="Akses ke kamera Anda tidak diperbolehkan. Periksa izin";
-"APBToygerFacade:温馨提示"="Catatan"; 
-
-"APBToygerFacade:继续"="Lanjutkan";
-"APBToygerFacade:其他登录方式"="Ubah Metode Logon";
-"APBToygerFacade:当前设备不支持刷脸"="Perangkat Anda tidak mendukung pengenalan wajah";
-"APBToygerFacade:无法启动相机"="Tidak Memiliki Izin Akses Kamera";
-"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="Buka Pengaturan > Privasi > Kamera dan izinkan akses";
-"APBToygerFacade:立即开启"="OK";
-"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="Hanya iOS 7 dan setelahnya yang mendukung pengenalan wajah";
-"APBToygerFacade:系统错误"="Terjadi Kesalahan Sistem";
-"APBToygerFacade:提示:正对手机,更容易成功"="Arahkan wajah lurus menghadap ponsel";
-"APBToygerFacade:登录中断"="Logon Terganggu";
-"APBToygerFacade:刷脸验证"="Verifikasi dengan Pengenalan Wajah";
-"APBToygerFacade:请把脸放入框内保持不动"="Posisikan wajah Anda di dalam bingkai dan jangan bergerak";
-"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
-"APBToygerFacade:选择其他验证方式"="Ubah Metode Verifikasi";
-"APBToygerFacade:拿起手机眨眨眼"="Harap kedipkan mata";
-"APBToygerFacade:拿起手机向左摇头"="Harap menoleh ke kiri";
-"APBToygerFacade:拿起手机向右摇头"="Harap menoleh ke kanan";
-"APBToygerFacade:首次使用,请开通刷脸"="Aktifkan pengenalan wajah untuk melanjutkan";
-"APBToygerFacade:立即开通"="Aktifkan";
-"APBToygerFacade:下次再说"="Lain Kali";
-"APBToygerFacade:请把手机正对面部"="Arahkan wajah lurus menghadap ponsel";
-"APBToygerFacade:即将开始人脸检测"="Memulai pengenalan wajah";
-"APBToygerFacade:没有认出你"="Pengenalan wajah gagal";
-"APBToygerFacade:未能识别人脸"="Tidak ada wajah terdeteksi";
-"APBToygerFacade:人脸检测中"="Pengenalan wajah dalam proses";

+ 0 - 101
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.bundle/ja.strings

@@ -1,101 +0,0 @@
-"APBToygerFacade:没有检测到脸"="顔が検出されません";
-"APBToygerFacade:靠近一点"="近づいてください";
-"APBToygerFacade:离远一点"="離れてください";
-"APBToygerFacade:把脸移入圈内"="顔を円の中に入れてください";
-"APBToygerFacade:请正对手机"="電話の方を向いてください";
-"APBToygerFacade:请正对手机"="電話の方を向いてください";
-"APBToygerFacade:再清晰一点"="顔をはっきりさせてください";
-"APBToygerFacade:脸部亮一点"="顔を明るくしてください";
-"APBToygerFacade:请露出正脸"="顔の正面を見せてください";
-"APBToygerFacade:请注视屏幕"="画面を見てください";
-"APBToygerFacade:眨眨眼"="まばたきしてください";
-"APBToygerFacade:请保持不动"="動かないでください";
-"APBToygerFacade:再清晰一点"="顔をはっきりさせてください";
-"APBToygerFacade:请正对屏幕"="画面の方を向いてください";
-"APBToygerFacade:拿起手机,眨眨眼"="電話を手に取ってまばたきしてください";
-"APBToygerFacade:正在处理"="処理中";
-"APBToygerFacade:确定"="OK";
-"APBToygerFacade:我知道了"="OK";
-"APBToygerFacade:退出"="終了";
-"APBToygerFacade:当前系统不支持刷脸"="顔認識をサポートしていないシステムです";
-"APBToygerFacade:刷脸仅在高版本及以上系统可用"="顔認識は上位バージョンでのみサポートされています";
-"APBToygerFacade:验证中断"="検証が中断されました";
-"APBToygerFacade:本次操作失败"="操作に失敗しました";
-"APBToygerFacade:刷脸失败"="顔を認識できませんでした";
-"APBToygerFacade:正对手机,更容易成功"="顔をスキャンしやすいように、電話の方を向いてください";
-"APBToygerFacade:操作超时"="操作がタイムアウトしました";
-"APBToygerFacade:提示:正对手机,更容易成功"="注:電話の方を向くと、スキャンが成功する可能性が高くなります";
-"APBToygerFacade:网络不给力"="ネットワークの状態が要件を満たしていません";
-"APBToygerFacade:请检查网络"="ネットワーク接続を確認してください";
-"APBToygerFacade:本次操作失败"="操作に失敗しました";
-"APBToygerFacade:抱歉,系统出错了,请再试一次"="エラーが発生しました。もう一度お試しください";
-"APBToygerFacade:确定退出吗?"="終了してもよろしいですか";
-"APBToygerFacade:露个脸就能通过"="顔を見せるだけです";
-"APBToygerFacade:确定"="OK";
-"APBToygerFacade:取消"="キャンセル";
-"APBToygerFacade:重试"="再試行";
-"APBToygerFacade:操作超时"="操作がタイムアウトしました";
-"APBToygerFacade:提示:正对手机,更容易成功"="注:電話の方を向くと、成功しやすくなります";
-"APBToygerFacade:再试一次"="もう一度お試しください";
-"APBToygerFacade:退出"="終了";
-"APBToygerFacade:本次操作失败"="操作に失敗しました";
-"APBToygerFacade:刷脸失败次数过多,请稍后再试"="顔認識が頻繁に実行されています。後でもう一度やり直してください";
-"APBToygerFacade:我知道了"="OK";
-"APBToygerFacade:进行闪屏检测"="スプラッシュ画面の検出を開始します";
-"APBToygerFacade:拍摄人像面"="横顔を撮影してください";
-"APBToygerFacade:拍摄要求"="写真の要件";
-"APBToygerFacade:证件人像面"="戻る (顔写真)";
-"APBToygerFacade:人像面"="戻る";
-"APBToygerFacade:拍摄国徽面"="国章側を撮影してください";
-"APBToygerFacade:证件国徽面"="表 (国章の写真)";
-"APBToygerFacade:国徽面"="表";
-"APBToygerFacade:拍摄身份证人像面"="ID カードの裏面を撮影してください";
-"APBToygerFacade:拍摄身份证国徽面"="ID カードの裏面を撮影してください";
-"APBToygerFacade:扫描面部信息,与您的照片对比"="顔情報がスキャンされ、写真と比較されました";
-"APBToygerFacade:下一步"="次へ";
-"APBToygerFacade:实人认证"="ID 検証";
-"APBToygerFacade:拍摄您本人人脸,请确保正对手机,光线充足"="顔写真を撮影する場合、明るい場所で電話の方を向いてください";
-"APBToygerFacade:请将身份证置于框内拍摄"="フレーム内で IDカードを動かします";
-"APBToygerFacade:请确认信息,若有误请点击修改"="情報を確認してください。情報が正しくない場合は、タップして情報を変更します";
-"APBToygerFacade:姓名"="名前";
-"APBToygerFacade:身份证号"="ID カード番号";
-"APBToygerFacade:识别失败"="認識できませんでした";
-"APBToygerFacade:证件图像未符合要求"="証明写真が要件を満たしていません";
-"APBToygerFacade:请按要求拍摄本人有效身份证"="以下の要件に従って、ID カードの写真を撮影してください";
-"APBToygerFacade:重新拍摄"="もう一度撮影";
-"APBToygerFacade:识别超时"="認識がタイムアウトしました";
-"APBToygerFacade:网络连接超时,请重新识别"="ネットワーク接続がタイムアウトしました。もう一度お試しください";
-"APBToygerFacade:重新识别"="もう一度認識してください";
-"APBToygerFacade:识别中..."="認識中";
-"APBToygerFacade:即将进入刷脸页..."="顔認識ページを開きます";
-"APBToygerFacade:拍张照就能通过"="ID カードの写真を撮るだけです";
-"APBToygerFacade:识别失败次数过多"="認識の失敗が頻繁に発生しました";
-"APBToygerFacade:请退出后重试"="終了してもう一度お試しください";
-"APBToygerFacade:相机权限被禁止,请检查"="カメラにアクセスできません。設定を確認してください";
-"APBToygerFacade:温馨提示"="注意";
-
-"APBToygerFacade:继续"="続行";
-"APBToygerFacade:其他登录方式"="ログイン方法を切り替え";
-"APBToygerFacade:当前设备不支持刷脸"="お使いのデバイスは顔認識をサポートしていません";
-"APBToygerFacade:无法启动相机"="カメラにアクセスできません";
-"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="[設定] > [プライバシー] > [カメラ] に移動し、アクセスを許可してください";
-"APBToygerFacade:立即开启"="OK";
-"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="顔認識は iOS 7 以降でサポートされています";
-"APBToygerFacade:系统错误"="システムエラー";
-"APBToygerFacade:提示:正对手机,更容易成功"="電話の方を向いてください";
-"APBToygerFacade:登录中断"="ログインが中断されました";
-"APBToygerFacade:刷脸验证"="顔認識による検証";
-"APBToygerFacade:请把脸放入框内保持不动"="フレームの内側に顔が入るようにして、動かないでください";
-"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
-"APBToygerFacade:选择其他验证方式"="検証方法を変更";
-"APBToygerFacade:拿起手机眨眨眼"="まばたきしてください";
-"APBToygerFacade:拿起手机向左摇头"="頭を左に";
-"APBToygerFacade:拿起手机向右摇头"="頭を右に";
-"APBToygerFacade:首次使用,请开通刷脸"="顔認識を有効化して続行します";
-"APBToygerFacade:立即开通"="有効化";
-"APBToygerFacade:下次再说"="後で";
-"APBToygerFacade:请把手机正对面部"="電話の方を向いてください";
-"APBToygerFacade:即将开始人脸检测"="顔認識を開始";
-"APBToygerFacade:没有认出你"="顔を認識できませんでした";
-"APBToygerFacade:未能识别人脸"="顔が検出されません";
-"APBToygerFacade:人脸检测中"="顔を認識中です";

+ 0 - 101
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.bundle/ko.strings

@@ -1,101 +0,0 @@
-"APBToygerFacade:没有检测到脸"="감지된 얼굴이 없습니다";
-"APBToygerFacade:靠近一点"="더 가까이 움직이세요";
-"APBToygerFacade:离远一点"="더 멀리 움직이세요";
-"APBToygerFacade:把脸移入圈内"="얼굴이 원 안에 들어오도록 움직이세요";
-"APBToygerFacade:请正对手机"="휴대전화를 정면으로 바라보세요";
-"APBToygerFacade:请正对手机"="휴대전화를 정면으로 바라보세요";
-"APBToygerFacade:再清晰一点"="얼굴을 좀더 선명하게 만드세요";
-"APBToygerFacade:脸部亮一点"="얼굴을 밝게 만드세요";
-"APBToygerFacade:请露出正脸"="얼굴의 정면을 보여주세요";
-"APBToygerFacade:请注视屏幕"="화면을 바라보세요";
-"APBToygerFacade:眨眨眼"="눈을 깜빡이세요";
-"APBToygerFacade:请保持不动"="가만히 계십시오";
-"APBToygerFacade:再清晰一点"="얼굴을 좀더 선명하게 만드세요";
-"APBToygerFacade:请正对屏幕"="화면을 정면으로 바라보세요";
-"APBToygerFacade:拿起手机,眨眨眼"="휴대전화를 집어 들고 눈을 깜빡이세요";
-"APBToygerFacade:正在处理"="처리 중";
-"APBToygerFacade:确定"="확인";
-"APBToygerFacade:我知道了"="확인";
-"APBToygerFacade:退出"="종료";
-"APBToygerFacade:当前系统不支持刷脸"="현재 시스템은 안면 인식을 지원하지 않습니다";
-"APBToygerFacade:刷脸仅在高版本及以上系统可用"="상위 버전의 시스템만 안면 인식을 지원합니다";
-"APBToygerFacade:验证中断"="확인이 중단되었습니다";
-"APBToygerFacade:本次操作失败"="작동에 실패했습니다";
-"APBToygerFacade:刷脸失败"="안면 인식에 실패했습니다";
-"APBToygerFacade:正对手机,更容易成功"="얼굴을 더 쉽게 스캔할 수 있도록 휴대전화를 정면으로 바라보세요";
-"APBToygerFacade:操作超时"="작업 시간이 초과되었습니다";
-"APBToygerFacade:提示:正对手机,更容易成功"="참고: 휴대전화를 똑바로 바라보면 스캔에 성공할 가능성이 높습니다";
-"APBToygerFacade:网络不给力"="네트워크 상태가 요구 사항을 충족하지 않습니다";
-"APBToygerFacade:请检查网络"="네트워크 연결을 확인하세요";
-"APBToygerFacade:本次操作失败"="작동에 실패했습니다";
-"APBToygerFacade:抱歉,系统出错了,请再试一次"="시스템 오류가 발생했습니다. 다시 시도하세요";
-"APBToygerFacade:确定退出吗?"="정말로 종료하시겠습니까?";
-"APBToygerFacade:露个脸就能通过"="얼굴만 보여주시면 됩니다";
-"APBToygerFacade:确定"="확인";
-"APBToygerFacade:取消"="취소";
-"APBToygerFacade:重试"="다시 시도";
-"APBToygerFacade:操作超时"="작업 시간이 초과되었습니다";
-"APBToygerFacade:提示:正对手机,更容易成功"="참고: 휴대전화를 똑바로 바라보면 성공할 가능성이 높습니다";
-"APBToygerFacade:再试一次"="다시 시도하세요";
-"APBToygerFacade:退出"="종료";
-"APBToygerFacade:本次操作失败"="작동에 실패했습니다";
-"APBToygerFacade:刷脸失败次数过多,请稍后再试"="안면 인식이 연속으로 실행되었습니다. 나중에 다시 시도하세요";
-"APBToygerFacade:我知道了"="확인";
-"APBToygerFacade:进行闪屏检测"="스플래시 화면 감지가 시작됩니다";
-"APBToygerFacade:拍摄人像面"="얼굴의 측면 사진을 찍어주세요";
-"APBToygerFacade:拍摄要求"="사진 요구사항";
-"APBToygerFacade:证件人像面"="뒷면(얼굴 사진)";
-"APBToygerFacade:人像面"="뒷면";
-"APBToygerFacade:拍摄国徽面"="국장(national emblem)의 측면 사진을 찍어주세요";
-"APBToygerFacade:证件国徽面"="앞면(국장 사진)";
-"APBToygerFacade:国徽面"="앞면";
-"APBToygerFacade:拍摄身份证人像面"="신분증 뒷면의 사진을 찍어주세요";
-"APBToygerFacade:拍摄身份证国徽面"="신분증 앞면의 사진을 찍어주세요";
-"APBToygerFacade:扫描面部信息,与您的照片对比"="얼굴 정보를 스캔하여 사진과 비교합니다";
-"APBToygerFacade:下一步"="다음";
-"APBToygerFacade:实人认证"="신분증 확인";
-"APBToygerFacade:拍摄您本人人脸,请确保正对手机,光线充足"="얼굴 사진을 찍기 위해서는 충분한 빛이 있는 환경에서 휴대전화를 정면으로 바라보세요";
-"APBToygerFacade:请将身份证置于框内拍摄"="신분증을 프레임 안으로 움직이세요";
-"APBToygerFacade:请确认信息,若有误请点击修改"="정보를 확인하세요. 정보가 올바르지 않으면 탭하여 정보를 수정합니다";
-"APBToygerFacade:姓名"="이름";
-"APBToygerFacade:身份证号"="신분증 번호";
-"APBToygerFacade:识别失败"="인식에 실패했습니다";
-"APBToygerFacade:证件图像未符合要求"="인증 사진이 요구 사항을 충족하지 않습니다";
-"APBToygerFacade:请按要求拍摄本人有效身份证"="요구사항에 맞게 신분증의 사진을 찍으세요";
-"APBToygerFacade:重新拍摄"="다시 촬영";
-"APBToygerFacade:识别超时"="인식 시간이 초과되었습니다";
-"APBToygerFacade:网络连接超时,请重新识别"="네트워크 연결 시간이 초과되었습니다. 다시 시도하세요";
-"APBToygerFacade:重新识别"="다시 인식";
-"APBToygerFacade:识别中..."="인식 중";
-"APBToygerFacade:即将进入刷脸页..."="안면 인식 페이지로 들어가기";
-"APBToygerFacade:拍张照就能通过"="신분증만 촬영하면 됩니다";
-"APBToygerFacade:识别失败次数过多"="인식이 연속으로 실패했습니다";
-"APBToygerFacade:请退出后重试"="종료한 후 다시 시도하세요";
-"APBToygerFacade:相机权限被禁止,请检查"="카메라 접근이 금지되어 있습니다. 권한을 확인하세요";
-"APBToygerFacade:温馨提示"="참고"; 
-
-"APBToygerFacade:继续"="계속";
-"APBToygerFacade:其他登录方式"="로그온 방법 전환";
-"APBToygerFacade:当前设备不支持刷脸"="귀하의 디바이스는 안면 인식을 지원하지 않습니다";
-"APBToygerFacade:无法启动相机"="카메라 권한이 없습니다";
-"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="설정 > 개인 > 카메라에서 접근 권한을 부여하십시오";
-"APBToygerFacade:立即开启"="OK";
-"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="iOS 7 및 그 이상의 버전에서만 안면 인식이 지원됩니다";
-"APBToygerFacade:系统错误"="시스템 오류";
-"APBToygerFacade:提示:正对手机,更容易成功"="휴대전화를 정면으로 바라보세요";
-"APBToygerFacade:登录中断"="로그온이 중단되었습니다";
-"APBToygerFacade:刷脸验证"="안면 인식을 통한 인증";
-"APBToygerFacade:请把脸放入框内保持不动"="얼굴이 프레임 안으로 들어오도록 위치한 다음 움직이지 말고 가만히 계십시오";
-"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
-"APBToygerFacade:选择其他验证方式"="인증 방법을 변경합니다";
-"APBToygerFacade:拿起手机眨眨眼"="눈을 깜빡이세요";
-"APBToygerFacade:拿起手机向左摇头"="좌측으로 고개를 돌립니다";
-"APBToygerFacade:拿起手机向右摇头"="우측으로 고개를 돌립니다";
-"APBToygerFacade:首次使用,请开通刷脸"="안면 인식을 활성화하여 계속 진행합니다";
-"APBToygerFacade:立即开通"="활성화하기";
-"APBToygerFacade:下次再说"="나중에 하기";
-"APBToygerFacade:请把手机正对面部"="휴대전화를 정면으로 바라보세요";
-"APBToygerFacade:即将开始人脸检测"="안면 인식 시작";
-"APBToygerFacade:没有认出你"="안면 인식에 실패했습니다";
-"APBToygerFacade:未能识别人脸"="감지된 얼굴이 없습니다";
-"APBToygerFacade:人脸检测中"="얼굴 인식 중";

+ 0 - 64
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.bundle/zh-HK.strings

@@ -1,64 +0,0 @@
-/* 
-  zh-HK.strings
-  APBToygerFacade
-
-  Created by shouyi.www on 2017/6/1.
-  Copyright © 2017年 Alipay. All rights reserved.
-*/
-"APBToygerFacade:取消"="取消";
-"APBToygerFacade:再试一次"="再試一次";
-"APBToygerFacade:退出"="退出";
-"APBToygerFacade:确定"="確定";
-"APBToygerFacade:继续"="继续";
-"APBToygerFacade:我知道了"="我知道了";
-"APBToygerFacade:其他登录方式"="其他登录方式";
-"APBToygerFacade:刷脸失败"="刷臉失敗";
-"APBToygerFacade:当前设备不支持刷脸"="目前系統不支援刷臉";
-"APBToygerFacade:当前系统不支持刷脸"="目前設備不支援刷臉";
-"APBToygerFacade:无法启动相机"="無法啟動相機";
-"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="請到“設置-隱私-相機”開啓權限";
-"APBToygerFacade:立即开启"="開通權限";
-"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="刷脸仅在iOS7及以上系统可用";
-"APBToygerFacade:系统错误"="系統錯誤";
-"APBToygerFacade:确定退出吗?"="確定退出嗎?";
-"APBToygerFacade:露个脸就能通过"="露個臉就能通過";
-"APBToygerFacade:操作超时"="操作超時";
-"APBToygerFacade:正对手机,更容易成功"="對準手機,更容易成功";
-"APBToygerFacade:提示:正对手机,更容易成功"="對準手機,更容易成功";
-"APBToygerFacade:本次操作失败"="本次操作失敗";
-"APBToygerFacade:网络不给力"="網絡異常,請稍後再試";
-"APBToygerFacade:登录中断"="登入中斷";
-"APBToygerFacade:验证中断"="驗證中斷";
-
-"APBToygerFacade:刷脸验证"="刷臉驗證";
-"APBToygerFacade:请把脸放入框内保持不动"="請把臉移入圈內保持不動";
-"APBToygerFacade:靠近一点"="靠近一點";
-"APBToygerFacade:没有检测到脸"="沒有檢測到臉";
-"APBToygerFacade:再清晰一点"="再清晰一點";
-"APBToygerFacade:脸部亮一点"="光線再亮點";
-"APBToygerFacade:请正对手机"="請正視手機";
-"APBToygerFacade:请露出正脸"="請露出正臉";
-"APBToygerFacade:把脸移入圈内"="把臉移入框內";
-"APBToygerFacade:离远一点"="離遠一點";
-"APBToygerFacade:请保持不动"="請保持不動";
-"APBToygerFacade:请注视屏幕"="請注視屏幕";
-"APBToygerFacade:眨眨眼"="眨眨眼";
-"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
-
-"APBToygerFacade:选择其他验证方式"="選擇其他驗證方式";
-"APBToygerFacade:拿起手机眨眨眼"="拿起手機,眨眨眼";
-"APBToygerFacade:拿起手机向左摇头"="拿著手機,向左搖頭";
-"APBToygerFacade:拿起手机向右摇头"="拿著手機,向右搖頭";
-
-"APBToygerFacade:正在处理"="正在處理";
-"APBToygerFacade:首次使用,请开通刷脸"="首次使用,請開通刷臉";
-"APBToygerFacade:立即开通"="立即開通";
-"APBToygerFacade:下次再说"="下次再說";
-
-"APBToygerFacade:请把手机正对面部"="請把手機正對面部";
-"APBToygerFacade:即将开始人脸检测"="即將開始人臉檢測";
-
-"APBToygerFacade:没有认出你"="沒有認出你";
-"APBToygerFacade:未能识别人脸"="未能識別人臉";
-"APBToygerFacade:人脸检测中"="人臉檢測中";
-"APBToygerFacade:刷脸失败次数过多,请稍后再试"="刷臉失敗次數過多,請稍後再試";

+ 0 - 66
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.bundle/zh-Hans.strings

@@ -1,66 +0,0 @@
-/* 
-  zh-Hans.strings
-  APBToygerFacade
-
-  Created by shouyi.www on 2017/6/1.
-  Copyright © 2017年 Alipay. All rights reserved.
-*/
-
-
-"APBToygerFacade:取消"="取消";
-"APBToygerFacade:再试一次"="再试一次";
-"APBToygerFacade:退出"="退出";
-"APBToygerFacade:确定"="确定";
-"APBToygerFacade:继续"="继续";
-"APBToygerFacade:我知道了"="我知道了";
-"APBToygerFacade:其他登录方式"="其他登录方式";
-"APBToygerFacade:刷脸失败"="刷脸失败";
-"APBToygerFacade:当前设备不支持刷脸"="当前设备不支持刷脸";
-"APBToygerFacade:当前系统不支持刷脸"="当前系统不支持刷脸";
-"APBToygerFacade:无法启动相机"="无法启动相机";
-"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="请到“设置-隐私-相机”开启权限";
-"APBToygerFacade:立即开启"="立即开启";
-"APBToygerFacade:刷脸仅在iOS8及以上版本可用"="刷脸仅在iOS8及以上版本可用";
-"APBToygerFacade:系统错误"="系统错误";
-"APBToygerFacade:确定退出吗?"="确定退出吗?";
-"APBToygerFacade:露个脸就能通过"="露个脸就能通过";
-"APBToygerFacade:操作超时"="操作超时";
-"APBToygerFacade:正对手机,更容易成功"="正对手机,更容易成功";
-"APBToygerFacade:本次操作失败"="本次操作失败";
-"APBToygerFacade:网络不给力"="网络不给力";
-"APBToygerFacade:登录中断"="登录中断";
-"APBToygerFacade:验证中断"="验证中断";
-
-
-"APBToygerFacade:刷脸验证"="刷脸验证";
-"APBToygerFacade:请把脸放入框内保持不动"="请把脸移入圈内保持不动";
-"APBToygerFacade:靠近一点"="靠近一点";
-"APBToygerFacade:没有检测到脸"="没有检测到脸";
-"APBToygerFacade:再清晰一点"="再清晰一点";
-"APBToygerFacade:脸部亮一点"="脸部亮一点";
-"APBToygerFacade:请正对手机"="请正对手机";
-"APBToygerFacade:请露出正脸"="请露出正脸";
-"APBToygerFacade:把脸移入圈内"="把脸移入圈内";
-"APBToygerFacade:离远一点"="离远一点";
-"APBToygerFacade:请保持不动"="请保持不动";
-"APBToygerFacade:请注视屏幕"="请注视屏幕";
-"APBToygerFacade:眨眨眼"="眨眨眼";
-"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
-
-"APBToygerFacade:选择其他验证方式"="选择其他验证方式";
-"APBToygerFacade:拿起手机眨眨眼"="拿起手机,眨眨眼";
-"APBToygerFacade:拿起手机向左摇头"="拿起手机,向左摇头";
-"APBToygerFacade:拿起手机向右摇头"="拿起手机,向右摇头";
-
-"APBToygerFacade:正在处理"="正在处理";
-"APBToygerFacade:首次使用,请开通刷脸"="首次使用,请开通刷脸";
-"APBToygerFacade:立即开通"="立即开通";
-"APBToygerFacade:下次再说"="下次再说";
-
-"APBToygerFacade:请把手机正对面部"="请把手机正对面部";
-"APBToygerFacade:即将开始人脸检测"="即将开始人脸检测";
-
-"APBToygerFacade:没有认出你"="没有认出你";
-"APBToygerFacade:未能识别人脸"="未能识别人脸";
-"APBToygerFacade:人脸检测中"="人脸检测中";
-"APBToygerFacade:刷脸失败次数过多,请稍后再试"="刷脸失败次数过多,请稍后再试";

+ 0 - 66
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.bundle/zh-Hant.strings

@@ -1,66 +0,0 @@
-/* 
-  zh-Hant.strings
-  APBToygerFacade
-
-  Created by shouyi.www on 2017/6/1.
-  Copyright © 2017年 Alipay. All rights reserved.
-*/
-
-
-"APBToygerFacade:取消"="取消";
-"APBToygerFacade:再试一次"="再試一次";
-"APBToygerFacade:退出"="退出";
-"APBToygerFacade:确定"="確定";
-"APBToygerFacade:继续"="繼續";
-"APBToygerFacade:我知道了"="我知道了";
-"APBToygerFacade:其他登录方式"="其他登入方式";
-"APBToygerFacade:刷脸失败"="刷臉失敗";
-"APBToygerFacade:当前设备不支持刷脸"="目前設備不支援刷臉服務";
-"APBToygerFacade:当前系统不支持刷脸"="当前系统不支持刷脸";
-"APBToygerFacade:无法启动相机"="無法啟動相機";
-"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="請到“設置-隱私-相機”開啓權限";
-"APBToygerFacade:立即开启"="開通權限";
-"APBToygerFacade:刷脸仅在iOS8及以上系统可用"="刷脸仅在iOS8及以上系统可用";
-"APBToygerFacade:系统错误"="系統錯誤";
-"APBToygerFacade:确定退出吗?"="確定退出嗎?";
-"APBToygerFacade:露个脸就能通过"="露個臉就能通過";
-"APBToygerFacade:操作超时"="操作超時";
-"APBToygerFacade:正对手机,更容易成功"="對準手機,更容易成功";
-"APBToygerFacade:提示:正对手机,更容易成功"="對準手機,更容易成功";
-"APBToygerFacade:本次操作失败"="本次操作失敗";
-"APBToygerFacade:网络不给力"="網絡異常,請稍後再試";
-"APBToygerFacade:登录中断"="登入中斷";
-"APBToygerFacade:验证中断"="驗證中斷";
-
-"APBToygerFacade:刷脸验证"="刷臉驗證";
-"APBToygerFacade:请把脸放入框内保持不动"="請把臉移入圈內保持不動";
-"APBToygerFacade:靠近一点"="靠近一點";
-"APBToygerFacade:没有检测到脸"="沒有檢測到臉";
-"APBToygerFacade:再清晰一点"="再清晰一點";
-"APBToygerFacade:脸部亮一点"="光線再亮點";
-"APBToygerFacade:请正对手机"="請正視手機";
-"APBToygerFacade:请露出正脸"="請露出正臉";
-"APBToygerFacade:把脸移入圈内"="把臉移入框內";
-"APBToygerFacade:离远一点"="離遠一點";
-"APBToygerFacade:请保持不动"="請保持不動";
-"APBToygerFacade:请注视屏幕"="請注視屏幕";
-"APBToygerFacade:眨眨眼"="眨眨眼";
-"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
-"APBToygerFacade:选择其他验证方式"="選擇其他驗證方式";
-
-"APBToygerFacade:拿起手机眨眨眼"="拿起手機,眨眨眼";
-"APBToygerFacade:拿起手机向左摇头"="拿起手機,向左搖頭";
-"APBToygerFacade:拿起手机向右摇头"="拿起手機,向右搖頭";
-
-"APBToygerFacade:正在处理"="正在處理";
-"APBToygerFacade:首次使用,请开通刷脸"="首次使用,請開通刷臉";
-"APBToygerFacade:立即开通"="立即開通";
-"APBToygerFacade:下次再说"="下次再說";
-
-"APBToygerFacade:请把手机正对面部"="請把手機正對面部";
-"APBToygerFacade:即将开始人脸检测"="即將開始人臉檢測";
-
-"APBToygerFacade:没有认出你"="沒有認出你";
-"APBToygerFacade:未能识别人脸"="未能識別人臉";
-"APBToygerFacade:人脸检测中"="人臉檢測中";
-"APBToygerFacade:刷脸失败次数过多,请稍后再试"="刷臉失敗次數過多,請稍後再試";

BIN
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/.DS_Store


BIN
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/APBToygerFacade


+ 0 - 66
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/APBToygerFacade.bundle/en.strings

@@ -1,66 +0,0 @@
-/* 
-  en.strings
-  APBToygerFacade
-
-  Created by shouyi.www on 2017/6/1.
-  Copyright © 2017年 Alipay. All rights reserved.
-*/
-
-"APBToygerFacade:取消"="Cancel";
-"APBToygerFacade:再试一次"="Try Again";
-"APBToygerFacade:退出"="Quit";
-"APBToygerFacade:确定"="OK";
-"APBToygerFacade:继续"="Continue";
-"APBToygerFacade:我知道了"="Got it";
-"APBToygerFacade:其他登录方式"="Another login method";
-"APBToygerFacade:刷脸失败"="Face scan failed";
-"APBToygerFacade:当前设备不支持刷脸"="Face scan not supported on your device";
-"APBToygerFacade:当前系统不支持刷脸"="Face scan not supported on your device system";
-"APBToygerFacade:无法启动相机"="No camera permission";
-"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="Please allow to access your camera in \"Settings\"-\"Privacy\"-\"Camera\"";
-"APBToygerFacade:立即开启"="OK";
-"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="Face scan is only available on iOS8 or above";
-"APBToygerFacade:系统错误"="System error";
-"APBToygerFacade:确定退出吗?"="Are you sure to quit face scan?";
-"APBToygerFacade:露个脸就能通过"="You can succeed by simply showing your face";
-"APBToygerFacade:操作超时"="Time out";
-"APBToygerFacade:正对手机,更容易成功"="Face straight at the phone and ensure you have enough light";
-"APBToygerFacade:提示:正对手机,更容易成功"="Face straight at the phone and ensure you have enough light";
-"APBToygerFacade:本次操作失败"="Sorry, face scan failed";
-"APBToygerFacade:网络不给力"="Network connection failed";
-"APBToygerFacade:登录中断"="Login interrupted";
-"APBToygerFacade:验证中断"="Face scan interrupted";
-
-
-"APBToygerFacade:刷脸验证"="Face Scan";
-"APBToygerFacade:请把脸放入框内保持不动"="Put your face into the frame";
-"APBToygerFacade:靠近一点"="Move closer";
-"APBToygerFacade:没有检测到脸"="No face";
-"APBToygerFacade:再清晰一点"="Face not clear";
-"APBToygerFacade:脸部亮一点"="More light";
-"APBToygerFacade:请正对手机"="No face";
-"APBToygerFacade:把脸移入圈内"="No face";
-"APBToygerFacade:离远一点"="Move farther";
-"APBToygerFacade:请保持不动"="Stay still";
-"APBToygerFacade:请注视屏幕"="Open your eyes";
-"APBToygerFacade:眨眨眼"="Blink";
-"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
-
-"APBToygerFacade:选择其他验证方式"="Use a different verification method";
-"APBToygerFacade:拿起手机眨眨眼"="Blink";
-"APBToygerFacade:拿起手机向左摇头"="Turn Head Left";
-"APBToygerFacade:拿起手机向右摇头"="Turn Head Right";
-
-
-"APBToygerFacade:正在处理"="Processing";
-"APBToygerFacade:首次使用,请开通刷脸"="For the first time use, please enable Face Scan";
-"APBToygerFacade:立即开通"="Enable";
-"APBToygerFacade:下次再说"="Later";
-
-"APBToygerFacade:请把手机正对面部"="Face straight at the phone";
-"APBToygerFacade:即将开始人脸检测"="Get ready for face recognition";
-
-"APBToygerFacade:没有认出你"="Face scan failed";
-"APBToygerFacade:未能识别人脸"="Face not detected";
-"APBToygerFacade:人脸检测中"="Face Scan";
-"APBToygerFacade:刷脸失败次数过多,请稍后再试"="Too many failed attempts, please try again later";

+ 0 - 101
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/APBToygerFacade.bundle/id.strings

@@ -1,101 +0,0 @@
-"APBToygerFacade:没有检测到脸"="Tidak ada wajah terdeteksi";
-"APBToygerFacade:靠近一点"="Harap dekatkan wajah";
-"APBToygerFacade:离远一点"="Harap jauhkan wajah";
-"APBToygerFacade:把脸移入圈内"="Posisikan wajah pada lingkaran";
-"APBToygerFacade:请正对手机"="Arahkan wajah lurus menghadap ponsel";
-"APBToygerFacade:请正对手机"="Arahkan wajah lurus menghadap ponsel";
-"APBToygerFacade:再清晰一点"="Perjelas wajah Anda";
-"APBToygerFacade:脸部亮一点"="Terangi wajah Anda";
-"APBToygerFacade:请露出正脸"="Tunjukkan bagian depan wajah Anda";
-"APBToygerFacade:请注视屏幕"="Lihat layar";
-"APBToygerFacade:眨眨眼"="Harap kedipkan mata";
-"APBToygerFacade:请保持不动"="Tetap tenang";
-"APBToygerFacade:再清晰一点"="Perjelas wajah Anda";
-"APBToygerFacade:请正对屏幕"="Arahkan wajah lurus menghadap layar";
-"APBToygerFacade:拿起手机,眨眨眼"="Angkat ponsel Anda dan kedipkan mata";
-"APBToygerFacade:正在处理"="Memproses";
-"APBToygerFacade:确定"="OK";
-"APBToygerFacade:我知道了"="OK";
-"APBToygerFacade:退出"="Keluar";
-"APBToygerFacade:当前系统不支持刷脸"="Sistem saat ini tidak mendukung pengenalan wajah";
-"APBToygerFacade:刷脸仅在高版本及以上系统可用"="Pengenalan wajah hanya dapat dilakukan pada sistem dengan versi yang lebih tinggi";
-"APBToygerFacade:验证中断"="Verifikasi terputus";
-"APBToygerFacade:本次操作失败"="Operasi gagal";
-"APBToygerFacade:刷脸失败"="Pengenalan wajah gagal";
-"APBToygerFacade:正对手机,更容易成功"="Arahkan wajah lurus menghadap ponsel untuk membuat wajah Anda lebih mudah dipindai";
-"APBToygerFacade:操作超时"="Waktu operasi habis";
-"APBToygerFacade:提示:正对手机,更容易成功"="Catatan: Pemindaian lebih mungkin berhasil jika Anda mengarahkan wajah lurus menghadap ponsel Anda";
-"APBToygerFacade:网络不给力"="Kondisi jaringan tidak memenuhi persyaratan";
-"APBToygerFacade:请检查网络"="Periksa konektivitas jaringan";
-"APBToygerFacade:本次操作失败"="Operasi gagal";
-"APBToygerFacade:抱歉,系统出错了,请再试一次"="Terjadi kesalahan sistem. Coba lagi";
-"APBToygerFacade:确定退出吗?"="Apakah Anda yakin ingin keluar?";
-"APBToygerFacade:露个脸就能通过"="Anda hanya perlu memperlihatkan wajah Anda";
-"APBToygerFacade:确定"="OK";
-"APBToygerFacade:取消"="Batalkan";
-"APBToygerFacade:重试"="Coba lagi";
-"APBToygerFacade:操作超时"="Waktu operasi habis";
-"APBToygerFacade:提示:正对手机,更容易成功"="Catatan: Pemindaian lebih mungkin berhasil jika Anda menghadap lurus ke arah ponsel Anda";
-"APBToygerFacade:再试一次"="Harap coba lagi";
-"APBToygerFacade:退出"="Keluar";
-"APBToygerFacade:本次操作失败"="Operasi gagal";
-"APBToygerFacade:刷脸失败次数过多,请稍后再试"="Pengenalan wajah terlalu sering dilakukan. Harap coba lagi nanti";
-"APBToygerFacade:我知道了"="OK";
-"APBToygerFacade:进行闪屏检测"="Deteksi layar splash akan dimulai";
-"APBToygerFacade:拍摄人像面"="Ambil foto samping dengan wajah Anda";
-"APBToygerFacade:拍摄要求"="Persyaratan Foto";
-"APBToygerFacade:证件人像面"="Belakang (Foto Wajah)";
-"APBToygerFacade:人像面"="Kembali";
-"APBToygerFacade:拍摄国徽面"="Ambil foto sisi dengan lambang negara";
-"APBToygerFacade:证件国徽面"="Depan (Foto Lambang Negara)";
-"APBToygerFacade:国徽面"="Depan";
-"APBToygerFacade:拍摄身份证人像面"="Ambil foto bagian belakang kartu identitas Anda";
-"APBToygerFacade:拍摄身份证国徽面"="Ambil foto bagian depan KTP Anda";
-"APBToygerFacade:扫描面部信息,与您的照片对比"="Informasi wajah dipindai dan dibandingkan dengan foto Anda";
-"APBToygerFacade:下一步"="Berikutnya";
-"APBToygerFacade:实人认证"="Verifikasi KTP";
-"APBToygerFacade:拍摄您本人人脸,请确保正对手机,光线充足"="Untuk mengambil foto wajah Anda, arahkan wajah lurus menghadap ponsel Anda";
-"APBToygerFacade:请将身份证置于框内拍摄"="Posisikan kartu identitas Anda di dalam bingkai";
-"APBToygerFacade:请确认信息,若有误请点击修改"="Konfirmasi informasi terkait. Jika terdapat kesalahan pada informasi, ketuk untuk mengubahnya";
-"APBToygerFacade:姓名"="Nama";
-"APBToygerFacade:身份证号"="Nomor KTP";
-"APBToygerFacade:识别失败"="Pengenalan gagal";
-"APBToygerFacade:证件图像未符合要求"="Foto sertifikat tidak memenuhi persyaratan";
-"APBToygerFacade:请按要求拍摄本人有效身份证"="Ambil foto KTP Anda dengan mengikuti persyaratan";
-"APBToygerFacade:重新拍摄"="Ulangi mengambil gambar";
-"APBToygerFacade:识别超时"="Waktu pengenalan habis";
-"APBToygerFacade:网络连接超时,请重新识别"="Waktu koneksi jaringan habis. Harap coba lagi";
-"APBToygerFacade:重新识别"="Kenali lagi";
-"APBToygerFacade:识别中..."="Mengenali";
-"APBToygerFacade:即将进入刷脸页..."="Memasuki halaman pengenalan wajah";
-"APBToygerFacade:拍张照就能通过"="Anda hanya perlu mengambil foto KTP Anda";
-"APBToygerFacade:识别失败次数过多"="Pengenalan gagal berulang kali";
-"APBToygerFacade:请退出后重试"="Harap keluar dan coba lagi";
-"APBToygerFacade:相机权限被禁止,请检查"="Akses ke kamera Anda tidak diperbolehkan. Periksa izin";
-"APBToygerFacade:温馨提示"="Catatan"; 
-
-"APBToygerFacade:继续"="Lanjutkan";
-"APBToygerFacade:其他登录方式"="Ubah Metode Logon";
-"APBToygerFacade:当前设备不支持刷脸"="Perangkat Anda tidak mendukung pengenalan wajah";
-"APBToygerFacade:无法启动相机"="Tidak Memiliki Izin Akses Kamera";
-"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="Buka Pengaturan > Privasi > Kamera dan izinkan akses";
-"APBToygerFacade:立即开启"="OK";
-"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="Hanya iOS 7 dan setelahnya yang mendukung pengenalan wajah";
-"APBToygerFacade:系统错误"="Terjadi Kesalahan Sistem";
-"APBToygerFacade:提示:正对手机,更容易成功"="Arahkan wajah lurus menghadap ponsel";
-"APBToygerFacade:登录中断"="Logon Terganggu";
-"APBToygerFacade:刷脸验证"="Verifikasi dengan Pengenalan Wajah";
-"APBToygerFacade:请把脸放入框内保持不动"="Posisikan wajah Anda di dalam bingkai dan jangan bergerak";
-"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
-"APBToygerFacade:选择其他验证方式"="Ubah Metode Verifikasi";
-"APBToygerFacade:拿起手机眨眨眼"="Harap kedipkan mata";
-"APBToygerFacade:拿起手机向左摇头"="Harap menoleh ke kiri";
-"APBToygerFacade:拿起手机向右摇头"="Harap menoleh ke kanan";
-"APBToygerFacade:首次使用,请开通刷脸"="Aktifkan pengenalan wajah untuk melanjutkan";
-"APBToygerFacade:立即开通"="Aktifkan";
-"APBToygerFacade:下次再说"="Lain Kali";
-"APBToygerFacade:请把手机正对面部"="Arahkan wajah lurus menghadap ponsel";
-"APBToygerFacade:即将开始人脸检测"="Memulai pengenalan wajah";
-"APBToygerFacade:没有认出你"="Pengenalan wajah gagal";
-"APBToygerFacade:未能识别人脸"="Tidak ada wajah terdeteksi";
-"APBToygerFacade:人脸检测中"="Pengenalan wajah dalam proses";

+ 0 - 101
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/APBToygerFacade.bundle/ja.strings

@@ -1,101 +0,0 @@
-"APBToygerFacade:没有检测到脸"="顔が検出されません";
-"APBToygerFacade:靠近一点"="近づいてください";
-"APBToygerFacade:离远一点"="離れてください";
-"APBToygerFacade:把脸移入圈内"="顔を円の中に入れてください";
-"APBToygerFacade:请正对手机"="電話の方を向いてください";
-"APBToygerFacade:请正对手机"="電話の方を向いてください";
-"APBToygerFacade:再清晰一点"="顔をはっきりさせてください";
-"APBToygerFacade:脸部亮一点"="顔を明るくしてください";
-"APBToygerFacade:请露出正脸"="顔の正面を見せてください";
-"APBToygerFacade:请注视屏幕"="画面を見てください";
-"APBToygerFacade:眨眨眼"="まばたきしてください";
-"APBToygerFacade:请保持不动"="動かないでください";
-"APBToygerFacade:再清晰一点"="顔をはっきりさせてください";
-"APBToygerFacade:请正对屏幕"="画面の方を向いてください";
-"APBToygerFacade:拿起手机,眨眨眼"="電話を手に取ってまばたきしてください";
-"APBToygerFacade:正在处理"="処理中";
-"APBToygerFacade:确定"="OK";
-"APBToygerFacade:我知道了"="OK";
-"APBToygerFacade:退出"="終了";
-"APBToygerFacade:当前系统不支持刷脸"="顔認識をサポートしていないシステムです";
-"APBToygerFacade:刷脸仅在高版本及以上系统可用"="顔認識は上位バージョンでのみサポートされています";
-"APBToygerFacade:验证中断"="検証が中断されました";
-"APBToygerFacade:本次操作失败"="操作に失敗しました";
-"APBToygerFacade:刷脸失败"="顔を認識できませんでした";
-"APBToygerFacade:正对手机,更容易成功"="顔をスキャンしやすいように、電話の方を向いてください";
-"APBToygerFacade:操作超时"="操作がタイムアウトしました";
-"APBToygerFacade:提示:正对手机,更容易成功"="注:電話の方を向くと、スキャンが成功する可能性が高くなります";
-"APBToygerFacade:网络不给力"="ネットワークの状態が要件を満たしていません";
-"APBToygerFacade:请检查网络"="ネットワーク接続を確認してください";
-"APBToygerFacade:本次操作失败"="操作に失敗しました";
-"APBToygerFacade:抱歉,系统出错了,请再试一次"="エラーが発生しました。もう一度お試しください";
-"APBToygerFacade:确定退出吗?"="終了してもよろしいですか";
-"APBToygerFacade:露个脸就能通过"="顔を見せるだけです";
-"APBToygerFacade:确定"="OK";
-"APBToygerFacade:取消"="キャンセル";
-"APBToygerFacade:重试"="再試行";
-"APBToygerFacade:操作超时"="操作がタイムアウトしました";
-"APBToygerFacade:提示:正对手机,更容易成功"="注:電話の方を向くと、成功しやすくなります";
-"APBToygerFacade:再试一次"="もう一度お試しください";
-"APBToygerFacade:退出"="終了";
-"APBToygerFacade:本次操作失败"="操作に失敗しました";
-"APBToygerFacade:刷脸失败次数过多,请稍后再试"="顔認識が頻繁に実行されています。後でもう一度やり直してください";
-"APBToygerFacade:我知道了"="OK";
-"APBToygerFacade:进行闪屏检测"="スプラッシュ画面の検出を開始します";
-"APBToygerFacade:拍摄人像面"="横顔を撮影してください";
-"APBToygerFacade:拍摄要求"="写真の要件";
-"APBToygerFacade:证件人像面"="戻る (顔写真)";
-"APBToygerFacade:人像面"="戻る";
-"APBToygerFacade:拍摄国徽面"="国章側を撮影してください";
-"APBToygerFacade:证件国徽面"="表 (国章の写真)";
-"APBToygerFacade:国徽面"="表";
-"APBToygerFacade:拍摄身份证人像面"="ID カードの裏面を撮影してください";
-"APBToygerFacade:拍摄身份证国徽面"="ID カードの裏面を撮影してください";
-"APBToygerFacade:扫描面部信息,与您的照片对比"="顔情報がスキャンされ、写真と比較されました";
-"APBToygerFacade:下一步"="次へ";
-"APBToygerFacade:实人认证"="ID 検証";
-"APBToygerFacade:拍摄您本人人脸,请确保正对手机,光线充足"="顔写真を撮影する場合、明るい場所で電話の方を向いてください";
-"APBToygerFacade:请将身份证置于框内拍摄"="フレーム内で IDカードを動かします";
-"APBToygerFacade:请确认信息,若有误请点击修改"="情報を確認してください。情報が正しくない場合は、タップして情報を変更します";
-"APBToygerFacade:姓名"="名前";
-"APBToygerFacade:身份证号"="ID カード番号";
-"APBToygerFacade:识别失败"="認識できませんでした";
-"APBToygerFacade:证件图像未符合要求"="証明写真が要件を満たしていません";
-"APBToygerFacade:请按要求拍摄本人有效身份证"="以下の要件に従って、ID カードの写真を撮影してください";
-"APBToygerFacade:重新拍摄"="もう一度撮影";
-"APBToygerFacade:识别超时"="認識がタイムアウトしました";
-"APBToygerFacade:网络连接超时,请重新识别"="ネットワーク接続がタイムアウトしました。もう一度お試しください";
-"APBToygerFacade:重新识别"="もう一度認識してください";
-"APBToygerFacade:识别中..."="認識中";
-"APBToygerFacade:即将进入刷脸页..."="顔認識ページを開きます";
-"APBToygerFacade:拍张照就能通过"="ID カードの写真を撮るだけです";
-"APBToygerFacade:识别失败次数过多"="認識の失敗が頻繁に発生しました";
-"APBToygerFacade:请退出后重试"="終了してもう一度お試しください";
-"APBToygerFacade:相机权限被禁止,请检查"="カメラにアクセスできません。設定を確認してください";
-"APBToygerFacade:温馨提示"="注意";
-
-"APBToygerFacade:继续"="続行";
-"APBToygerFacade:其他登录方式"="ログイン方法を切り替え";
-"APBToygerFacade:当前设备不支持刷脸"="お使いのデバイスは顔認識をサポートしていません";
-"APBToygerFacade:无法启动相机"="カメラにアクセスできません";
-"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="[設定] > [プライバシー] > [カメラ] に移動し、アクセスを許可してください";
-"APBToygerFacade:立即开启"="OK";
-"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="顔認識は iOS 7 以降でサポートされています";
-"APBToygerFacade:系统错误"="システムエラー";
-"APBToygerFacade:提示:正对手机,更容易成功"="電話の方を向いてください";
-"APBToygerFacade:登录中断"="ログインが中断されました";
-"APBToygerFacade:刷脸验证"="顔認識による検証";
-"APBToygerFacade:请把脸放入框内保持不动"="フレームの内側に顔が入るようにして、動かないでください";
-"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
-"APBToygerFacade:选择其他验证方式"="検証方法を変更";
-"APBToygerFacade:拿起手机眨眨眼"="まばたきしてください";
-"APBToygerFacade:拿起手机向左摇头"="頭を左に";
-"APBToygerFacade:拿起手机向右摇头"="頭を右に";
-"APBToygerFacade:首次使用,请开通刷脸"="顔認識を有効化して続行します";
-"APBToygerFacade:立即开通"="有効化";
-"APBToygerFacade:下次再说"="後で";
-"APBToygerFacade:请把手机正对面部"="電話の方を向いてください";
-"APBToygerFacade:即将开始人脸检测"="顔認識を開始";
-"APBToygerFacade:没有认出你"="顔を認識できませんでした";
-"APBToygerFacade:未能识别人脸"="顔が検出されません";
-"APBToygerFacade:人脸检测中"="顔を認識中です";

+ 0 - 101
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/APBToygerFacade.bundle/ko.strings

@@ -1,101 +0,0 @@
-"APBToygerFacade:没有检测到脸"="감지된 얼굴이 없습니다";
-"APBToygerFacade:靠近一点"="더 가까이 움직이세요";
-"APBToygerFacade:离远一点"="더 멀리 움직이세요";
-"APBToygerFacade:把脸移入圈内"="얼굴이 원 안에 들어오도록 움직이세요";
-"APBToygerFacade:请正对手机"="휴대전화를 정면으로 바라보세요";
-"APBToygerFacade:请正对手机"="휴대전화를 정면으로 바라보세요";
-"APBToygerFacade:再清晰一点"="얼굴을 좀더 선명하게 만드세요";
-"APBToygerFacade:脸部亮一点"="얼굴을 밝게 만드세요";
-"APBToygerFacade:请露出正脸"="얼굴의 정면을 보여주세요";
-"APBToygerFacade:请注视屏幕"="화면을 바라보세요";
-"APBToygerFacade:眨眨眼"="눈을 깜빡이세요";
-"APBToygerFacade:请保持不动"="가만히 계십시오";
-"APBToygerFacade:再清晰一点"="얼굴을 좀더 선명하게 만드세요";
-"APBToygerFacade:请正对屏幕"="화면을 정면으로 바라보세요";
-"APBToygerFacade:拿起手机,眨眨眼"="휴대전화를 집어 들고 눈을 깜빡이세요";
-"APBToygerFacade:正在处理"="처리 중";
-"APBToygerFacade:确定"="확인";
-"APBToygerFacade:我知道了"="확인";
-"APBToygerFacade:退出"="종료";
-"APBToygerFacade:当前系统不支持刷脸"="현재 시스템은 안면 인식을 지원하지 않습니다";
-"APBToygerFacade:刷脸仅在高版本及以上系统可用"="상위 버전의 시스템만 안면 인식을 지원합니다";
-"APBToygerFacade:验证中断"="확인이 중단되었습니다";
-"APBToygerFacade:本次操作失败"="작동에 실패했습니다";
-"APBToygerFacade:刷脸失败"="안면 인식에 실패했습니다";
-"APBToygerFacade:正对手机,更容易成功"="얼굴을 더 쉽게 스캔할 수 있도록 휴대전화를 정면으로 바라보세요";
-"APBToygerFacade:操作超时"="작업 시간이 초과되었습니다";
-"APBToygerFacade:提示:正对手机,更容易成功"="참고: 휴대전화를 똑바로 바라보면 스캔에 성공할 가능성이 높습니다";
-"APBToygerFacade:网络不给力"="네트워크 상태가 요구 사항을 충족하지 않습니다";
-"APBToygerFacade:请检查网络"="네트워크 연결을 확인하세요";
-"APBToygerFacade:本次操作失败"="작동에 실패했습니다";
-"APBToygerFacade:抱歉,系统出错了,请再试一次"="시스템 오류가 발생했습니다. 다시 시도하세요";
-"APBToygerFacade:确定退出吗?"="정말로 종료하시겠습니까?";
-"APBToygerFacade:露个脸就能通过"="얼굴만 보여주시면 됩니다";
-"APBToygerFacade:确定"="확인";
-"APBToygerFacade:取消"="취소";
-"APBToygerFacade:重试"="다시 시도";
-"APBToygerFacade:操作超时"="작업 시간이 초과되었습니다";
-"APBToygerFacade:提示:正对手机,更容易成功"="참고: 휴대전화를 똑바로 바라보면 성공할 가능성이 높습니다";
-"APBToygerFacade:再试一次"="다시 시도하세요";
-"APBToygerFacade:退出"="종료";
-"APBToygerFacade:本次操作失败"="작동에 실패했습니다";
-"APBToygerFacade:刷脸失败次数过多,请稍后再试"="안면 인식이 연속으로 실행되었습니다. 나중에 다시 시도하세요";
-"APBToygerFacade:我知道了"="확인";
-"APBToygerFacade:进行闪屏检测"="스플래시 화면 감지가 시작됩니다";
-"APBToygerFacade:拍摄人像面"="얼굴의 측면 사진을 찍어주세요";
-"APBToygerFacade:拍摄要求"="사진 요구사항";
-"APBToygerFacade:证件人像面"="뒷면(얼굴 사진)";
-"APBToygerFacade:人像面"="뒷면";
-"APBToygerFacade:拍摄国徽面"="국장(national emblem)의 측면 사진을 찍어주세요";
-"APBToygerFacade:证件国徽面"="앞면(국장 사진)";
-"APBToygerFacade:国徽面"="앞면";
-"APBToygerFacade:拍摄身份证人像面"="신분증 뒷면의 사진을 찍어주세요";
-"APBToygerFacade:拍摄身份证国徽面"="신분증 앞면의 사진을 찍어주세요";
-"APBToygerFacade:扫描面部信息,与您的照片对比"="얼굴 정보를 스캔하여 사진과 비교합니다";
-"APBToygerFacade:下一步"="다음";
-"APBToygerFacade:实人认证"="신분증 확인";
-"APBToygerFacade:拍摄您本人人脸,请确保正对手机,光线充足"="얼굴 사진을 찍기 위해서는 충분한 빛이 있는 환경에서 휴대전화를 정면으로 바라보세요";
-"APBToygerFacade:请将身份证置于框内拍摄"="신분증을 프레임 안으로 움직이세요";
-"APBToygerFacade:请确认信息,若有误请点击修改"="정보를 확인하세요. 정보가 올바르지 않으면 탭하여 정보를 수정합니다";
-"APBToygerFacade:姓名"="이름";
-"APBToygerFacade:身份证号"="신분증 번호";
-"APBToygerFacade:识别失败"="인식에 실패했습니다";
-"APBToygerFacade:证件图像未符合要求"="인증 사진이 요구 사항을 충족하지 않습니다";
-"APBToygerFacade:请按要求拍摄本人有效身份证"="요구사항에 맞게 신분증의 사진을 찍으세요";
-"APBToygerFacade:重新拍摄"="다시 촬영";
-"APBToygerFacade:识别超时"="인식 시간이 초과되었습니다";
-"APBToygerFacade:网络连接超时,请重新识别"="네트워크 연결 시간이 초과되었습니다. 다시 시도하세요";
-"APBToygerFacade:重新识别"="다시 인식";
-"APBToygerFacade:识别中..."="인식 중";
-"APBToygerFacade:即将进入刷脸页..."="안면 인식 페이지로 들어가기";
-"APBToygerFacade:拍张照就能通过"="신분증만 촬영하면 됩니다";
-"APBToygerFacade:识别失败次数过多"="인식이 연속으로 실패했습니다";
-"APBToygerFacade:请退出后重试"="종료한 후 다시 시도하세요";
-"APBToygerFacade:相机权限被禁止,请检查"="카메라 접근이 금지되어 있습니다. 권한을 확인하세요";
-"APBToygerFacade:温馨提示"="참고"; 
-
-"APBToygerFacade:继续"="계속";
-"APBToygerFacade:其他登录方式"="로그온 방법 전환";
-"APBToygerFacade:当前设备不支持刷脸"="귀하의 디바이스는 안면 인식을 지원하지 않습니다";
-"APBToygerFacade:无法启动相机"="카메라 권한이 없습니다";
-"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="설정 > 개인 > 카메라에서 접근 권한을 부여하십시오";
-"APBToygerFacade:立即开启"="OK";
-"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="iOS 7 및 그 이상의 버전에서만 안면 인식이 지원됩니다";
-"APBToygerFacade:系统错误"="시스템 오류";
-"APBToygerFacade:提示:正对手机,更容易成功"="휴대전화를 정면으로 바라보세요";
-"APBToygerFacade:登录中断"="로그온이 중단되었습니다";
-"APBToygerFacade:刷脸验证"="안면 인식을 통한 인증";
-"APBToygerFacade:请把脸放入框内保持不动"="얼굴이 프레임 안으로 들어오도록 위치한 다음 움직이지 말고 가만히 계십시오";
-"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
-"APBToygerFacade:选择其他验证方式"="인증 방법을 변경합니다";
-"APBToygerFacade:拿起手机眨眨眼"="눈을 깜빡이세요";
-"APBToygerFacade:拿起手机向左摇头"="좌측으로 고개를 돌립니다";
-"APBToygerFacade:拿起手机向右摇头"="우측으로 고개를 돌립니다";
-"APBToygerFacade:首次使用,请开通刷脸"="안면 인식을 활성화하여 계속 진행합니다";
-"APBToygerFacade:立即开通"="활성화하기";
-"APBToygerFacade:下次再说"="나중에 하기";
-"APBToygerFacade:请把手机正对面部"="휴대전화를 정면으로 바라보세요";
-"APBToygerFacade:即将开始人脸检测"="안면 인식 시작";
-"APBToygerFacade:没有认出你"="안면 인식에 실패했습니다";
-"APBToygerFacade:未能识别人脸"="감지된 얼굴이 없습니다";
-"APBToygerFacade:人脸检测中"="얼굴 인식 중";

+ 0 - 64
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/APBToygerFacade.bundle/zh-HK.strings

@@ -1,64 +0,0 @@
-/* 
-  zh-HK.strings
-  APBToygerFacade
-
-  Created by shouyi.www on 2017/6/1.
-  Copyright © 2017年 Alipay. All rights reserved.
-*/
-"APBToygerFacade:取消"="取消";
-"APBToygerFacade:再试一次"="再試一次";
-"APBToygerFacade:退出"="退出";
-"APBToygerFacade:确定"="確定";
-"APBToygerFacade:继续"="继续";
-"APBToygerFacade:我知道了"="我知道了";
-"APBToygerFacade:其他登录方式"="其他登录方式";
-"APBToygerFacade:刷脸失败"="刷臉失敗";
-"APBToygerFacade:当前设备不支持刷脸"="目前系統不支援刷臉";
-"APBToygerFacade:当前系统不支持刷脸"="目前設備不支援刷臉";
-"APBToygerFacade:无法启动相机"="無法啟動相機";
-"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="請到“設置-隱私-相機”開啓權限";
-"APBToygerFacade:立即开启"="開通權限";
-"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="刷脸仅在iOS7及以上系统可用";
-"APBToygerFacade:系统错误"="系統錯誤";
-"APBToygerFacade:确定退出吗?"="確定退出嗎?";
-"APBToygerFacade:露个脸就能通过"="露個臉就能通過";
-"APBToygerFacade:操作超时"="操作超時";
-"APBToygerFacade:正对手机,更容易成功"="對準手機,更容易成功";
-"APBToygerFacade:提示:正对手机,更容易成功"="對準手機,更容易成功";
-"APBToygerFacade:本次操作失败"="本次操作失敗";
-"APBToygerFacade:网络不给力"="網絡異常,請稍後再試";
-"APBToygerFacade:登录中断"="登入中斷";
-"APBToygerFacade:验证中断"="驗證中斷";
-
-"APBToygerFacade:刷脸验证"="刷臉驗證";
-"APBToygerFacade:请把脸放入框内保持不动"="請把臉移入圈內保持不動";
-"APBToygerFacade:靠近一点"="靠近一點";
-"APBToygerFacade:没有检测到脸"="沒有檢測到臉";
-"APBToygerFacade:再清晰一点"="再清晰一點";
-"APBToygerFacade:脸部亮一点"="光線再亮點";
-"APBToygerFacade:请正对手机"="請正視手機";
-"APBToygerFacade:请露出正脸"="請露出正臉";
-"APBToygerFacade:把脸移入圈内"="把臉移入框內";
-"APBToygerFacade:离远一点"="離遠一點";
-"APBToygerFacade:请保持不动"="請保持不動";
-"APBToygerFacade:请注视屏幕"="請注視屏幕";
-"APBToygerFacade:眨眨眼"="眨眨眼";
-"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
-
-"APBToygerFacade:选择其他验证方式"="選擇其他驗證方式";
-"APBToygerFacade:拿起手机眨眨眼"="拿起手機,眨眨眼";
-"APBToygerFacade:拿起手机向左摇头"="拿著手機,向左搖頭";
-"APBToygerFacade:拿起手机向右摇头"="拿著手機,向右搖頭";
-
-"APBToygerFacade:正在处理"="正在處理";
-"APBToygerFacade:首次使用,请开通刷脸"="首次使用,請開通刷臉";
-"APBToygerFacade:立即开通"="立即開通";
-"APBToygerFacade:下次再说"="下次再說";
-
-"APBToygerFacade:请把手机正对面部"="請把手機正對面部";
-"APBToygerFacade:即将开始人脸检测"="即將開始人臉檢測";
-
-"APBToygerFacade:没有认出你"="沒有認出你";
-"APBToygerFacade:未能识别人脸"="未能識別人臉";
-"APBToygerFacade:人脸检测中"="人臉檢測中";
-"APBToygerFacade:刷脸失败次数过多,请稍后再试"="刷臉失敗次數過多,請稍後再試";

+ 0 - 66
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/APBToygerFacade.bundle/zh-Hans.strings

@@ -1,66 +0,0 @@
-/* 
-  zh-Hans.strings
-  APBToygerFacade
-
-  Created by shouyi.www on 2017/6/1.
-  Copyright © 2017年 Alipay. All rights reserved.
-*/
-
-
-"APBToygerFacade:取消"="取消";
-"APBToygerFacade:再试一次"="再试一次";
-"APBToygerFacade:退出"="退出";
-"APBToygerFacade:确定"="确定";
-"APBToygerFacade:继续"="继续";
-"APBToygerFacade:我知道了"="我知道了";
-"APBToygerFacade:其他登录方式"="其他登录方式";
-"APBToygerFacade:刷脸失败"="刷脸失败";
-"APBToygerFacade:当前设备不支持刷脸"="当前设备不支持刷脸";
-"APBToygerFacade:当前系统不支持刷脸"="当前系统不支持刷脸";
-"APBToygerFacade:无法启动相机"="无法启动相机";
-"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="请到“设置-隐私-相机”开启权限";
-"APBToygerFacade:立即开启"="立即开启";
-"APBToygerFacade:刷脸仅在iOS8及以上版本可用"="刷脸仅在iOS8及以上版本可用";
-"APBToygerFacade:系统错误"="系统错误";
-"APBToygerFacade:确定退出吗?"="确定退出吗?";
-"APBToygerFacade:露个脸就能通过"="露个脸就能通过";
-"APBToygerFacade:操作超时"="操作超时";
-"APBToygerFacade:正对手机,更容易成功"="正对手机,更容易成功";
-"APBToygerFacade:本次操作失败"="本次操作失败";
-"APBToygerFacade:网络不给力"="网络不给力";
-"APBToygerFacade:登录中断"="登录中断";
-"APBToygerFacade:验证中断"="验证中断";
-
-
-"APBToygerFacade:刷脸验证"="刷脸验证";
-"APBToygerFacade:请把脸放入框内保持不动"="请把脸移入圈内保持不动";
-"APBToygerFacade:靠近一点"="靠近一点";
-"APBToygerFacade:没有检测到脸"="没有检测到脸";
-"APBToygerFacade:再清晰一点"="再清晰一点";
-"APBToygerFacade:脸部亮一点"="脸部亮一点";
-"APBToygerFacade:请正对手机"="请正对手机";
-"APBToygerFacade:请露出正脸"="请露出正脸";
-"APBToygerFacade:把脸移入圈内"="把脸移入圈内";
-"APBToygerFacade:离远一点"="离远一点";
-"APBToygerFacade:请保持不动"="请保持不动";
-"APBToygerFacade:请注视屏幕"="请注视屏幕";
-"APBToygerFacade:眨眨眼"="眨眨眼";
-"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
-
-"APBToygerFacade:选择其他验证方式"="选择其他验证方式";
-"APBToygerFacade:拿起手机眨眨眼"="拿起手机,眨眨眼";
-"APBToygerFacade:拿起手机向左摇头"="拿起手机,向左摇头";
-"APBToygerFacade:拿起手机向右摇头"="拿起手机,向右摇头";
-
-"APBToygerFacade:正在处理"="正在处理";
-"APBToygerFacade:首次使用,请开通刷脸"="首次使用,请开通刷脸";
-"APBToygerFacade:立即开通"="立即开通";
-"APBToygerFacade:下次再说"="下次再说";
-
-"APBToygerFacade:请把手机正对面部"="请把手机正对面部";
-"APBToygerFacade:即将开始人脸检测"="即将开始人脸检测";
-
-"APBToygerFacade:没有认出你"="没有认出你";
-"APBToygerFacade:未能识别人脸"="未能识别人脸";
-"APBToygerFacade:人脸检测中"="人脸检测中";
-"APBToygerFacade:刷脸失败次数过多,请稍后再试"="刷脸失败次数过多,请稍后再试";

+ 0 - 66
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/APBToygerFacade.bundle/zh-Hant.strings

@@ -1,66 +0,0 @@
-/* 
-  zh-Hant.strings
-  APBToygerFacade
-
-  Created by shouyi.www on 2017/6/1.
-  Copyright © 2017年 Alipay. All rights reserved.
-*/
-
-
-"APBToygerFacade:取消"="取消";
-"APBToygerFacade:再试一次"="再試一次";
-"APBToygerFacade:退出"="退出";
-"APBToygerFacade:确定"="確定";
-"APBToygerFacade:继续"="繼續";
-"APBToygerFacade:我知道了"="我知道了";
-"APBToygerFacade:其他登录方式"="其他登入方式";
-"APBToygerFacade:刷脸失败"="刷臉失敗";
-"APBToygerFacade:当前设备不支持刷脸"="目前設備不支援刷臉服務";
-"APBToygerFacade:当前系统不支持刷脸"="当前系统不支持刷脸";
-"APBToygerFacade:无法启动相机"="無法啟動相機";
-"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="請到“設置-隱私-相機”開啓權限";
-"APBToygerFacade:立即开启"="開通權限";
-"APBToygerFacade:刷脸仅在iOS8及以上系统可用"="刷脸仅在iOS8及以上系统可用";
-"APBToygerFacade:系统错误"="系統錯誤";
-"APBToygerFacade:确定退出吗?"="確定退出嗎?";
-"APBToygerFacade:露个脸就能通过"="露個臉就能通過";
-"APBToygerFacade:操作超时"="操作超時";
-"APBToygerFacade:正对手机,更容易成功"="對準手機,更容易成功";
-"APBToygerFacade:提示:正对手机,更容易成功"="對準手機,更容易成功";
-"APBToygerFacade:本次操作失败"="本次操作失敗";
-"APBToygerFacade:网络不给力"="網絡異常,請稍後再試";
-"APBToygerFacade:登录中断"="登入中斷";
-"APBToygerFacade:验证中断"="驗證中斷";
-
-"APBToygerFacade:刷脸验证"="刷臉驗證";
-"APBToygerFacade:请把脸放入框内保持不动"="請把臉移入圈內保持不動";
-"APBToygerFacade:靠近一点"="靠近一點";
-"APBToygerFacade:没有检测到脸"="沒有檢測到臉";
-"APBToygerFacade:再清晰一点"="再清晰一點";
-"APBToygerFacade:脸部亮一点"="光線再亮點";
-"APBToygerFacade:请正对手机"="請正視手機";
-"APBToygerFacade:请露出正脸"="請露出正臉";
-"APBToygerFacade:把脸移入圈内"="把臉移入框內";
-"APBToygerFacade:离远一点"="離遠一點";
-"APBToygerFacade:请保持不动"="請保持不動";
-"APBToygerFacade:请注视屏幕"="請注視屏幕";
-"APBToygerFacade:眨眨眼"="眨眨眼";
-"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
-"APBToygerFacade:选择其他验证方式"="選擇其他驗證方式";
-
-"APBToygerFacade:拿起手机眨眨眼"="拿起手機,眨眨眼";
-"APBToygerFacade:拿起手机向左摇头"="拿起手機,向左搖頭";
-"APBToygerFacade:拿起手机向右摇头"="拿起手機,向右搖頭";
-
-"APBToygerFacade:正在处理"="正在處理";
-"APBToygerFacade:首次使用,请开通刷脸"="首次使用,請開通刷臉";
-"APBToygerFacade:立即开通"="立即開通";
-"APBToygerFacade:下次再说"="下次再說";
-
-"APBToygerFacade:请把手机正对面部"="請把手機正對面部";
-"APBToygerFacade:即将开始人脸检测"="即將開始人臉檢測";
-
-"APBToygerFacade:没有认出你"="沒有認出你";
-"APBToygerFacade:未能识别人脸"="未能識別人臉";
-"APBToygerFacade:人脸检测中"="人臉檢測中";
-"APBToygerFacade:刷脸失败次数过多,请稍后再试"="刷臉失敗次數過多,請稍後再試";

+ 0 - 76
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerBaseTask.h

@@ -1,76 +0,0 @@
-//
-//  APFBaseTask.h
-//  APFaceDetectBiz
-//
-//  Created by 晗羽 on 8/25/16.
-//  Copyright © 2016 Alipay. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-#import <Foundation/Foundation.h>
-#import <BioAuthEngine/IBioAuthTask.h>
-#import <BioAuthEngine/APBTaskContext.h>
-#import <BioAuthEngine/APBLogger.h>
-#import <BioAuthEngine/ZolozLogMonitor.h>
-#import <BioAuthEngine/AFEAlertView.h>
-#import <APBToygerFacade/APBToygerUtils.h>
-#import <APBToygerFacade/APBToygerRemoteConfig.h>
-#import <APBToygerFacade/APBToygerBehavlogManager.h>
-//#import "APBToygerDataCenter.h"
-#import <BioAuthEngine/BioAuthCommonSetting.h>
-#import <APBToygerFacade/APBToygerViewController.h>
-
-@class ZolozLogMonitor,APBToygerDataCenter;
-
-typedef void (^APFAlertExtraAction)();
-
-@interface APBToygerBaseTask : NSObject <IBioAuthTask>
-
-//协议定义的属性
-@property(nonatomic, copy)NSString *taskName;                           //任务名
-@property(nonatomic, strong)APBTaskContext *context;                    //任务数据
-@property(nonatomic, weak)NSMutableDictionary *pipeInfo;              //共享数据
-//公用属性
-@property(nonatomic, weak)UIViewController *parentViewController;       //父viewController
-@property(nonatomic, weak)APBToygerViewController *currentViewController;      //当前viewController
-@property(nonatomic, weak)UIView *currentView;                          //当前显示的界面
-@property(nonatomic, copy)commandBlock bioCommandBlock;                 //对框架进行操作的block
-@property(nonatomic, strong)APBToygerRemoteConfig * bisConfig;                //bis下放的配置参数
-@property(nonatomic, strong)APBToygerDataCenter * dataCenter;                 //行为日志
-@property(nonatomic, copy)NSString *bisToken;                         //bisToken
-@property(nonatomic, assign)NSInteger currentRetryCnt;                  //当前重试次数
-@property(nonatomic, assign)BOOL soundStatus;                           //当前声音状态
-//@property(nonatomic, assign)BOOL isLoginMode;                           //当前场景是否为登录场景
-@property(nonatomic, assign)BOOL isMYBank;                              //是否是网商银行
-@property(nonatomic, strong)ZolozLogMonitor *monitor;                        //埋点
-
-- (void)exitWithResult:(APBResultType)result failReason:(NSString *)failReason retCodeSub:(NSString *)retCodeSub retMessageSub:(NSString *)retMessageSub;
-
-/**
- *  用户选择重试
- */
-- (void)handleRetryActionWithScene:(NSString *)scene
-                       buttonTitle:(NSString *)title
-                         extAction:(APFAlertExtraAction)action;
-
-/**
- *  用户选择退出
- */
-- (void)handleExitActionWithScene:(NSString *)scene
-                      buttonTitle:(NSString *)title
-                       exitReason:(APBResultType)reason
-                        extAction:(APFAlertExtraAction)action;
-
-/**
- *  用户选择继续
- */
-- (void)handleContinueActionWithScene:(NSString *)scene
-                          buttonTitle:(NSString *)title
-                            extaction:(APFAlertExtraAction)action;
-
-/**
- *  消除VC的方式,加菲和樱桃不同
- */
-- (void)dismissViewControllerAnimated: (BOOL)flag completion:(void (^ __nullable)(void))completion;
-
-@end

+ 0 - 44
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerBehavlogManager.h

@@ -1,44 +0,0 @@
-//
-//  APFBehavlogManager.h
-//  APFaceDetectBiz
-//
-//  Created by yukun.tyk on 9/8/16.
-//  Copyright © 2016 Alipay. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-@class BisBehavLog, BisBehavTask;
-
-@interface APBToygerBehavlogManager : NSObject
-
-/**
- *  @param config 配置参数,各种id和token
- */
-- (instancetype)initWithConfig:(NSDictionary *)config;
-
-/**
- *  添加行为日志
- *
- *  @param task 任务
- */
-- (void)addTask:(BisBehavTask *)task;
-
-/**
- *  clearTask
- *
- *
- */
-- (void)clearTask;
-/**
- *  创建行为日志
- *
- *  @param invtp 触发类型
- *  @param retry 重试次数
- *
- *  @return 行为日志
- */
-- (BisBehavLog *)generateLogWithInvokeType:(NSString *)invtp
-                                 withRetry:(NSInteger)retry;
-
-@end

+ 0 - 23
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerCherryDetectTask.h

@@ -1,23 +0,0 @@
-//
-//  APFCherryDetectTask.h
-//  APBToygerFacade
-//
-//  Created by richard on 01/02/2018.
-//  Copyright © 2018 Alipay. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-#import <BioAuthEngine/AFEStatusBar.h>
-#import <APBToygerFacade/APBToygerDetectTask.h>
-#import <APBToygerFacade/APBToygerBaseTask.h>
-#import <BioAuthEngine/BioAuthEngine.h>
-#import <ZolozSensorServices/CameraService.h>
-#import <ZolozSensorServices/MotionService.h>
-
-
-
-@interface APBToygerCherryDetectTask : APBToygerBaseTask <ZolozCameraServiceDelegate, ZolozMotionServiceDelegate, IStatusBarDelegate,AFECircularViewProtocol>
-
-@property(nonatomic, assign)BOOL photinusFlags;
-
-@end

+ 0 - 26
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerCherryUploadTask.h

@@ -1,26 +0,0 @@
-//
-//  APFCherryUploadTask.h
-//  APFaceDetectBiz
-//
-//  Created by yukun.tyk on 28/11/2016.
-//  Copyright © 2016 Alipay. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-#import <APBToygerFacade/APBToygerUploadTask.h>
-#import <APBToygerFacade/APBToygerDataCenter.h>
-
-typedef NS_ENUM(NSInteger, APBToygerRemoteCommand)
-{
-    APBToyger_REMOTE_COMMAND_PASS =           1001,   //比对通过
-    APBToyger_REMOTE_COMMAND_CONTINUE =       1002,   //需要继续采集
-    APBToyger_REMOTE_COMMAND_FAIL =           2001,   //比对失败
-    APBToyger_REMOTE_COMMAND_RETRY =          2002,   //需要重试
-};
-
-
-@interface APBToygerCherryUploadTask : APBToygerUploadTask <APBToygerDataCenterDelegate>
-
-- (APBToygerRemoteCommand)remoteCommandFromString:(NSString *)code;
-
-@end

+ 0 - 126
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerDataCenter.h

@@ -1,126 +0,0 @@
-//
-//  APFDataCenter.h
-//  APFaceDetectBiz
-//
-//  Created by yukun.tyk on 9/8/16.
-//  Copyright © 2016 Alipay. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-#import <BioAuthEngine/BioAuthEngine.h>
-#import <ToygerService/ToygerService.h>
-#import <ToygerService/ToygerServiceInstance.h>
-//#import "APBToygerUploadContent.h"
-
-@class BisBehavTask;
-
-@protocol APBToygerDataCenterDelegate <NSObject>
-
-/**
- *  收到response的回调
- *  @param success rpc是否成功
- *  @param retCode 结果码
- *  @param msg     结果信息
- *  @param ext     扩展信息
- */
-- (void)didFinishUploadWithSuccess:(BOOL)success
-                           retCode:(NSString *)retCode
-                        retMessage:(NSString *)msg
-                           extInfo:(NSString *)ext;
-@end
-
-
-@interface APBToygerDataCenter : NSObject
-
-@property (nonatomic, weak) ToygerServiceInstance *togyerInstance;
-@property (nonatomic, copy) NSString *pubkey;
-/**
- *  初始化
- *
- *  @param config 配置参数
- */
-- (instancetype)initWithConfig:(NSDictionary *)config;
-
-
-
-#ifdef SUPPORT_PB
-
-/**
- *  添加采集数据
- *
- *  @param monitorImage 监控照片
- *  @param panoImage    全景图,若该参数指定,将替换之前的全景图
- */
-- (void)addMonitorImage:(UIImage *)monitorImage
-       replacePanoImage:(NSData *)panoImage
-       andCypherKeyData:(NSData *)cypherKey;
-
-#else
-
-/**
- *  添加采集数据
- *
- *  @param monitorImage 监控照片
- *  @param panoImage    全景图,若该参数指定,将替换之前的全景图
- */
-- (void)addMonitorImage:(UIImage *)monitorImage
-       replacePanoImage:(NSString *)panoImage
-       andCypherKeyData:(NSString *)cypherKey;
-
-#endif
-
-/**
- *  清除采集数据
- *
- *  @param monitorImage 监控照片
- *  @param panoImage    全景图,
- */
-- (void)clearMonitorImage:(BOOL)monitor
-                panoImage:(BOOL)pano;
-
-/**
- *  添加行为日志
- *
- *  @param task 任务
- */
-- (void)addBehavTask:(BisBehavTask *)task;
-
-/**
- *  clearTask
- *
- *
- */
-- (void)clearTask;
-/**
- *  clear
- *
- *
- */
-- (void)clear;
-
-/**
- *  建立上传数据request
- *
- *  @param monitor 是否上传监控照片
- *  @param behav   是否上传行为日志
- *  @param pano    是否上传全景图
- *  @param type    触发类型
- *  @param retry   重试次数
- */
-- (APBBisUploadGwRequest *)buildUploadRequestWithMonitorImage:(BOOL)monitor
-                                                     behavLog:(BOOL)behav
-                                                    panoImage:(BOOL)pano
-                                                   invokeType:(NSString *)type
-                                                     retryCnt:(NSInteger)retry;
-
-- (APBBisUploadGwRequest *)buildUploadRequestWithContent:(NSData *)data
-                                               cypherKey:(NSData *)cypherKeyData
-                                              invokeType:(NSString *)type
-                                                retryCnt:(NSInteger)retry;
-
-/**
- *  设置delegate
- */
-- (void)setDelegate:(id<APBToygerDataCenterDelegate>)delegate;
-
-@end

+ 0 - 22
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerDetectTask.h

@@ -1,22 +0,0 @@
-//
-//  APBToygerDetectTask.h
-//  APBToygerFacade
-//
-//  Created by Dan Cong on 29/1/2018.
-//  Copyright © 2018 Alipay. All rights reserved.
-//
-
-#import <APBToygerFacade/APBToygerBaseTask.h>
-
-/**
- 检测基类,用于下沉多种UI(樱桃和加菲)下通用的逻辑
- */
-@interface APBToygerDetectTask : APBToygerBaseTask
-
-- (void)_addDarkScreen;
-
-- (void)_showProgress:(CGFloat)progress;
-
-- (void)_showAlertViewBy:(NSDictionary *)alertParam;
-
-@end

+ 0 - 37
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerFacade.h

@@ -1,37 +0,0 @@
-//
-//  APFaceFacade.h
-//  APFaceDetectBiz
-//
-//  Created by 晗羽 on 8/25/16.
-//  Copyright © 2016 Alipay. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-#import <BioAuthEngine/IBioAuthFactor.h>
-
-@interface APBToygerFacade : NSObject <IBioAuthFactor>
-
-+(void)setTokenid:(NSString*)info;
-+(NSString*)getTokenid;
-
-@end
-
-#import <APBToygerFacade/APBToygerCherryDetectTask.h>
-#import <APBToygerFacade/APBToygerBaseTask.h>
-#import <APBToygerFacade/APBToygerPresentTask.h>
-#import <APBToygerFacade/APBToygerCherryUploadTask.h>
-#import <APBToygerFacade/APBToygerUtils.h>
-#import <APBToygerFacade/APBToygerUploadTask.h>
-#import <APBToygerFacade/APBToygerFacadeDefine.h>
-#import <APBToygerFacade/APBToygerRemoteConfig.h>
-#import <APBToygerFacade/APBToygerBehavlogManager.h>
-#import <APBToygerFacade/APBToygerDataCenter.h>
-#import <APBToygerFacade/APBToygerViewController.h>
-#import <APBToygerFacade/APBToygerDetectTask.h>
-#import <UIKit/UIKit.h>
-
-//! Project version number for APBToygerFacade.
-FOUNDATION_EXPORT double APBToygerFacadeVersionNumber;
-
-//! Project version string for APBToygerFacade.
-FOUNDATION_EXPORT const unsigned char APBToygerFacadeVersionString[];

+ 0 - 130
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerFacadeDefine.h

@@ -1,130 +0,0 @@
-//
-//  APFCherryDefine.h
-//  APBToygerFacade
-//
-//  Created by shouyi.www on 27/02/2017.
-//  Copyright © 2017 Alipay. All rights reserved.
-//
-
-#ifndef APBToygerFacadeDefine_h
-#define APBToygerFacadeDefine_h
-
-
-static float normalized_distance(float current_value, float best_value, float range) {
-    return fabsf((current_value - best_value) / range);
-}
-
-//typedef struct toyger_status_evaluator_t {
-//    float pitch;
-//    float yaw;
-//    float width;
-//
-//    float best_pitch;
-//    float best_yaw;
-//    float best_width;
-//    float pitch_range;
-//    float yaw_range;
-//    float width_range;
-//    float pitch_weight;
-//    float yaw_weight;
-//    float width_weight;
-//
-//    toyger_status_evaluator_t(float pitch_ = -0.3, float pitch_range_ = 0.7, float best_pitch_ = 0, float pitch_weight_ = 1,
-//                              float yaw_ = -0.6, float yaw_range_ = 0.6, float best_yaw_ = 0, float yaw_weight_ = 1,
-//                              float width_ = 0.2, float width_range_ = 1.2, float best_width_ = 0.7, float width_weight_ = 1){
-//        pitch = pitch_;
-//        yaw = yaw_;
-//        width = width_;
-//        pitch_range = pitch_range_;
-//        yaw_range = yaw_range_;
-//        width_range = width_range_;
-//        best_pitch = best_pitch_;
-//        best_yaw = best_yaw_;
-//        best_width = best_width_;
-//        pitch_weight = pitch_weight_;
-//        yaw_weight = yaw_weight_;
-//        width_weight = width_weight_;
-//    }
-//
-//    void reset(){
-//        pitch = -0.3;
-//        yaw = -0.6;
-//        width = 0.2;
-//    }
-//
-//    void update(float pitch_, float yaw_, float width_) {
-//        pitch = pitch_;
-//        yaw = yaw_;
-//        width = width_;
-//    }
-//
-//    float evaluateProgress(float pitch_, float yaw_, float width_){
-//        return
-//        (normalized_distance(pitch_, best_pitch, pitch_range) * pitch_weight +
-//         normalized_distance(yaw_, best_yaw, yaw_range) * yaw_weight +
-//         normalized_distance(width_, best_width, width_range) * width_weight) /
-//        (pitch_weight + yaw_weight + width_weight);
-//    }
-//
-//    float evaluate(){
-//        return 1 -
-//        (normalized_distance(pitch, best_pitch, pitch_range) * pitch_weight +
-//         normalized_distance(yaw, best_yaw, yaw_range) * yaw_weight +
-//         normalized_distance(width, best_width, width_range) * width_weight) /
-//        (pitch_weight + yaw_weight + width_weight);
-//    }
-//
-//}ToygerStatusEvaluator;
-
-
-typedef struct apbtoyger_tip_evaluator_t {
-    bool pose_end;
-    bool has_face;
-    bool did_blink;
-    bool pos_okay;
-    bool quality_okay;
-    bool under_exposure;
-    bool face_width_too_small;
-    bool face_width_too_big;
-    bool integrity_fail;
-    bool yaw_fail;
-    bool pitch_fail;
-    bool tremble_fail;
-    bool did_checkSeven;
-    int tip_timer_wait_cnt;
-    bool tip_show_switch;
-    int tip_message;
-
-    apbtoyger_tip_evaluator_t(){
-        reset();
-    }
-
-    void reset(){
-        has_face = false;
-        did_blink = false;
-        pos_okay = false;
-        under_exposure = false;
-        face_width_too_small = false;
-        integrity_fail = false;
-        pitch_fail = false;
-        face_width_too_big = false;
-        yaw_fail = false;
-        tremble_fail = false;
-        tip_timer_wait_cnt = 0;
-        tip_show_switch = true;
-        did_checkSeven = false;
-        quality_okay = false;
-        pose_end = false;
-        tip_message =0;
-    }
-}APBToygerTipEvaluator;
-
-
-//UI样式
-typedef enum : NSUInteger {
-    APBToygerUIStyleFPPCherry = 991,       //991 FPP樱桃(废弃)
-    APBToygerUIStyleCherry,                //992 zFace樱桃
-    APBToygerUIStyleGarfield,              //993 加菲
-} APBToygerUIStyle;
-
-#endif

+ 0 - 25
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerPresentTask.h

@@ -1,25 +0,0 @@
-//
-//  APFPresentTask.h
-//  APFaceDetectBiz
-//
-//  Created by 晗羽 on 8/26/16.
-//  Copyright © 2016 Alipay. All rights reserved.
-//
-
-#import <APBToygerFacade/APBToygerBaseTask.h>
-#import <ZolozSensorServices/CameraService.h>
-/**
- *  @author Skye Ying, 16-08-26 13:08:04
- *
- *  新建VC,启动整个view
- */
-@interface APBToygerPresentTask : APBToygerBaseTask
-
-
--(void) preCameraPresent;
-
--(void) postCameraPresentwithCamera:(ZolozCameraService *) cameraService;
-
--(void) presentAnimated: (BOOL)flag completion:(void (^ __nullable)(void))completion;
-
-@end

+ 0 - 168
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerRemoteConfig.h

@@ -1,168 +0,0 @@
-//
-//  APFRemoteConfig.h
-//  AppArch
-//
-//  Created by yukun.tyk on 8/29/16.
-//  Copyright © 2016 alipay. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-#import <CoreGraphics/CGBase.h>
-
-
-@class APBToygerSceneEnv, APBToygerVideo, APFRemoteConfig, APBToygerCollect, APBDragonflyLivenessConfig,APBGeminiLivenessConfig;
-@class APBToygerNavigatePage, APBToygerAlgorithm, APBToygerTips;
-
-/**
- *  协议配置
- */
-@interface APBToygerRemoteConfig : NSObject
-
-@property(nonatomic, strong)APBToygerSceneEnv *sceneEnv;
-@property(nonatomic, strong)APBToygerNavigatePage *navi;
-@property(nonatomic, strong)APBToygerCollect *coll;
-@property (nonatomic, copy) NSDictionary *upload;
-@property (nonatomic, copy) NSDictionary *algorithm;
-@property(nonatomic, strong)APBToygerTips * faceTips;
-@property(nonatomic, assign)NSInteger env;
-@property(nonatomic, assign)NSInteger ui;
-@property(nonatomic, copy)NSString *sdkVersion;
-@property(nonatomic, strong)APBToygerVideo * video;
-@property(nonatomic, copy)NSString *verifyMode;
-
-+(APBToygerRemoteConfig *)defaultConfig;
-+ (void)loadFromJSON:(NSString *)json toObject:(NSObject*) obj;
-@end
-
-/**
- *  场景配置
- */
-@interface APBToygerSceneEnv : NSObject
-
-@property(nonatomic, copy)NSString *sceneCode;
-@property(nonatomic, copy)NSString *sceneType;
-
-+(APBToygerSceneEnv *)defaultConfig;
-
-@end
-
-/**
- *  引导页配置
- */
-@interface APBToygerNavigatePage : NSObject
-
-@property(nonatomic, assign)BOOL enable;
-@property(nonatomic, copy)NSString *url;
-
-+ (APBToygerNavigatePage *)defaultConfig;
-
-@end
-
-/**
- *  采集场景配置
- */
-@interface APBToygerCollect : NSObject
-
-@property(nonatomic, assign)NSInteger retry;
-@property(nonatomic, assign)CGFloat minangle;
-@property(nonatomic, assign)CGFloat maxangle;
-@property(nonatomic, assign)CGFloat near;
-@property(nonatomic, assign)CGFloat far;
-@property(nonatomic, assign)NSInteger minlight;
-@property(nonatomic, assign)NSInteger time;
-@property(nonatomic, assign)NSInteger light;
-@property(nonatomic, assign)NSInteger imageIndex;
-@property(nonatomic, assign)BOOL uploadLivePic;
-@property(nonatomic, assign)NSInteger uploadMonitorPic;
-@property(nonatomic, assign)BOOL progressbar;
-@property(nonatomic, assign)BOOL uploadBestPic;
-@property(nonatomic, assign)BOOL uploadPoseOkPic;
-@property(nonatomic, assign)BOOL uploadBigPic;
-@property(nonatomic, assign)BOOL authorization;
-@property(nonatomic, assign)NSInteger mineDscore;
-@property(nonatomic, assign)NSInteger mineVideo;
-@property(nonatomic, strong)NSArray<NSString *> *actionMode;
-
-+ (APBToygerCollect *)defaulConfig;
-
-@end
-
-
-
-/**
- *  视频设置
- */
-@interface APBToygerVideo : NSObject
-
-@property(nonatomic, assign)NSInteger width;
-@property(nonatomic, assign)NSInteger height;
-@property(nonatomic, assign)NSInteger duration;
-@property(nonatomic, assign)NSInteger bitrate;
-@property(nonatomic, assign)NSInteger fps;
-@property(nonatomic, assign)BOOL    enable;       ;
-
-+(APBToygerVideo *)defaultConfig;
-
-@end
-
-
-
-@interface APBToygerAlertConfig : NSObject
-
-@property(nonatomic, copy)NSString * title;
-@property(nonatomic, copy)NSString * message;
-@property(nonatomic, copy)NSString * leftButtonText;
-@property(nonatomic, copy)NSString * rightButtonText;
-@property(nonatomic, assign)NSInteger returnCode;
-
-
-@end
-
-@interface APBToygerTips : NSObject
-
-//required
-@property(nonatomic, strong)APBToygerAlertConfig * timeoutAlert;
-@property(nonatomic, strong)APBToygerAlertConfig * failAlert;
-@property(nonatomic, strong)APBToygerAlertConfig * limitAlert;
-@property(nonatomic, strong)APBToygerAlertConfig * networkErrorAlert;
-@property(nonatomic, strong)APBToygerAlertConfig * interruptAlert;
-
-@property (nonatomic, copy) NSString *sceneText;
-@property (nonatomic, copy) NSString *bottomText;
-@property (nonatomic, copy) NSString *topText_rectwidth;
-@property (nonatomic, copy) NSString *topText_noface;
-@property (nonatomic, copy) NSString *topText_blur;
-@property (nonatomic, copy) NSString *topText_light;
-@property (nonatomic, copy) NSString *topText_pitch;
-@property (nonatomic, copy) NSString *topText_yaw;
-@property (nonatomic, copy) NSString *topText_quality;
-@property (nonatomic, copy) NSString *topText_integrity;
-@property (nonatomic, copy) NSString *topText_max_rectwidth;
-@property (nonatomic, copy) NSString *topText_stay;
-@property (nonatomic, copy) NSString *topText_openness;
-@property (nonatomic, copy) NSString *topText_blink;
-@property (nonatomic, copy) NSString *topText_left_yaw;
-@property (nonatomic, copy) NSString *topText_right_yaw;
-@property (nonatomic, copy) NSString *topText_mouth_open;
-@property (nonatomic, copy) NSString *brandTip;
-@property (nonatomic, copy) NSString *stopScanTip;
-
-
-@property (nonatomic, copy) NSString *garfield_guideTitle;
-@property (nonatomic, copy) NSString *garfield_guideMsg;
-
-//optional
-
-@property(nonatomic, strong)APBToygerAlertConfig * unsurpportAlert;
-@property(nonatomic, strong)APBToygerAlertConfig * systemVersionErrorAlert;
-@property(nonatomic, strong)APBToygerAlertConfig * systemErrorAlert;
-@property(nonatomic, strong)APBToygerAlertConfig * cameraNoPermissionAlert;
-@property(nonatomic, strong)APBToygerAlertConfig * exitAlert;
-@property(nonatomic, strong)APBToygerAlertConfig * authorizationAlert;
-@property(nonatomic, strong)APBToygerAlertConfig * failNoRetryAlert;
-
-+(APBToygerTips *)defaultConfig;
-
-@end
-
-

+ 0 - 27
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerUploadTask.h

@@ -1,27 +0,0 @@
-//
-//  APBToygerUploadTask.h
-//  APBToygerFacade
-//
-//  Created by Dan Cong on 29/1/2018.
-//  Copyright © 2018 Alipay. All rights reserved.
-//
-
-#import <APBToygerFacade/APBToygerBaseTask.h>
-
-/**
- 上传基类,用于下沉多种UI(樱桃和加菲)下通用的逻辑
- */
-@interface APBToygerUploadTask : APBToygerBaseTask
-
-- (void)uploadImage;
-
-- (void)didFinishUploadWithSuccess:(BOOL)success
-                           retCode:(NSString *)retCode
-                        retMessage:(NSString *)msg
-                           extInfo:(NSString *)ext;
-
-- (void)handleFailWithRetCodeSub:(NSString *)retCodeSub retMessageSub:(NSString *)retMessageSub;
-
-- (void)requestAgain;
-
-@end

+ 0 - 104
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerUtils.h

@@ -1,104 +0,0 @@
-//
-//  APFUtils.h
-//  APFaceDetectBiz
-//
-//  Created by 晗羽 on 8/25/16.
-//  Copyright © 2016 Alipay. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-#import <APBToygerFacade/APBToygerFacadeDefine.h>
-
-//#import "APFaceDetectBizFacade.h"
-
-//pipeInfo线程安全操作
-static NSString *const kAPBPipeInfoMutexToken = @"";
-static id __apb_thread_safe_object_for_key(NSMutableDictionary *pipeInfo, NSString *key){
-    id ret;
-    @synchronized(kAPBPipeInfoMutexToken){
-        if ([pipeInfo isKindOfClass:[NSMutableDictionary class]] && [pipeInfo objectForKey: key]) {
-            ret = [pipeInfo objectForKey:key];
-        }
-    }
-    return ret;
-}
-
-//主线程同步操作
-#define SYNC_MAINTHREAD_BEGIN_APBT           [APBToygerUtils APBToygerMainThread:^{
-#define SYNC_MAINTHREAD_END_APBT             }];
-
-
-//从pipeInfo中获取Object,线程安全
-#define THREAD_SAFE_OBJECT_FOR_KEY(pipeInfo, key)   __apb_thread_safe_object_for_key(pipeInfo, key)
-
-//向pipeInfo中添加或修改Object,线程安全
-#define THREAD_SAFE_SET_OBJECT_FOR_KEY(pipeInfo, key, value)                                            \
-    @synchronized(kAPBPipeInfoMutexToken){                                                                 \
-        if ([pipeInfo isKindOfClass:[NSMutableDictionary class]] && key && value) {                     \
-            [pipeInfo setObject:value forKey:key];}}
-
-//删除PipeInfo中某个Object,线程安全
-#define THREAD_SAFE_REMOVE_OBJECT_FOR_KEY(pipeInfo, key)                                                \
-    @synchronized(kAPBPipeInfoMutexToken){                                                                 \
-        if ([pipeInfo isKindOfClass:[NSMutableDictionary class]] && [pipeInfo objectForKey: key]) {     \
-            [pipeInfo removeObjectForKey: key];}}
-
-//将dict中对应value增加1
-#define INCREASE_BY_ONE(pipeInfo, key){                                                                 \
-    NSInteger num = [[pipeInfo objectForKey:key]integerValue]+1;                                        \
-THREAD_SAFE_SET_OBJECT_FOR_KEY(pipeInfo, key, [NSNumber numberWithInteger:num]);}
-
-//将dict中对应value减1
-#define DECREASE_BY_ONE(pipeInfo, key){                                                                 \
-    NSInteger num = [[pipeInfo objectForKey:key]integerValue]-1;                                        \
-THREAD_SAFE_SET_OBJECT_FOR_KEY(pipeInfo, key, [NSNumber numberWithInteger:--num]);}
-
-
-
-#define LOCK(locker, ...) dispatch_semaphore_wait(locker, DISPATCH_TIME_FOREVER); \
-__VA_ARGS__; \
-dispatch_semaphore_signal(locker);
-
-
-
-
-@class MGLivenessDetectionFrameEncodedData;
-
-@interface APBToygerUtils : NSObject
-
-+ (void)APBToygerMainThread:(dispatch_block_t)block;
-
-+ (NSString *)getTextContentforKey:(NSString*)keyName;
-+ (NSString *)localizedTextForKey:(NSString *)key;
-+ (NSBundle *)getBundle;
-
-+ (int)getCodefrom:(NSString *)bisToken withLength:(int)codeLen;
-//+ (NSString *)getActionNoticeByActionType:(APFLiveActionType) actionType;
-
-//检查文件是否存在
-+ (BOOL) checkFileunderPath:(NSString *) filePath;
-
-//写入文件
-//如果文件存在,不重写,返回失败。
-//如果文件不再在,写入,返回写入结果
-+ (BOOL) writeFileunderPath:(NSString *) filePath;
-
-//删除文件
-+ (BOOL) removeFileunderPath:(NSString *) filePath;
-
-//随机文件名
-+ (NSString *)randomString:(NSInteger)len;
-
-+ (NSString *)localizedStringForKey:(NSString *)key;
-
-+ (UIImage *)loadImageFromBundleNamed:(NSString *)imageName;
-
-+ (UIWindow *)lastWindow;
-
-+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize;
-
-@end
-
-
-
-

+ 0 - 13
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Headers/APBToygerViewController.h

@@ -1,13 +0,0 @@
-//
-//  APFViewController.h
-//  APFaceDetectBiz
-//
-//  Created by 晗羽 on 8/25/16.
-//  Copyright © 2016 Alipay. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-@interface APBToygerViewController : UIViewController
--(void)setStatusBarBackgroundColor:(UIColor *)color;
-@end

BIN
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Info.plist


+ 0 - 6
nativePlugins/AP-FaceDetectModule/ios/APBToygerFacade.framework/Modules/module.modulemap

@@ -1,6 +0,0 @@
-framework module APBToygerFacade {
-  umbrella header "APBToygerFacade.h"
-
-  export *
-  module * { export * }
-}

BIN
nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/.DS_Store


BIN
nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/APPSecuritySDK


BIN
nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/APPSecuritySDK-Info.plist


+ 0 - 122
nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APDID.h

@@ -1,122 +0,0 @@
-//
-//  APDID.h
-//  APPSecuritySDK
-//
-//  Created by eric on 2021/2/7.
-//  Copyright © 2021 Alipay. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-#import "ASSTokenResult.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-typedef void(^ASSSecureSdkCallback)(ASSTokenResult* result, NSString* error);
-
-typedef void(^ASSSecureSdkOpenCallback)(NSString* token, int errorCode);
-
-@interface APDID : NSObject
-
-/*
- 异步初始化vkeyid,推荐在app启动时和收银台页面加载时调用,SDK内部会根据时间戳和设备信息进行判断是否需要进行网络请求,无线程要求
- @param params      初始化的字典参数,包含三项内容:tid、userid、environment;
-                    tid与userid选传,传入可以保证vkeyid与其正确关联,取不到传入空字符串;
-                    环境变量请与app设置中的环境相关联,字典中的value包括线上,预发,测试,日常;
- @param callback 初始化完成后的结果回调
- 
- Asynchronously initialize vkeyid(apdid), recommend to invoke this API when app launches, and cashier view presents.
- Inside SDK we will decide whether to launch network request or not based on timestamp and device info.
- No thread requirement.
- @param params:     Initialized parameters, includes 3 key-value pairs: tid, userid,environment;
- Tid and userid are optional, they can be associated with vkeyid(apdid) if passed in.
- If the values for tid and userid are not available, pass in empty NSString(@"").
- @param callback:   Callback block when token is available
- */
-+ (void) initToken:(NSDictionary*)params callback:(ASSSecureSdkCallback)callback;
-
-/*
- 同步获取vkeyid完整信息,包括vkeyid,token,clientkey,无网络请求;
- 如果首次安装app,且首次网络请求未完成或失败,将会返回降级措施:vkeyid会返回客户端随机串clientkey,token将会返回空。
- 
- Synchronously get full info of vkeyid(apdid), token and clientkey, no network requests.
- If the app is installed for the first time and first network request failed, it would return degradation result: vkeyid would be clientkey which is a client-side generated random string, token would be empty NSString @""
- */
-+ (ASSTokenResult*)getToken DEPRECATED_MSG_ATTRIBUTE("use getTokenResult instead");
-
-/*
- 同步获取vkeyid完整信息,包括vkeyid,token,clientkey,无网络请求;
- 如果首次安装app,且首次网络请求未完成或失败,将会返回降级措施:vkeyid会返回客户端随机串clientkey,token将会返回空。
- 
- Synchronously get full info of vkeyid(apdid), token and clientkey, no network requests.
- If the app is installed for the first time and first network request failed, it would return degradation result: vkeyid would be clientkey which is a client-side generated random string, token would be empty NSString @""
- */
-+ (ASSTokenResult*)getTokenResult;
-
-
-+ (ASSTokenResult *)getTokenResult:(NSString*)appName appKeyClient:(NSString*)appKeyClient;
-
-
-//===================lazada api====================//
-
-/*
- 异步初始化vkeyid,推荐在app启动时和收银台页面加载时调用,SDK内部会根据时间戳和设备信息进行判断是否需要进行网络请求,无线程要求
- @param appName      应用名称
- 
- @param appKeyClient 应用客户端密钥
- 
- @param callback     初始化完成后的结果回调,以Token作为参数
- 
- */
-+ (void)initToken:(NSString *)appName appKeyClient:(NSString *)appKeyClient callback:(ASSSecureSdkOpenCallback)callback;
-
-/*
- 同步接口返回token
- 
- @param appName      应用名称
- 
- @param appKeyClient 应用客户端密钥
- 
- */
-+ (NSString *)getResultToken;
-
-/*
- 同步接口返回token
- 
- @param appName      应用名称
- 
- @param appKeyClient 应用客户端密钥
- 
- */
-+ (NSString *)getResultToken:(NSString*)appName appKeyClient:(NSString*)appKeyClient;
-
-//===================TMN api====================//
-/*
- 异步初始化vkeyid,推荐在app启动时和收银台页面加载时调用,SDK内部会根据时间戳和设备信息进行判断是否需要进行网络请求,无线程要求
- @param appName      应用名称
- 
- @param appKeyClient 应用客户端密钥
- 
- @param sessionId    业务方传入自己的id
- 
- @param callback     初始化完成后的结果回调,以Token作为参数
- 
- */
-
-+ (void)initToken:(NSString *)appName appKeyClient:(NSString *)appKeyClient sessionId:(NSString *)sessionId callback:(ASSSecureSdkOpenCallback)callback;
-
-
-//===================ae api====================//
-
-/*
- 强制上报接口
- @param params      初始化的字典参数,包含四项内容:umid、tid、userid、environment;
- umid必传,tid与userid选传,传入可以保证vkeyid与其正确关联,取不到传入空字符串;
- 环境变量请与app设置中的环境相关联,字典中的value包括线上,预发,测试,日常;
- @param callback 初始化完成后的结果回调
- 
- */
-+ (void) updateToken:(NSDictionary*)params callback:(ASSSecureSdkCallback)callback;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 41
nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APDeviceColor.h

@@ -1,41 +0,0 @@
-//
-//  APDeviceColor.h
-//  APPSecuritySDK
-//
-//  Created by eric on 2021/2/25.
-//  Copyright © 2021 Alipay. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface APDeviceColor : NSObject
-
-/*
-*  getColorLabel 设备染色接口
-*
-*  @param bizToken 业务场景
-*  @param extParams 扩展参数
-*  @param errInfo 错误信息
-*
-*  @return 设备染色数据
-*/
-+ (NSString*) getColorLabel: (NSString*) bizToken
-                        ext: (NSDictionary *) extParams
-                      error: (NSError **) errInfo;
-
-/*
-*  getColorLabel 设备染色接口
-*
-*  @param extParams 扩展参数
-*  @param errInfo 错误信息
-*
-*  @return 设备染色数据
-*/
-+ (NSString*) getColorLabel: (NSDictionary *) extParams
-                      error: (NSError **) errInfo;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 32
nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APDynamic.h

@@ -1,32 +0,0 @@
-//
-//  APDynamic.h
-//  APPSecuritySDK-Sign
-//
-//  Created by eric on 2021/2/25.
-//  Copyright © 2021 Alipay. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface APDynamic : NSObject
-
-/*
-*  dynamicCheckDispatch 动态攻防脚本运行
-*
-*  @param dict 动态攻防脚本
-*/
-+ (void)dynamicCheckDispatch:(NSDictionary *)dict;
-
-/*
-*  dynamicCheckDispatch 动态攻防脚本运行,动态攻防脚本运行后会自动上传, 无特殊需求不建议
-*
-*  @param dict 动态攻防脚本
-*  @param callback 运行结果回调
-*/
-+ (void)dynamicCheckDispatch:(NSDictionary *)dict withCallBack: (void(^)(Boolean, NSString *))callback;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 21
nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskConfigReportRequest.h

@@ -1,21 +0,0 @@
-//
-//  APRiskConfigReportRequest.h
-//  APPSecuritySDK-Common
-//
-//  Created by eric on 2021/8/16.
-//  Copyright © 2021 Alipay. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface APRiskConfigReportRequest : NSObject
-
-@property(nonatomic, strong) NSString* os;
-@property(nonatomic, strong) NSString* apdid;
-@property(nonatomic, strong) NSDictionary* deviceDataMap;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 19
nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskConfigReportResponse.h

@@ -1,19 +0,0 @@
-//
-//  APRiskConfigReportResponse.h
-//  APPSecuritySDK-Common
-//
-//  Created by eric on 2021/8/16.
-//  Copyright © 2021 Alipay. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface APRiskConfigReportResponse : NSObject
-
-@property(nonatomic, strong) NSDictionary* resultData;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 20
nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskConfigServiceProtocol.h

@@ -1,20 +0,0 @@
-//
-//  APRiskConfigServiceProtocol.h
-//  APPSecuritySDKAdapter
-//
-//  Created by hongren on 2020/9/7.
-//  Copyright © 2020 Alipay. All rights reserved.
-//
-#import "APRiskSyncHandlerProtocol.h"
-
-@protocol APRiskConfigServiceProtocol <NSObject>
-
-@required
-- (NSString *)stringValueForKey:(NSString *)key;
-
-- (void)addConfigChangeListener:(id<APRiskSyncHandlerProtocol>)handler forKey:(NSString *)key;
-
-- (void)refreshConfig:(NSDictionary *)tConfigMap from:(NSString *)sourceType;
-
-@end
-

+ 0 - 14
nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskFileUploadProtocol.h

@@ -1,14 +0,0 @@
-//
-//  APRiskFileUploadProtocol.h
-//  APPSecuritySDKAdapter
-//
-//  Created by hongren on 2020/9/7.
-//  Copyright © 2020 Alipay. All rights reserved.
-//
-
-@protocol APRiskFileUploadProtocol <NSObject>
-
-@required
-- (NSString *)uploadCustomFile:(NSString *)path;
-
-@end

+ 0 - 21
nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskLoggerProtocol.h

@@ -1,21 +0,0 @@
-//
-//  APRiskLoggerProtocol.h
-//  APPSecuritySDK-Common
-//
-//  Created by eric on 2021/6/25.
-//  Copyright © 2021 Alipay. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@protocol APRiskLoggerProtocol <NSObject>
-
-@required
-
--(void)print:(NSString *)format, ...NS_REQUIRES_NIL_TERMINATION;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 30
nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskRPCProtocol.h

@@ -1,30 +0,0 @@
-//
-//  APRiskRPCProtocol.h
-//  APPSecuritySDKAdapter
-//
-//  Created by hongren on 2020/9/7.
-//  Copyright © 2020 Alipay. All rights reserved.
-//
-
-#import "APRiskReportRequest.h"
-#import "APRiskReportResponse.h"
-#import "APRiskRpcConfiguration.h"
-#import "APRiskConfigReportRequest.h"
-#import "APRiskConfigReportResponse.h"
-
-@protocol APRiskRPCProtocol <NSObject>
-//gateway
-
-@required
-- (APRiskReportResponse *)sendStaticRequest:(APRiskReportRequest *)data
-                               config:(APRiskRpcConfiguration*)cfg;
-
-@required
-- (APRiskConfigReportResponse *)sendConfigReportRequest:(APRiskConfigReportRequest *)data
-                               config:(APRiskRpcConfiguration*)cfg;
-
-@required
-- (BOOL)updateLog:(NSString*)log
-           config:(APRiskRpcConfiguration*)cfg;
-
-@end

+ 0 - 29
nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskRemoteLoggerProtocol.h

@@ -1,29 +0,0 @@
-//
-//  APRiskRemoteLoggerProtocol.h
-//  APPSecuritySDKAdapter
-//
-//  Created by hongren on 2020/9/7.
-//  Copyright © 2020 Alipay. All rights reserved.
-//
-
-@protocol APRiskRemoteLoggerProtocol <NSObject>
-
-@required
-- (void)writeLogWithActionId:(NSString *)event
-                   extParams:(NSArray *)args
-                       appId:(NSString *)appId
-                        seed:(NSString *)seed
-                        ucId:(NSString *)ucId;
-
-@required
-- (void)writeLogWithActionId:(NSString *)event
-                   extParams:(NSArray *)args
-                       appId:(NSString *)appId
-                        seed:(NSString *)seed
-                        ucId:(NSString *)ucId
-                     bizType:(NSString *)bizType;
-
-@required
-- (void)writeEventLog:(NSDictionary *)dict;
-
-@end

+ 0 - 68
nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskReportRequest.h

@@ -1,68 +0,0 @@
-//
-//  APRiskReportRequest.h
-//  APPSecuritySDK
-//
-//  Created by hongren on 2020/9/7.
-//  Copyright © 2020 Alipay. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-@interface APRiskReportRequest : NSObject
-
-/**
-* os type: android|ios"
-*/
-
-       @property(nonatomic, strong) NSString *os;
-           /**
-* device id for ios for static report, or device id for dynamic report both for ios and android
-*/
-
-       @property(nonatomic, strong) NSString *apdid;
-           /**
-* public region device id for android for static report
-*/
-
-       @property(nonatomic, strong) NSString *pubApdid;
-           /**
-* private region device id for android for static report
-*/
-
-       @property(nonatomic, strong) NSString *priApdid;
-           /**
-* apdid token
-*/
-
-       @property(nonatomic, strong) NSString *token;
-           /**
-* umid token
-*/
-
-       @property(nonatomic, strong) NSString *umidToken;
-           /**
-* rpc version
-*/
-
-       @property(nonatomic, strong) NSString *version;
-           /**
-* last apdid time (create time)
-*/
-
-       @property(nonatomic, strong) NSString *lastTime;
-
-       /**
-        * dynamicKey
-        */
-       @property(nonatomic,strong) NSString* dynamicKey;
-           /**
-* device info map
-*/
-
-       @property(nonatomic, strong) NSDictionary *dataMap;
-               + (Class)dataMapElementClass;
-
-       @property(nonatomic,strong) NSDictionary *bizData;
-               + (Class)bizDataElementClass;
-
-@end

+ 0 - 65
nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskReportResponse.h

@@ -1,65 +0,0 @@
-//
-//  APRiskReportResponse.h
-//  APPSecuritySDK
-//
-//  Created by hongren on 2020/9/7.
-//  Copyright © 2020 Alipay. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-@interface APRiskReportResponse : NSObject
-
-/**
- * success or not
- */
-
-        @property(nonatomic, assign) BOOL success;
-    /**
- * result code
- */
-
-        @property(nonatomic, strong) NSString *resultCode;
-
-/**
-* device id
-*/
-
-       @property(nonatomic, strong) NSString *apdid;
-           /**
-* apdid token
-*/
-
-       @property(nonatomic, strong) NSString *token;
-           /**
-* current apdid time (create time)
-*/
-
-       @property(nonatomic, strong) NSString *currentTime;
-           /**
-* rpc version
-*/
-
-       @property(nonatomic, strong) NSString *version;
-           /**
-* switch for vkey
-*/
-
-       @property(nonatomic, strong) NSString *vkeySwitch;
-           /**
-* switch for BugTrack
-*/
-
-       @property(nonatomic, strong) NSString *bugTrackSwitch;
-           /**
-* version for applist cmd
-*/
-
-       @property(nonatomic, strong) NSString *appListVer;
-
-       @property(nonatomic, strong) NSString *dynamicKey;
-
-       @property(nonatomic, strong) NSDictionary *resultData;
-                + (Class)resultDataElementClass;
-           
-@end

+ 0 - 20
nativePlugins/AP-FaceDetectModule/ios/APPSecuritySDK.framework/Headers/APRiskRpcConfiguration.h

@@ -1,20 +0,0 @@
-//
-//  APRiskRpcConfiguration.h
-//  APPSecuritySDKAdapter
-//
-//  Created by hongren on 2020/9/8.
-//  Copyright © 2020 Alipay. All rights reserved.
-//
-#import <Foundation/Foundation.h>
-
-@interface APRiskRpcConfiguration : NSObject
-// 超时时间
-@property(nonatomic, assign) int timeout;
-
-// 网关地址
-@property(nonatomic, strong) NSString* gatewayURL;
-
-// workspaceid和appid
-@property(nonatomic, strong) NSDictionary *headers;
-
-@end

Some files were not shown because too many files changed in this diff