Bladeren bron

【会员系统】用户手动注销流程补充

wanjun 4 maanden geleden
bovenliggende
commit
08cff67ca8

+ 39 - 12
PDF Office/PDF Master/MemberCenter/Model/KMMemberCenterManager.swift

@@ -487,26 +487,53 @@ class KMMemberCenterManager: NSObject {
             var activeVIP_maxDeviceNum = 0
             var activeVIP_paymentModel = ""
             var activeVIP_isAi = ""
-            if let token = activeVIP_dict["id"] { activeVIP_id = token as! String }
-            if let token = activeVIP_dict["userId"] { activeVIP_userId = token as! String }
-            if let token = activeVIP_dict["status"] { activeVIP_status = token as! Int }
-            if let token = activeVIP_dict["endDate"] { activeVIP_endDate = token as! String }
-            if let token = activeVIP_dict["payType"] { activeVIP_payType = token as! Int }
-            if let token = activeVIP_dict["productName"] { activeVIP_productName = token as! String }
-            if let token = activeVIP_dict["levels"] { activeVIP_levels = token as! String }
-            if let token = activeVIP_dict["platforms"] { activeVIP_platforms = token as! String }
-            if let token = activeVIP_dict["point"] { activeVIP_point = token as! Int }
-            if let token = activeVIP_dict["maxDeviceNum"] { activeVIP_maxDeviceNum = token as! Int }
-            if let token = activeVIP_dict["paymentModel"] { activeVIP_paymentModel = token as! String }
+            if let token = activeVIP_dict["id"] as? String { activeVIP_id = token }
+            if let token = activeVIP_dict["userId"] as? String { activeVIP_userId = token }
+            if let token = activeVIP_dict["status"] as? Int { activeVIP_status = token }
+            if let token = activeVIP_dict["endDate"] as? String { activeVIP_endDate = token }
+            if let token = activeVIP_dict["payType"] as? Int { activeVIP_payType = token }
+            if let token = activeVIP_dict["productName"] as? String { activeVIP_productName = token }
+            if let token = activeVIP_dict["levels"] as? String { activeVIP_levels = token }
+            if let token = activeVIP_dict["platforms"] as? String { activeVIP_platforms = token }
+            if let token = activeVIP_dict["point"] as? Int { activeVIP_point = token }
+            if let token = activeVIP_dict["maxDeviceNum"] as? Int { activeVIP_maxDeviceNum = token }
+            if let token = activeVIP_dict["paymentModel"] as? String { activeVIP_paymentModel = token }
             if let token = activeVIP_dict["isAi"] { activeVIP_isAi = token as! String }
             let userInfoActiveVIP = KMMemberUserInfoActiveVIP(id: activeVIP_id, userId: activeVIP_userId, status: activeVIP_status, endDate: activeVIP_endDate, payType: activeVIP_payType, productName: activeVIP_productName, levels: activeVIP_levels, platforms: activeVIP_platforms, point: activeVIP_point, maxDeviceNum: activeVIP_maxDeviceNum, paymentModel: activeVIP_paymentModel, isAi: activeVIP_isAi)
+            let activeAI_dict: NSDictionary = result_dict["activeAI"] as? NSDictionary ?? [:]
+            var activeAI_id = ""
+            var activeAI_userId = ""
+            var activeAI_status = 0
+            var activeAI_endDate = ""
+            var activeAI_payType = 0
+            var activeAI_productName = ""
+            var activeAI_levels = ""
+            var activeAI_platforms = ""
+            var activeAI_point = 0
+            var activeAI_maxDeviceNum = 0
+            var activeAI_paymentModel = ""
+            var activeAI_isAi = ""
+            if let token = activeAI_dict["id"] as? String { activeAI_id = token }
+            if let token = activeAI_dict["userId"] as? String { activeAI_userId = token }
+            if let token = activeAI_dict["status"] as? Int { activeAI_status = token }
+            if let token = activeAI_dict["endDate"] as? String { activeAI_endDate = token }
+            if let token = activeAI_dict["payType"] as? Int { activeAI_payType = token }
+            if let token = activeAI_dict["productName"] as? String { activeAI_productName = token }
+            if let token = activeAI_dict["levels"] as? String { activeAI_levels = token }
+            if let token = activeAI_dict["platforms"] as? String { activeAI_platforms = token }
+            if let token = activeAI_dict["point"] as? Int { activeAI_point = token }
+            if let token = activeAI_dict["maxDeviceNum"] as? Int { activeAI_maxDeviceNum = token }
+            if let token = activeAI_dict["paymentModel"] as? String { activeAI_paymentModel = token }
+            if let token = activeAI_dict["isAi"] as? String { activeAI_isAi = token }
+            let userInfoActiveAI = KMMemberUserInfoActiveVIP(id: activeAI_id, userId: activeAI_userId, status: activeAI_status, endDate: activeAI_endDate, payType: activeAI_payType, productName: activeAI_productName, levels: activeAI_levels, platforms: activeAI_platforms, point: activeAI_point, maxDeviceNum: activeAI_maxDeviceNum, paymentModel: activeAI_paymentModel, isAi: activeAI_isAi)
+
 
             if let token = result_dict["aiPoint"] { aiPoint = token as! Int }
             if let token = result_dict["validFlag"] { validFlag = token as! String }
             if let token = result_dict["isHaveAIDiscount"] { isHaveAIDiscount = token as! String }
             if let token = result_dict["canTrail"] { canTrail = token as! String }
 
-            let userInfo = KMMemberUserInfo(id: userId, email: email, fullName: fullName, activeVIP: [userInfoActiveVIP], aiPoint: aiPoint, validFlag: validFlag, isHaveAIDiscount: isHaveAIDiscount, canTrail: canTrail)
+            let userInfo = KMMemberUserInfo(id: userId, email: email, fullName: fullName, activeVIP: [userInfoActiveVIP], activeAI: [userInfoActiveAI], aiPoint: aiPoint, validFlag: validFlag, isHaveAIDiscount: isHaveAIDiscount, canTrail: canTrail)
             
             let result = KMMemberCenterResult(code: code, msg: message, userInfo: userInfo)
 //            let error = NSError(domain: message, code: code)

+ 5 - 2
PDF Office/PDF Master/MemberCenter/Model/KMMemberCenterResult.swift

@@ -163,17 +163,19 @@ class KMMemberUserInfo: NSObject {
     var email           : String = "" // 【必需】邮箱
     var fullName        : String = "" // 【必需】名称
     var activeVIP       : [KMMemberUserInfoActiveVIP] = [] // 【必需】活跃的会员
+    var activeAI        : [KMMemberUserInfoActiveVIP] = [] // 【必需】活跃的AI
     var aiPoint         : Int = 0     // 【必需】ai点数
     var validFlag       : String = "" // 【必需】注销(0), * 正常(1), * 停用(2), * 注销中(5);
 //    var isHavePwd       : String = "" // 【必需】1是0否 是否设置了密码
     var isHaveAIDiscount: String = "" // 【必需】1是0否 是否有ai折扣
     var canTrail        : String = "" // 【必需】1是0否 是否能试用
     
-    init(id: String = "", email: String = "", fullName: String = "", activeVIP: [KMMemberUserInfoActiveVIP] = [], aiPoint: Int = 0, validFlag: String = ""/*, isHavePwd: String = ""*/, isHaveAIDiscount: String = "", canTrail: String = "") {
+    init(id: String = "", email: String = "", fullName: String = "", activeVIP: [KMMemberUserInfoActiveVIP] = [], activeAI: [KMMemberUserInfoActiveVIP] = [], aiPoint: Int = 0, validFlag: String = ""/*, isHavePwd: String = ""*/, isHaveAIDiscount: String = "", canTrail: String = "") {
         self.id = id
         self.email = email
         self.fullName = fullName
         self.activeVIP = activeVIP
+        self.activeAI = activeAI
         self.aiPoint = aiPoint
         self.validFlag = validFlag
 //        self.isHavePwd = isHavePwd
@@ -195,7 +197,8 @@ class KMMemberUserInfoActiveVIP: NSObject {
     var maxDeviceNum    : Int    = 0  // 【可选】最大登录设备限制数
     var paymentModel    : String = "" // 【可选】支付方式 付费模式(1自动续订(vip svip) 2单次付费(永久会员))
     var isAi            : String = "" // 【可选】是否是ai产品(0否1是)
-    
+    var cycle           : Int    = 0  // 【必需】订阅周期:1、月(30天);2、季(90天);3、半年(183天);4、年(365天)
+
     init(id: String = "", userId: String = "", status: Int = 0, endDate: String = "", payType: Int = 0, productName: String = "", levels: String = "", platforms: String = "", point: Int = 0, maxDeviceNum: Int = 0, paymentModel: String = "", isAi: String = "") {
         self.id = id
         self.userId = userId

+ 121 - 2
PDF Office/PDF Master/MemberCenter/Model/KMMemberInfo.swift

@@ -27,11 +27,42 @@ import Cocoa
     var userID: String = "" // 用户ID
     var userEmail: String = "" // 用户邮箱
     var fullName: String = "" // 用户名称
-    var activeVips: [KMMemberUserInfoActiveVIP] = [] // 活跃的会员
+    var _activeVips: [KMMemberUserInfoActiveVIP] = [] // 活跃的会员
+    var _activeAis: [KMMemberUserInfoActiveVIP] = [] // 活跃的AI
+    var vip_id: String = "" // id
+    var vip_userId: String = "" // 用户id
+    var vip_status: Int = 0 // 状态 0注册1订阅中2订阅过期3试用中4试用过期
+    var vip_endDate: String = "" // 到期时间
+    var vip_payType: Int = 0 // 0未开启自动续订 1自动续订
+    var vip_productName: String = "" // 产品名字
+    var vip_levels: String = "" // 会员等级 1是免费 2是标准 3是高级
+    var vip_platforms: String = "" // 支持的平台
+    var vip_point: Int = 0 // 剩余ai点数(svip才有)
+    var vip_maxDeviceNum: Int = 0 // 最大登录设备限制数
+    var vip_paymentModel: String = "" // 支付方式 付费模式(1自动续订(vip svip) 2单次付费(永久会员))
+    var vip_isAi: String = "" // 是否是ai产品(0否1是)
+    var vip_cycle: Int = 0 // 订阅周期:1、月(30天);2、季(90天);3、半年(183天);4、年(365天)
+    var ai_id: String = "" // id
+    var ai_userId: String = "" // 用户id
+    var ai_status: Int = 0 // 状态 0注册1订阅中2订阅过期3试用中4试用过期
+    var ai_endDate: String = "" // 到期时间
+    var ai_payType: Int = 0 // 0未开启自动续订 1自动续订
+    var ai_productName: String = "" // 产品名字
+    var ai_levels: String = "" // 会员等级 1是免费 2是标准 3是高级
+    var ai_platforms: String = "" // 支持的平台
+    var ai_point: Int = 0 // 剩余ai点数(svip才有)
+    var ai_maxDeviceNum: Int = 0 // 最大登录设备限制数
+    var ai_paymentModel: String = "" // 支付方式 付费模式(1自动续订(vip svip) 2单次付费(永久会员))
+    var ai_isAi: String = "" // 是否是ai产品(0否1是)
+    var ai_cycle: Int = 0 // 订阅周期:1、月(30天);2、季(90天);3、半年(183天);4、年(365天)
+
     var aiPoint: Int = 0 // AI 点数
-    var validFlag: String = "" // 账户状态
+    var validFlag: String = "" // 注销(0), * 正常(1), * 停用(2), * 注销中(5);
     var isHaveAIDiscount: String = "" // 是否有ai折扣
     var canTrail: String = "" // 是否能试用
+    
+//    var currentTime: String = "" // 当前注销时间
+//    var logOffTime: String = "" // 注销时间
 
     
     // MARK: Get & Set
@@ -74,6 +105,92 @@ import Cocoa
         }
     }
     
+    var activeVips: [KMMemberUserInfoActiveVIP] {
+        get {
+            return _activeVips
+        }
+        set {
+            _activeVips = newValue
+            
+            for vip in _activeVips {
+                if vip_levels == "" {
+                    vip_id = vip.id
+                    vip_userId = vip.userId
+                    vip_status = vip.status
+                    vip_endDate = vip.endDate
+                    vip_payType = vip.payType
+                    vip_productName = vip.productName
+                    vip_levels = vip.levels
+                    vip_platforms = vip.platforms
+                    vip_point = vip.point
+                    vip_maxDeviceNum = vip.maxDeviceNum
+                    vip_paymentModel = vip.paymentModel
+                    vip_isAi = vip.isAi
+                    vip_cycle = vip.cycle
+                } else {
+                    if let vipLevelsInt = Int(vip_levels), let vipOtherLevelsInt = Int(vip.levels), vipLevelsInt < vipOtherLevelsInt {
+                        vip_id = vip.id
+                        vip_userId = vip.userId
+                        vip_status = vip.status
+                        vip_endDate = vip.endDate
+                        vip_payType = vip.payType
+                        vip_productName = vip.productName
+                        vip_levels = vip.levels
+                        vip_platforms = vip.platforms
+                        vip_point = vip.point
+                        vip_maxDeviceNum = vip.maxDeviceNum
+                        vip_paymentModel = vip.paymentModel
+                        vip_isAi = vip.isAi
+                        vip_cycle = vip.cycle
+                    }
+                }
+            }
+        }
+    }
+    
+    var activeAis: [KMMemberUserInfoActiveVIP] {
+        get {
+            return _activeAis
+        }
+        set {
+            _activeAis = newValue
+            
+            for vip in _activeAis {
+                if ai_levels == "" {
+                    ai_id = vip.id
+                    ai_userId = vip.userId
+                    ai_status = vip.status
+                    ai_endDate = vip.endDate
+                    ai_payType = vip.payType
+                    ai_productName = vip.productName
+                    ai_levels = vip.levels
+                    ai_platforms = vip.platforms
+                    ai_point = vip.point
+                    ai_maxDeviceNum = vip.maxDeviceNum
+                    ai_paymentModel = vip.paymentModel
+                    ai_isAi = vip.isAi
+                    ai_cycle = vip.cycle
+                } else {
+                    if let vipLevelsInt = Int(ai_levels), let vipOtherLevelsInt = Int(vip.levels), vipLevelsInt < vipOtherLevelsInt {
+                        ai_id = vip.id
+                        ai_userId = vip.userId
+                        ai_status = vip.status
+                        ai_endDate = vip.endDate
+                        ai_payType = vip.payType
+                        ai_productName = vip.productName
+                        ai_levels = vip.levels
+                        ai_platforms = vip.platforms
+                        ai_point = vip.point
+                        ai_maxDeviceNum = vip.maxDeviceNum
+                        ai_paymentModel = vip.paymentModel
+                        ai_isAi = vip.isAi
+                        ai_cycle = vip.cycle
+                    }
+                }
+            }
+        }
+    }
+    
     // MARK: Public Method
     
     func memberUserInfo(model: KMMemberUserInfo) -> Void {
@@ -84,5 +201,7 @@ import Cocoa
         validFlag = model.validFlag
         isHaveAIDiscount = model.isHaveAIDiscount
         canTrail = model.canTrail
+        activeVips = model.activeVIP
+        activeAis = model.activeAI
     }
 }

+ 44 - 2
PDF Office/PDF Master/MemberCenter/ViewModel/KMUserInfoVCModel.swift

@@ -93,14 +93,23 @@ class KMUserInfoVCModel: ObservableObject {
      */
     func signOutAction() -> Void {
         NotificationCenter.default.post(name: NSNotification.Name("CloseMenuNotification"), object: nil)
-        KMLogoutPromptWC.shared.showWindow(nil)
+        KMMemberPromptWC.shared.tipType = .logout
+        KMMemberPromptWC.shared.showWindow(nil)
     }
     
     /**
      @abstract 注销账户;
      */
     func closeAccountAction() -> Void {
-        
+        if KMMemberInfo.shared.vip_status == 1 {
+            NotificationCenter.default.post(name: NSNotification.Name("CloseMenuNotification"), object: nil)
+            KMMemberPromptWC.shared.tipType = .unsubscribe
+            KMMemberPromptWC.shared.showWindow(nil)
+        } else {
+            NotificationCenter.default.post(name: NSNotification.Name("CloseMenuNotification"), object: nil)
+            KMMemberPromptWC.shared.tipType = .signout
+            KMMemberPromptWC.shared.showWindow(nil)
+        }
     }
     
     /**
@@ -131,6 +140,39 @@ class KMUserInfoVCModel: ObservableObject {
         }
     }
     
+    /**
+     @abstract 注销账户 警告弹窗;
+     */
+    func closeAccountWarningWC() -> Void {
+        KMCloseAccountWC.shared.showWindow(nil)
+    }
+    
+    /**
+     @abstract 删除我的账户 弹窗;
+     */
+    func deleteAccountWC() -> Void {
+        KMCloseVerificationWC.shared.showWindow(nil)
+    }
+    
+    /**
+     @abstract 注销账户申请 弹窗;
+     */
+    func closeAccountApplyWC(code: String) -> Void {
+        KMMemberCenterManager.manager.userLogOffForUser(code: code) { success, result in
+            guard let result = result else { return }
+            let resultDict = result as KMMemberCenterResult
+            let msg = resultDict.msg
+            if success {
+                let logOff: KMMemberLogOff = resultDict.logOff!
+                if let token = logOff.currentTime { KMCloseApplyWC.shared.currentTime = token }
+                if let token = logOff.logOffTime { KMCloseApplyWC.shared.logOffTime = token }
+                KMCloseApplyWC.shared.showWindow(nil)
+            } else {
+                print(msg as Any)
+            }
+        }
+    }
+    
     // MARK: Private Method
     
     /**

+ 83 - 0
PDF Office/PDF Master/MemberCenter/WindowsController/KMCloseAccountWC.swift

@@ -0,0 +1,83 @@
+//
+//  KMCloseAccountWC.swift
+//  PDF Reader Pro
+//
+//  Created by wanjun on 2024/11/5.
+//
+
+import Cocoa
+
+class KMCloseAccountWC: NSWindowController {
+    
+    @IBOutlet weak var titleLabel: NSTextField!
+    @IBOutlet weak var subTitleLabel: NSTextField!
+    @IBOutlet weak var productBox: NSBox!
+    @IBOutlet weak var productView: NSView!
+    @IBOutlet weak var productLabel: NSTextField!
+    @IBOutlet weak var proView: NSView!
+    @IBOutlet weak var proLabel: NSTextField!
+    @IBOutlet weak var aiView: NSView!
+    @IBOutlet weak var aiLabel: NSTextField!
+    @IBOutlet weak var yesButton: NSButton!
+    @IBOutlet weak var cancelButton: NSButton!
+
+    private var viewModel = KMUserInfoVCModel()
+    
+    static let shared: KMCloseAccountWC = {
+        let windowC = KMCloseAccountWC(windowNibName: "KMCloseAccountWC")
+        return windowC
+    }()
+
+    override func windowDidLoad() {
+        super.windowDidLoad()
+
+        // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
+        
+//        self.window?.backgroundColor = NSColor.gray
+        
+        languageLocalized()
+        initializeUI()
+    }
+    
+    // MARK: Private Method
+    
+    private func languageLocalized() -> Void {
+        titleLabel.stringValue = NSLocalizedString("删除您的账号和相关授权", tableName: "MemberCenterLocalizable", comment: "")
+        subTitleLabel.stringValue = NSLocalizedString("注销账号会永久删除一切账号数据,包括您在此账号下购买的其他端的PDF Reader Pro的权益。您确定要继续吗?", tableName: "MemberCenterLocalizable", comment: "")
+        productLabel.stringValue = NSLocalizedString("您的产品与服务:", tableName: "MemberCenterLocalizable", comment: "")
+        proLabel.stringValue = KMMemberInfo.shared.vip_productName
+        aiLabel.stringValue = KMMemberInfo.shared.ai_productName
+        cancelButton.title = NSLocalizedString("取消", tableName: "MemberCenterLocalizable", comment: "")
+        yesButton.title = NSLocalizedString("删除我的账户", tableName: "MemberCenterLocalizable", comment: "")
+    }
+    
+    private func initializeUI() -> Void {
+        titleLabel.textColor = NSColor(named: "000000_0.85")
+        titleLabel.font = NSFont.SFProTextSemiboldFont(13)
+        subTitleLabel.textColor = NSColor(named: "000000_0.85")
+        subTitleLabel.font = NSFont.SFProTextRegularFont(12)
+        productBox.borderColor = NSColor(named: "DADBDE") ?? .gray
+        productBox.fillColor = .gray
+        productLabel.textColor = NSColor(named: "42464D")
+        productLabel.font = NSFont.SFProTextRegularFont(13)
+        if KMMemberInfo.shared.ai_productName == "" {
+            aiView.isHidden = true
+        }
+        aiLabel.textColor = NSColor(named: "42464D")
+        aiLabel.font = NSFont.SFProTextRegularFont(13)
+        yesButton.setTitleColor(color: NSColor(named: "000000") ?? NSColor.white, font: NSFont.SFProTextRegularFont(13))
+        cancelButton.setTitleColor(color: NSColor(named: "FFFFFF") ?? NSColor.white, font: NSFont.SFProTextRegularFont(13))
+    }
+    
+    // MARK: Button Action
+    
+    @IBAction func cancelButtonAction(_ sender: NSButton) {
+        self.window?.close()
+    }
+    
+    @IBAction func yesButtonAction(_ sender: NSButton) {
+        self.window?.close()
+        viewModel.deleteAccountWC()
+    }
+
+}

+ 219 - 0
PDF Office/PDF Master/MemberCenter/WindowsController/KMCloseAccountWC.xib

@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMCloseAccountWC" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <outlet property="aiLabel" destination="Kr7-zz-yoO" id="oAt-T4-teS"/>
+                <outlet property="aiView" destination="l8O-yg-Rg6" id="ra2-Qb-oUn"/>
+                <outlet property="cancelButton" destination="GzR-dW-2t8" id="TQd-yW-6a9"/>
+                <outlet property="proLabel" destination="SwJ-p9-khP" id="blm-Cr-pL7"/>
+                <outlet property="proView" destination="Fdb-Bm-gal" id="lPI-cf-Apt"/>
+                <outlet property="productBox" destination="eYu-vK-aia" id="NwN-4m-iQS"/>
+                <outlet property="productLabel" destination="H7T-rO-COK" id="isc-Jy-nuw"/>
+                <outlet property="productView" destination="DGy-QA-s5l" id="GJC-oR-5Au"/>
+                <outlet property="subTitleLabel" destination="HMV-FW-hWM" id="4oV-gD-46c"/>
+                <outlet property="titleLabel" destination="73e-3g-pCl" id="obj-Pa-dTq"/>
+                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
+                <outlet property="yesButton" destination="UDM-4Y-zsX" id="3aI-sY-fZH"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
+            <rect key="contentRect" x="196" y="240" width="480" height="270"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <view key="contentView" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="358" height="274"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="Fbr-Hw-ehd">
+                        <rect key="frame" x="20" y="218" width="318" height="16"/>
+                        <subviews>
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="73e-3g-pCl">
+                                <rect key="frame" x="-2" y="0.0" width="322" height="16"/>
+                                <textFieldCell key="cell" title="Label" id="2r6-qG-WSI">
+                                    <font key="font" usesAppearanceFont="YES"/>
+                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                        </subviews>
+                        <constraints>
+                            <constraint firstItem="73e-3g-pCl" firstAttribute="top" secondItem="Fbr-Hw-ehd" secondAttribute="top" id="4hj-Ni-KfW"/>
+                            <constraint firstAttribute="bottom" secondItem="73e-3g-pCl" secondAttribute="bottom" id="Bf1-XY-RHq"/>
+                            <constraint firstItem="73e-3g-pCl" firstAttribute="leading" secondItem="Fbr-Hw-ehd" secondAttribute="leading" id="QOA-oT-QBb"/>
+                            <constraint firstAttribute="trailing" secondItem="73e-3g-pCl" secondAttribute="trailing" id="a5L-Hs-MP3"/>
+                            <constraint firstAttribute="width" constant="318" id="ybR-6l-xWg"/>
+                        </constraints>
+                    </customView>
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="ZF3-xx-TNq">
+                        <rect key="frame" x="20" y="194" width="318" height="16"/>
+                        <subviews>
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="HMV-FW-hWM">
+                                <rect key="frame" x="-2" y="0.0" width="322" height="16"/>
+                                <textFieldCell key="cell" title="Label" id="8Qd-pM-FIz">
+                                    <font key="font" usesAppearanceFont="YES"/>
+                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                        </subviews>
+                        <constraints>
+                            <constraint firstItem="HMV-FW-hWM" firstAttribute="top" secondItem="ZF3-xx-TNq" secondAttribute="top" id="GIl-zS-H3Y"/>
+                            <constraint firstItem="HMV-FW-hWM" firstAttribute="leading" secondItem="ZF3-xx-TNq" secondAttribute="leading" id="IDg-wC-LEe"/>
+                            <constraint firstAttribute="bottom" secondItem="HMV-FW-hWM" secondAttribute="bottom" id="ooA-dh-E6I"/>
+                            <constraint firstAttribute="trailing" secondItem="HMV-FW-hWM" secondAttribute="trailing" id="zSj-uq-iVO"/>
+                        </constraints>
+                    </customView>
+                    <box boxType="custom" cornerRadius="7" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="eYu-vK-aia">
+                        <rect key="frame" x="20" y="71" width="318" height="98"/>
+                        <view key="contentView" id="vCp-aU-1BS">
+                            <rect key="frame" x="1" y="1" width="316" height="96"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="DGy-QA-s5l">
+                                    <rect key="frame" x="0.0" y="64" width="316" height="32"/>
+                                    <subviews>
+                                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="H7T-rO-COK">
+                                            <rect key="frame" x="14" y="8" width="284" height="16"/>
+                                            <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="f6J-Nt-0hj">
+                                                <font key="font" usesAppearanceFont="YES"/>
+                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                        </textField>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="H7T-rO-COK" firstAttribute="centerY" secondItem="DGy-QA-s5l" secondAttribute="centerY" id="D93-z4-6d9"/>
+                                        <constraint firstAttribute="height" constant="32" id="SFL-cS-xnb"/>
+                                        <constraint firstAttribute="trailing" secondItem="H7T-rO-COK" secondAttribute="trailing" constant="20" id="UgZ-XL-mnI"/>
+                                        <constraint firstItem="H7T-rO-COK" firstAttribute="leading" secondItem="DGy-QA-s5l" secondAttribute="leading" constant="16" id="qYF-Jh-XS7"/>
+                                    </constraints>
+                                </customView>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="Fdb-Bm-gal">
+                                    <rect key="frame" x="0.0" y="32" width="316" height="32"/>
+                                    <subviews>
+                                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SwJ-p9-khP">
+                                            <rect key="frame" x="14" y="8" width="284" height="16"/>
+                                            <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="FYY-CN-Hsr">
+                                                <font key="font" usesAppearanceFont="YES"/>
+                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                        </textField>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="SwJ-p9-khP" firstAttribute="centerY" secondItem="Fdb-Bm-gal" secondAttribute="centerY" id="HkK-fP-jVj"/>
+                                        <constraint firstItem="SwJ-p9-khP" firstAttribute="leading" secondItem="Fdb-Bm-gal" secondAttribute="leading" constant="16" id="J6a-o6-HLb"/>
+                                        <constraint firstAttribute="height" constant="32" id="KfK-fl-sFp"/>
+                                        <constraint firstAttribute="trailing" secondItem="SwJ-p9-khP" secondAttribute="trailing" constant="20" id="YHY-zA-P9T"/>
+                                    </constraints>
+                                </customView>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="l8O-yg-Rg6">
+                                    <rect key="frame" x="0.0" y="0.0" width="316" height="32"/>
+                                    <subviews>
+                                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Kr7-zz-yoO">
+                                            <rect key="frame" x="14" y="8" width="284" height="16"/>
+                                            <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="4Iy-lC-lzr">
+                                                <font key="font" usesAppearanceFont="YES"/>
+                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                        </textField>
+                                        <box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="9Ig-pa-wdF">
+                                            <rect key="frame" x="0.0" y="29" width="316" height="5"/>
+                                        </box>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="9Ig-pa-wdF" firstAttribute="top" secondItem="l8O-yg-Rg6" secondAttribute="top" id="Adw-fv-X0g"/>
+                                        <constraint firstItem="Kr7-zz-yoO" firstAttribute="centerY" secondItem="l8O-yg-Rg6" secondAttribute="centerY" id="U8n-mx-IEq"/>
+                                        <constraint firstAttribute="height" constant="32" id="Z0g-wA-lK6"/>
+                                        <constraint firstItem="Kr7-zz-yoO" firstAttribute="leading" secondItem="l8O-yg-Rg6" secondAttribute="leading" constant="16" id="pa0-34-waU"/>
+                                        <constraint firstItem="9Ig-pa-wdF" firstAttribute="leading" secondItem="l8O-yg-Rg6" secondAttribute="leading" id="qZF-Tf-3ln"/>
+                                        <constraint firstAttribute="trailing" secondItem="Kr7-zz-yoO" secondAttribute="trailing" constant="20" id="uQx-aT-Zka"/>
+                                        <constraint firstAttribute="trailing" secondItem="9Ig-pa-wdF" secondAttribute="trailing" id="uf6-xM-aSz"/>
+                                    </constraints>
+                                </customView>
+                            </subviews>
+                            <constraints>
+                                <constraint firstAttribute="bottom" secondItem="l8O-yg-Rg6" secondAttribute="bottom" id="1Ut-0A-r9h"/>
+                                <constraint firstItem="DGy-QA-s5l" firstAttribute="top" secondItem="vCp-aU-1BS" secondAttribute="top" id="IJj-gW-XyV"/>
+                                <constraint firstAttribute="trailing" secondItem="Fdb-Bm-gal" secondAttribute="trailing" id="J09-Bh-8bJ"/>
+                                <constraint firstAttribute="trailing" secondItem="DGy-QA-s5l" secondAttribute="trailing" id="VyZ-gK-DYZ"/>
+                                <constraint firstItem="l8O-yg-Rg6" firstAttribute="leading" secondItem="vCp-aU-1BS" secondAttribute="leading" id="ZcI-cS-jf6"/>
+                                <constraint firstItem="Fdb-Bm-gal" firstAttribute="leading" secondItem="vCp-aU-1BS" secondAttribute="leading" id="aXv-DU-kGP"/>
+                                <constraint firstItem="l8O-yg-Rg6" firstAttribute="top" secondItem="Fdb-Bm-gal" secondAttribute="bottom" id="b4u-h0-7PA"/>
+                                <constraint firstItem="DGy-QA-s5l" firstAttribute="leading" secondItem="vCp-aU-1BS" secondAttribute="leading" id="c2H-xe-Eyw"/>
+                                <constraint firstAttribute="trailing" secondItem="l8O-yg-Rg6" secondAttribute="trailing" id="klr-u9-7MK"/>
+                                <constraint firstItem="Fdb-Bm-gal" firstAttribute="top" secondItem="DGy-QA-s5l" secondAttribute="bottom" id="p9n-i8-gSd"/>
+                            </constraints>
+                        </view>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="318" id="xrC-ZC-O0S"/>
+                        </constraints>
+                    </box>
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="Rl4-XF-COQ">
+                        <rect key="frame" x="20" y="20" width="318" height="20"/>
+                        <subviews>
+                            <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GzR-dW-2t8">
+                                <rect key="frame" x="250" y="-7" width="75" height="32"/>
+                                <buttonCell key="cell" type="push" title="Button" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Tib-KJ-2hc">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                    <string key="keyEquivalent" base64-UTF8="YES">
+DQ
+</string>
+                                </buttonCell>
+                                <connections>
+                                    <action selector="cancelButtonAction:" target="-2" id="ddv-UH-sOl"/>
+                                </connections>
+                            </button>
+                            <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="UDM-4Y-zsX">
+                                <rect key="frame" x="181" y="-7" width="75" height="32"/>
+                                <buttonCell key="cell" type="push" title="Button" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Y0u-le-N1M">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                                <connections>
+                                    <action selector="yesButtonAction:" target="-2" id="mhg-oN-YfN"/>
+                                </connections>
+                            </button>
+                        </subviews>
+                        <constraints>
+                            <constraint firstAttribute="trailing" secondItem="GzR-dW-2t8" secondAttribute="trailing" id="5pL-0f-s1P"/>
+                            <constraint firstAttribute="bottom" secondItem="GzR-dW-2t8" secondAttribute="bottom" id="Ye2-ze-z5u"/>
+                            <constraint firstItem="GzR-dW-2t8" firstAttribute="top" secondItem="Rl4-XF-COQ" secondAttribute="top" id="fNS-mu-Uc6"/>
+                            <constraint firstItem="GzR-dW-2t8" firstAttribute="leading" secondItem="UDM-4Y-zsX" secondAttribute="trailing" constant="8" id="lLa-GI-HMi"/>
+                            <constraint firstItem="GzR-dW-2t8" firstAttribute="centerY" secondItem="UDM-4Y-zsX" secondAttribute="centerY" id="nT1-Yy-Ay9"/>
+                        </constraints>
+                    </customView>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="Rl4-XF-COQ" firstAttribute="trailing" secondItem="Fbr-Hw-ehd" secondAttribute="trailing" id="068-Jq-Ux3"/>
+                    <constraint firstItem="ZF3-xx-TNq" firstAttribute="top" secondItem="Fbr-Hw-ehd" secondAttribute="bottom" constant="8" id="8lj-da-4kU"/>
+                    <constraint firstAttribute="bottom" secondItem="Rl4-XF-COQ" secondAttribute="bottom" constant="20" id="DMR-Ku-mi6"/>
+                    <constraint firstAttribute="trailing" secondItem="Fbr-Hw-ehd" secondAttribute="trailing" constant="20" id="DuW-hP-xnO"/>
+                    <constraint firstItem="eYu-vK-aia" firstAttribute="top" secondItem="ZF3-xx-TNq" secondAttribute="bottom" constant="25" id="F9l-zY-s7Y"/>
+                    <constraint firstItem="Fbr-Hw-ehd" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" constant="40" id="IE2-6W-8Nu"/>
+                    <constraint firstItem="Rl4-XF-COQ" firstAttribute="top" secondItem="eYu-vK-aia" secondAttribute="bottom" constant="31" id="O4a-zy-09t"/>
+                    <constraint firstItem="ZF3-xx-TNq" firstAttribute="trailing" secondItem="Fbr-Hw-ehd" secondAttribute="trailing" id="Ruh-ai-KJW"/>
+                    <constraint firstItem="eYu-vK-aia" firstAttribute="leading" secondItem="Fbr-Hw-ehd" secondAttribute="leading" id="Utd-nk-wNF"/>
+                    <constraint firstItem="eYu-vK-aia" firstAttribute="trailing" secondItem="Fbr-Hw-ehd" secondAttribute="trailing" id="VDP-3I-IlO"/>
+                    <constraint firstItem="ZF3-xx-TNq" firstAttribute="leading" secondItem="Fbr-Hw-ehd" secondAttribute="leading" id="VY6-XU-IMk"/>
+                    <constraint firstItem="Rl4-XF-COQ" firstAttribute="leading" secondItem="Fbr-Hw-ehd" secondAttribute="leading" id="gU6-Io-9zU"/>
+                    <constraint firstItem="Fbr-Hw-ehd" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" constant="20" id="qAf-8p-wbJ"/>
+                </constraints>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="139" y="144"/>
+        </window>
+    </objects>
+</document>

+ 57 - 0
PDF Office/PDF Master/MemberCenter/WindowsController/KMCloseApplyWC.swift

@@ -0,0 +1,57 @@
+//
+//  KMCloseApplyWC.swift
+//  PDF Reader Pro
+//
+//  Created by wanjun on 2024/11/5.
+//
+
+import Cocoa
+
+class KMCloseApplyWC: NSWindowController {
+    
+    @IBOutlet weak var titleLabel: NSTextField!
+    @IBOutlet weak var subTitleLabel: NSTextField!
+    @IBOutlet weak var yesButton: NSButton!
+    
+    var currentTime: String = ""
+    var logOffTime: String = ""
+
+    private var viewModel = KMUserInfoVCModel()
+    
+    static let shared: KMCloseApplyWC = {
+        let windowC = KMCloseApplyWC(windowNibName: "KMCloseApplyWC")
+        return windowC
+    }()
+
+    override func windowDidLoad() {
+        super.windowDidLoad()
+
+        // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
+        
+        languageLocalized()
+        initializeUI()
+    }
+    
+    // MARK: Private Method
+    
+    private func languageLocalized() -> Void {
+        titleLabel.stringValue = NSLocalizedString("账号注销申请已提交", tableName: "MemberCenterLocalizable", comment: "")
+        subTitleLabel.stringValue = String(format: NSLocalizedString("您的帐户将于%@自动注销。欢迎您再次使用PDF Reader Pro的产品与服务!\n在%@之前,您可以使用此帐户登入并选择撤销「注销帐户」,然后继续使用帐户,您享有的权益与产品服务将会保留。", tableName: "MemberCenterLocalizable", comment: ""), logOffTime, logOffTime)
+        yesButton.title = NSLocalizedString("知道了", tableName: "MemberCenterLocalizable", comment: "")
+    }
+    
+    private func initializeUI() -> Void {
+        titleLabel.textColor = NSColor(named: "000000_0.85")
+        titleLabel.font = NSFont.SFProTextSemiboldFont(13)
+        subTitleLabel.textColor = NSColor(named: "000000_0.85")
+        subTitleLabel.font = NSFont.SFProTextRegularFont(12)
+        yesButton.setTitleColor(color: NSColor(named: "FFFFFF") ?? NSColor.white, font: NSFont.SFProTextRegularFont(13))
+    }
+    
+    // MARK: Button Action
+    
+    
+    @IBAction func yesButtonAction(_ sender: NSButton) {
+        self.window?.close()
+    }
+}

+ 82 - 0
PDF Office/PDF Master/MemberCenter/WindowsController/KMCloseApplyWC.xib

@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMCloseApplyWC" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <outlet property="subTitleLabel" destination="RB3-y4-vun" id="17d-pu-bzV"/>
+                <outlet property="titleLabel" destination="EQD-z7-1z0" id="o8l-BG-vFL"/>
+                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
+                <outlet property="yesButton" destination="H54-N6-Pzl" id="a7n-dP-Hmi"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
+            <rect key="contentRect" x="196" y="240" width="358" height="312"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <value key="minSize" type="size" width="358" height="312"/>
+            <value key="maxSize" type="size" width="358" height="312"/>
+            <view key="contentView" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="358" height="312"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="RB3-y4-vun">
+                        <rect key="frame" x="18" y="216" width="322" height="16"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="318" id="gmc-If-mgM"/>
+                        </constraints>
+                        <textFieldCell key="cell" title="Label" id="YCA-uI-6Hf">
+                            <font key="font" usesAppearanceFont="YES"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="EQD-z7-1z0">
+                        <rect key="frame" x="18" y="256" width="322" height="16"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="318" id="jb4-a1-xPP"/>
+                        </constraints>
+                        <textFieldCell key="cell" lineBreakMode="charWrapping" title="Label" id="IBg-5H-TzV">
+                            <font key="font" usesAppearanceFont="YES"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="H54-N6-Pzl">
+                        <rect key="frame" x="270" y="13" width="75" height="32"/>
+                        <buttonCell key="cell" type="push" title="Button" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="vhh-Af-vA9">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+DQ
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="yesButtonAction:" target="-2" id="7en-bu-eNo"/>
+                        </connections>
+                    </button>
+                </subviews>
+                <constraints>
+                    <constraint firstAttribute="bottom" secondItem="H54-N6-Pzl" secondAttribute="bottom" constant="20" id="1Tu-lF-FLb"/>
+                    <constraint firstAttribute="trailing" secondItem="H54-N6-Pzl" secondAttribute="trailing" constant="20" id="Fbz-nF-Wex"/>
+                    <constraint firstItem="RB3-y4-vun" firstAttribute="trailing" secondItem="EQD-z7-1z0" secondAttribute="trailing" id="PDP-BO-8OL"/>
+                    <constraint firstItem="EQD-z7-1z0" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" constant="20" id="Ucl-Xb-au7"/>
+                    <constraint firstAttribute="trailing" secondItem="EQD-z7-1z0" secondAttribute="trailing" constant="20" id="Y1P-EI-sqg"/>
+                    <constraint firstItem="RB3-y4-vun" firstAttribute="leading" secondItem="EQD-z7-1z0" secondAttribute="leading" id="s2v-wE-Hpn"/>
+                    <constraint firstItem="EQD-z7-1z0" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" constant="40" id="vb6-tm-Opi"/>
+                    <constraint firstItem="RB3-y4-vun" firstAttribute="top" secondItem="EQD-z7-1z0" secondAttribute="bottom" constant="24" id="wpl-1f-6W4"/>
+                </constraints>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="139" y="144"/>
+        </window>
+    </objects>
+</document>

+ 170 - 0
PDF Office/PDF Master/MemberCenter/WindowsController/KMCloseVerificationWC.swift

@@ -0,0 +1,170 @@
+//
+//  KMCloseVerificationWC.swift
+//  PDF Reader Pro
+//
+//  Created by wanjun on 2024/11/5.
+//
+
+import Cocoa
+import Combine
+
+class KMCloseVerificationWC: NSWindowController {
+    
+    @IBOutlet weak var titleLabel: NSTextField!
+    @IBOutlet weak var subTitleLabel1: NSTextField!
+    @IBOutlet weak var subTitleLabel2: NSTextField!
+    @IBOutlet weak var verifficationBox: NSBox!
+    @IBOutlet weak var verifficationBox2: NSBox!
+    @IBOutlet weak var verifficationTextField: NSTextField!
+    @IBOutlet weak var sendBox: KMBox!
+    @IBOutlet weak var sendLabel: NSTextField!
+    @IBOutlet weak var verifficationErrorLabel: NSTextField!
+    @IBOutlet weak var nextButton: NSButton!
+
+    private var userInfoModel = KMUserInfoVCModel()
+    private var signUpModel = KMSignUpViewModel()
+    private var cancellables = Set<AnyCancellable>()
+
+    static let shared: KMCloseVerificationWC = {
+        let windowC = KMCloseVerificationWC(windowNibName: "KMCloseVerificationWC")
+        return windowC
+    }()
+
+    override func windowDidLoad() {
+        super.windowDidLoad()
+
+        // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
+          
+        bindViewModel()
+        languageLocalized()
+        initializeUI()
+        
+        signUpModel.countDown(type: .logout)
+    }
+    
+    
+    // MARK: Private Method
+    
+    private func languageLocalized() -> Void {
+        titleLabel.stringValue = NSLocalizedString("验证您的身份", tableName: "MemberCenterLocalizable", comment: "")
+        subTitleLabel1.stringValue = NSLocalizedString("验证码已通过邮件发送至", comment: "")
+        subTitleLabel2.stringValue = KMMemberInfo.shared.userEmail
+        nextButton.title = NSLocalizedString("下一步", tableName: "MemberCenterLocalizable", comment: "")
+        verifficationErrorLabel.stringValue = String(format: "*%@", NSLocalizedString("Please enter right Verification code", tableName: "MemberCenterLocalizable", comment: ""))
+        verifficationTextField.placeholderString = NSLocalizedString("Enter Verification code", tableName: "MemberCenterLocalizable", comment: "")
+    }
+    
+    private func initializeUI() -> Void {
+        verifficationErrorLabel.isHidden = !signUpModel.passwordError()
+
+        titleLabel.textColor = NSColor(named: "000000_0.85")
+        titleLabel.font = NSFont.SFProTextSemiboldFont(13)
+        subTitleLabel1.textColor = NSColor(named: "000000_0.85")
+        subTitleLabel1.font = NSFont.SFProTextRegularFont(12)
+        subTitleLabel2.textColor = NSColor(named: "000000_0.85")
+        subTitleLabel2.font = NSFont.SFProTextRegularFont(12)
+        nextButton.setTitleColor(color: NSColor(named: "FFFFFF") ?? NSColor.white, font: NSFont.SFProTextRegularFont(13))
+        verifficationTextField.delegate = self
+        verifficationBox2.borderColor = NSColor(named: "DADBDE") ?? NSColor.gray
+        verifficationBox.borderColor = NSColor(named: "FA1E5D") ?? NSColor.gray
+        sendBox.fillColor = NSColor(named: "273C62") ?? NSColor.blue
+        sendBox.borderColor = NSColor(named: "273C62") ?? NSColor.blue
+        sendLabel.textColor = NSColor(named: "FFFFFF") ?? NSColor.white
+        sendLabel.font = NSFont.SFProTextRegularFont(16)
+        verifficationErrorLabel.textColor = NSColor(named: "FA1E5D")
+        verifficationErrorLabel.font = NSFont.SFProTextRegularFont(9)
+        
+        textfieldInputState()
+        sendBoxRefresh()
+        
+        sendBox.moveCallback =  { [weak self](mouseEntered: Bool, mouseBox: KMBox) -> Void in
+            guard let self = self else { return }
+            if self.signUpModel.sendBoxSelect { return }
+            if mouseEntered {
+                self.sendBox.fillColor = NSColor(named: "000000_0.1") ?? NSColor.blue
+                self.sendBox.borderWidth = 1
+            } else {
+                self.sendBox.fillColor = NSColor(named: "273C62") ?? NSColor.blue
+            }
+        }
+        sendBox.downCallback = { [weak self](downEntered: Bool, mouseBox: KMBox, event) -> Void in
+            guard let self = self else { return }
+            if self.signUpModel.email.count <= 0 { return }
+            if self.signUpModel.sendBoxSelect { return }
+            if downEntered {
+                self.sendBox.fillColor = NSColor(named: "273C62_0.4") ?? NSColor.blue
+                signUpModel.countDown(type: .logout)
+            }
+        }
+
+    }
+    
+    private func textfieldInputState() -> Void {
+        if signUpModel.passwordError() {
+            if signUpModel.signUpState == .verificationCode {
+                verifficationBox2.borderWidth = 0
+                verifficationBox.borderWidth = 1
+            }
+        } else {
+            if signUpModel.signUpState == .verificationCode {
+                verifficationBox2.borderWidth = 1
+                verifficationBox.borderWidth = 0
+            }
+        }
+        verifficationErrorLabel.isHidden = !signUpModel.passwordError()
+    }
+    
+    private func sendBoxRefresh() -> Void {
+        sendLabel.stringValue = signUpModel.sendContent
+        if signUpModel.sendContent == NSLocalizedString("Send", tableName: "MemberCenterLocalizable", comment: "") {
+            sendBox.fillColor = NSColor(named: "273C62") ?? NSColor.blue
+        } else {
+            if signUpModel.sendContent == NSLocalizedString("Resend", tableName: "MemberCenterLocalizable", comment: "") {
+                sendBox.fillColor = NSColor(named: "273C62") ?? NSColor.blue
+            } else {
+                sendBox.fillColor = NSColor(named: "DADBDE") ?? NSColor.gray
+                sendLabel.stringValue = String(format: "%@s", signUpModel.sendContent)
+            }
+        }
+    }
+
+    // MARK: Bind Method
+    
+    func bindViewModel() -> Void {
+        signUpModel.$passwordErrorMessage
+            .receive(on: RunLoop.main)
+            .sink { [weak self] newValue in
+                self?.verifficationErrorLabel.stringValue = newValue
+                self?.verifficationErrorLabel.isHidden = false
+            }
+            .store(in: &cancellables)
+        signUpModel.$sendContent
+            .receive(on: RunLoop.main)
+            .sink { [weak self] newValue in
+                self?.sendBoxRefresh()
+            }
+            .store(in: &cancellables)
+    }
+    
+    // MARK: Button Action
+    
+    @IBAction func yesButtonAction(_ sender: NSButton) {
+        userInfoModel.closeAccountApplyWC(code: signUpModel.verificationCode)
+    }
+}
+
+extension KMCloseVerificationWC: NSTextFieldDelegate {
+    func controlTextDidEndEditing(_ obj: Notification) {
+        let textField = obj.object as? NSTextField
+        if textField == verifficationTextField {
+            signUpModel.verificationCode = textField!.stringValue
+        }
+    }
+    
+    func controlTextDidChange(_ obj: Notification) {
+        let textField = obj.object as? NSTextField
+        if textField == verifficationTextField {
+            signUpModel.verificationCode = textField!.stringValue
+        }
+    }
+}

+ 222 - 0
PDF Office/PDF Master/MemberCenter/WindowsController/KMCloseVerificationWC.xib

@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMCloseVerificationWC" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <outlet property="nextButton" destination="XkS-qP-8ve" id="dnw-Cr-abN"/>
+                <outlet property="sendBox" destination="75O-kn-cPC" id="UXe-LP-tgV"/>
+                <outlet property="sendLabel" destination="804-1p-IdY" id="9ES-27-FzD"/>
+                <outlet property="subTitleLabel1" destination="oJp-mH-3lC" id="yy1-Gm-qDi"/>
+                <outlet property="subTitleLabel2" destination="R5y-Pm-aQl" id="Hvc-ta-0KY"/>
+                <outlet property="titleLabel" destination="mLD-zs-wyn" id="WVI-qW-hj6"/>
+                <outlet property="verifficationBox" destination="aYV-Ce-cAG" id="SUb-ew-SPl"/>
+                <outlet property="verifficationBox2" destination="ZJx-yI-SqF" id="Opx-ob-oIY"/>
+                <outlet property="verifficationErrorLabel" destination="FL7-uf-8vv" id="dQb-pu-Iww"/>
+                <outlet property="verifficationTextField" destination="DNs-CM-cMR" id="WhL-aQ-gYJ"/>
+                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
+            <rect key="contentRect" x="196" y="240" width="358" height="312"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <value key="minSize" type="size" width="358" height="312"/>
+            <value key="maxSize" type="size" width="358" height="312"/>
+            <view key="contentView" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="358" height="312"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="tfz-7G-bHk">
+                        <rect key="frame" x="20" y="216" width="318" height="32"/>
+                        <subviews>
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="oJp-mH-3lC">
+                                <rect key="frame" x="-2" y="16" width="322" height="16"/>
+                                <textFieldCell key="cell" title="Label" id="z3U-Be-b0i">
+                                    <font key="font" usesAppearanceFont="YES"/>
+                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="R5y-Pm-aQl">
+                                <rect key="frame" x="-2" y="0.0" width="322" height="16"/>
+                                <textFieldCell key="cell" title="Label" id="QOb-X5-zun">
+                                    <font key="font" usesAppearanceFont="YES"/>
+                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                        </subviews>
+                        <constraints>
+                            <constraint firstAttribute="trailing" secondItem="oJp-mH-3lC" secondAttribute="trailing" id="4wa-M8-PYz"/>
+                            <constraint firstItem="R5y-Pm-aQl" firstAttribute="top" secondItem="oJp-mH-3lC" secondAttribute="bottom" id="BKH-2d-orA"/>
+                            <constraint firstItem="R5y-Pm-aQl" firstAttribute="leading" secondItem="tfz-7G-bHk" secondAttribute="leading" id="I5W-v9-Q0t"/>
+                            <constraint firstItem="oJp-mH-3lC" firstAttribute="top" secondItem="tfz-7G-bHk" secondAttribute="top" id="S5d-zK-uqg"/>
+                            <constraint firstAttribute="trailing" secondItem="R5y-Pm-aQl" secondAttribute="trailing" id="e6v-jW-akN"/>
+                            <constraint firstItem="oJp-mH-3lC" firstAttribute="leading" secondItem="tfz-7G-bHk" secondAttribute="leading" id="l5C-45-pX5"/>
+                            <constraint firstAttribute="bottom" secondItem="R5y-Pm-aQl" secondAttribute="bottom" id="tE4-eF-c1f"/>
+                        </constraints>
+                    </customView>
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="vEh-sY-9GF">
+                        <rect key="frame" x="20" y="256" width="318" height="16"/>
+                        <subviews>
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mLD-zs-wyn">
+                                <rect key="frame" x="-2" y="0.0" width="322" height="16"/>
+                                <textFieldCell key="cell" title="Label" id="FeN-F6-cxn">
+                                    <font key="font" usesAppearanceFont="YES"/>
+                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                        </subviews>
+                        <constraints>
+                            <constraint firstAttribute="trailing" secondItem="mLD-zs-wyn" secondAttribute="trailing" id="AtK-5O-h9P"/>
+                            <constraint firstAttribute="bottom" secondItem="mLD-zs-wyn" secondAttribute="bottom" id="Czo-CF-Dwp"/>
+                            <constraint firstAttribute="width" constant="318" id="NWn-SL-98n"/>
+                            <constraint firstItem="mLD-zs-wyn" firstAttribute="leading" secondItem="vEh-sY-9GF" secondAttribute="leading" id="hLa-qY-pBy"/>
+                            <constraint firstItem="mLD-zs-wyn" firstAttribute="top" secondItem="vEh-sY-9GF" secondAttribute="top" id="hfR-Vi-cd8"/>
+                        </constraints>
+                    </customView>
+                    <box boxType="custom" cornerRadius="1" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="aYV-Ce-cAG">
+                        <rect key="frame" x="20" y="139" width="318" height="28"/>
+                        <view key="contentView" id="DyA-hH-FXd">
+                            <rect key="frame" x="1" y="1" width="316" height="26"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="Ura-Fv-epD">
+                                    <rect key="frame" x="0.0" y="0.0" width="316" height="26"/>
+                                    <subviews>
+                                        <box boxType="custom" cornerRadius="1" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="ZJx-yI-SqF">
+                                            <rect key="frame" x="0.0" y="0.0" width="263" height="26"/>
+                                            <view key="contentView" id="Cm1-Fe-4uJ">
+                                                <rect key="frame" x="1" y="1" width="261" height="24"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                <subviews>
+                                                    <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="DNs-CM-cMR">
+                                                        <rect key="frame" x="6" y="4" width="249" height="16"/>
+                                                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" id="mla-wm-jCo">
+                                                            <font key="font" usesAppearanceFont="YES"/>
+                                                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                </subviews>
+                                                <constraints>
+                                                    <constraint firstAttribute="trailing" secondItem="DNs-CM-cMR" secondAttribute="trailing" constant="8" id="HV0-2d-AMv"/>
+                                                    <constraint firstItem="DNs-CM-cMR" firstAttribute="leading" secondItem="Cm1-Fe-4uJ" secondAttribute="leading" constant="8" id="qHx-cZ-gqu"/>
+                                                </constraints>
+                                            </view>
+                                            <constraints>
+                                                <constraint firstItem="DNs-CM-cMR" firstAttribute="centerY" secondItem="ZJx-yI-SqF" secondAttribute="centerY" id="f7J-V2-WIs"/>
+                                            </constraints>
+                                        </box>
+                                        <box boxType="custom" borderWidth="0.0" cornerRadius="1" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="75O-kn-cPC" customClass="KMBox" customModule="PDF_Reader_Pro" customModuleProvider="target">
+                                            <rect key="frame" x="263" y="0.0" width="53" height="26"/>
+                                            <view key="contentView" id="PFv-m3-psd">
+                                                <rect key="frame" x="0.0" y="0.0" width="53" height="26"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                <subviews>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="804-1p-IdY">
+                                                        <rect key="frame" x="6" y="5" width="41" height="16"/>
+                                                        <textFieldCell key="cell" lineBreakMode="clipping" alignment="center" title="Label" id="jn0-8P-A8z">
+                                                            <font key="font" usesAppearanceFont="YES"/>
+                                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                </subviews>
+                                                <constraints>
+                                                    <constraint firstAttribute="trailing" secondItem="804-1p-IdY" secondAttribute="trailing" constant="8" id="0y1-bk-Fg9"/>
+                                                    <constraint firstItem="804-1p-IdY" firstAttribute="leading" secondItem="PFv-m3-psd" secondAttribute="leading" constant="8" id="2Qb-05-aNn"/>
+                                                </constraints>
+                                            </view>
+                                            <constraints>
+                                                <constraint firstItem="804-1p-IdY" firstAttribute="centerY" secondItem="75O-kn-cPC" secondAttribute="centerY" id="8Mf-9f-c7h"/>
+                                            </constraints>
+                                        </box>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="ZJx-yI-SqF" firstAttribute="top" secondItem="Ura-Fv-epD" secondAttribute="top" id="5UH-o5-uaF"/>
+                                        <constraint firstAttribute="bottom" secondItem="75O-kn-cPC" secondAttribute="bottom" id="9y3-f9-QKG"/>
+                                        <constraint firstAttribute="trailing" secondItem="75O-kn-cPC" secondAttribute="trailing" id="JMG-Qg-qUR"/>
+                                        <constraint firstItem="75O-kn-cPC" firstAttribute="leading" secondItem="ZJx-yI-SqF" secondAttribute="trailing" id="Lyr-mC-wNi"/>
+                                        <constraint firstItem="ZJx-yI-SqF" firstAttribute="leading" secondItem="Ura-Fv-epD" secondAttribute="leading" id="axx-ig-eTF"/>
+                                        <constraint firstAttribute="bottom" secondItem="ZJx-yI-SqF" secondAttribute="bottom" id="chA-FP-B34"/>
+                                        <constraint firstItem="75O-kn-cPC" firstAttribute="top" secondItem="Ura-Fv-epD" secondAttribute="top" id="mhN-GE-SYK"/>
+                                    </constraints>
+                                </customView>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="Ura-Fv-epD" firstAttribute="leading" secondItem="DyA-hH-FXd" secondAttribute="leading" id="Ep0-VH-7Kc"/>
+                                <constraint firstAttribute="bottom" secondItem="Ura-Fv-epD" secondAttribute="bottom" id="LJ9-CY-H6s"/>
+                                <constraint firstAttribute="trailing" secondItem="Ura-Fv-epD" secondAttribute="trailing" id="Zea-e5-CaK"/>
+                                <constraint firstItem="Ura-Fv-epD" firstAttribute="top" secondItem="DyA-hH-FXd" secondAttribute="top" id="uKE-gY-Xp0"/>
+                            </constraints>
+                        </view>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="28" id="bhF-S1-aat"/>
+                        </constraints>
+                    </box>
+                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FL7-uf-8vv">
+                        <rect key="frame" x="18" y="123" width="322" height="16"/>
+                        <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="da7-lc-exz">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="R3q-4A-0hq">
+                        <rect key="frame" x="20" y="20" width="318" height="20"/>
+                        <subviews>
+                            <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XkS-qP-8ve">
+                                <rect key="frame" x="250" y="-7" width="75" height="32"/>
+                                <buttonCell key="cell" type="push" title="Button" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="fzZ-6c-bKO">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                    <string key="keyEquivalent" base64-UTF8="YES">
+DQ
+</string>
+                                </buttonCell>
+                                <connections>
+                                    <action selector="yesButtonAction:" target="-2" id="SD5-lQ-ngr"/>
+                                </connections>
+                            </button>
+                        </subviews>
+                        <constraints>
+                            <constraint firstAttribute="trailing" secondItem="XkS-qP-8ve" secondAttribute="trailing" id="W2T-yT-8ah"/>
+                            <constraint firstAttribute="bottom" secondItem="XkS-qP-8ve" secondAttribute="bottom" id="dt6-2a-OT6"/>
+                            <constraint firstItem="XkS-qP-8ve" firstAttribute="top" secondItem="R3q-4A-0hq" secondAttribute="top" id="yW4-by-tLS"/>
+                        </constraints>
+                    </customView>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="vEh-sY-9GF" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" constant="40" id="2VK-4R-Cs5"/>
+                    <constraint firstItem="R3q-4A-0hq" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" constant="20" id="2ZU-3l-04O"/>
+                    <constraint firstAttribute="trailing" secondItem="vEh-sY-9GF" secondAttribute="trailing" constant="20" id="Fn3-j1-5SO"/>
+                    <constraint firstItem="vEh-sY-9GF" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" constant="20" id="Jqq-hr-Uc5"/>
+                    <constraint firstAttribute="trailing" secondItem="aYV-Ce-cAG" secondAttribute="trailing" constant="20" id="L8N-ay-M7K"/>
+                    <constraint firstItem="FL7-uf-8vv" firstAttribute="top" secondItem="aYV-Ce-cAG" secondAttribute="bottom" id="M6a-PY-wdT"/>
+                    <constraint firstItem="aYV-Ce-cAG" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" constant="20" id="Mxk-oz-5n0"/>
+                    <constraint firstItem="FL7-uf-8vv" firstAttribute="trailing" secondItem="aYV-Ce-cAG" secondAttribute="trailing" id="N2I-KT-lH1"/>
+                    <constraint firstAttribute="trailing" secondItem="R3q-4A-0hq" secondAttribute="trailing" constant="20" id="OdS-Ha-8lD"/>
+                    <constraint firstItem="R3q-4A-0hq" firstAttribute="top" secondItem="aYV-Ce-cAG" secondAttribute="bottom" constant="99" id="TVi-6V-lBf"/>
+                    <constraint firstItem="FL7-uf-8vv" firstAttribute="leading" secondItem="aYV-Ce-cAG" secondAttribute="leading" id="YAU-9L-qSe"/>
+                    <constraint firstItem="tfz-7G-bHk" firstAttribute="trailing" secondItem="vEh-sY-9GF" secondAttribute="trailing" id="cBI-iV-Ann"/>
+                    <constraint firstItem="tfz-7G-bHk" firstAttribute="top" secondItem="vEh-sY-9GF" secondAttribute="bottom" constant="8" id="qFR-Bw-ltw"/>
+                    <constraint firstItem="tfz-7G-bHk" firstAttribute="leading" secondItem="vEh-sY-9GF" secondAttribute="leading" id="qKd-Tw-JHd"/>
+                    <constraint firstAttribute="bottom" secondItem="R3q-4A-0hq" secondAttribute="bottom" constant="20" id="sb8-jz-OjN"/>
+                </constraints>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="139" y="104"/>
+        </window>
+    </objects>
+</document>

+ 57 - 14
PDF Office/PDF Master/MemberCenter/WindowsController/KMLogoutPromptWC.swift

@@ -1,5 +1,5 @@
 //
-//  KMLogoutPromptWC.swift
+//  KMMemberPromptWC.swift
 //  PDF Reader Pro
 //
 //  Created by wanjun on 2024/11/4.
@@ -7,7 +7,13 @@
 
 import Cocoa
 
-class KMLogoutPromptWC: NSWindowController {
+@objc enum KMMemberTipType : Int {
+    case logout = 0     // 验证码
+    case unsubscribe    // 注销账户 存在会员中
+    case signout        // 注销账户
+}
+
+class KMMemberPromptWC: NSWindowController {
     
     @IBOutlet weak var titleLabel: NSTextField!
     @IBOutlet weak var subTitleLabel: NSTextField!
@@ -16,8 +22,10 @@ class KMLogoutPromptWC: NSWindowController {
 
     private var viewModel = KMUserInfoVCModel()
     
-    static let shared: KMLogoutPromptWC = {
-        let windowC = KMLogoutPromptWC(windowNibName: "KMLogoutPromptWC")
+    var tipType: KMMemberTipType = .logout
+    
+    static let shared: KMMemberPromptWC = {
+        let windowC = KMMemberPromptWC(windowNibName: "KMMemberPromptWC")
         return windowC
     }()
 
@@ -33,19 +41,54 @@ class KMLogoutPromptWC: NSWindowController {
     // MARK: Private Method
     
     private func languageLocalized() -> Void {
-        titleLabel.stringValue = NSLocalizedString("退出登录", tableName: "MemberCenterLocalizable", comment: "")
-        subTitleLabel.stringValue = NSLocalizedString("确定要退出当前账号吗?", tableName: "MemberCenterLocalizable", comment: "")
-        cancelButton.title = NSLocalizedString("Cancel", tableName: "MemberCenterLocalizable", comment: "")
-        yesButton.title = NSLocalizedString("Yes", tableName: "MemberCenterLocalizable", comment: "")
+        var title = ""
+        var subTitle = ""
+        var cance = ""
+        var yes = ""
+        if tipType == .logout {
+            title = "退出登录"
+            subTitle = "确定要退出当前账号吗?"
+            cance = "Cancel"
+            yes = "Yes"
+        } else if tipType == .unsubscribe {
+            title = "提示"
+            subTitle = "您当前处于会员订阅中,以防下个周期继续扣费,请先在支付平台取消订阅后,再操作注销账户"
+            yes = "知道了"
+        } else if tipType == .signout {
+            title = "警告"
+            subTitle = "注销账号会永久删除一切账号数据,包括您在此账号下购买的其他端的PDF Reader Pro的权益。您确定要继续吗?"
+            cance = "Cancel"
+            yes = "Yes"
+        }
+        titleLabel.stringValue = NSLocalizedString(title, tableName: "MemberCenterLocalizable", comment: "")
+        subTitleLabel.stringValue = NSLocalizedString(subTitle, tableName: "MemberCenterLocalizable", comment: "")
+        cancelButton.title = NSLocalizedString(cance, tableName: "MemberCenterLocalizable", comment: "")
+        yesButton.title = NSLocalizedString(yes, tableName: "MemberCenterLocalizable", comment: "")
     }
     
     private func initializeUI() -> Void {
-        titleLabel.textColor = NSColor(named: "000000_0.85")
-        titleLabel.font = NSFont.SFProTextSemiboldFont(13)
-        subTitleLabel.textColor = NSColor(named: "000000_0.85")
-        subTitleLabel.font = NSFont.SFProTextRegularFont(12)
-        cancelButton.setTitleColor(color: NSColor(named: "000000") ?? NSColor.white, font: NSFont.SFProTextRegularFont(13))
-        yesButton.setTitleColor(color: NSColor(named: "FFFFFF") ?? NSColor.white, font: NSFont.SFProTextRegularFont(13))
+        if tipType == .logout {
+            titleLabel.textColor = NSColor(named: "000000_0.85")
+            titleLabel.font = NSFont.SFProTextSemiboldFont(13)
+            subTitleLabel.textColor = NSColor(named: "000000_0.85")
+            subTitleLabel.font = NSFont.SFProTextRegularFont(12)
+            cancelButton.setTitleColor(color: NSColor(named: "000000") ?? NSColor.white, font: NSFont.SFProTextRegularFont(13))
+            yesButton.setTitleColor(color: NSColor(named: "FFFFFF") ?? NSColor.white, font: NSFont.SFProTextRegularFont(13))
+        } else if tipType == .unsubscribe {
+            titleLabel.textColor = NSColor(named: "000000_0.85")
+            titleLabel.font = NSFont.SFProTextSemiboldFont(13)
+            subTitleLabel.textColor = NSColor(named: "000000_0.85")
+            subTitleLabel.font = NSFont.SFProTextRegularFont(12)
+            cancelButton.isHidden = true
+            yesButton.setTitleColor(color: NSColor(named: "FFFFFF") ?? NSColor.white, font: NSFont.SFProTextRegularFont(13))
+        } else if tipType == .signout {
+            titleLabel.textColor = NSColor(named: "000000_0.85")
+            titleLabel.font = NSFont.SFProTextSemiboldFont(13)
+            subTitleLabel.textColor = NSColor(named: "000000_0.85")
+            subTitleLabel.font = NSFont.SFProTextRegularFont(12)
+            cancelButton.setTitleColor(color: NSColor(named: "000000") ?? NSColor.white, font: NSFont.SFProTextRegularFont(13))
+            yesButton.setTitleColor(color: NSColor(named: "FFFFFF") ?? NSColor.white, font: NSFont.SFProTextRegularFont(13))
+        }
     }
     
     // MARK: Button Action

+ 118 - 0
PDF Office/PDF Master/MemberCenter/WindowsController/KMMemberPromptWC.swift

@@ -0,0 +1,118 @@
+//
+//  KMMemberPromptWC.swift
+//  PDF Reader Pro
+//
+//  Created by wanjun on 2024/11/4.
+//
+
+import Cocoa
+
+@objc enum KMMemberTipType : Int {
+    case logout = 0     // 验证码
+    case unsubscribe    // 注销账户 存在会员中
+    case signout        // 注销账户
+}
+
+class KMMemberPromptWC: NSWindowController {
+    
+    @IBOutlet weak var titleLabel: NSTextField!
+    @IBOutlet weak var subTitleLabel: NSTextField!
+    @IBOutlet weak var cancelButton: NSButton!
+    @IBOutlet weak var yesButton: NSButton!
+
+    private var viewModel = KMUserInfoVCModel()
+    
+    var tipType: KMMemberTipType = .logout
+    
+    static let shared: KMMemberPromptWC = {
+        let windowC = KMMemberPromptWC(windowNibName: "KMMemberPromptWC")
+        return windowC
+    }()
+
+    override func windowDidLoad() {
+        super.windowDidLoad()
+
+        // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
+        
+        languageLocalized()
+        initializeUI()
+    }
+    
+    // MARK: Private Method
+    
+    private func languageLocalized() -> Void {
+        var title = ""
+        var subTitle = ""
+        var cance = ""
+        var yes = ""
+        if tipType == .logout {
+            title = "退出登录"
+            subTitle = "确定要退出当前账号吗?"
+            cance = "Cancel"
+            yes = "Yes"
+        } else if tipType == .unsubscribe {
+            title = "提示"
+            subTitle = "您当前处于会员订阅中,以防下个周期继续扣费,请先在支付平台取消订阅后,再操作注销账户"
+            yes = "知道了"
+        } else if tipType == .signout {
+            title = "警告"
+            subTitle = "注销账号会永久删除一切账号数据,包括您在此账号下购买的其他端的PDF Reader Pro的权益。您确定要继续吗?"
+            cance = "Cancel"
+            yes = "Yes"
+        }
+        titleLabel.stringValue = NSLocalizedString(title, tableName: "MemberCenterLocalizable", comment: "")
+        subTitleLabel.stringValue = NSLocalizedString(subTitle, tableName: "MemberCenterLocalizable", comment: "")
+        cancelButton.title = NSLocalizedString(cance, tableName: "MemberCenterLocalizable", comment: "")
+        yesButton.title = NSLocalizedString(yes, tableName: "MemberCenterLocalizable", comment: "")
+    }
+    
+    private func initializeUI() -> Void {
+        if tipType == .logout {
+            titleLabel.textColor = NSColor(named: "000000_0.85")
+            titleLabel.font = NSFont.SFProTextSemiboldFont(13)
+            subTitleLabel.textColor = NSColor(named: "000000_0.85")
+            subTitleLabel.font = NSFont.SFProTextRegularFont(12)
+            cancelButton.setTitleColor(color: NSColor(named: "000000") ?? NSColor.white, font: NSFont.SFProTextRegularFont(13))
+            yesButton.setTitleColor(color: NSColor(named: "FFFFFF") ?? NSColor.white, font: NSFont.SFProTextRegularFont(13))
+        } else if tipType == .unsubscribe {
+            titleLabel.textColor = NSColor(named: "000000_0.85")
+            titleLabel.font = NSFont.SFProTextSemiboldFont(13)
+            subTitleLabel.textColor = NSColor(named: "000000_0.85")
+            subTitleLabel.font = NSFont.SFProTextRegularFont(12)
+            cancelButton.isHidden = true
+            yesButton.setTitleColor(color: NSColor(named: "FFFFFF") ?? NSColor.white, font: NSFont.SFProTextRegularFont(13))
+        } else if tipType == .signout {
+            titleLabel.textColor = NSColor(named: "000000_0.85")
+            titleLabel.font = NSFont.SFProTextSemiboldFont(13)
+            subTitleLabel.textColor = NSColor(named: "000000_0.85")
+            subTitleLabel.font = NSFont.SFProTextRegularFont(12)
+            cancelButton.setTitleColor(color: NSColor(named: "000000") ?? NSColor.white, font: NSFont.SFProTextRegularFont(13))
+            yesButton.setTitleColor(color: NSColor(named: "FFFFFF") ?? NSColor.white, font: NSFont.SFProTextRegularFont(13))
+        }
+    }
+    
+    // MARK: Button Action
+    
+    @IBAction func cancelButtonAction(_ sender: NSButton) {
+        if tipType == .logout {
+            self.window?.close()
+            viewModel.expandPersonalCenter()
+        } else if tipType == .unsubscribe {
+        } else if tipType == .signout {
+            self.window?.close()
+        }
+    }
+    
+    @IBAction func yesButtonAction(_ sender: NSButton) {
+        if tipType == .logout {
+            self.window?.close()
+            viewModel.confirmExitAction()
+        } else if tipType == .unsubscribe {
+            self.window?.close()
+        } else if tipType == .signout {
+            self.window?.close()
+            viewModel.closeAccountWarningWC()
+        }
+    }
+
+}

+ 9 - 3
PDF Office/PDF Master/MemberCenter/WindowsController/KMLogoutPromptWC.xib

@@ -6,7 +6,7 @@
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMLogoutPromptWC" customModule="PDF_Reader_Pro" customModuleProvider="target">
+        <customObject id="-2" userLabel="File's Owner" customClass="KMMemberPromptWC" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <connections>
                 <outlet property="cancelButton" destination="8xl-n1-Kt9" id="u3j-vT-ZsO"/>
                 <outlet property="subTitleLabel" destination="C2z-bX-lgK" id="TWx-rw-wf3"/>
@@ -29,7 +29,10 @@
                 <subviews>
                     <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="A6Z-Od-O7u">
                         <rect key="frame" x="18" y="125" width="296" height="16"/>
-                        <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="tcg-kV-NVS">
+                        <constraints>
+                            <constraint firstAttribute="width" constant="292" id="Ff2-97-DHB"/>
+                        </constraints>
+                        <textFieldCell key="cell" lineBreakMode="charWrapping" title="Label" id="tcg-kV-NVS">
                             <font key="font" usesAppearanceFont="YES"/>
                             <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
                             <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
@@ -37,7 +40,10 @@
                     </textField>
                     <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="C2z-bX-lgK">
                         <rect key="frame" x="18" y="101" width="296" height="16"/>
-                        <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="hH5-YO-gJX">
+                        <constraints>
+                            <constraint firstAttribute="width" constant="292" id="16l-P5-OJQ"/>
+                        </constraints>
+                        <textFieldCell key="cell" title="Label" id="hH5-YO-gJX">
                             <font key="font" usesAppearanceFont="YES"/>
                             <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
                             <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>

+ 64 - 16
PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

@@ -757,12 +757,30 @@
 		9F2EA9032CD858BA00FF772A /* KMMemberProductResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F2EA9022CD858BA00FF772A /* KMMemberProductResult.swift */; };
 		9F2EA9042CD858BA00FF772A /* KMMemberProductResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F2EA9022CD858BA00FF772A /* KMMemberProductResult.swift */; };
 		9F2EA9052CD858BA00FF772A /* KMMemberProductResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F2EA9022CD858BA00FF772A /* KMMemberProductResult.swift */; };
-		9F33C9C12CD8E2550080D3C2 /* KMLogoutPromptWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F33C9BF2CD8E2550080D3C2 /* KMLogoutPromptWC.swift */; };
-		9F33C9C22CD8E2550080D3C2 /* KMLogoutPromptWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F33C9BF2CD8E2550080D3C2 /* KMLogoutPromptWC.swift */; };
-		9F33C9C32CD8E2550080D3C2 /* KMLogoutPromptWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F33C9BF2CD8E2550080D3C2 /* KMLogoutPromptWC.swift */; };
-		9F33C9C42CD8E2550080D3C2 /* KMLogoutPromptWC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F33C9C02CD8E2550080D3C2 /* KMLogoutPromptWC.xib */; };
-		9F33C9C52CD8E2550080D3C2 /* KMLogoutPromptWC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F33C9C02CD8E2550080D3C2 /* KMLogoutPromptWC.xib */; };
-		9F33C9C62CD8E2550080D3C2 /* KMLogoutPromptWC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F33C9C02CD8E2550080D3C2 /* KMLogoutPromptWC.xib */; };
+		9F33C9C12CD8E2550080D3C2 /* KMMemberPromptWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F33C9BF2CD8E2550080D3C2 /* KMMemberPromptWC.swift */; };
+		9F33C9C22CD8E2550080D3C2 /* KMMemberPromptWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F33C9BF2CD8E2550080D3C2 /* KMMemberPromptWC.swift */; };
+		9F33C9C32CD8E2550080D3C2 /* KMMemberPromptWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F33C9BF2CD8E2550080D3C2 /* KMMemberPromptWC.swift */; };
+		9F33C9C42CD8E2550080D3C2 /* KMMemberPromptWC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F33C9C02CD8E2550080D3C2 /* KMMemberPromptWC.xib */; };
+		9F33C9C52CD8E2550080D3C2 /* KMMemberPromptWC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F33C9C02CD8E2550080D3C2 /* KMMemberPromptWC.xib */; };
+		9F33C9C62CD8E2550080D3C2 /* KMMemberPromptWC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F33C9C02CD8E2550080D3C2 /* KMMemberPromptWC.xib */; };
+		9F33C9C92CDA05B80080D3C2 /* KMCloseAccountWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F33C9C72CDA05B80080D3C2 /* KMCloseAccountWC.swift */; };
+		9F33C9CA2CDA05B80080D3C2 /* KMCloseAccountWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F33C9C72CDA05B80080D3C2 /* KMCloseAccountWC.swift */; };
+		9F33C9CB2CDA05B80080D3C2 /* KMCloseAccountWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F33C9C72CDA05B80080D3C2 /* KMCloseAccountWC.swift */; };
+		9F33C9CC2CDA05B80080D3C2 /* KMCloseAccountWC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F33C9C82CDA05B80080D3C2 /* KMCloseAccountWC.xib */; };
+		9F33C9CD2CDA05B80080D3C2 /* KMCloseAccountWC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F33C9C82CDA05B80080D3C2 /* KMCloseAccountWC.xib */; };
+		9F33C9CE2CDA05B80080D3C2 /* KMCloseAccountWC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F33C9C82CDA05B80080D3C2 /* KMCloseAccountWC.xib */; };
+		9F33C9D12CDA21D70080D3C2 /* KMCloseVerificationWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F33C9CF2CDA21D70080D3C2 /* KMCloseVerificationWC.swift */; };
+		9F33C9D22CDA21D70080D3C2 /* KMCloseVerificationWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F33C9CF2CDA21D70080D3C2 /* KMCloseVerificationWC.swift */; };
+		9F33C9D32CDA21D70080D3C2 /* KMCloseVerificationWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F33C9CF2CDA21D70080D3C2 /* KMCloseVerificationWC.swift */; };
+		9F33C9D42CDA21D70080D3C2 /* KMCloseVerificationWC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F33C9D02CDA21D70080D3C2 /* KMCloseVerificationWC.xib */; };
+		9F33C9D52CDA21D70080D3C2 /* KMCloseVerificationWC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F33C9D02CDA21D70080D3C2 /* KMCloseVerificationWC.xib */; };
+		9F33C9D62CDA21D70080D3C2 /* KMCloseVerificationWC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F33C9D02CDA21D70080D3C2 /* KMCloseVerificationWC.xib */; };
+		9F33C9D92CDA370D0080D3C2 /* KMCloseApplyWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F33C9D72CDA370D0080D3C2 /* KMCloseApplyWC.swift */; };
+		9F33C9DA2CDA370D0080D3C2 /* KMCloseApplyWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F33C9D72CDA370D0080D3C2 /* KMCloseApplyWC.swift */; };
+		9F33C9DB2CDA370D0080D3C2 /* KMCloseApplyWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F33C9D72CDA370D0080D3C2 /* KMCloseApplyWC.swift */; };
+		9F33C9DC2CDA370D0080D3C2 /* KMCloseApplyWC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F33C9D82CDA370D0080D3C2 /* KMCloseApplyWC.xib */; };
+		9F33C9DD2CDA370D0080D3C2 /* KMCloseApplyWC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F33C9D82CDA370D0080D3C2 /* KMCloseApplyWC.xib */; };
+		9F33C9DE2CDA370D0080D3C2 /* KMCloseApplyWC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F33C9D82CDA370D0080D3C2 /* KMCloseApplyWC.xib */; };
 		9F39B9442A661ED500930ACA /* KMHomeScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F39B9432A661ED500930ACA /* KMHomeScrollView.swift */; };
 		9F39B9452A661ED500930ACA /* KMHomeScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F39B9432A661ED500930ACA /* KMHomeScrollView.swift */; };
 		9F39B9462A661ED500930ACA /* KMHomeScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F39B9432A661ED500930ACA /* KMHomeScrollView.swift */; };
@@ -6013,8 +6031,14 @@
 		9F221ED529A9EC0900978A59 /* KMFillSignTextPanel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMFillSignTextPanel.swift; sourceTree = "<group>"; };
 		9F221ED629A9EC0900978A59 /* KMFillSignTextPanel.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMFillSignTextPanel.xib; sourceTree = "<group>"; };
 		9F2EA9022CD858BA00FF772A /* KMMemberProductResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMMemberProductResult.swift; sourceTree = "<group>"; };
-		9F33C9BF2CD8E2550080D3C2 /* KMLogoutPromptWC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMLogoutPromptWC.swift; sourceTree = "<group>"; };
-		9F33C9C02CD8E2550080D3C2 /* KMLogoutPromptWC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMLogoutPromptWC.xib; sourceTree = "<group>"; };
+		9F33C9BF2CD8E2550080D3C2 /* KMMemberPromptWC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMMemberPromptWC.swift; sourceTree = "<group>"; };
+		9F33C9C02CD8E2550080D3C2 /* KMMemberPromptWC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMMemberPromptWC.xib; sourceTree = "<group>"; };
+		9F33C9C72CDA05B80080D3C2 /* KMCloseAccountWC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCloseAccountWC.swift; sourceTree = "<group>"; };
+		9F33C9C82CDA05B80080D3C2 /* KMCloseAccountWC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMCloseAccountWC.xib; sourceTree = "<group>"; };
+		9F33C9CF2CDA21D70080D3C2 /* KMCloseVerificationWC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCloseVerificationWC.swift; sourceTree = "<group>"; };
+		9F33C9D02CDA21D70080D3C2 /* KMCloseVerificationWC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMCloseVerificationWC.xib; sourceTree = "<group>"; };
+		9F33C9D72CDA370D0080D3C2 /* KMCloseApplyWC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCloseApplyWC.swift; sourceTree = "<group>"; };
+		9F33C9D82CDA370D0080D3C2 /* KMCloseApplyWC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMCloseApplyWC.xib; sourceTree = "<group>"; };
 		9F39B9432A661ED500930ACA /* KMHomeScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMHomeScrollView.swift; sourceTree = "<group>"; };
 		9F3A48C32C8017FA0047F565 /* KMPurchaseEmbeddedWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPurchaseEmbeddedWindowController.swift; sourceTree = "<group>"; };
 		9F3A48C42C8017FA0047F565 /* KMPurchaseEmbeddedWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMPurchaseEmbeddedWindowController.xib; sourceTree = "<group>"; };
@@ -9041,8 +9065,14 @@
 			children = (
 				9F4ACEC82CC79270005CF727 /* KMLoginWindowsController.swift */,
 				9F4ACEC92CC79270005CF727 /* KMLoginWindowsController.xib */,
-				9F33C9BF2CD8E2550080D3C2 /* KMLogoutPromptWC.swift */,
-				9F33C9C02CD8E2550080D3C2 /* KMLogoutPromptWC.xib */,
+				9F33C9BF2CD8E2550080D3C2 /* KMMemberPromptWC.swift */,
+				9F33C9C02CD8E2550080D3C2 /* KMMemberPromptWC.xib */,
+				9F33C9C72CDA05B80080D3C2 /* KMCloseAccountWC.swift */,
+				9F33C9C82CDA05B80080D3C2 /* KMCloseAccountWC.xib */,
+				9F33C9CF2CDA21D70080D3C2 /* KMCloseVerificationWC.swift */,
+				9F33C9D02CDA21D70080D3C2 /* KMCloseVerificationWC.xib */,
+				9F33C9D72CDA370D0080D3C2 /* KMCloseApplyWC.swift */,
+				9F33C9D82CDA370D0080D3C2 /* KMCloseApplyWC.xib */,
 			);
 			path = WindowsController;
 			sourceTree = "<group>";
@@ -15133,6 +15163,7 @@
 				BB5F8A1C29BB15AD00365ADB /* KMEmailSubWindowController.xib in Resources */,
 				9F221EDA29A9EC0900978A59 /* KMFillSignTextPanel.xib in Resources */,
 				BBB2ACE02B5943F800098854 /* Quick Start Guide.pdf in Resources */,
+				9F33C9CC2CDA05B80080D3C2 /* KMCloseAccountWC.xib in Resources */,
 				9F1FE4E729406E4700E952CA /* COPYING in Resources */,
 				AD7D5CDF2B957693006562CD /* KMBookmarkOutlineFileCellView.xib in Resources */,
 				BB031B7E2C47BB090099F7AD /* KMUserListItemCellView.xib in Resources */,
@@ -15152,6 +15183,7 @@
 				9FBA0EE428FEC253001117AF /* KMProductPromotionViewController.xib in Resources */,
 				BBEC00C2295C306400A26C98 /* KMBatesPropertyController.xib in Resources */,
 				9F3D819629A33A290087B5AD /* KMDesignDropdown.xib in Resources */,
+				9F33C9D42CDA21D70080D3C2 /* KMCloseVerificationWC.xib in Resources */,
 				ADDF83742B391A5D00A81A4E /* CDSignatureDrawViewController.xib in Resources */,
 				AD3AAD792B0DCEB600DE5FE7 /* KMCompareSaveView.xib in Resources */,
 				ADBC2D15299CCD10006280C8 /* KMTextfieldButton.xib in Resources */,
@@ -15267,7 +15299,7 @@
 				ADE86A7B2B0221E100414DFA /* KMSecurityWindowController.xib in Resources */,
 				BBC8A7752B0640C200FA9377 /* KMBotaSearchViewController.xib in Resources */,
 				BBAFDA7D2B4CDE1D00278BC3 /* KMPDFCropWindowController.xib in Resources */,
-				9F33C9C42CD8E2550080D3C2 /* KMLogoutPromptWC.xib in Resources */,
+				9F33C9C42CD8E2550080D3C2 /* KMMemberPromptWC.xib in Resources */,
 				9F69DBBD2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.xib in Resources */,
 				BBA9223B2B4E97540061057A /* KMPurchaseLimitWindowController.xib in Resources */,
 				BB9007032B8DDCE400623B78 /* SyncPreferences.xib in Resources */,
@@ -15382,6 +15414,7 @@
 				AD3AAD932B1034C000DE5FE7 /* KMHeaderFooterView.xib in Resources */,
 				9FD0FA4E29D43D6800F2AB0D /* KMDeviceBrowserWindowController.xib in Resources */,
 				BB49ED09293F461500C82CA2 /* KMConvertCSVWindowController.xib in Resources */,
+				9F33C9DC2CDA370D0080D3C2 /* KMCloseApplyWC.xib in Resources */,
 				9F1F82D5292F6D510092C4B4 /* KMPDFInsertPreviewViewController.xib in Resources */,
 				ADC63E4B2A49BEDD00854E02 /* KMSubscribeWaterMarkCollectionItem.xib in Resources */,
 				AD7D5C952B8F20FE006562CD /* synctex_parser_version.txt in Resources */,
@@ -15710,6 +15743,7 @@
 				BBD922342B50D61200DB9585 /* KMRateWindowController.xib in Resources */,
 				ADBC373829CA975B00D93208 /* KMCompatative.xcassets in Resources */,
 				BB4EEF3129763EE7003A3537 /* KMRedactBaseWindowController.xib in Resources */,
+				9F33C9CD2CDA05B80080D3C2 /* KMCloseAccountWC.xib in Resources */,
 				BB1B0B082B4FC6E900889528 /* KMGuideCoverView.xib in Resources */,
 				BB6347B12AF1F0BB00F5438E /* KMBatchOperateConvertViewController.xib in Resources */,
 				ADFA8F0E2B579957002595A4 /* KMSearchFindView.xib in Resources */,
@@ -15729,6 +15763,7 @@
 				BB7F7C0429AA586900A3E4E7 /* signAddBack.png in Resources */,
 				BB1969D22B2833FF00922736 /* KMProgressWindowController.xib in Resources */,
 				AD867F9929D955D200F00440 /* KMBOTAOutlineCellView.xib in Resources */,
+				9F33C9D52CDA21D70080D3C2 /* KMCloseVerificationWC.xib in Resources */,
 				BB1BFF662AE9FBA8003EB179 /* KMBatchOperateWindowController.xib in Resources */,
 				AD2BF2292B5608700029F03F /* Assets.xcassets in Resources */,
 				BB86C2A32BC8C39600326A6B /* ExportAccessoryView.xib in Resources */,
@@ -15844,7 +15879,7 @@
 				AD58F41B2B1DAC1500299EE0 /* KMPrintSettingView.xib in Resources */,
 				BB9007222B8DE85B00623B78 /* GeneralPreferences.xib in Resources */,
 				ADDF83602B391A5C00A81A4E /* DSignatureCertifyDetailViewController.xib in Resources */,
-				9F33C9C52CD8E2550080D3C2 /* KMLogoutPromptWC.xib in Resources */,
+				9F33C9C52CD8E2550080D3C2 /* KMMemberPromptWC.xib in Resources */,
 				9F1F82C0292E01860092C4B4 /* KMCloudEmptyCollectionViewItem.xib in Resources */,
 				9FD0FA3529CD947000F2AB0D /* KMOpacityPanel.xib in Resources */,
 				BB5DF1F52959C9F00025CDA1 /* KMHeaderFooterPropertyMainController.xib in Resources */,
@@ -15959,6 +15994,7 @@
 				9FE0BBE82B0EFBA300CD1CAC /* KMAnnotationFontWindowController.xib in Resources */,
 				ADAFDA1D2AE8DD6600F084BC /* KMAdvertisementTableView.xib in Resources */,
 				9F8810992B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.xib in Resources */,
+				9F33C9DD2CDA370D0080D3C2 /* KMCloseApplyWC.xib in Resources */,
 				9F0CB4B92977BC1000007028 /* KMPropertiesPanelPreviewSubVC.xib in Resources */,
 				BBF62C752B0347D1007B7E86 /* SplitWindowController.xib in Resources */,
 				BB1B0B022B4FC6E900889528 /* KMConvertGuideView.xib in Resources */,
@@ -16330,6 +16366,7 @@
 				BB072D5B2C057BD600779B45 /* KMToolbarConfigWindowController.xib in Resources */,
 				ADD1B6B02941E97F00C3FFF7 /* KMPrintWindowController.xib in Resources */,
 				ADE86ABC2B0343F100414DFA /* KMWatermarkView.xib in Resources */,
+				9F33C9D62CDA21D70080D3C2 /* KMCloseVerificationWC.xib in Resources */,
 				AD3AAD612B0DA3D400DE5FE7 /* KMCompareTextViewItem.xib in Resources */,
 				ADDF837C2B391A5D00A81A4E /* CDSignatureTextViewController.xib in Resources */,
 				9F03900B2B426F3300302D1D /* KMPageDisplayPropertiesViewController.xib in Resources */,
@@ -16406,6 +16443,7 @@
 				ADFCEB692B4FBFC50001EBAF /* ad_cancel_button00.png in Resources */,
 				9F0201932A1DDAA500C9B673 /* KMAITranslationWindowController.xib in Resources */,
 				9F72D20D2994BDAF00DCACF1 /* KMNotificationVC.xib in Resources */,
+				9F33C9CE2CDA05B80080D3C2 /* KMCloseAccountWC.xib in Resources */,
 				AD1D48272AFB6BCB007AC1F0 /* KMMergeView.xib in Resources */,
 				BB88108A2B4F7C2200AFA63E /* KMVerificationAlertViewController.xib in Resources */,
 				ADB5E5172A371131007110A8 /* KMSubscribeWaterMarkWindowController.xib in Resources */,
@@ -16417,6 +16455,7 @@
 				9F69DBBF2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.xib in Resources */,
 				BBA9223D2B4E97540061057A /* KMPurchaseLimitWindowController.xib in Resources */,
 				BB276A5E2B038D3A00AB5578 /* KMOCRPDFWindowController.xib in Resources */,
+				9F33C9DE2CDA370D0080D3C2 /* KMCloseApplyWC.xib in Resources */,
 				AD1FE81C2BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.xib in Resources */,
 				AD0FA50029A8DD8700EDEB50 /* KMRegisterSuccessView.xib in Resources */,
 				899700FB28F4051B009AF911 /* KMAnnotationViewController.xib in Resources */,
@@ -16583,7 +16622,7 @@
 				BBEC00B4295C2AF300A26C98 /* KMBatesPreviewController.xib in Resources */,
 				8997010328F40710009AF911 /* KMBookMarkViewController.xib in Resources */,
 				9F00CCEF2A309E8E00AC462E /* KMEditImagePropertyViewController.xib in Resources */,
-				9F33C9C62CD8E2550080D3C2 /* KMLogoutPromptWC.xib in Resources */,
+				9F33C9C62CD8E2550080D3C2 /* KMMemberPromptWC.xib in Resources */,
 				BB1B0B0C2B4FC6E900889528 /* KMGuideInfoWindow.xib in Resources */,
 				BB1B0AC42B4FC6E900889528 /* KMFunctionGuideWindowController.xib in Resources */,
 				BBC4F9F02AEB58470098A1A8 /* KMAlertWindowController.xib in Resources */,
@@ -16826,6 +16865,7 @@
 				9FF94F1129A7476000B1EF69 /* KMDesignPropertySelector.swift in Sources */,
 				ADBC2D0C299CAA65006280C8 /* KMBaseXibView.swift in Sources */,
 				BB65A0782AF8E2F2003A27A0 /* KMSyncPreferences.swift in Sources */,
+				9F33C9D92CDA370D0080D3C2 /* KMCloseApplyWC.swift in Sources */,
 				ADDEEA7E2AD3FB1D00EF675D /* KMImageAccessoryController.swift in Sources */,
 				BB60138C2AD3A94200A76FB2 /* CPDFSignatureAnnotation+PDFListView.swift in Sources */,
 				9F53D54B2AD6696B00CCF9D8 /* ComPDFUIConfig.swift in Sources */,
@@ -17164,6 +17204,7 @@
 				9F221ED729A9EC0900978A59 /* KMFillSignTextPanel.swift in Sources */,
 				BBF8A4032AE8E10100788BAC /* KMBatchConvertParameter.swift in Sources */,
 				BB1413682C69E6CA00BB8E35 /* KMURLConfigManager.swift in Sources */,
+				9F33C9C92CDA05B80080D3C2 /* KMCloseAccountWC.swift in Sources */,
 				9FA607D928F8227500B46586 /* KMBox.swift in Sources */,
 				BBE9D0922AF0A85C002E83CE /* KMBatchOperation.swift in Sources */,
 				BBB612AD2AF4B9E4000F3724 /* KMWatermarkCollectionViewItem.swift in Sources */,
@@ -17600,7 +17641,7 @@
 				9F080B14298CFDB300FC27DA /* KMTextImageButtonVC.swift in Sources */,
 				BBB14A5F297929BD00936EDB /* KMRedactPageRangeWindowController.swift in Sources */,
 				BBB789842BE8BF2300F7E09C /* AIChatInfoManager.swift in Sources */,
-				9F33C9C12CD8E2550080D3C2 /* KMLogoutPromptWC.swift in Sources */,
+				9F33C9C12CD8E2550080D3C2 /* KMMemberPromptWC.swift in Sources */,
 				ADA08A8A29F21A53009B2A7B /* KMPDFViewAnnotationOnceModeStore.swift in Sources */,
 				AD7D5CCF2B9573FF006562CD /* KMBookmarkOutlinePageCellView.swift in Sources */,
 				BBBE209B2B21E5F100509C4E /* KMAlertTool.swift in Sources */,
@@ -17999,6 +18040,7 @@
 				BB90E4F62AF3B71800B04B9F /* KMPDFWatermarkData.swift in Sources */,
 				BBFD2B142AEFAB8F0016C456 /* KMOperationQueue.swift in Sources */,
 				9F0CB4DD2986554D00007028 /* KMDesignToken+HorizontalPadding.swift in Sources */,
+				9F33C9D12CDA21D70080D3C2 /* KMCloseVerificationWC.swift in Sources */,
 				ADDEEA622AD3A6E700EF675D /* KMPDFSignatureTextView.swift in Sources */,
 				BB146FED299DC0D100784A6A /* GTLRBatchResult.m in Sources */,
 				9F8539C629430AC400DF644E /* KMToolbarRightView.swift in Sources */,
@@ -18156,6 +18198,7 @@
 				9FA607DF28FD4C9F00B46586 /* KMHomePopViewController.swift in Sources */,
 				BBC3484F29582920008D2CD1 /* KMBackgroundColorView.swift in Sources */,
 				ADF1569429A62D1D001D1018 /* KMLoginLeftImageView.swift in Sources */,
+				9F33C9D22CDA21D70080D3C2 /* KMCloseVerificationWC.swift in Sources */,
 				AD3AAD352B0B7AF500DE5FE7 /* KMCompareThumbView.swift in Sources */,
 				BBE78F1C2B36F69F0071AC1A /* KMLeftSideViewController+Note.swift in Sources */,
 				AD1FE8152BD7C98300AA4A9B /* KMPDFMultipleManager.m in Sources */,
@@ -18637,6 +18680,7 @@
 				9FAAA33F290FECA70046FFCE /* NSImage+QuickLook.swift in Sources */,
 				ADE3C1E529A5ABC200793B13 /* KMLoginWindowController.swift in Sources */,
 				9F0CB4D62986551600007028 /* KMDesignToken+Spacing.swift in Sources */,
+				9F33C9DA2CDA370D0080D3C2 /* KMCloseApplyWC.swift in Sources */,
 				BB88106E2B4F771D00AFA63E /* KMVerificationInfoViewController.m in Sources */,
 				65FABB322C9AFB0C00AA92E5 /* KMSectionCellView.swift in Sources */,
 				BB4A948E2B04726A00940F8B /* KMOCTool.m in Sources */,
@@ -18687,7 +18731,7 @@
 				BB5BE4EE2B060E2F00D51BF2 /* KMLanguageViewController.swift in Sources */,
 				BBBAECFD2B57713F00266BD3 /* KMTransitionInfo.swift in Sources */,
 				BB1B0AED2B4FC6E900889528 /* KMGuideCoverView.swift in Sources */,
-				9F33C9C22CD8E2550080D3C2 /* KMLogoutPromptWC.swift in Sources */,
+				9F33C9C22CD8E2550080D3C2 /* KMMemberPromptWC.swift in Sources */,
 				9F1FE4EE29406E4700E952CA /* ThrobberView.m in Sources */,
 				BB2F18472A0C7E250003F65E /* KMConvertBaseView.swift in Sources */,
 				9FBA0EE228FEC253001117AF /* KMProductPromotionViewController.swift in Sources */,
@@ -18879,6 +18923,7 @@
 				9FCFECA12AD17B8A00EAD2CB /* SKProgressController.swift in Sources */,
 				BBEC00DA295C39FD00A26C98 /* KMBatesPropertyInfoController.swift in Sources */,
 				AD3AAD3D2B0B7B2900DE5FE7 /* KMCompareTextView.swift in Sources */,
+				9F33C9CA2CDA05B80080D3C2 /* KMCloseAccountWC.swift in Sources */,
 				9F4ACECB2CC79270005CF727 /* KMLoginWindowsController.swift in Sources */,
 				9F0CB52A298656C900007028 /* KMDesignToken+BorderWidthTop.swift in Sources */,
 				BB93CDEA2AE7B6E100B29C57 /* KMToolbarView.swift in Sources */,
@@ -19351,6 +19396,7 @@
 				9F78EFC828F7E965001E66F4 /* KMHomeViewController+UI.swift in Sources */,
 				9FF371DF2C69B93B005F9CC5 /* CAreaSettingWindowController.swift in Sources */,
 				AD3AAD432B0B7B6C00DE5FE7 /* KMCompareManager.swift in Sources */,
+				9F33C9DB2CDA370D0080D3C2 /* KMCloseApplyWC.swift in Sources */,
 				9FBA0EFB2900188F001117AF /* KMFastToolCollectionView.swift in Sources */,
 				ADFA8F062B5666B6002595A4 /* KMAotuFlowExtension.swift in Sources */,
 				9F1F82DC292F84D60092C4B4 /* KMHomeInsertActionViewController.swift in Sources */,
@@ -19501,6 +19547,7 @@
 				BBBAECF62B57672200266BD3 /* SKPresentationOptionsSheetController.swift in Sources */,
 				BB88106F2B4F771D00AFA63E /* KMVerificationInfoViewController.m in Sources */,
 				BB77C8612BD506BE0065AFF2 /* CPDFAnnotation+KMExtension.swift in Sources */,
+				9F33C9D32CDA21D70080D3C2 /* KMCloseVerificationWC.swift in Sources */,
 				BB9E2F752A495BCD000DC68D /* KMConvertSettingLimitTipView.swift in Sources */,
 				9FCFEC8A2AD0EF9900EAD2CB /* KMPopMenuButton.swift in Sources */,
 				BB6DD80E29347F77001F0544 /* KMSecureEncryptWindowController.swift in Sources */,
@@ -19525,7 +19572,7 @@
 				9F9461862BD644BF0076574B /* KMTableDataManager.m in Sources */,
 				BB2C847A2BAE71E400AF6142 /* KMBotaTableView.swift in Sources */,
 				BB146FE0299DC0D100784A6A /* GTLRDriveObjects.m in Sources */,
-				9F33C9C32CD8E2550080D3C2 /* KMLogoutPromptWC.swift in Sources */,
+				9F33C9C32CD8E2550080D3C2 /* KMMemberPromptWC.swift in Sources */,
 				89D9896E28FD50EF003A3E87 /* KMAnnotationCollectionViewItem.swift in Sources */,
 				ADBC2D0E299CAA65006280C8 /* KMBaseXibView.swift in Sources */,
 				BB86C1EF28F544F4005AD968 /* CPDFListView+Event.m in Sources */,
@@ -20117,6 +20164,7 @@
 				9F69DBBC2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.swift in Sources */,
 				AD1FE8162BD7C98300AA4A9B /* KMPDFMultipleManager.m in Sources */,
 				ADBC375629CAE94700D93208 /* KMComparativeOutlineSectionCell.swift in Sources */,
+				9F33C9CB2CDA05B80080D3C2 /* KMCloseAccountWC.swift in Sources */,
 				9F0CB5442986953A00007028 /* KMURLToPDFWindowController.swift in Sources */,
 				ADAFDA322AE8E45000F084BC /* KMAdvertisementConfig.swift in Sources */,
 				ADD272D229B9CFD30032B5D6 /* KMLightNoNetworkView.swift in Sources */,