2 Revize 86b775829a ... a94637db70

Autor SHA1 Zpráva Datum
  刘千军 a94637db70 Merge branch 'main' of http://git.ddse.io:3000/tomy/JD_iOS into main před 11 měsíci
  刘千军 9e196fbf4b 简况 před 11 měsíci
17 změnil soubory, kde provedl 1708 přidání a 8 odebrání
  1. 48 0
      Koala/Koala.xcodeproj/project.pbxproj
  2. 38 0
      Koala/Koala/Modular/Market/M/MarketModel.swift
  3. 71 0
      Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPCompanyCell.swift
  4. 121 0
      Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPCompanyCell.xib
  5. 44 0
      Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPIndustryCell.swift
  6. 59 0
      Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPIndustryCell.xib
  7. 321 0
      Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPMajorCell.swift
  8. 239 0
      Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPMajorCell.xib
  9. 61 0
      Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPMajorListCell.swift
  10. 86 0
      Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPMajorListCell.xib
  11. 44 0
      Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPStructListCell.swift
  12. 62 0
      Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPStructListCell.xib
  13. 67 0
      Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPStructSectionView.swift
  14. 90 0
      Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPStructSectionView.xib
  15. 200 7
      Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDProfileView.swift
  16. 5 1
      Koala/Koala/Modular/Market/VC/MarketDetailViewController.swift
  17. 152 0
      Koala/Koala/Modular/Market/VM/MDProfileViewModel.swift

+ 48 - 0
Koala/Koala.xcodeproj/project.pbxproj

@@ -650,6 +650,18 @@
 		6CBB633B2ADD7BD70045A4C9 /* MSHListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6CBB63392ADD7BD70045A4C9 /* MSHListCell.xib */; };
 		6CBB633E2ADD9A1D0045A4C9 /* MSearchListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CBB633C2ADD9A1D0045A4C9 /* MSearchListCell.swift */; };
 		6CBB633F2ADD9A1D0045A4C9 /* MSearchListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6CBB633D2ADD9A1D0045A4C9 /* MSearchListCell.xib */; };
+		6CBB63422ADEBB2C0045A4C9 /* MDPCompanyCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CBB63402ADEBB2B0045A4C9 /* MDPCompanyCell.swift */; };
+		6CBB63432ADEBB2C0045A4C9 /* MDPCompanyCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6CBB63412ADEBB2B0045A4C9 /* MDPCompanyCell.xib */; };
+		6CBB63462ADEC1D40045A4C9 /* MDPIndustryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CBB63442ADEC1D40045A4C9 /* MDPIndustryCell.swift */; };
+		6CBB63472ADEC1D40045A4C9 /* MDPIndustryCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6CBB63452ADEC1D40045A4C9 /* MDPIndustryCell.xib */; };
+		6CBB634A2ADEC5AB0045A4C9 /* MDPMajorCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CBB63482ADEC5AB0045A4C9 /* MDPMajorCell.swift */; };
+		6CBB634B2ADEC5AB0045A4C9 /* MDPMajorCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6CBB63492ADEC5AB0045A4C9 /* MDPMajorCell.xib */; };
+		6CBB634E2ADEDDEC0045A4C9 /* MDPMajorListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CBB634C2ADEDDEC0045A4C9 /* MDPMajorListCell.swift */; };
+		6CBB634F2ADEDDEC0045A4C9 /* MDPMajorListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6CBB634D2ADEDDEC0045A4C9 /* MDPMajorListCell.xib */; };
+		6CBB63512AE034750045A4C9 /* MDPStructSectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CBB63502AE034750045A4C9 /* MDPStructSectionView.swift */; };
+		6CBB63532AE0349F0045A4C9 /* MDPStructSectionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6CBB63522AE0349F0045A4C9 /* MDPStructSectionView.xib */; };
+		6CBB63562AE037760045A4C9 /* MDPStructListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CBB63542AE037760045A4C9 /* MDPStructListCell.swift */; };
+		6CBB63572AE037760045A4C9 /* MDPStructListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6CBB63552AE037760045A4C9 /* MDPStructListCell.xib */; };
 		6CBDC8F32972F352003E068F /* ScriptMessageProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CBDC8F22972F352003E068F /* ScriptMessageProxy.swift */; };
 		6CBDC8F52972F443003E068F /* WKWebViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CBDC8F42972F443003E068F /* WKWebViewConfiguration.swift */; };
 		6CBDC8F72972FB69003E068F /* BaseWebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CBDC8F62972FB69003E068F /* BaseWebViewController.swift */; };
@@ -1475,6 +1487,18 @@
 		6CBB63392ADD7BD70045A4C9 /* MSHListCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MSHListCell.xib; sourceTree = "<group>"; };
 		6CBB633C2ADD9A1D0045A4C9 /* MSearchListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MSearchListCell.swift; sourceTree = "<group>"; };
 		6CBB633D2ADD9A1D0045A4C9 /* MSearchListCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MSearchListCell.xib; sourceTree = "<group>"; };
+		6CBB63402ADEBB2B0045A4C9 /* MDPCompanyCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MDPCompanyCell.swift; sourceTree = "<group>"; };
+		6CBB63412ADEBB2B0045A4C9 /* MDPCompanyCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MDPCompanyCell.xib; sourceTree = "<group>"; };
+		6CBB63442ADEC1D40045A4C9 /* MDPIndustryCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MDPIndustryCell.swift; sourceTree = "<group>"; };
+		6CBB63452ADEC1D40045A4C9 /* MDPIndustryCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MDPIndustryCell.xib; sourceTree = "<group>"; };
+		6CBB63482ADEC5AB0045A4C9 /* MDPMajorCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MDPMajorCell.swift; sourceTree = "<group>"; };
+		6CBB63492ADEC5AB0045A4C9 /* MDPMajorCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MDPMajorCell.xib; sourceTree = "<group>"; };
+		6CBB634C2ADEDDEC0045A4C9 /* MDPMajorListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MDPMajorListCell.swift; sourceTree = "<group>"; };
+		6CBB634D2ADEDDEC0045A4C9 /* MDPMajorListCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MDPMajorListCell.xib; sourceTree = "<group>"; };
+		6CBB63502AE034750045A4C9 /* MDPStructSectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MDPStructSectionView.swift; sourceTree = "<group>"; };
+		6CBB63522AE0349F0045A4C9 /* MDPStructSectionView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MDPStructSectionView.xib; sourceTree = "<group>"; };
+		6CBB63542AE037760045A4C9 /* MDPStructListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MDPStructListCell.swift; sourceTree = "<group>"; };
+		6CBB63552AE037760045A4C9 /* MDPStructListCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MDPStructListCell.xib; sourceTree = "<group>"; };
 		6CBDC8F22972F352003E068F /* ScriptMessageProxy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScriptMessageProxy.swift; sourceTree = "<group>"; };
 		6CBDC8F42972F443003E068F /* WKWebViewConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WKWebViewConfiguration.swift; sourceTree = "<group>"; };
 		6CBDC8F62972FB69003E068F /* BaseWebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseWebViewController.swift; sourceTree = "<group>"; };
@@ -3421,6 +3445,18 @@
 			isa = PBXGroup;
 			children = (
 				6CBB62D82AD828440045A4C9 /* MDProfileView.swift */,
+				6CBB63402ADEBB2B0045A4C9 /* MDPCompanyCell.swift */,
+				6CBB63412ADEBB2B0045A4C9 /* MDPCompanyCell.xib */,
+				6CBB63442ADEC1D40045A4C9 /* MDPIndustryCell.swift */,
+				6CBB63452ADEC1D40045A4C9 /* MDPIndustryCell.xib */,
+				6CBB63482ADEC5AB0045A4C9 /* MDPMajorCell.swift */,
+				6CBB63492ADEC5AB0045A4C9 /* MDPMajorCell.xib */,
+				6CBB634C2ADEDDEC0045A4C9 /* MDPMajorListCell.swift */,
+				6CBB634D2ADEDDEC0045A4C9 /* MDPMajorListCell.xib */,
+				6CBB63502AE034750045A4C9 /* MDPStructSectionView.swift */,
+				6CBB63522AE0349F0045A4C9 /* MDPStructSectionView.xib */,
+				6CBB63542AE037760045A4C9 /* MDPStructListCell.swift */,
+				6CBB63552AE037760045A4C9 /* MDPStructListCell.xib */,
 			);
 			path = MDProfileView;
 			sourceTree = "<group>";
@@ -3836,6 +3872,7 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				6CBB634F2ADEDDEC0045A4C9 /* MDPMajorListCell.xib in Resources */,
 				6CC37FFF299294D50079FA5C /* AssetsSavingsListCell.xib in Resources */,
 				6CC37FC7298EB2650079FA5C /* DealListCell.xib in Resources */,
 				6CC37FAF2988EEB10079FA5C /* DealHeaderView.xib in Resources */,
@@ -3855,6 +3892,7 @@
 				6C4AFAFC29A0CA9600508EA7 /* AFlashVerifyPopView.xib in Resources */,
 				6C00A8F3242D918D00CE9ADB /* Localizable.strings in Resources */,
 				6C10F0DC29DB08D900B79491 /* updateAPP108.png in Resources */,
+				6CBB63432ADEBB2C0045A4C9 /* MDPCompanyCell.xib in Resources */,
 				6C10F0E429DB08D900B79491 /* updateAPP086.png in Resources */,
 				6CA712FD2956D86B0047F450 /* HomeNavView.xib in Resources */,
 				6C10F0FC29DB08D900B79491 /* updateAPP106.png in Resources */,
@@ -3894,6 +3932,7 @@
 				6C10F0DB29DB08D900B79491 /* updateAPP082.png in Resources */,
 				6CBDC90A297AD8DF003E068F /* CTKLineFooterView.xib in Resources */,
 				6CD5EB6529D5C6A40053325F /* FundsRecordCell.xib in Resources */,
+				6CBB634B2ADEC5AB0045A4C9 /* MDPMajorCell.xib in Resources */,
 				6CA7133A2958781C0047F450 /* CountryCode.json in Resources */,
 				6C4AFAF3299FE37300508EA7 /* APaymentMethodCell.xib in Resources */,
 				6C4AFB3929A7B8D400508EA7 /* MessageHeaderView.xib in Resources */,
@@ -3938,6 +3977,7 @@
 				6CC380072993D4E10079FA5C /* AssetsDealListCell.xib in Resources */,
 				6C10F0CC29DB08D900B79491 /* updateAPP034.png in Resources */,
 				6CBB633F2ADD9A1D0045A4C9 /* MSearchListCell.xib in Resources */,
+				6CBB63472ADEC1D40045A4C9 /* MDPIndustryCell.xib in Resources */,
 				6C10F11729E1ADD900B79491 /* AssetsProxyDetailsViewController.xib in Resources */,
 				6CC37FBF298962B40079FA5C /* DealHintCell.xib in Resources */,
 				6C00A99A2433313300CE9ADB /* HXImagePickerController.bundle in Resources */,
@@ -3963,6 +4003,7 @@
 				6CDC5B0C29CFE63E00E60730 /* FiatDepositsRecordCell.xib in Resources */,
 				6C10F0DA29DB08D900B79491 /* updateAPP096.png in Resources */,
 				6C7A1AD629F3D32F004CFBE3 /* APaymentMethodListCell.xib in Resources */,
+				6CBB63532AE0349F0045A4C9 /* MDPStructSectionView.xib in Resources */,
 				6C00A880242D8FEB00CE9ADB /* Assets.xcassets in Resources */,
 				6CDC5B1729D081A700E60730 /* AssetsProxyHeaderView.xib in Resources */,
 				6C10F0F429DB08D900B79491 /* updateAPP110.png in Resources */,
@@ -3991,6 +4032,7 @@
 				6C10F10B29E1638400B79491 /* FeedbackViewController.xib in Resources */,
 				6CD5EB7029D863580053325F /* GuideViewController.xib in Resources */,
 				6CC3B6472A192D6000D77D03 /* CopyingSetViewController.xib in Resources */,
+				6CBB63572AE037760045A4C9 /* MDPStructListCell.xib in Resources */,
 				6C35369B2982C8BF003BB632 /* DealTopCell.xib in Resources */,
 				6CDC5AFF29CE127900E60730 /* TransferHistoryListCell.xib in Resources */,
 				6CBB631D2ADC112F0045A4C9 /* HomeOptionsCell.xib in Resources */,
@@ -4299,6 +4341,7 @@
 				6C2FFCC72961A780005B8180 /* KTradingPasswordsPopView.swift in Sources */,
 				041D4F192AD2894E008ABDF7 /* JDTradeAccountHistoryOrderViewController.swift in Sources */,
 				6C35369129815FD7003BB632 /* DealViewModel.swift in Sources */,
+				6CBB63462ADEC1D40045A4C9 /* MDPIndustryCell.swift in Sources */,
 				6CDC5B0B29CFE63E00E60730 /* FiatDepositsRecordCell.swift in Sources */,
 				6CC37FF6299210870079FA5C /* AssetsSavingsCell.swift in Sources */,
 				6C86530A29B4767000A2E7FB /* TDOrderHeaderView.swift in Sources */,
@@ -4357,6 +4400,7 @@
 				04CEE2B82ABD3ACA00FAA760 /* JDWorkOrderDetailViewController.swift in Sources */,
 				6CA713552959F8F30047F450 /* ForgotPasswordCell.swift in Sources */,
 				6C00A8F5242D918D00CE9ADB /* ESTabBarController.swift in Sources */,
+				6CBB634A2ADEC5AB0045A4C9 /* MDPMajorCell.swift in Sources */,
 				041D4F032AC42B8A008ABDF7 /* JDAddReceiveAccountViewController.swift in Sources */,
 				6C00A9542432F43600CE9ADB /* LBXScanNetAnimation.swift in Sources */,
 				04282A382ADCE17800CB4260 /* JDPhoneInputView.swift in Sources */,
@@ -4405,6 +4449,7 @@
 				6CA7134D2959F6900047F450 /* ForgotPasswordViewController.swift in Sources */,
 				6CDC5AFE29CE127900E60730 /* TransferHistoryListCell.swift in Sources */,
 				6C86531529B492DA00A2E7FB /* TDUserListCell.swift in Sources */,
+				6CBB634E2ADEDDEC0045A4C9 /* MDPMajorListCell.swift in Sources */,
 				6C86530729AFAC5400A2E7FB /* TDProfitInfoCell.swift in Sources */,
 				6CA712FF2956E51C0047F450 /* MineViewModel.swift in Sources */,
 				04D38EB62AAC307E0047EF9C /* JDHomeHeaderView.swift in Sources */,
@@ -4458,6 +4503,7 @@
 				6CD6DF8324372EDB0025AF78 /* LaunchScreenVC.swift in Sources */,
 				04D38E642A9EE8A10047EF9C /* JXSegmentedIndicatorGradientView.swift in Sources */,
 				6C00A91B242D918D00CE9ADB /* BaseCollectionViewCell.swift in Sources */,
+				6CBB63562AE037760045A4C9 /* MDPStructListCell.swift in Sources */,
 				6C031B182962C4950043BECF /* RealNameFileViewController.swift in Sources */,
 				04D38E722A9EE8A10047EF9C /* JXSegmentedDotItemModel.swift in Sources */,
 				6C00A9582432F43600CE9ADB /* LBXScanViewStyle.swift in Sources */,
@@ -4643,6 +4689,7 @@
 				6CBB62F52AD83CD00045A4C9 /* MDAuoteInfoCell.swift in Sources */,
 				04CEE2962ABAE9CC00FAA760 /* JDAFiatWithdrawalsCell.swift in Sources */,
 				6CBB62CD2AD81EC80045A4C9 /* MarketDetailViewController.swift in Sources */,
+				6CBB63422ADEBB2C0045A4C9 /* MDPCompanyCell.swift in Sources */,
 				6CBB62CA2AD6EFD80045A4C9 /* MarketOptionsListCell.swift in Sources */,
 				04B46A932AD7D72300421177 /* JDMineModifyRemarkViewController.swift in Sources */,
 				04D38E612A9EE8A10047EF9C /* JXSegmentedCollectionView.swift in Sources */,
@@ -4695,6 +4742,7 @@
 				6C0C49A0295F2842000BFEEB /* BindAccountViewModel.swift in Sources */,
 				6C00A91F242D918D00CE9ADB /* BaseNavigationController.swift in Sources */,
 				6C00A912242D918D00CE9ADB /* PublicMacro.swift in Sources */,
+				6CBB63512AE034750045A4C9 /* MDPStructSectionView.swift in Sources */,
 				6CD5EB7F29D9DDA20053325F /* CommunityHeaderView.swift in Sources */,
 				6C3536892980156C003BB632 /* CTTradesListCell.swift in Sources */,
 				6CC37FEB298FDE2E0079FA5C /* AssetsTotalCell.swift in Sources */,

+ 38 - 0
Koala/Koala/Modular/Market/M/MarketModel.swift

@@ -108,6 +108,7 @@ class MCompanyModel: BaseModel {
     var symbol:String = ""
     var vol:String = ""
     var enComName:String = ""
+    var listDate:String = ""
     var cnName:String = ""
     var chairman:String = ""
     var foundDate:String = ""
@@ -249,5 +250,42 @@ class ProductHotListModel: BaseModel {
     var productBean:KSymbolModel = KSymbolModel()
 }
 
+class MDMajorListModel: BaseModel {
+    var id:String = ""
+    var created_at:String = ""
+    var symbol:String = ""
+    var holderName:String = ""
+    var holdingRatio:String = ""
+    var holdingRatio_ADS:String = ""
+    var changeRatio_OS :String = ""
+    var holdingRatioChange:String = ""
+    var holdingNumber:String = ""
+    var holdingNumber_OS:String = ""
+    var holdingNumber_ADS:String = ""
+    
+    var reportDate:String = ""
+    var holdingNumberChange:String = ""
+    var type:String = ""
+    var holderType:String = ""
+    var color:UIColor = .clear
+}
+
+class MDStructListModel: BaseModel {
+    var id:String = ""
+    var created_at:String = ""
+    var symbol:String = ""
+    var reportDate:String = ""
+    var issueNormal:String = ""
+    var issuePriority:String = ""
+    var normalChange :String = ""
+    var priorityChange:String = ""
+    var changeDate:String = ""
+    var changeReason:String = ""
+    var issuedShare:String = ""
+    
+    var issuedShareChange:String = ""
+    var type:String = ""
+
+}
 
 

+ 71 - 0
Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPCompanyCell.swift

@@ -0,0 +1,71 @@
+//
+//  MDPCompanyCell.swift
+//  Koala
+//
+//  Created by 刘千军 on 2023/10/17.
+//  Copyright © 2023 刘千军. All rights reserved.
+//
+
+import UIKit
+
+class MDPCompanyCell: BaseTableViewCell {
+    @IBOutlet weak var titleLab: UILabel!
+    @IBOutlet weak var title1Lab: UILabel!
+    @IBOutlet weak var value1Lab: UILabel!
+    @IBOutlet weak var title2Lab: UILabel!
+    @IBOutlet weak var value2Lab: UILabel!
+    @IBOutlet weak var title3Lab: UILabel!
+    @IBOutlet weak var value3Lab: UILabel!
+    
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        self.backgroundColor = ALLBackGroundColor
+        
+        self.titleLab.text = switchLanguage("公司简介")
+        self.titleLab.textColor = TitleTextColor
+        self.titleLab.setTextFont(.PFSM, 18)
+        
+        self.title1Lab.text = switchLanguage("公司名称")
+        self.title1Lab.textColor = MidTextColor
+        self.title1Lab.setTextFont(.PFSR, 14)
+        
+        self.value1Lab.textColor = TitleTextColor
+        self.value1Lab.setTextFont(.PFSR, 14)
+        self.value1Lab.text = ""
+        
+        self.title2Lab.text = switchLanguage("上市日期")
+        self.title2Lab.textColor = MidTextColor
+        self.title2Lab.setTextFont(.PFSR, 14)
+        
+        self.value2Lab.textColor = TitleTextColor
+        self.value2Lab.setTextFont(.PFSR, 14)
+        self.value2Lab.text = ""
+        
+        self.title3Lab.text = switchLanguage("董事长")
+        self.title3Lab.textColor = MidTextColor
+        self.title3Lab.setTextFont(.PFSR, 14)
+        
+        self.value3Lab.textColor = TitleTextColor
+        self.value3Lab.setTextFont(.PFSR, 14)
+        self.value3Lab.text = ""
+        
+        
+    }
+
+    override func setSelected(_ selected: Bool, animated: Bool) {
+        super.setSelected(selected, animated: animated)
+
+        // Configure the view for the selected state
+    }
+    
+    func updateCellWith(model:MCompanyModel) -> Void {
+        self.value1Lab.text = model.cnComName.length > 0 ?  model.cnComName:model.enComName
+        
+        self.value2Lab.text = model.listDate
+        
+        self.value3Lab.text = model.chairman
+    }
+    
+    
+}

+ 121 - 0
Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPCompanyCell.xib

@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" rowHeight="174" id="KGk-i7-Jjw" customClass="MDPCompanyCell" customModule="Koala" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="396" height="174"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
+                <rect key="frame" x="0.0" y="0.0" width="396" height="174"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="AjI-KA-VLz">
+                        <rect key="frame" x="15" y="0.0" width="366" height="130"/>
+                        <subviews>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Np8-LB-W2V">
+                                <rect key="frame" x="0.0" y="0.0" width="366" height="40"/>
+                                <subviews>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="47K-U0-wm5">
+                                        <rect key="frame" x="0.0" y="0.0" width="41.333333333333336" height="40"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                        <nil key="textColor"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                                <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                <constraints>
+                                    <constraint firstItem="47K-U0-wm5" firstAttribute="leading" secondItem="Np8-LB-W2V" secondAttribute="leading" id="PwM-9j-dV9"/>
+                                    <constraint firstAttribute="bottom" secondItem="47K-U0-wm5" secondAttribute="bottom" id="dtz-6p-Ni4"/>
+                                    <constraint firstItem="47K-U0-wm5" firstAttribute="top" secondItem="Np8-LB-W2V" secondAttribute="top" id="hSd-7e-J3u"/>
+                                    <constraint firstAttribute="height" constant="40" id="lHV-32-eFz"/>
+                                </constraints>
+                            </view>
+                            <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6ie-zb-Cjh">
+                                <rect key="frame" x="0.0" y="40" width="366" height="30"/>
+                                <subviews>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zLK-nj-pg1">
+                                        <rect key="frame" x="0.0" y="0.0" width="41.333333333333336" height="30"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                        <nil key="textColor"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" text="Label" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Lew-Du-dPm">
+                                        <rect key="frame" x="41.333333333333343" y="0.0" width="324.66666666666663" height="30"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                        <nil key="textColor"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="30" id="txw-a8-4M0"/>
+                                </constraints>
+                            </stackView>
+                            <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ter-cj-u36">
+                                <rect key="frame" x="0.0" y="70" width="366" height="30"/>
+                                <subviews>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lgX-BD-bRY">
+                                        <rect key="frame" x="0.0" y="0.0" width="41.333333333333336" height="30"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                        <nil key="textColor"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" text="Label" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RQA-uL-b76">
+                                        <rect key="frame" x="41.333333333333343" y="0.0" width="324.66666666666663" height="30"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                        <nil key="textColor"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                            </stackView>
+                            <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0LQ-Cs-MO9">
+                                <rect key="frame" x="0.0" y="100" width="366" height="30"/>
+                                <subviews>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6gn-9I-0w0">
+                                        <rect key="frame" x="0.0" y="0.0" width="41.333333333333336" height="30"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                        <nil key="textColor"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" text="Label" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bbm-yZ-Q5v">
+                                        <rect key="frame" x="41.333333333333343" y="0.0" width="324.66666666666663" height="30"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                        <nil key="textColor"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                            </stackView>
+                        </subviews>
+                        <constraints>
+                            <constraint firstItem="Ter-cj-u36" firstAttribute="height" secondItem="6ie-zb-Cjh" secondAttribute="height" id="GdW-aj-vNF"/>
+                            <constraint firstItem="0LQ-Cs-MO9" firstAttribute="height" secondItem="6ie-zb-Cjh" secondAttribute="height" id="b9D-Lo-vJr"/>
+                        </constraints>
+                    </stackView>
+                </subviews>
+                <constraints>
+                    <constraint firstAttribute="trailing" secondItem="AjI-KA-VLz" secondAttribute="trailing" constant="15" id="6Vp-He-cgt"/>
+                    <constraint firstItem="AjI-KA-VLz" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="kOJ-bz-rab"/>
+                    <constraint firstItem="AjI-KA-VLz" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="15" id="ymH-Lo-cM4"/>
+                </constraints>
+            </tableViewCellContentView>
+            <viewLayoutGuide key="safeArea" id="njF-e1-oar"/>
+            <connections>
+                <outlet property="title1Lab" destination="zLK-nj-pg1" id="fCo-yX-beT"/>
+                <outlet property="title2Lab" destination="lgX-BD-bRY" id="iC1-N3-c3M"/>
+                <outlet property="title3Lab" destination="6gn-9I-0w0" id="xXg-Ga-h6E"/>
+                <outlet property="titleLab" destination="47K-U0-wm5" id="cXk-uQ-bXi"/>
+                <outlet property="value1Lab" destination="Lew-Du-dPm" id="ycF-cz-vuJ"/>
+                <outlet property="value2Lab" destination="RQA-uL-b76" id="u9F-6M-fuA"/>
+                <outlet property="value3Lab" destination="bbm-yZ-Q5v" id="Txg-lx-1aP"/>
+            </connections>
+            <point key="canvasLocation" x="216.79389312977099" y="64.08450704225352"/>
+        </tableViewCell>
+    </objects>
+</document>

+ 44 - 0
Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPIndustryCell.swift

@@ -0,0 +1,44 @@
+//
+//  MDPIndustryCell.swift
+//  Koala
+//
+//  Created by 刘千军 on 2023/10/17.
+//  Copyright © 2023 刘千军. All rights reserved.
+//
+
+import UIKit
+
+class MDPIndustryCell: BaseTableViewCell {
+    @IBOutlet weak var titleLab: UILabel!
+    @IBOutlet weak var valueLab: UILabel!
+    @IBOutlet weak var imgView: UIImageView!
+    
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        self.backgroundColor = ALLBackGroundColor
+        
+        self.titleLab.text = switchLanguage("公司简介")
+        self.titleLab.textColor = TitleTextColor
+        self.titleLab.setTextFont(.PFSM, 18)
+        
+        self.valueLab.textColor = TitleTextColor
+        self.valueLab.setTextFont(.PFSR, 14)
+        self.valueLab.text = ""
+        
+        self.imgView.image = Base_Right_Arrows_Image.imageWithTintColor(color: TitleTextColor)
+        
+        
+    }
+
+    override func setSelected(_ selected: Bool, animated: Bool) {
+        super.setSelected(selected, animated: animated)
+
+        // Configure the view for the selected state
+    }
+    
+    func updateCellWith(model:MCompanyModel) -> Void {
+        self.valueLab.text = model.industry
+    }
+    
+}

+ 59 - 0
Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPIndustryCell.xib

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" rowHeight="69" id="KGk-i7-Jjw" customClass="MDPIndustryCell" customModule="Koala" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="398" height="69"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
+                <rect key="frame" x="0.0" y="0.0" width="398" height="69"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="B4i-IM-WwH">
+                        <rect key="frame" x="15" y="0.0" width="42" height="69"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="wXo-Wl-4rW">
+                        <rect key="frame" x="368" y="27" width="15" height="15"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="15" id="Cuh-to-eLa"/>
+                            <constraint firstAttribute="height" constant="15" id="bS3-8f-OnG"/>
+                        </constraints>
+                    </imageView>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="k27-yj-p7c">
+                        <rect key="frame" x="324" y="24" width="42" height="21"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="wXo-Wl-4rW" firstAttribute="centerY" secondItem="H2p-sc-9uM" secondAttribute="centerY" id="Bj8-Le-ySP"/>
+                    <constraint firstItem="k27-yj-p7c" firstAttribute="centerY" secondItem="H2p-sc-9uM" secondAttribute="centerY" id="DiX-fb-ELd"/>
+                    <constraint firstItem="B4i-IM-WwH" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="15" id="FpM-2Q-gpy"/>
+                    <constraint firstAttribute="bottom" secondItem="B4i-IM-WwH" secondAttribute="bottom" id="YxN-Q5-B1t"/>
+                    <constraint firstAttribute="trailing" secondItem="wXo-Wl-4rW" secondAttribute="trailing" constant="15" id="e0O-Cs-jNM"/>
+                    <constraint firstItem="B4i-IM-WwH" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="g7V-4d-f0V"/>
+                    <constraint firstItem="wXo-Wl-4rW" firstAttribute="leading" secondItem="k27-yj-p7c" secondAttribute="trailing" constant="2" id="txD-6e-8z4"/>
+                </constraints>
+            </tableViewCellContentView>
+            <viewLayoutGuide key="safeArea" id="njF-e1-oar"/>
+            <connections>
+                <outlet property="imgView" destination="wXo-Wl-4rW" id="cmz-xS-tbb"/>
+                <outlet property="titleLab" destination="B4i-IM-WwH" id="ttP-jp-2Oj"/>
+                <outlet property="valueLab" destination="k27-yj-p7c" id="oFK-dH-Bpj"/>
+            </connections>
+            <point key="canvasLocation" x="147" y="29"/>
+        </tableViewCell>
+    </objects>
+</document>

+ 321 - 0
Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPMajorCell.swift

@@ -0,0 +1,321 @@
+//
+//  MDPMajorCell.swift
+//  Koala
+//
+//  Created by 刘千军 on 2023/10/17.
+//  Copyright © 2023 刘千军. All rights reserved.
+//
+
+import UIKit
+import Charts
+class MDPMajorCell: BaseTableViewCell {
+    @IBOutlet weak var titleLab: UILabel!
+    @IBOutlet weak var timerLab: UILabel!
+   
+    @IBOutlet weak var chartBgView: UIView!
+    
+    @IBOutlet weak var stack1View: UIStackView!
+    @IBOutlet weak var dot1View: UIView!
+    @IBOutlet weak var name1Lab: UILabel!
+    
+    @IBOutlet weak var stack2View: UIStackView!
+    @IBOutlet weak var dot2View: UIView!
+    @IBOutlet weak var name2Lab: UILabel!
+    
+    @IBOutlet weak var stack3View: UIStackView!
+    @IBOutlet weak var dot3View: UIView!
+    @IBOutlet weak var name3Lab: UILabel!
+    
+    @IBOutlet weak var leftLab: UILabel!
+    @IBOutlet weak var conter1Lab: UILabel!
+    @IBOutlet weak var conter2Lab: UILabel!
+    @IBOutlet weak var rightLab: UILabel!
+    
+    @IBOutlet weak var tableView: UITableView!
+    
+    var listData:[MDMajorListModel] = [MDMajorListModel]()
+    
+    var colors:[UIColor] = [UIColor]()
+    
+    lazy var pieChartView: PieChartView = {
+        let pieChartView: PieChartView = PieChartView()
+        pieChartView.delegate = self
+        pieChartView.backgroundColor = .clear
+        return pieChartView
+    }()
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        
+        self.backgroundColor = ALLBackGroundColor
+        
+        self.titleLab.text = switchLanguage("主要股东")
+        self.titleLab.textColor = TitleTextColor
+        self.titleLab.setTextFont(.PFSM, 18)
+        
+        self.timerLab.text = ""
+        self.timerLab.textColor = MidTextColor
+        self.timerLab.setTextFont(.PFSR, 14)
+        
+        self.dot1View.setViewLayerBorderColor(myColor: .clear, borderWidth: 0, maskBounds: 5)
+        self.name1Lab.textColor = TitleTextColor
+        self.name1Lab.setTextFont(.PFSR, 10)
+        
+        self.dot2View.setViewLayerBorderColor(myColor: .clear, borderWidth: 0, maskBounds: 5)
+        self.name2Lab.textColor = TitleTextColor
+        self.name2Lab.setTextFont(.PFSR, 10)
+        
+        self.dot3View.setViewLayerBorderColor(myColor: .clear, borderWidth: 0, maskBounds: 5)
+        self.name3Lab.textColor = TitleTextColor
+        self.name3Lab.setTextFont(.PFSR, 10)
+        
+        leftLab.textColor = MidTextColor
+        leftLab.setTextFont(.PFSR, 10)
+        leftLab.text = switchLanguage("持股数")
+        
+        conter1Lab.textColor = MidTextColor
+        conter1Lab.setTextFont(.PFSR, 10)
+        conter1Lab.text = switchLanguage("持股比例")
+        
+        conter2Lab.textColor = MidTextColor
+        conter2Lab.setTextFont(.PFSR, 10)
+        conter2Lab.text = switchLanguage("报告期")
+        
+        rightLab.textColor = MidTextColor
+        rightLab.setTextFont(.PFSR, 10)
+        rightLab.text = switchLanguage("持股人类型")
+        
+        self.tableView.delegate = self
+        self.tableView.dataSource = self
+        tableView.separatorStyle = .none
+        tableView.backgroundColor = .clear
+        tableView.tableFooterView = UIView()
+        tableView.tableHeaderView = UIView()
+        tableView.showsVerticalScrollIndicator = false
+        tableView.showsVerticalScrollIndicator = false
+        tableView.register(UINib.init(nibName: "MDPMajorListCell", bundle: nil), forCellReuseIdentifier: "MDPMajorListCell")
+        
+        
+        self.chartBgView.addSubview(self.pieChartView)
+        self.pieChartView.snp.makeConstraints { make in
+            make.edges.equalToSuperview()
+        }
+        
+        setPieChartViewBaseStyle()
+    }
+
+    override func setSelected(_ selected: Bool, animated: Bool) {
+        super.setSelected(selected, animated: animated)
+
+        // Configure the view for the selected state
+    }
+    
+    func setPieChartViewBaseStyle() -> Void {
+        //基本样式
+        pieChartView.setExtraOffsets(left: 0, top: 0, right: 0, bottom: 0)//饼状图距离边缘的间隙
+        pieChartView.usePercentValuesEnabled = false//是否根据所提供的数据, 将显示数据转换为百分比格式
+        pieChartView.dragDecelerationEnabled = false//拖拽饼状图后是否有惯性效果
+        pieChartView.drawSlicesUnderHoleEnabled = false//是否显示区块文本
+        pieChartView.noDataText = switchLanguage("暂无收益")
+        pieChartView.noDataFont = _PFSSM(14)
+        pieChartView.noDataTextColor = TitleTextColor
+        
+        //空(实)心饼状图样式
+        pieChartView.drawHoleEnabled = true//饼状图是否是空心 true为空心 false为实心
+        //饼状图中间描述
+        if pieChartView.isDrawHoleEnabled == true {
+            
+        }
+        else{}
+        
+        pieChartView.legend.enabled = false
+      
+    }
+    
+    
+    func updateCellWith(list:[MDMajorListModel]) -> Void {
+        self.listData = list
+        
+       
+        self.colors = ChartColorTemplates.liberty()
+           + ChartColorTemplates.material()
+           + ChartColorTemplates.vordiplom()
+           + ChartColorTemplates.colorful()
+           + ChartColorTemplates.pastel()
+            + ChartColorTemplates.joyful()
+        
+        self.stack1View.isHidden = true
+        self.stack2View.isHidden = true
+        self.stack3View.isHidden = true
+   
+        for (i,model) in list.enumerated(){
+            if i == 0{
+                self.stack1View.isHidden = false
+                self.dot1View.backgroundColor = self.colors[i]
+                self.name1Lab.text = model.holderName
+                self.timerLab.text = switchLanguage("更新时间") + model.reportDate
+            }
+            else if i == 1{
+                self.stack2View.isHidden = false
+                self.dot2View.backgroundColor = self.colors[i]
+                self.name2Lab.text = model.holderName
+            }
+            else if i == 2 {
+                self.stack3View.isHidden = false
+                self.dot3View.backgroundColor = self.colors[i]
+                self.name3Lab.text = model.holderName
+            }else{
+                break
+            }
+        }
+
+        self.updataDataWith()
+        self.tableView.reloadData()
+    }
+    
+}
+
+extension MDPMajorCell: ChartViewDelegate{
+    
+    func updataDataWith(){
+       
+         
+        var yVals: NSMutableArray  = NSMutableArray.init()
+        for (i,model) in self.listData.enumerated() {
+            let val = precisionString(with: model.holdingRatio, precision: "2", isRound: true)
+            let entry:PieChartDataEntry  = PieChartDataEntry.init(value: Double(val)!, label:val + "%")
+            yVals.add(entry)
+            if colors.count > i{
+                model.color = colors[i]
+            }else{
+                model.color = RandomColor
+                colors.append(model.color)
+            }
+        }
+        
+        //创建PieChartDataSet对象
+        let set1: PieChartDataSet = PieChartDataSet.init(entries: yVals as? [ChartDataEntry], label: "饼状图")
+        set1.drawIconsEnabled = false //是否在饼状图上面显示图片
+        set1.sliceSpace = 2 //相邻区块之间的间距
+        set1.selectionShift = 8//选中区块时, 放大的半径
+        set1.drawValuesEnabled = false //是否在饼状图上面显示数值
+        set1.highlightEnabled = true //点击选饼状图是否有高亮效果,(单击空白处取消选中)
+        set1.valueColors = [.clear]//设置柱形图颜色(是一个循环,例如:你设置5个颜色,你设置8个柱形,后三个对应的颜色是该设置中的前三个,依次类推)
+        set1.colors = colors
+        
+        
+        set1.xValuePosition = PieChartDataSet.ValuePosition.insideSlice//名称位置
+        //PieChartDataSet.ValuePosition.insideSlice 数据显示在饼图内部  PieChartDataSet.ValuePosition.outsideSlice外部
+        
+        //外部条件下有折线
+        set1.yValuePosition = PieChartDataSet.ValuePosition.insideSlice//数据位置
+        //数据与区块之间的用于指示的折线样式
+        set1.valueLinePart1OffsetPercentage =  1 //折线中第一段起始位置相对于区块的偏移量, 数值越大, 折线距离区块越远
+        set1.valueLinePart1Length = 0//折线中第一段长度占比
+        set1.valueLinePart2Length = 0//折线中第二段长度最大占比
+        set1.valueLineWidth = 0//折线的粗细
+        
+        //        set1.yValuePosition = .outsideSlice //这个折线外部展示
+        set1.drawValuesEnabled = false
+        set1.xValuePosition = .insideSlice
+        set1.useValueColorForLine = false
+        
+        let dataSets: NSMutableArray  = NSMutableArray.init()
+        dataSets.add(set1)
+        //创建BarChartData对象, 此对象就是barChartView需要最终数据对象
+        let data:  PieChartData = PieChartData.init(dataSets: dataSets as? [IChartDataSet])
+        let formatter: NumberFormatter = NumberFormatter.init()
+        //formatter.numberStyle = NumberFormatter.Style.currency//自定义数据显示格式  小数点形式(可以尝试不同看效果)
+        formatter.numberStyle = NumberFormatter.Style.none //自定义数据显示格式  小数点形式(可以尝试不同看效果)
+        formatter.maximumFractionDigits = 0
+        formatter.multiplier = 1
+        let forma :DefaultValueFormatter = DefaultValueFormatter.init(formatter: formatter)
+        data.setValueFormatter(forma)
+        data.setValueFont(UIFont.systemFont(ofSize: 10))
+        pieChartView.data = data
+        pieChartView.animate(xAxisDuration: 1, easingOption: ChartEasingOption.easeOutExpo)
+        
+    }
+    
+    
+    
+    //1.点击选中
+    func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) {
+        
+        self.showBalloonMarkerView(pieChartView: chartView as! PieChartView, entry: entry as! PieChartDataEntry)
+    }
+    //2.没有选中
+    func chartValueNothingSelected(_ chartView: ChartViewBase) {
+        
+    }
+    //3.捏合放大或缩小
+    func chartScaled(_ chartView: ChartViewBase, scaleX: CGFloat, scaleY: CGFloat) {
+        
+    }
+    //4.拖拽图表
+    func chartTranslated(_ chartView: ChartViewBase, dX: CGFloat, dY: CGFloat) {
+        
+    }
+    
+    
+    func showBalloonMarkerView(pieChartView: PieChartView,entry: PieChartDataEntry){
+      
+        let marker = BalloonMarker(color:exchangeColorAndImage(increase: 1).0,
+                                   font: _PFSR(12),
+                                   textColor: WhiteTextColor,
+                                   insets: UIEdgeInsets(top: 5, left: 5, bottom: 15, right: 5))
+        marker.chartView = pieChartView
+        marker.minimumSize = CGSize(width: 50, height: 30)
+      
+        
+        marker.setLabel(String(format: "%@",entry.label ?? ""))
+        pieChartView.marker = marker
+    }
+    
+}
+
+//代理
+extension MDPMajorCell: UITableViewDelegate,UITableViewDataSource{
+    
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return self.listData.count
+    }
+    
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let cell:MDPMajorListCell = tableView.dequeueReusableCell(withIdentifier: "MDPMajorListCell") as! MDPMajorListCell
+        let model = self.listData[indexPath.row]
+        
+        cell.updateCellWith(model: model)
+        
+        return cell
+        
+    }
+    
+    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
+        return UIView()
+    }
+    
+    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
+        return UIView()
+    }
+    
+    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
+        return 30
+    }
+    
+    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
+        return 0
+    }
+    
+    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
+        return  0
+    }
+    
+    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+        
+    }
+    
+}
+
+
+

+ 239 - 0
Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPMajorCell.xib

@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" rowHeight="884" id="KGk-i7-Jjw" customClass="MDPMajorCell" customModule="Koala" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="555" height="884"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
+                <rect key="frame" x="0.0" y="0.0" width="555" height="884"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="vqF-zp-mmY">
+                        <rect key="frame" x="0.0" y="0.0" width="555" height="864"/>
+                        <subviews>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Fni-LE-aAl">
+                                <rect key="frame" x="0.0" y="0.0" width="555" height="439"/>
+                                <subviews>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YdX-7z-fXE">
+                                        <rect key="frame" x="30.000000000000004" y="19.999999999999993" width="41.333333333333343" height="106.33333333333331"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                        <nil key="textColor"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="d27-U7-tQy">
+                                        <rect key="frame" x="30.000000000000004" y="131.33333333333334" width="41.333333333333343" height="20.333333333333343"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                        <nil key="textColor"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                    <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tGZ-CI-qDT">
+                                        <rect key="frame" x="0.0" y="151.66666666666666" width="555" height="277.33333333333337"/>
+                                        <subviews>
+                                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="T83-N3-v6R">
+                                                <rect key="frame" x="0.0" y="0.0" width="277.66666666666669" height="277.33333333333331"/>
+                                                <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                                <constraints>
+                                                    <constraint firstAttribute="width" secondItem="T83-N3-v6R" secondAttribute="height" multiplier="1:1" id="DEh-jA-kAK"/>
+                                                </constraints>
+                                            </view>
+                                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dKL-Dw-jX0">
+                                                <rect key="frame" x="277.66666666666674" y="0.0" width="277.33333333333326" height="277.33333333333331"/>
+                                                <subviews>
+                                                    <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="15" translatesAutoresizingMaskIntoConstraints="NO" id="9tt-ip-4gd">
+                                                        <rect key="frame" x="0.0" y="108.66666666666666" width="262.33333333333331" height="60"/>
+                                                        <subviews>
+                                                            <stackView opaque="NO" contentMode="scaleToFill" spacing="4" translatesAutoresizingMaskIntoConstraints="NO" id="Ect-sW-SdB">
+                                                                <rect key="frame" x="0.0" y="0.0" width="262.33333333333331" height="10"/>
+                                                                <subviews>
+                                                                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="X0U-Gu-fRj">
+                                                                        <rect key="frame" x="0.0" y="0.0" width="10" height="10"/>
+                                                                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                                                        <constraints>
+                                                                            <constraint firstAttribute="width" constant="10" id="CMB-48-jNc"/>
+                                                                            <constraint firstAttribute="height" constant="10" id="eKZ-sz-mQm"/>
+                                                                        </constraints>
+                                                                    </view>
+                                                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Oxr-6c-EVP">
+                                                                        <rect key="frame" x="14.000000000000014" y="0.0" width="248.33333333333337" height="10"/>
+                                                                        <fontDescription key="fontDescription" type="system" pointSize="10"/>
+                                                                        <nil key="textColor"/>
+                                                                        <nil key="highlightedColor"/>
+                                                                    </label>
+                                                                </subviews>
+                                                            </stackView>
+                                                            <stackView opaque="NO" contentMode="scaleToFill" spacing="4" translatesAutoresizingMaskIntoConstraints="NO" id="0bx-dO-EQG">
+                                                                <rect key="frame" x="0.0" y="25" width="262.33333333333331" height="10"/>
+                                                                <subviews>
+                                                                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="wl9-A0-oJb">
+                                                                        <rect key="frame" x="0.0" y="0.0" width="10" height="10"/>
+                                                                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                                                        <constraints>
+                                                                            <constraint firstAttribute="width" constant="10" id="eLY-VB-cQB"/>
+                                                                            <constraint firstAttribute="height" constant="10" id="lzD-dk-Jz3"/>
+                                                                        </constraints>
+                                                                    </view>
+                                                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rJO-Mt-pxI">
+                                                                        <rect key="frame" x="14.000000000000014" y="0.0" width="248.33333333333337" height="10"/>
+                                                                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                                        <nil key="textColor"/>
+                                                                        <nil key="highlightedColor"/>
+                                                                    </label>
+                                                                </subviews>
+                                                            </stackView>
+                                                            <stackView opaque="NO" contentMode="scaleToFill" spacing="4" translatesAutoresizingMaskIntoConstraints="NO" id="ZmV-WC-Eth">
+                                                                <rect key="frame" x="0.0" y="50" width="262.33333333333331" height="10"/>
+                                                                <subviews>
+                                                                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dlP-bD-rRZ">
+                                                                        <rect key="frame" x="0.0" y="0.0" width="10" height="10"/>
+                                                                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                                                        <constraints>
+                                                                            <constraint firstAttribute="width" constant="10" id="FqP-yg-MXr"/>
+                                                                            <constraint firstAttribute="height" constant="10" id="cZV-RG-4DQ"/>
+                                                                        </constraints>
+                                                                    </view>
+                                                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MlG-GG-0la">
+                                                                        <rect key="frame" x="14.000000000000014" y="0.0" width="248.33333333333337" height="10"/>
+                                                                        <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                                        <nil key="textColor"/>
+                                                                        <nil key="highlightedColor"/>
+                                                                    </label>
+                                                                </subviews>
+                                                            </stackView>
+                                                        </subviews>
+                                                    </stackView>
+                                                </subviews>
+                                                <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                                <constraints>
+                                                    <constraint firstItem="9tt-ip-4gd" firstAttribute="centerY" secondItem="dKL-Dw-jX0" secondAttribute="centerY" id="Gwh-2l-zBt"/>
+                                                    <constraint firstAttribute="trailing" secondItem="9tt-ip-4gd" secondAttribute="trailing" constant="15" id="UhL-JU-498"/>
+                                                    <constraint firstItem="9tt-ip-4gd" firstAttribute="leading" secondItem="dKL-Dw-jX0" secondAttribute="leading" id="wv1-8i-7qY"/>
+                                                </constraints>
+                                            </view>
+                                        </subviews>
+                                        <constraints>
+                                            <constraint firstItem="dKL-Dw-jX0" firstAttribute="width" secondItem="T83-N3-v6R" secondAttribute="width" id="FPh-QJ-OjN"/>
+                                        </constraints>
+                                    </stackView>
+                                </subviews>
+                                <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                <constraints>
+                                    <constraint firstItem="tGZ-CI-qDT" firstAttribute="leading" secondItem="Fni-LE-aAl" secondAttribute="leading" id="7o3-pn-6N6"/>
+                                    <constraint firstItem="YdX-7z-fXE" firstAttribute="leading" secondItem="Fni-LE-aAl" secondAttribute="leading" constant="30" id="Tmp-Ah-yBR"/>
+                                    <constraint firstItem="tGZ-CI-qDT" firstAttribute="top" secondItem="d27-U7-tQy" secondAttribute="bottom" id="UGD-pj-hrf"/>
+                                    <constraint firstItem="d27-U7-tQy" firstAttribute="top" secondItem="YdX-7z-fXE" secondAttribute="bottom" constant="5" id="hcz-uA-4uI"/>
+                                    <constraint firstAttribute="trailing" secondItem="tGZ-CI-qDT" secondAttribute="trailing" id="jvP-Bn-HA5"/>
+                                    <constraint firstAttribute="bottom" secondItem="tGZ-CI-qDT" secondAttribute="bottom" constant="10" id="l3u-b8-uDe"/>
+                                    <constraint firstItem="YdX-7z-fXE" firstAttribute="top" secondItem="Fni-LE-aAl" secondAttribute="top" constant="20" id="peh-pJ-J8o"/>
+                                    <constraint firstItem="d27-U7-tQy" firstAttribute="leading" secondItem="Fni-LE-aAl" secondAttribute="leading" constant="30" id="uRs-TE-DiH"/>
+                                </constraints>
+                            </view>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lh7-Wl-Bgp">
+                                <rect key="frame" x="0.0" y="439" width="555" height="25"/>
+                                <subviews>
+                                    <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="B1e-Jb-T45">
+                                        <rect key="frame" x="60" y="0.0" width="455" height="25"/>
+                                        <subviews>
+                                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="F2Q-7M-u57">
+                                                <rect key="frame" x="0.0" y="0.0" width="103.33333333333333" height="25"/>
+                                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                <nil key="textColor"/>
+                                                <nil key="highlightedColor"/>
+                                            </label>
+                                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gOH-fW-DRZ">
+                                                <rect key="frame" x="103.33333333333334" y="0.0" width="103.33333333333334" height="25"/>
+                                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                <nil key="textColor"/>
+                                                <nil key="highlightedColor"/>
+                                            </label>
+                                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nsY-St-WUV">
+                                                <rect key="frame" x="206.66666666666671" y="0.0" width="124.33333333333334" height="25"/>
+                                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                <nil key="textColor"/>
+                                                <nil key="highlightedColor"/>
+                                            </label>
+                                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MUk-Ji-CZQ">
+                                                <rect key="frame" x="331" y="0.0" width="124" height="25"/>
+                                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                <nil key="textColor"/>
+                                                <nil key="highlightedColor"/>
+                                            </label>
+                                        </subviews>
+                                        <constraints>
+                                            <constraint firstItem="gOH-fW-DRZ" firstAttribute="width" secondItem="F2Q-7M-u57" secondAttribute="width" id="HmU-VS-ALj"/>
+                                            <constraint firstItem="MUk-Ji-CZQ" firstAttribute="width" secondItem="F2Q-7M-u57" secondAttribute="width" multiplier="1.2" id="fPf-1j-pDi"/>
+                                            <constraint firstItem="nsY-St-WUV" firstAttribute="width" secondItem="F2Q-7M-u57" secondAttribute="width" multiplier="1.2" id="h7Q-oh-AC6"/>
+                                        </constraints>
+                                    </stackView>
+                                </subviews>
+                                <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                <constraints>
+                                    <constraint firstAttribute="trailing" secondItem="B1e-Jb-T45" secondAttribute="trailing" constant="40" id="5En-xL-dZa"/>
+                                    <constraint firstItem="B1e-Jb-T45" firstAttribute="leading" secondItem="lh7-Wl-Bgp" secondAttribute="leading" constant="60" id="U3I-fy-shx"/>
+                                    <constraint firstAttribute="bottom" secondItem="B1e-Jb-T45" secondAttribute="bottom" id="WcZ-A5-lWG"/>
+                                    <constraint firstAttribute="height" constant="25" id="dd9-7w-z4r"/>
+                                    <constraint firstItem="B1e-Jb-T45" firstAttribute="top" secondItem="lh7-Wl-Bgp" secondAttribute="top" id="zk0-ZS-89H"/>
+                                </constraints>
+                            </view>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uoJ-wz-nuv">
+                                <rect key="frame" x="0.0" y="464" width="555" height="400"/>
+                                <subviews>
+                                    <tableView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" bounces="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" bouncesZoom="NO" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="N3X-Cg-eel">
+                                        <rect key="frame" x="40" y="0.0" width="475" height="400"/>
+                                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                    </tableView>
+                                </subviews>
+                                <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                <constraints>
+                                    <constraint firstAttribute="trailing" secondItem="N3X-Cg-eel" secondAttribute="trailing" constant="40" id="2Vq-6s-yBk"/>
+                                    <constraint firstItem="N3X-Cg-eel" firstAttribute="top" secondItem="uoJ-wz-nuv" secondAttribute="top" id="5nm-5U-YLW"/>
+                                    <constraint firstItem="N3X-Cg-eel" firstAttribute="leading" secondItem="uoJ-wz-nuv" secondAttribute="leading" constant="40" id="aRe-v1-5Xb"/>
+                                    <constraint firstAttribute="bottom" secondItem="N3X-Cg-eel" secondAttribute="bottom" id="hd9-zk-UfW"/>
+                                </constraints>
+                            </view>
+                        </subviews>
+                    </stackView>
+                </subviews>
+                <constraints>
+                    <constraint firstAttribute="trailing" secondItem="vqF-zp-mmY" secondAttribute="trailing" id="F9K-2t-LrY"/>
+                    <constraint firstAttribute="bottom" secondItem="vqF-zp-mmY" secondAttribute="bottom" constant="20" id="PAN-XY-jVT"/>
+                    <constraint firstItem="vqF-zp-mmY" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="ZFr-g1-EKr"/>
+                    <constraint firstItem="vqF-zp-mmY" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="snj-nd-Gk2"/>
+                </constraints>
+            </tableViewCellContentView>
+            <connections>
+                <outlet property="chartBgView" destination="T83-N3-v6R" id="HId-I8-dke"/>
+                <outlet property="conter1Lab" destination="gOH-fW-DRZ" id="LKV-IP-zPf"/>
+                <outlet property="conter2Lab" destination="nsY-St-WUV" id="9rP-Wl-n0m"/>
+                <outlet property="dot1View" destination="X0U-Gu-fRj" id="WJx-Bb-bfR"/>
+                <outlet property="dot2View" destination="wl9-A0-oJb" id="447-1F-dHr"/>
+                <outlet property="dot3View" destination="dlP-bD-rRZ" id="JhS-0S-cuT"/>
+                <outlet property="leftLab" destination="F2Q-7M-u57" id="p2P-8a-FD4"/>
+                <outlet property="name1Lab" destination="Oxr-6c-EVP" id="w9H-gf-Pwv"/>
+                <outlet property="name2Lab" destination="rJO-Mt-pxI" id="4Ng-x6-gWo"/>
+                <outlet property="name3Lab" destination="MlG-GG-0la" id="UPK-rz-9dE"/>
+                <outlet property="rightLab" destination="MUk-Ji-CZQ" id="51Y-xk-ABz"/>
+                <outlet property="stack1View" destination="Ect-sW-SdB" id="StO-y9-wp1"/>
+                <outlet property="stack2View" destination="0bx-dO-EQG" id="Tgy-yI-7xP"/>
+                <outlet property="stack3View" destination="ZmV-WC-Eth" id="iHe-ZH-HpI"/>
+                <outlet property="tableView" destination="N3X-Cg-eel" id="xoQ-T0-zBK"/>
+                <outlet property="timerLab" destination="d27-U7-tQy" id="RmJ-kd-aA4"/>
+                <outlet property="titleLab" destination="YdX-7z-fXE" id="P2Y-ry-Jax"/>
+            </connections>
+            <point key="canvasLocation" x="481.67938931297709" y="308.45070422535213"/>
+        </tableViewCell>
+    </objects>
+    <resources>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 61 - 0
Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPMajorListCell.swift

@@ -0,0 +1,61 @@
+//
+//  MDPMajorListCell.swift
+//  Koala
+//
+//  Created by 刘千军 on 2023/10/17.
+//  Copyright © 2023 刘千军. All rights reserved.
+//
+
+import UIKit
+
+class MDPMajorListCell: BaseTableViewCell {
+    @IBOutlet weak var dotView: UIView!
+    @IBOutlet weak var leftLab: UILabel!
+    @IBOutlet weak var conter1Lab: UILabel!
+    @IBOutlet weak var conter2Lab: UILabel!
+    
+    @IBOutlet weak var rightLab: UILabel!
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        self.backgroundColor = ALLBackGroundColor
+        
+        self.dotView.setViewLayerBorderColor(myColor: .clear, borderWidth: 0, maskBounds: 3)
+        
+        self.leftLab.textColor = MidTextColor
+        self.leftLab.setTextFont(.PFSR, 10)
+        
+        self.conter1Lab.textColor = MidTextColor
+        self.conter1Lab.setTextFont(.PFSR, 10)
+        
+        self.conter2Lab.textColor = MidTextColor
+        self.conter2Lab.setTextFont(.PFSR, 10)
+        
+        self.rightLab.textColor = MidTextColor
+        self.rightLab.setTextFont(.PFSR, 10)
+        // Initialization code
+    }
+
+    override func setSelected(_ selected: Bool, animated: Bool) {
+        super.setSelected(selected, animated: animated)
+
+        // Configure the view for the selected state
+    }
+    
+    func updateCellWith(model:MDMajorListModel) -> Void {
+        self.dotView.backgroundColor = model.color
+        if model.holdingNumber.length > 0 {
+            self.leftLab.text = conversionUnit(number: model.holdingNumber) + " " + switchLanguage("股")
+        }else{
+            self.leftLab.text = conversionUnit(number: model.holdingNumber_OS) + " " + switchLanguage("股")
+        }
+       
+        
+        self.conter1Lab.text = precisionString(with: model.holdingRatio, precision: "2") + "%"
+        
+        self.conter2Lab.text = model.reportDate
+        
+        self.rightLab.text = model.type.length > 0 ? model.type : model.holderType
+    }
+    
+}

+ 86 - 0
Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPMajorListCell.xib

@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" rowHeight="71" id="KGk-i7-Jjw" customClass="MDPMajorListCell" customModule="Koala" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="329" height="71"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
+                <rect key="frame" x="0.0" y="0.0" width="329" height="71"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vl6-x5-VE2">
+                        <rect key="frame" x="0.0" y="32.666666666666664" width="6" height="6"/>
+                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="6" id="2EF-ig-gOt"/>
+                            <constraint firstAttribute="width" constant="6" id="eXx-hm-Uih"/>
+                        </constraints>
+                    </view>
+                    <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="49E-JR-bSY">
+                        <rect key="frame" x="26" y="25.333333333333336" width="303" height="20.333333333333336"/>
+                        <subviews>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mk4-9h-yBA">
+                                <rect key="frame" x="0.0" y="0.0" width="69" height="20.333333333333332"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                <nil key="textColor"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PTf-nN-vp8">
+                                <rect key="frame" x="69" y="0.0" width="68.666666666666686" height="20.333333333333332"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                <nil key="textColor"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Pvt-dG-NhS">
+                                <rect key="frame" x="137.66666666666666" y="0.0" width="82.666666666666657" height="20.333333333333332"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                <nil key="textColor"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Tsz-Re-qyW">
+                                <rect key="frame" x="220.33333333333334" y="0.0" width="82.666666666666657" height="20.333333333333332"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                <nil key="textColor"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                        </subviews>
+                        <constraints>
+                            <constraint firstItem="Pvt-dG-NhS" firstAttribute="width" secondItem="mk4-9h-yBA" secondAttribute="width" multiplier="1.2" id="2md-7M-ajO"/>
+                            <constraint firstItem="Tsz-Re-qyW" firstAttribute="width" secondItem="mk4-9h-yBA" secondAttribute="width" multiplier="1.2" id="BvB-8u-AB0"/>
+                            <constraint firstItem="PTf-nN-vp8" firstAttribute="width" secondItem="mk4-9h-yBA" secondAttribute="width" id="qb9-rj-6KZ"/>
+                        </constraints>
+                    </stackView>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="vl6-x5-VE2" firstAttribute="centerY" secondItem="H2p-sc-9uM" secondAttribute="centerY" id="2Ok-sZ-k98"/>
+                    <constraint firstItem="vl6-x5-VE2" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="3hB-p1-kKC"/>
+                    <constraint firstItem="49E-JR-bSY" firstAttribute="centerY" secondItem="H2p-sc-9uM" secondAttribute="centerY" id="B80-L6-tB1"/>
+                    <constraint firstAttribute="trailing" secondItem="49E-JR-bSY" secondAttribute="trailing" id="fFy-ou-Acq"/>
+                    <constraint firstItem="49E-JR-bSY" firstAttribute="leading" secondItem="vl6-x5-VE2" secondAttribute="trailing" constant="20" id="weC-FF-Vwg"/>
+                </constraints>
+            </tableViewCellContentView>
+            <connections>
+                <outlet property="conter1Lab" destination="PTf-nN-vp8" id="VC5-Zy-8bC"/>
+                <outlet property="conter2Lab" destination="Pvt-dG-NhS" id="lOE-za-cg1"/>
+                <outlet property="dotView" destination="vl6-x5-VE2" id="zK9-Hd-tcm"/>
+                <outlet property="leftLab" destination="mk4-9h-yBA" id="B8f-Ug-a06"/>
+                <outlet property="rightLab" destination="Tsz-Re-qyW" id="0by-Le-Yg7"/>
+            </connections>
+            <point key="canvasLocation" x="162.59541984732823" y="17.253521126760564"/>
+        </tableViewCell>
+    </objects>
+    <resources>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 44 - 0
Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPStructListCell.swift

@@ -0,0 +1,44 @@
+//
+//  MDPStructListCell.swift
+//  Koala
+//
+//  Created by 刘千军 on 2023/10/18.
+//  Copyright © 2023 刘千军. All rights reserved.
+//
+
+import UIKit
+
+class MDPStructListCell: BaseTableViewCell {
+    @IBOutlet weak var leftLab: UILabel!
+    @IBOutlet weak var centerLab: UILabel!
+    @IBOutlet weak var rightLab: UILabel!
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        
+        self.backgroundColor = ALLBackGroundColor
+        
+        self.leftLab.setTextFont(.PFSR, 12)
+        self.leftLab.textColor = TitleTextColor
+        
+        self.centerLab.setTextFont(.PFSR, 12)
+        self.centerLab.textColor = TitleTextColor
+        
+        self.rightLab.setTextFont(.PFSR, 12)
+        self.rightLab.textColor = TitleTextColor
+        // Initialization code
+    }
+
+    override func setSelected(_ selected: Bool, animated: Bool) {
+        super.setSelected(selected, animated: animated)
+
+        // Configure the view for the selected state
+    }
+    
+    func updateCellWith(model:MDStructListModel) -> Void {
+        self.leftLab.text = model.changeDate
+        self.centerLab.text = model.changeReason
+        self.rightLab.text = conversionUnit(number: model.issueNormal) + " " + switchLanguage("股")
+    }
+    
+}

+ 62 - 0
Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPStructListCell.xib

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" rowHeight="82" id="KGk-i7-Jjw" customClass="MDPStructListCell" customModule="Koala" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="338" height="82"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
+                <rect key="frame" x="0.0" y="0.0" width="338" height="82"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="t1X-eJ-ISy">
+                        <rect key="frame" x="30" y="0.0" width="278" height="82"/>
+                        <subviews>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="38e-3G-QB0">
+                                <rect key="frame" x="0.0" y="0.0" width="92.666666666666671" height="82"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                <nil key="textColor"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ts9-Xf-VR0">
+                                <rect key="frame" x="92.666666666666657" y="0.0" width="92.666666666666657" height="82"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                <nil key="textColor"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="J2V-o4-XAV">
+                                <rect key="frame" x="185.33333333333334" y="0.0" width="92.666666666666657" height="82"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                <nil key="textColor"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                        </subviews>
+                        <constraints>
+                            <constraint firstItem="Ts9-Xf-VR0" firstAttribute="width" secondItem="38e-3G-QB0" secondAttribute="width" id="AM3-et-Qvv"/>
+                            <constraint firstItem="J2V-o4-XAV" firstAttribute="width" secondItem="38e-3G-QB0" secondAttribute="width" id="ZwY-eu-pCg"/>
+                        </constraints>
+                    </stackView>
+                </subviews>
+                <constraints>
+                    <constraint firstAttribute="trailing" secondItem="t1X-eJ-ISy" secondAttribute="trailing" constant="30" id="0jo-Sz-Gdc"/>
+                    <constraint firstItem="t1X-eJ-ISy" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="EkF-eT-esA"/>
+                    <constraint firstAttribute="bottom" secondItem="t1X-eJ-ISy" secondAttribute="bottom" id="nAm-3L-bNO"/>
+                    <constraint firstItem="t1X-eJ-ISy" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="30" id="vpT-Zq-Z5F"/>
+                </constraints>
+            </tableViewCellContentView>
+            <connections>
+                <outlet property="centerLab" destination="Ts9-Xf-VR0" id="zZt-QG-R92"/>
+                <outlet property="leftLab" destination="38e-3G-QB0" id="I4o-OH-JUc"/>
+                <outlet property="rightLab" destination="J2V-o4-XAV" id="h4p-sM-SPH"/>
+            </connections>
+            <point key="canvasLocation" x="-53.435114503816791" y="33.098591549295776"/>
+        </tableViewCell>
+    </objects>
+</document>

+ 67 - 0
Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPStructSectionView.swift

@@ -0,0 +1,67 @@
+//
+//  MDPStructSectionView.swift
+//  Koala
+//
+//  Created by 刘千军 on 2023/10/18.
+//  Copyright © 2023 刘千军. All rights reserved.
+//
+
+import UIKit
+
+class MDPStructSectionView: BaseView {
+    @IBOutlet weak var titleLab: UILabel!
+    
+    @IBOutlet weak var leftLab: UILabel!
+    
+    @IBOutlet weak var centerLab: UILabel!
+    
+    @IBOutlet weak var rightLab: UILabel!
+    
+    var sectionView: UIView!
+    
+    func loadFromNib() -> UIView {
+        return Bundle.main.loadNibNamed("MDPStructSectionView", owner: self, options: nil)?.first as! UIView
+    }
+
+    
+    override init(frame: CGRect) {
+        super.init(frame: frame)
+        sectionView = loadFromNib()
+        addSubview(sectionView)
+        sectionView.snp.makeConstraints { (make) in
+            make.edges.equalToSuperview()
+        }
+        
+        self.titleLab.setTextFont(.PFSM, 18)
+        self.leftLab.setTextFont(.PFSR, 10)
+        self.centerLab.setTextFont(.PFSR, 10)
+        self.rightLab.setTextFont(.PFSR, 10)
+        
+        mySwitchLanguage()
+        mySwitchSkin()
+    }
+    
+    override func mySwitchLanguage() {
+        self.titleLab.text = switchLanguage("股东变动")
+        self.leftLab.text = switchLanguage("变动日期")
+        self.centerLab.text = switchLanguage("原因")
+        self.rightLab.text = switchLanguage("变动数量")
+    }
+    
+    override func mySwitchSkin() {
+        self.backgroundColor = ALLBackGroundColor
+        sectionView.backgroundColor = ALLBackGroundColor
+        self.titleLab.textColor = TitleTextColor
+        
+        self.leftLab.textColor = MidTextColor
+        
+        self.centerLab.textColor = MidTextColor
+        
+        self.rightLab.textColor = MidTextColor
+    }
+    
+    required init?(coder aDecoder: NSCoder) {
+        super.init(coder: aDecoder)
+    }
+    
+}

+ 90 - 0
Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDPStructSectionView.xib

@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MDPStructSectionView" customModule="Koala" customModuleProvider="target">
+            <connections>
+                <outlet property="centerLab" destination="CxC-Ps-hQJ" id="M8u-Hz-8UP"/>
+                <outlet property="leftLab" destination="vKC-Oc-ZtS" id="XXj-xN-bnV"/>
+                <outlet property="rightLab" destination="9Dr-Tw-Hub" id="F6U-G3-4tL"/>
+                <outlet property="titleLab" destination="07l-lG-2HZ" id="FY2-Nd-aqh"/>
+            </connections>
+        </placeholder>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB">
+            <rect key="frame" x="0.0" y="0.0" width="417" height="85"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="hco-ze-Sc8">
+                    <rect key="frame" x="30" y="0.0" width="357" height="85"/>
+                    <subviews>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="PpV-39-JNk">
+                            <rect key="frame" x="0.0" y="0.0" width="357" height="40"/>
+                            <subviews>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="07l-lG-2HZ">
+                                    <rect key="frame" x="0.0" y="19.666666666666671" width="41.333333333333336" height="20.333333333333329"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                    <nil key="textColor"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                            </subviews>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <constraints>
+                                <constraint firstItem="07l-lG-2HZ" firstAttribute="leading" secondItem="PpV-39-JNk" secondAttribute="leading" id="Yr2-7R-DMb"/>
+                                <constraint firstAttribute="height" constant="40" id="Za6-HO-sw2"/>
+                                <constraint firstAttribute="bottom" secondItem="07l-lG-2HZ" secondAttribute="bottom" id="Zm9-79-G1i"/>
+                            </constraints>
+                        </view>
+                        <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aeM-zi-Vky">
+                            <rect key="frame" x="0.0" y="40" width="357" height="45"/>
+                            <subviews>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vKC-Oc-ZtS">
+                                    <rect key="frame" x="0.0" y="0.0" width="119" height="45"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                    <nil key="textColor"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CxC-Ps-hQJ">
+                                    <rect key="frame" x="119" y="0.0" width="119" height="45"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                    <nil key="textColor"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9Dr-Tw-Hub">
+                                    <rect key="frame" x="238" y="0.0" width="119" height="45"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                    <nil key="textColor"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="9Dr-Tw-Hub" firstAttribute="width" secondItem="vKC-Oc-ZtS" secondAttribute="width" id="3lh-Wi-xQ2"/>
+                                <constraint firstItem="CxC-Ps-hQJ" firstAttribute="width" secondItem="vKC-Oc-ZtS" secondAttribute="width" id="NVH-g8-1dQ"/>
+                            </constraints>
+                        </stackView>
+                    </subviews>
+                </stackView>
+            </subviews>
+            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="hco-ze-Sc8" secondAttribute="trailing" constant="30" id="9SK-bp-Lfu"/>
+                <constraint firstItem="hco-ze-Sc8" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="30" id="BT1-qS-Yfv"/>
+                <constraint firstItem="hco-ze-Sc8" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="YsX-eI-6zP"/>
+                <constraint firstAttribute="bottom" secondItem="hco-ze-Sc8" secondAttribute="bottom" id="a5D-Sq-vhA"/>
+            </constraints>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="-238.93129770992365" y="-193.3098591549296"/>
+        </view>
+    </objects>
+    <resources>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 200 - 7
Koala/Koala/Modular/Market/V/MarketDetailView/MDProfileView/MDProfileView.swift

@@ -7,15 +7,208 @@
 //
 
 import UIKit
-
+import MJRefresh
 class MDProfileView: BaseView {
+    var VM: MDProfileViewModel?
+    
+    lazy var tableView: BaseTableView = { [weak self] in
+        let tableView = BaseTableView.init(frame: .zero, style: .grouped)
+        tableView.separatorStyle = .singleLine
+        tableView.separatorColor = ViewBorderColor
+        tableView.separatorInset = UIEdgeInsets.init(top: 0, left: 0, bottom: 0, right: 0)
+        tableView.delegate = self
+        tableView.dataSource = self
+        tableView.backgroundColor = .clear
+        tableView.tableHeaderView = UIView()
+        tableView.tableFooterView = UIView()
+        tableView.showsHorizontalScrollIndicator = false
+        tableView.showsVerticalScrollIndicator = false
+        
+        
+        tableView.register(UINib.init(nibName: "MDPCompanyCell", bundle: nil), forCellReuseIdentifier: "MDPCompanyCell")
+        
+        tableView.register(UINib.init(nibName: "MDPIndustryCell", bundle: nil), forCellReuseIdentifier: "MDPIndustryCell")
+        
+        tableView.register(UINib.init(nibName: "MDPMajorCell", bundle: nil), forCellReuseIdentifier: "MDPMajorCell")
+        
+        tableView.register(UINib.init(nibName: "MDPStructListCell", bundle: nil), forCellReuseIdentifier: "MDPStructListCell")
+        
+        
+        if #available(iOS 11, *){
+            tableView.contentInsetAdjustmentBehavior = .never
+        }
+        
+        tableView.mj_header = MJRefreshHeader(refreshingBlock: { [weak self] in
+           
+            self?.VM?.netStructList(isUp: false)
+            
+        })
+        tableView.mj_footer = MJRefreshAutoFooter.init(refreshingBlock: { [weak self] in
+            self?.VM?.netStructList(isUp: true)
+        })
+        
+        return tableView
+        }()
+    
+    lazy var sectionView:MDPStructSectionView = {
+        let view:MDPStructSectionView = MDPStructSectionView.init(frame: CGRect(x: 0, y: 0, width: SCREEN_WIDTH, height: 70))
+        return view
+    }()
+
+    override func subView() {
+        self.addSubview(tableView)
+      
+        mySwitchLanguage()
+        mySwitchSkin()
+        
+    }
+    
+    override func layoutSubviews() {
+        super.layoutSubviews()
+        tableView.snp.makeConstraints { make in
+            make.top.right.left.bottom.equalToSuperview()
+        }
+       
+    }
+    
+    override func setViewModel(viewmodel: AnyObject) {
+        guard viewmodel is MDProfileViewModel else {
+            return
+        }
+        self.VM = viewmodel as? MDProfileViewModel
+        super.setViewModel(viewmodel: viewmodel)
+       
+    }
+    
+    override func mySwitchLanguage() {
+        //self.footerView.mySwitchLanguage()
+       
+    }
+    
+    override func mySwitchSkin() {
+        self.tableView.backgroundColor = .clear
+        self.backgroundColor = ALLBackGroundColor
+       
+    }
+    
 
-    /*
-    // Only override draw() if you perform custom drawing.
-    // An empty implementation adversely affects performance during animation.
-    override func draw(_ rect: CGRect) {
-        // Drawing code
+    override func blindModel() {
+        VM?.companyInfoAction.values.observeValues({[weak self] (success) in
+            guard let self = self else { return }
+            if success {
+                self.reloadTable()
+            }
+        })
+        
+        VM?.majorListAction.values.observeValues({[weak self] (success) in
+            guard let self = self else { return }
+            if success {
+                self.reloadTable()
+            }
+        })
+        
+        VM?.structListAction.values.observeValues({[weak self] (success) in
+            guard let self = self else{return}
+            DispatchQueue.main.async {
+                self.tableView.reloadData()
+                self.tableView.mj_header!.endRefreshing()
+                self.tableView.mj_footer!.endRefreshing()
+                if success {
+                    self.tableView.mj_footer!.endRefreshingWithNoMoreData()
+                }
+            }
+        })
+        
+    }
+    
+    func reloadTable() {
+        DispatchQueue.main.async {
+//            self.tableView.mj_header!.endRefreshing()
+            self.tableView.reloadData()
+        }
     }
-    */
+}
 
+//代理
+extension MDProfileView:UITableViewDelegate,UITableViewDataSource{
+    func numberOfSections(in tableView: UITableView) -> Int {
+        return 4
+    }
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        if section == 3{
+            return self.VM?.structList.count ?? 0
+        }
+        return 1
+    }
+    
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        if indexPath.section == 0 {
+            let cell:MDPCompanyCell = tableView.dequeueReusableCell(withIdentifier: "MDPCompanyCell") as! MDPCompanyCell
+            cell.updateCellWith(model: self.VM!.companyModel)
+            return cell
+        }
+        else if indexPath.section == 1 {
+            let cell:MDPIndustryCell = tableView.dequeueReusableCell(withIdentifier: "MDPIndustryCell") as! MDPIndustryCell
+            cell.updateCellWith(model: self.VM!.companyModel)
+            return cell
+        }
+        else if indexPath.section == 2{
+            let cell:MDPMajorCell = tableView.dequeueReusableCell(withIdentifier: "MDPMajorCell") as! MDPMajorCell
+            cell.updateCellWith(list: self.VM!.majorList)
+            return cell
+        }
+        
+        let cell:MDPStructListCell = tableView.dequeueReusableCell(withIdentifier: "MDPStructListCell") as! MDPStructListCell
+        cell.updateCellWith(model: self.VM!.structList[indexPath.row])
+        return cell
+    }
+    
+    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
+        if indexPath.section == 0{
+            return 135
+        }
+        else if indexPath.section == 1{
+           return 50
+        }
+        else if indexPath.section == 2{
+            let h = 30*self.VM!.majorList.count
+            return (SCREEN_WIDTH/2)+105.0+CGFloat(h)
+        }
+      
+        return 40
+    }
+    
+    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
+        if (section == 3){
+            return self.sectionView
+        }
+        return UIView()
+    }
+    
+    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
+        let footer:UIView = UIView()
+        footer.backgroundColor = ViewBorderColor
+        return footer
+    }
+    
+    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
+        if section == 3{
+            return 70
+        }
+        return 0.01
+    }
+    
+    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
+        if section == 3{
+            return 0.01
+        }
+        return 5
+    }
+    
+    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+      
+    }
+    
 }
+
+

+ 5 - 1
Koala/Koala/Modular/Market/VC/MarketDetailViewController.swift

@@ -204,6 +204,8 @@ class MarketDetailViewController: BaseViewController {
         
         self.financeViewModel.symbolModel = self.symbolModel
         
+        self.profileViewModel.symbolModel = self.symbolModel
+        
         self.newsViewModel.symbolModel = self.symbolModel
     }
     
@@ -240,7 +242,9 @@ class MarketDetailViewController: BaseViewController {
             
         }
         else if index == 2 {
-           
+            self.profileView.VM?.netCompanyInfo()
+            self.profileView.VM?.netMajorList()
+            self.profileView.VM?.netStructList(isUp: false)
         }
         else if index == 3{
             self.newsView.VM?.netNewsList(isUp: false)

+ 152 - 0
Koala/Koala/Modular/Market/VM/MDProfileViewModel.swift

@@ -7,7 +7,159 @@
 //
 
 import UIKit
+import ReactiveCocoa
+import ReactiveSwift
 
 class MDProfileViewModel: BaseViewModel {
+    var symbolModel:KSymbolModel = KSymbolModel()
+    
+    lazy var majorList:[MDMajorListModel] = {
+        let arr:[MDMajorListModel] = [MDMajorListModel]()
+        return arr
+    }()
+    
+    lazy var structList:[MDStructListModel] = {
+        let arr:[MDStructListModel] = [MDStructListModel]()
+        return arr
+    }()
+    
+    
+    
+    var companyModel:MCompanyModel = MCompanyModel()
+    
+    var pageNum:Int = 1
+    //jd_netForStructList
+    var companyInfoAction: Action <(),(Bool),Never>!
+    var majorListAction: Action <(),(Bool),Never>!
+    var structListAction: Action <(Bool),(Bool),Never>!
+    
+    override func initialize() {
+        companyInfoAction = Action<(),(Bool),Never> {[weak self] _ in
+            return SignalProducer<(Bool),Never>{ observer, _ in
+                self?.requestCompanyInfo(observer: observer)
+            }
+        }
+        
+        majorListAction = Action<(),(Bool),Never> {[weak self] _ in
+            return SignalProducer<(Bool),Never>{ observer, _ in
+                self?.requestMajorList(observer: observer)
+            }
+        }
+        
+        structListAction = Action<(Bool),(Bool),Never> {[weak self] isUp in
+            return SignalProducer<(Bool),Never>{ observer, _ in
+                self?.requestStructList(observer: observer,isUp:isUp)
+            }
+        }
+        
+    }
+}
 
+extension MDProfileViewModel {
+    
+    func netCompanyInfo() -> Void {
+        companyInfoAction.apply().start()
+    }
+    
+  
+    func requestCompanyInfo(observer: Signal< Bool, Never>.Observer) -> Void {
+        let param = [
+            "symbol":self.symbolModel.symbol,
+        ]
+        ProgressHUD.showLoading()
+        NetWork.NetWorkInstance.requestData(requestType: .Get, URLString: jd_netForCompanyInfo,parameters:param , success: { (code, result) in
+            ProgressHUD.hideHud()
+            if let dic:NSDictionary = result as? NSDictionary {
+                self.companyModel = MCompanyModel.deserialize(from: dic)!
+                observer.send(value: true)
+            }else{
+                observer.send(value: false)
+                ProgressHUD.showError(status:DataTypeErrorPrompt)
+            }
+            observer.sendCompleted()
+        }) { (code, result) in
+            ProgressHUD.showError(status: result as! String)
+            observer.send(value: false)
+            observer.sendCompleted()
+        }
+    }
+    
+    func netMajorList() -> Void {
+        majorListAction.apply().start()
+    }
+    
+  
+    func requestMajorList(observer: Signal< Bool, Never>.Observer) -> Void {
+        let param = [
+            "symbol":self.symbolModel.symbol,
+            "market":self.symbolModel.market,
+        ]
+        ProgressHUD.showLoading()
+        NetWork.NetWorkInstance.requestData(requestType: .Get, URLString: jd_netForMajorList,parameters:param , success: { (code, result) in
+            ProgressHUD.hideHud()
+            self.majorList.removeAll()
+            if let list:[NSDictionary] = result as? [NSDictionary] {
+                for dic in list{
+                    let model = MDMajorListModel.deserialize(from: dic)
+                    self.majorList.append(model!)
+                }
+                observer.send(value: true)
+            }else{
+                observer.send(value: false)
+                ProgressHUD.showError(status:DataTypeErrorPrompt)
+            }
+            observer.sendCompleted()
+        }) { (code, result) in
+            ProgressHUD.showError(status: result as! String)
+            observer.send(value: false)
+            observer.sendCompleted()
+        }
+    }
+    
+    
+    func netStructList(isUp:Bool) -> Void {
+        structListAction.apply(isUp).start()
+    }
+    
+    
+    func requestStructList(observer: Signal< Bool, Never>.Observer,isUp:Bool) -> Void {
+        if !isUp{
+            self.pageNum = 1
+        }
+        let param = [
+            "symbol":self.symbolModel.symbol,
+            "market":self.symbolModel.market,
+            "pageNum":self.pageNum,
+            "pageSize":"10"
+        ] as [String : Any]
+        
+        ProgressHUD.showLoading()
+        NetWork.NetWorkInstance.requestData(requestType: .Get, URLString: jd_netForStructList,parameters:param , success: { (code, result) in
+            ProgressHUD.hideHud()
+            if let list:[NSDictionary] = result?["list"] as? [NSDictionary] {
+                if !isUp {
+                    self.structList.removeAll()
+                }
+                self.pageNum += 1
+                
+                for dic in list{
+                    let model = MDStructListModel.deserialize(from: dic)
+                    self.structList.append(model!)
+                }
+                
+                let isNoData:Bool = (list.count < 10) ? true : false
+                observer.send(value:isNoData)
+            }else{
+                observer.send(value: false)
+                ProgressHUD.showError(status:DataTypeErrorPrompt)
+            }
+            observer.sendCompleted()
+        }) { (code, result) in
+            ProgressHUD.showError(status: result as! String)
+            observer.send(value: false)
+            observer.sendCompleted()
+        }
+    }
+    
 }
+