Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
galaxy-iOS
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
mobile-group
galaxy-iOS
Commits
81b75573
Commit
81b75573
authored
Apr 01, 2025
by
Alex朱枝文
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
问卷相关
parent
c18bdf38
Changes
13
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
770 additions
and
41 deletions
+770
-41
project.pbxproj
galaxy/galaxy.xcodeproj/project.pbxproj
+20
-0
YHHomeBannerView.swift
.../galaxy/Classes/Modules/Home(首页)/V/YHHomeBannerView.swift
+18
-17
YHCustomerInformationQuestionnaireVC.swift
...les/Plan(方案)/C/YHCustomerInformationQuestionnaireVC.swift
+0
-0
YHSurveyMatchResultViewController.swift
...odules/Plan(方案)/C/YHSurveyMatchResultViewController.swift
+29
-1
YHSurveyMatchingViewController.swift
...s/Modules/Plan(方案)/C/YHSurveyMatchingViewController.swift
+74
-1
YHSurveySubmitDoneViewController.swift
...Modules/Plan(方案)/C/YHSurveySubmitDoneViewController.swift
+14
-0
YHSurveyContentModel.swift
...axy/Classes/Modules/Plan(方案)/M/YHSurveyContentModel.swift
+296
-0
YHSurveyRenewalPlanState.swift
...Classes/Modules/Plan(方案)/M/YHSurveyRenewalPlanState.swift
+23
-0
YHSurveyResponseModel.swift
...xy/Classes/Modules/Plan(方案)/M/YHSurveyResponseModel.swift
+23
-0
YHSurveySubmitRequestModel.swift
...asses/Modules/Plan(方案)/M/YHSurveySubmitRequestModel.swift
+103
-0
YHSurveyTableViewCell.swift
...xy/Classes/Modules/Plan(方案)/V/YHSurveyTableViewCell.swift
+56
-22
YHSurveyViewModel.swift
...alaxy/Classes/Modules/Plan(方案)/VM/YHSurveyViewModel.swift
+107
-0
YHAllApiName.swift
galaxy/galaxy/Classes/Tools/NetWork/YHAllApiName.swift
+7
-0
No files found.
galaxy/galaxy.xcodeproj/project.pbxproj
View file @
81b75573
...
...
@@ -1177,6 +1177,11 @@
04A750DA2D94FDDF00974E5F
/* YHSurveyMatchingViewController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04A750D92D94FDDF00974E5F
/* YHSurveyMatchingViewController.swift */
;
};
04A750E82D952F2E00974E5F
/* survey_match_success.json in Resources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04A750E72D952F2E00974E5F
/* survey_match_success.json */
;
};
04A750E92D952F2E00974E5F
/* survey_file_scan.json in Resources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04A750E62D952F2E00974E5F
/* survey_file_scan.json */
;
};
04A750EB2D963AFE00974E5F
/* YHSurveyViewModel.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04A750EA2D963AFE00974E5F
/* YHSurveyViewModel.swift */
;
};
04A750ED2D963BE900974E5F
/* YHSurveyContentModel.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04A750EC2D963BE900974E5F
/* YHSurveyContentModel.swift */
;
};
04A750EF2D9A9E8A00974E5F
/* YHSurveySubmitRequestModel.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04A750EE2D9A9E8A00974E5F
/* YHSurveySubmitRequestModel.swift */
;
};
04A750F12D9AAD0300974E5F
/* YHSurveyResponseModel.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04A750F02D9AAD0300974E5F
/* YHSurveyResponseModel.swift */
;
};
04A750F32D9AB95300974E5F
/* YHSurveyRenewalPlanState.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04A750F22D9AB95300974E5F
/* YHSurveyRenewalPlanState.swift */
;
};
04AE200F2D12CFAF00891D24
/* YHGCMineSchemeViewController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04AE1FF82D12CFAF00891D24
/* YHGCMineSchemeViewController.swift */
;
};
04AE20102D12CFAF00891D24
/* YHGCApplicationTypeController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04AE1FFD2D12CFAF00891D24
/* YHGCApplicationTypeController.swift */
;
};
04AE20112D12CFAF00891D24
/* YHGCApplicationTypeResultController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
04AE1FFE2D12CFAF00891D24
/* YHGCApplicationTypeResultController.swift */
;
};
...
...
@@ -2480,6 +2485,11 @@
04A750D92D94FDDF00974E5F
/* YHSurveyMatchingViewController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHSurveyMatchingViewController.swift
;
sourceTree
=
"<group>"
;
};
04A750E62D952F2E00974E5F
/* survey_file_scan.json */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
text.json
;
path
=
survey_file_scan.json
;
sourceTree
=
"<group>"
;
};
04A750E72D952F2E00974E5F
/* survey_match_success.json */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
text.json
;
path
=
survey_match_success.json
;
sourceTree
=
"<group>"
;
};
04A750EA2D963AFE00974E5F
/* YHSurveyViewModel.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHSurveyViewModel.swift
;
sourceTree
=
"<group>"
;
};
04A750EC2D963BE900974E5F
/* YHSurveyContentModel.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHSurveyContentModel.swift
;
sourceTree
=
"<group>"
;
};
04A750EE2D9A9E8A00974E5F
/* YHSurveySubmitRequestModel.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHSurveySubmitRequestModel.swift
;
sourceTree
=
"<group>"
;
};
04A750F02D9AAD0300974E5F
/* YHSurveyResponseModel.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHSurveyResponseModel.swift
;
sourceTree
=
"<group>"
;
};
04A750F22D9AB95300974E5F
/* YHSurveyRenewalPlanState.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHSurveyRenewalPlanState.swift
;
sourceTree
=
"<group>"
;
};
04AE1FF82D12CFAF00891D24
/* YHGCMineSchemeViewController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHGCMineSchemeViewController.swift
;
sourceTree
=
"<group>"
;
};
04AE1FFA2D12CFAF00891D24
/* YHGCSchemeTableHeadView.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHGCSchemeTableHeadView.swift
;
sourceTree
=
"<group>"
;
};
04AE1FFD2D12CFAF00891D24
/* YHGCApplicationTypeController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHGCApplicationTypeController.swift
;
sourceTree
=
"<group>"
;
};
...
...
@@ -6808,7 +6818,11 @@
isa
=
PBXGroup
;
children
=
(
04D8FF582D925E6700703C75
/* YHPlanModel.swift */
,
04A750EE2D9A9E8A00974E5F
/* YHSurveySubmitRequestModel.swift */
,
04A750D32D93DFED00974E5F
/* YHSurveyQuestionType.swift */
,
04A750EC2D963BE900974E5F
/* YHSurveyContentModel.swift */
,
04A750F02D9AAD0300974E5F
/* YHSurveyResponseModel.swift */
,
04A750F22D9AB95300974E5F
/* YHSurveyRenewalPlanState.swift */
,
);
path
=
M
;
sourceTree
=
"<group>"
;
...
...
@@ -6817,6 +6831,7 @@
isa
=
PBXGroup
;
children
=
(
04D8FF5A2D925E8100703C75
/* YHPlanViewModel.swift */
,
04A750EA2D963AFE00974E5F
/* YHSurveyViewModel.swift */
,
);
path
=
VM
;
sourceTree
=
"<group>"
;
...
...
@@ -7169,6 +7184,7 @@
045C0FBF2D12CA5F00BD2DC0
/* YHMyLikeViewController.swift in Sources */
,
045C0FC02D12CA5F00BD2DC0
/* YHHomeCollectionLayout.swift in Sources */
,
045C0FC12D12CA5F00BD2DC0
/* YHOffivialApprovalGuildLineCheckView.swift in Sources */
,
04A750ED2D963BE900974E5F
/* YHSurveyContentModel.swift in Sources */
,
045C0FC22D12CA5F00BD2DC0
/* YHIncomeTypesCell.swift in Sources */
,
045C0FC32D12CA5F00BD2DC0
/* YHIncomeRecordSummaryCell.swift in Sources */
,
045C0FC42D12CA5F00BD2DC0
/* YHSheetPickerViewType.swift in Sources */
,
...
...
@@ -7683,6 +7699,7 @@
045C11752D12CA5F00BD2DC0
/* YHAIProductCell.swift in Sources */
,
045C11762D12CA5F00BD2DC0
/* YHHKRecordsHeaderCell.swift in Sources */
,
045C11772D12CA5F00BD2DC0
/* YHWorkMessageSelectTableViewCell.swift in Sources */
,
04A750F32D9AB95300974E5F
/* YHSurveyRenewalPlanState.swift in Sources */
,
045C11782D12CA5F00BD2DC0
/* YHResignGuidelinesViewModel.swift in Sources */
,
045C11792D12CA5F00BD2DC0
/* YHFormItemDoubleChoiceCell.swift in Sources */
,
045C117A2D12CA5F00BD2DC0
/* YHEmailInputAlertView.swift in Sources */
,
...
...
@@ -7771,6 +7788,7 @@
045C11C62D12CA5F00BD2DC0
/* YHListViewController.swift in Sources */
,
045C11C72D12CA5F00BD2DC0
/* YHWorkExperiencePositionTableViewCell.swift in Sources */
,
045C11C82D12CA5F00BD2DC0
/* YHOrderSearchViewController.swift in Sources */
,
04A750EF2D9A9E8A00974E5F
/* YHSurveySubmitRequestModel.swift in Sources */
,
045C11C92D12CA5F00BD2DC0
/* YHNoDataTipsView.swift in Sources */
,
045C11CA2D12CA5F00BD2DC0
/* YHHKRecordsInfoItemCell.swift in Sources */
,
04D8FF792D97BDBD00703C75
/* YHPlanShareViewController.swift in Sources */
,
...
...
@@ -8055,6 +8073,7 @@
045C12B22D12CA5F00BD2DC0
/* YHResignUploadDetailViewModel.swift in Sources */
,
045C12B32D12CA5F00BD2DC0
/* YHFamilyInfoConfirmViewModel.swift in Sources */
,
045C12B42D12CA5F00BD2DC0
/* YHLifeDetailViewController.swift in Sources */
,
04A750F12D9AAD0300974E5F
/* YHSurveyResponseModel.swift in Sources */
,
045C12B52D12CA5F00BD2DC0
/* YHIncomeRecordWorkExperienceViewController.swift in Sources */
,
045C12B62D12CA5F00BD2DC0
/* YHMyLikeViewModel.swift in Sources */
,
045C12B72D12CA5F00BD2DC0
/* YHCertificateUploadSheetView.swift in Sources */
,
...
...
@@ -8136,6 +8155,7 @@
045C12F92D12CA5F00BD2DC0
/* YHEducationCertificateConfirmCell.swift in Sources */
,
045C12FA2D12CA5F00BD2DC0
/* YHAcademicPreviewModel.swift in Sources */
,
045C12FB2D12CA5F00BD2DC0
/* YHHomeIdentityViewController.swift in Sources */
,
04A750EB2D963AFE00974E5F
/* YHSurveyViewModel.swift in Sources */
,
045C12FC2D12CA5F00BD2DC0
/* YHAdopterAddModel.swift in Sources */
,
045C12FD2D12CA5F00BD2DC0
/* YHOtherLoginViewController.swift in Sources */
,
045C12FE2D12CA5F00BD2DC0
/* YHInformationAuthorizationStepTwoViewController.swift in Sources */
,
...
...
galaxy/galaxy/Classes/Modules/Home(首页)/V/YHHomeBannerView.swift
View file @
81b75573
...
...
@@ -42,7 +42,8 @@ class YHHomeBannerView: UIView {
}
}
private
let
viewModel
=
YHLiveSalesViewModel
()
private
lazy
var
viewModel
=
YHLiveSalesViewModel
()
private
lazy
var
surveyViewModel
=
YHSurveyViewModel
()
override
init
(
frame
:
CGRect
)
{
super
.
init
(
frame
:
frame
)
...
...
@@ -113,6 +114,22 @@ private extension YHHomeBannerView {
YHOneKeyLoginManager
.
shared
.
oneKeyLogin
()
}
}
else
if
tabBarName
.
contains
(
"renewal_plan"
,
caseSensitive
:
false
)
{
if
YHLoginManager
.
shared
.
isLogin
()
{
surveyViewModel
.
getRenewalPlanState
{
state
,
_
in
if
state
?
.
isGeneratePlan
==
true
{
let
vc
=
YHPlanViewController
()
UIViewController
.
current
?
.
navigationController
?
.
pushViewController
(
vc
)
}
else
{
let
vc
=
YHCustomerInformationQuestionnaireVC
()
UIViewController
.
current
?
.
navigationController
?
.
pushViewController
(
vc
)
}
}
}
else
{
YHOneKeyLoginManager
.
shared
.
oneKeyLogin
()
}
}
else
{
}
...
...
@@ -163,22 +180,6 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
YHHUD
.
flash
(
message
:
"error:skip_url不能为空"
)
return
}
// for test hjl 建明机器IP
// var url = "http://192.168.23.66:10300/superAppBridge.html#/schoolEvaluation"
// for test hjl 梁辉机器IP
// model.skip_url = "http://192.168.23.75:10300/superAppBridge.html#/double11-home"
// for test hjl steve机器IP
// model.skip_url = "http://192.168.52.158:10300/superAppBridge.html#/double11-home"
// for test hjl 测试环境
// model.skip_url = "https://test-hkdiy-h5.galaxy-immi.com/superAppBridge.html#/double11-home"
// for test hjl 贤宇IP
// model.skip_url = "http://192.168.23.35:10300/signatureQrcode/EcqtQYs%2Bxey7t6jLbn6JkQ%3D%3D"
// model.skip_url = "http://192.168.23.71:10300/superAppBridge.html#/double11-home"
// 1.增加app token
var
url
=
""
...
...
galaxy/galaxy/Classes/Modules/Plan(方案)/C/YHCustomerInformationQuestionnaireVC.swift
View file @
81b75573
This diff is collapsed.
Click to expand it.
galaxy/galaxy/Classes/Modules/Plan(方案)/C/YHSurveyMatchResultViewController.swift
View file @
81b75573
...
...
@@ -84,7 +84,10 @@ class YHSurveyMatchResultViewController: YHBaseViewController {
return
button
}()
var
matchAgainEvent
:
(()
->
Void
)?
private
let
pageType
:
MatchResult
init
(
_
pageType
:
MatchResult
)
{
self
.
pageType
=
pageType
super
.
init
(
nibName
:
nil
,
bundle
:
nil
)
...
...
@@ -94,6 +97,25 @@ class YHSurveyMatchResultViewController: YHBaseViewController {
fatalError
(
"init(coder:) has not been implemented"
)
}
override
func
backItemClick
(
_
sender
:
Any
)
{
backEvent
()
}
/// 是否可以返回,包括点击返回和手势返回,默认YES
override
func
navigationShouldPop
()
->
Bool
{
backEvent
()
return
false
}
private
func
backEvent
()
{
if
pageType
==
.
success
{
navigationController
?
.
popToRootViewController
(
animated
:
true
)
}
else
{
matchAgainEvent
?()
navigationController
?
.
popViewController
()
}
}
override
func
viewDidLoad
()
{
super
.
viewDidLoad
()
setupUI
()
...
...
@@ -141,7 +163,13 @@ class YHSurveyMatchResultViewController: YHBaseViewController {
}
@objc
private
func
matchButtonClicked
()
{
//
if
pageType
==
.
success
{
let
vc
=
YHPlanViewController
()
navigationController
?
.
pushViewController
(
vc
)
}
else
{
matchAgainEvent
?()
navigationController
?
.
popViewController
()
}
}
/// 播放匹配成功
...
...
galaxy/galaxy/Classes/Modules/Plan(方案)/C/YHSurveyMatchingViewController.swift
View file @
81b75573
...
...
@@ -10,6 +10,12 @@ import Lottie
import
UIKit
class
YHSurveyMatchingViewController
:
YHBaseViewController
{
private
lazy
var
viewModel
=
YHSurveyViewModel
()
private
var
timer
:
Timer
?
private
var
startTime
:
Date
?
private
var
isRequestCompleted
=
false
private
lazy
var
lottieView
:
LottieAnimationView
=
{
let
aniView
=
LottieAnimationView
(
name
:
"survey_file_scan"
)
aniView
.
isUserInteractionEnabled
=
false
...
...
@@ -49,7 +55,7 @@ class YHSurveyMatchingViewController: YHBaseViewController {
override
func
viewDidLoad
()
{
super
.
viewDidLoad
()
setupUI
()
start
Animation
()
start
Loading
()
}
private
func
setupUI
()
{
...
...
@@ -86,6 +92,73 @@ class YHSurveyMatchingViewController: YHBaseViewController {
}
}
private
func
startLoading
()
{
startAnimation
()
// 重置状态
progressView
.
progress
=
0
isRequestCompleted
=
false
startTime
=
Date
()
timer
=
Timer
.
scheduledTimer
(
withTimeInterval
:
0.016
,
repeats
:
true
,
block
:
{
[
weak
self
]
_
in
guard
let
self
=
self
else
{
return
}
guard
let
startTime
=
self
.
startTime
else
{
return
}
let
elapsed
=
Date
()
.
timeIntervalSince
(
startTime
)
let
totalDuration
:
TimeInterval
=
4.0
// 总时长4秒
if
elapsed
<
totalDuration
{
// 前4秒内,进度条从0%到90%
let
progress
=
Float
(
elapsed
/
totalDuration
)
*
0.9
self
.
progressView
.
progress
=
progress
}
else
{
// 4秒后
self
.
timer
?
.
invalidate
()
self
.
timer
=
nil
if
self
.
isRequestCompleted
{
// 如果请求已完成,直接到100%
self
.
progressView
.
progress
=
1.0
self
.
loadingCompleted
()
}
else
{
// 如果请求未完成,保持90%,等待请求完成
self
.
progressView
.
progress
=
0.9
}
}
})
requestState
()
}
private
func
requestState
()
{
viewModel
.
getRenewalPlanState
{
[
weak
self
]
_
,
_
in
guard
let
self
=
self
else
{
return
}
self
.
isRequestCompleted
=
true
if
self
.
timer
==
nil
{
// 如果计时器已经结束(超过4秒),直接完成进度条
self
.
progressView
.
progress
=
1.0
self
.
loadingCompleted
()
}
}
}
private
func
loadingCompleted
()
{
stopAnimation
()
if
let
state
=
viewModel
.
planState
,
state
.
isGeneratePlan
{
gotoMatchResultVC
(
true
)
}
else
{
gotoMatchResultVC
(
false
)
}
}
private
func
gotoMatchResultVC
(
_
isSucess
:
Bool
)
{
let
ctl
=
YHSurveyMatchResultViewController
(
isSucess
?
.
success
:
.
failure
)
if
!
isSucess
{
ctl
.
matchAgainEvent
=
{
[
weak
self
]
in
self
?
.
startLoading
()
}
}
navigationController
?
.
pushViewController
(
ctl
)
}
private
func
startAnimation
()
{
lottieView
.
play
(
completion
:
{
_
in
//
...
...
galaxy/galaxy/Classes/Modules/Plan(方案)/C/YHSurveySubmitDoneViewController.swift
View file @
81b75573
...
...
@@ -46,6 +46,20 @@ class YHSurveySubmitDoneViewController: YHBaseViewController {
return
button
}()
override
func
backItemClick
(
_
sender
:
Any
)
{
backEvent
()
}
/// 是否可以返回,包括点击返回和手势返回,默认YES
override
func
navigationShouldPop
()
->
Bool
{
backEvent
()
return
false
}
private
func
backEvent
()
{
navigationController
?
.
popToRootViewController
(
animated
:
true
)
}
override
func
viewDidLoad
()
{
super
.
viewDidLoad
()
setupUI
()
...
...
galaxy/galaxy/Classes/Modules/Plan(方案)/M/YHSurveyContentModel.swift
0 → 100644
View file @
81b75573
//
// YHSurveyContentModel.swift
// galaxy
//
// Created by alexzzw on 2025/3/28.
// Copyright © 2025 https://www.galaxy-immi.com. All rights reserved.
//
import
Foundation
import
SmartCodable
// MARK: - YHSurveyContainerModel
class
YHSurveyContainerModel
:
SmartCodable
{
var
surveyContent
:
YHSurveyContentModel
=
YHSurveyContentModel
()
// 0老用户1新用户
var
type
:
Int
=
0
var
defaultAnswers
:
[
YHSurveyDefaultAnswers
]
=
[]
var
isNewCustomer
:
Bool
{
return
type
==
1
}
enum
CodingKeys
:
String
,
CodingKey
{
case
surveyContent
=
"survey_content"
case
type
case
defaultAnswers
=
"default_answers"
}
required
init
()
{
}
}
// MARK: - YHSurveyDefaultAnswers
class
YHSurveyDefaultAnswers
:
SmartCodable
{
var
questionId
:
String
=
""
var
optionId
:
[
String
]
=
[]
enum
CodingKeys
:
String
,
CodingKey
{
case
questionId
=
"question_id"
case
optionId
=
"option_id"
}
required
init
()
{
}
}
// MARK: - YHSurveyContentModel
class
YHSurveyContentModel
:
SmartCodable
{
/// 问卷ID
var
id
:
String
=
""
/// 问题列表
var
questions
:
[
YHSurveyQuestionItem
]
=
[]
/// 问卷备注
var
remark
:
String
=
""
/// 问卷标题
var
title
:
String
=
""
required
init
()
{
}
}
// MARK: - YHSurveyQuestionItem
class
YHSurveyQuestionItem
:
SmartCodable
{
/// 业务key,唯一标识一个问券的一个问题
var
businessKey
:
String
=
""
/// 问题ID
var
id
:
String
=
""
/// 是否必须回答 0:否 1:是
var
isRequired
:
Int
=
0
/// 最多允许上传的文件数量 仅对文件上传题有效
var
maxFileCount
:
Int
=
0
/// 问题序号
var
number
:
Int
=
0
/// repeated article.AnswerItem show_when = 8 [json_name = "show_when"]; //
/// 旧版show_when,即将废弃,请转用show_when_v1 仅当某个或某几个问题答案为XXX时才展示 不同项之间是且关系,选项列表
var
options
:
[
YHSurveyQuestionOptionItem
]
=
[]
/// 问题备注
var
remark
:
String
=
""
var
showWhenV1
:
YHSurveyQuestionItemShowWhenV1
=
YHSurveyQuestionItemShowWhenV1
()
/// 问题标题
var
title
:
String
=
""
/// 问题类型:1:单选 2:多选 3:文本输入 4:文件上传
var
type
:
Int
=
0
enum
CodingKeys
:
String
,
CodingKey
{
case
id
case
number
case
options
case
remark
case
title
case
type
case
isRequired
=
"is_required"
case
maxFileCount
=
"max_file_count"
case
showWhenV1
=
"show_when_v1"
case
businessKey
=
"business_key"
}
required
init
()
{
}
}
// MARK: - YHSurveyQuestionOptionItem
class
YHSurveyQuestionOptionItem
:
SmartCodable
{
/// 业务key,唯一标识一个问题的一个选项
var
businessKey
:
String
=
""
/// 选项ID
var
id
:
String
=
""
/// 跳转的目标问题id,仅当 jump_type=2 时有效
var
jumpQuestionId
:
String
=
""
/// 跳转逻辑 0:无需特殊跳转 1:结束问卷 2:跳到某题
var
jumpType
:
Int
=
0
/// 选中该选项后是否需要额外填写说明 0:无需 1:选填 2:必填
var
needExtra
:
Int
=
0
/// 选项序号
var
number
:
Int
=
0
/// 选项备注
var
remark
:
String
=
""
/// 该选项对应得分,业务有需要时可用
var
score
:
Int
=
0
/// 选项标题
var
title
:
String
=
""
enum
CodingKeys
:
String
,
CodingKey
{
case
id
case
number
case
remark
case
score
case
title
case
needExtra
=
"need_extra"
case
jumpType
=
"jump_type"
case
jumpQuestionId
=
"jump_question_id"
case
businessKey
=
"business_key"
}
required
init
()
{
}
}
// MARK: - YHSurveyQuestionItemShowWhenV1
class
YHSurveyQuestionItemShowWhenV1
:
SmartCodable
{
var
conditions
:
[
YHSurveyQuestionConditionItem
]
=
[]
/// 关系 and/or
var
relation
:
String
=
""
var
orArray
:
[
YHSurveyQuestionAndOptions
]
=
[]
var
andArray
:
[
YHSurveyQuestionAndOptions
]
=
[]
required
init
()
{
}
func
getConitionArray
()
->
[
YHSurveyQuestionAndOptions
]
{
var
questionAndOptions
:
[
YHSurveyQuestionAndOptions
]
=
[]
conditions
.
forEach
{
conditionItem
in
var
optionIds
:
Set
<
String
>
=
[]
let
options
=
conditionItem
.
options
/// 选项为空,任意选一个即可
if
conditionItem
.
isAnyAnswerAllowed
{
let
questionAndOption
=
YHSurveyQuestionAndOptions
.
init
(
questionsId
:
conditionItem
.
questionId
,
optionIds
:
[])
questionAndOptions
.
append
(
questionAndOption
)
}
else
{
if
options
.
relation
==
"and"
{
optionIds
.
formUnion
(
options
.
list
.
compactMap
{
$0
.
optionId
})
let
questionAndOption
=
YHSurveyQuestionAndOptions
.
init
(
questionsId
:
conditionItem
.
questionId
,
optionIds
:
optionIds
)
questionAndOptions
.
append
(
questionAndOption
)
}
else
if
options
.
relation
==
"or"
{
questionAndOptions
.
append
(
contentsOf
:
options
.
list
.
compactMap
{
return
YHSurveyQuestionAndOptions
.
init
(
questionsId
:
conditionItem
.
questionId
,
optionIds
:
[
$0
.
optionId
])
})
}
}
}
return
questionAndOptions
}
func
didFinishMapping
()
{
if
relation
==
"or"
{
orArray
=
getConitionArray
()
}
else
if
relation
==
"and"
{
andArray
=
getConitionArray
()
}
}
}
// MARK: - YHSurveyQuestionConditionItem
class
YHSurveyQuestionConditionItem
:
SmartCodable
{
/// 选中的选项ID与额外说明 仅对单选/多选有效且必需,单选时此项长度为1 兼容旧版 todo 去除
var
optionExtra
:
[
YHSurveyConditionOptionExtra
]
=
[]
var
options
:
YHSurveyConditionOptions
=
YHSurveyConditionOptions
()
/// 问题ID
var
questionId
:
String
=
""
/// 问题类型:1:单选 2:多选 3:文本输入 4:文件上传
var
questionType
:
Int
=
0
var
isAnyAnswerAllowed
:
Bool
=
false
enum
CodingKeys
:
String
,
CodingKey
{
case
options
case
optionExtra
=
"option_extra"
case
questionId
=
"question_id"
case
questionType
=
"question_type"
case
isAnyAnswerAllowed
=
"is_any_answer_allowed"
}
required
init
()
{
}
}
// MARK: - YHSurveyConditionOptionExtra
class
YHSurveyConditionOptionExtra
:
SmartCodable
{
/// 问题选项额外说明 选中该选项后必需填写额外说明时必需
var
extra
:
String
=
""
/// 选项ID 必需
var
optionId
:
String
=
""
/// 选项标题 可选 提交答案时,建议设置该字段,会作为提交记录留底;show_when场景下,忽略该字段
var
title
:
String
=
""
init
(
extra
:
String
,
optionId
:
String
,
title
:
String
)
{
self
.
extra
=
extra
self
.
optionId
=
optionId
self
.
title
=
title
}
enum
CodingKeys
:
String
,
CodingKey
{
case
extra
case
title
case
optionId
=
"option_id"
}
required
init
()
{
}
}
// MARK: - YHSurveyConditionOptions
class
YHSurveyConditionOptions
:
SmartCodable
{
/// 选项ID与额外说明的列表 单选时此项长度为1
var
list
:
[
YHSurveyConditionOptionsItem
]
=
[]
/// 关系 and/or
var
relation
:
String
=
""
required
init
()
{
}
}
// MARK: - YHSurveyConditionOptionsItem
class
YHSurveyConditionOptionsItem
:
SmartCodable
{
var
extra
:
YHSurveyOptionsItemExtra
=
YHSurveyOptionsItemExtra
()
/// 选项ID
var
optionId
:
String
=
""
enum
CodingKeys
:
String
,
CodingKey
{
case
extra
case
optionId
=
"option_id"
}
required
init
()
{
}
}
// MARK: - YHSurveyOptionsItemExtra
class
YHSurveyOptionsItemExtra
:
SmartCodable
{
/// 选项额外说明的内容 仅当 额外说明的判断方式为2时才有效
var
content
:
String
=
""
/// 选项额外说明的判断方式 0:无需判断 1:必须非空,不管具体值 2:必须为特定值
var
verifyType
:
Int
=
0
enum
CodingKeys
:
String
,
CodingKey
{
case
content
case
verifyType
=
"verify_type"
}
required
init
()
{
}
}
struct
YHSurveyQuestionAndOptions
:
SmartCodable
,
Equatable
{
var
questionsId
:
String
=
""
var
optionIds
:
Set
<
String
>
=
[]
static
func
==
(
lhs
:
YHSurveyQuestionAndOptions
,
rhs
:
YHSurveyQuestionAndOptions
)
->
Bool
{
return
lhs
.
questionsId
==
rhs
.
questionsId
&&
lhs
.
optionIds
==
rhs
.
optionIds
}
}
galaxy/galaxy/Classes/Modules/Plan(方案)/M/YHSurveyRenewalPlanState.swift
0 → 100644
View file @
81b75573
//
// YHSurveyRenewalPlanState.swift
// galaxy
//
// Created by alexzzw on 2025/3/31.
// Copyright © 2025 https://www.galaxy-immi.com. All rights reserved.
//
import
Foundation
import
SmartCodable
// MARK: - YHSurveyRenewalPlanState
class
YHSurveyRenewalPlanState
:
SmartCodable
{
var
isGeneratePlan
:
Bool
=
false
enum
CodingKeys
:
String
,
CodingKey
{
case
isGeneratePlan
=
"is_generate_plan"
}
required
init
()
{
}
}
galaxy/galaxy/Classes/Modules/Plan(方案)/M/YHSurveyResponseModel.swift
0 → 100644
View file @
81b75573
//
// YHSurveyResponseModel.swift
// galaxy
//
// Created by alexzzw on 2025/3/31.
// Copyright © 2025 https://www.galaxy-immi.com. All rights reserved.
//
import
Foundation
import
SmartCodable
// MARK: - YHSurveyResponseModel
class
YHSurveyResponseModel
:
SmartCodable
{
var
hasHkIdentity
:
Bool
=
false
enum
CodingKeys
:
String
,
CodingKey
{
case
hasHkIdentity
=
"has_hk_identity"
}
required
init
()
{
}
}
galaxy/galaxy/Classes/Modules/Plan(方案)/M/YHSurveySubmitRequestModel.swift
0 → 100644
View file @
81b75573
//
// YHSurveySubmitRequestModel.swift
// galaxy
//
// Created by alexzzw on 2025/3/31.
// Copyright © 2025 https://www.galaxy-immi.com. All rights reserved.
//
import
Foundation
/// RenewalAdviceSubmitSurveyAnswerRequest 续期建议-提交问卷答案-请求
// MARK: - YHSurveySubmitRequestModel
class
YHSurveySubmitRequestModel
{
/// 答案详情
var
answerDetails
:
[
YHSurveyArticleAnswerItem
]
=
[]
/// 问卷id
var
surveyId
:
String
=
""
init
(
answerDetails
:
[
YHSurveyArticleAnswerItem
],
surveyId
:
String
)
{
self
.
answerDetails
=
answerDetails
self
.
surveyId
=
surveyId
}
}
/// AnswerItem 单个问题答案项
// MARK: - YHSurveyArticleAnswerItem
class
YHSurveyArticleAnswerItem
{
/// 文件列表 仅对文件上传题有效且必需
var
fileList
:
[
YHSurveyAnswerItemFileItem
]
=
[]
/// 选中的选项ID与额外说明 仅对单选/多选有效且必需,单选时此项长度为1
var
optionExtra
:
[
YHSurveyAnswerItemOptionExtra
]
=
[]
/// 问题ID 必需
var
questionId
:
String
=
""
/// 问题key 可选 提交答案时,建议设置该字段,会作为提交记录留底;show_when场景下,忽略该字段
var
questionKey
:
String
=
""
/// 问题类型:1:单选 2:多选 3:文本输入 4:文件上传 必需
var
questionType
:
Int
=
0
/// 文本输入内容 仅对文本输入题有效且必需
var
text
:
String
=
""
/// 问题标题 可选 提交答案时,建议设置该字段,会作为提交记录留底;show_when场景下,忽略该字段
var
title
:
String
=
""
init
(
fileList
:
[
YHSurveyAnswerItemFileItem
],
optionExtra
:
[
YHSurveyAnswerItemOptionExtra
],
questionId
:
String
,
questionKey
:
String
,
questionType
:
Int
,
text
:
String
,
title
:
String
)
{
self
.
fileList
=
fileList
self
.
optionExtra
=
optionExtra
self
.
questionId
=
questionId
self
.
questionKey
=
questionKey
self
.
questionType
=
questionType
self
.
text
=
text
self
.
title
=
title
}
}
/// AnswerItemFileItem
// MARK: - YHSurveyAnswerItemFileItem
class
YHSurveyAnswerItemFileItem
{
/// 文件名称 可选 提交答案时,建议设置该字段,会作为提交记录留底;show_when场景下,忽略该字段
var
name
:
String
=
""
/// 文件大小 可选 提交答案时,建议设置该字段,会作为提交记录留底;show_when场景下,忽略该字段
var
size
:
Int
=
0
/// 文件类型 可选 提交答案时,建议设置该字段,会作为提交记录留底;show_when场景下,忽略该字段
var
type
:
String
=
""
/// 上传时间(格式:YYYY-MM-DD HH:mm:ss) 可选 可选 提交答案时,建议设置该字段,会作为提交记录留底;show_when场景下,忽略该字段
var
uploadAt
:
String
=
""
/// 文件url 必需
var
url
:
String
=
""
init
(
name
:
String
,
size
:
Int
,
type
:
String
,
uploadAt
:
String
,
url
:
String
)
{
self
.
name
=
name
self
.
size
=
size
self
.
type
=
type
self
.
uploadAt
=
uploadAt
self
.
url
=
url
}
}
/// AnswerItemOptionExtra
// MARK: - YHSurveyAnswerItemOptionExtra
class
YHSurveyAnswerItemOptionExtra
{
/// 问题选项额外说明 选中该选项后必需填写额外说明时必需
var
extra
:
String
=
""
/// 选项ID 必需
var
optionId
:
String
=
""
/// 选项key 可选 提交答案时,建议设置该字段,会作为提交记录留底;show_when场景下,忽略该字段
var
optionKey
:
String
=
""
/// 选项标题 可选 提交答案时,建议设置该字段,会作为提交记录留底;show_when场景下,忽略该字段
var
title
:
String
=
""
init
(
extra
:
String
,
optionId
:
String
,
optionKey
:
String
,
title
:
String
)
{
self
.
extra
=
extra
self
.
optionId
=
optionId
self
.
optionKey
=
optionKey
self
.
title
=
title
}
}
galaxy/galaxy/Classes/Modules/Plan(方案)/V/YHSurveyTableViewCell.swift
View file @
81b75573
...
...
@@ -6,6 +6,7 @@
// Copyright © 2025 https://www.galaxy-immi.com. All rights reserved.
//
import
AttributedString
import
UIKit
class
YHSurveyTableViewCell
:
YHResignDocumentCell
{
...
...
@@ -75,8 +76,14 @@ class YHSurveyTableViewCell: YHResignDocumentCell {
// MARK: - Configuration
func
configure
(
with
question
:
String
,
options
:
[
String
],
selectedIndex
:
Int
?
=
nil
,
type
:
QuestionType
=
.
singleChoice
)
{
questionLabel
.
text
=
question
func
configure
(
with
question
:
String
,
isRequired
:
Bool
=
true
,
options
:
[
String
],
selectedIndices
:
[
Int
],
type
:
QuestionType
=
.
singleChoice
)
{
let
questionAttr
:
ASAttributedString
=
.
init
(
"
\(
question
)
"
,
.
font
(
UIFont
.
PFSC_M
(
ofSize
:
15
)),
.
foreground
(
UIColor
.
mainTextColor
))
if
isRequired
{
let
starAttr
:
ASAttributedString
=
.
init
(
"*"
,
.
font
(
UIFont
.
PFSC_M
(
ofSize
:
15
)),
.
foreground
(
UIColor
.
failColor
))
questionLabel
.
attributed
.
text
=
starAttr
+
questionAttr
}
else
{
questionLabel
.
attributed
.
text
=
questionAttr
}
questionType
=
type
// Clear previous options
...
...
@@ -84,45 +91,72 @@ class YHSurveyTableViewCell: YHResignDocumentCell {
// Add new options
for
(
index
,
option
)
in
options
.
enumerated
()
{
let
optionView
=
createOptionView
(
text
:
option
,
isSelected
:
index
==
selectedIndex
,
index
:
index
)
let
optionView
=
createOptionView
(
text
:
option
,
isSelected
:
selectedIndices
.
contains
(
index
)
,
index
:
index
)
optionsStackView
.
addArrangedSubview
(
optionView
)
}
}
private
func
createOptionView
(
text
:
String
,
isSelected
:
Bool
,
index
:
Int
)
->
UIView
{
let
container
=
UIControl
()
container
.
tag
=
index
container
.
addTarget
(
self
,
action
:
#selector(
optionButtonTapped(_:)
)
,
for
:
.
touchUpInside
)
let
item
=
YHSurveyQuestionItemView
()
item
.
tag
=
index
item
.
addTarget
(
self
,
action
:
#selector(
optionButtonTapped(_:)
)
,
for
:
.
touchUpInside
)
item
.
setup
(
text
:
text
,
isSelected
:
isSelected
)
return
item
}
// MARK: - Actions
@objc
private
func
optionButtonTapped
(
_
sender
:
UIControl
)
{
optionsStackView
.
arrangedSubviews
.
enumerated
()
.
forEach
{
index
,
subView
in
guard
let
item
=
subView
as?
YHSurveyQuestionItemView
else
{
return
}
item
.
updateState
(
isSelected
:
sender
.
tag
==
index
)
}
optionSelected
?(
sender
.
tag
)
}
}
class
YHSurveyQuestionItemView
:
UIControl
{
private
lazy
var
iconView
:
UIImageView
=
{
let
imageView
=
UIImageView
()
return
imageView
}()
private
lazy
var
contentLabel
:
UILabel
=
{
let
label
=
UILabel
()
label
.
text
=
text
label
.
textColor
=
.
mainTextColor
label
.
font
=
.
PFSC_R
(
ofSize
:
14
)
return
label
}()
let
icon
=
UIImageView
()
icon
.
image
=
isSelected
?
UIImage
(
named
:
"plan_question_checked"
)
:
UIImage
(
named
:
"plan_question_unchecked"
)
// icon.image = isSelected ? UIImage(systemName: questionType == .singleChoice ? "largecircle.fill.circle" : "checkmark.square.fill") :
// UIImage(systemName: questionType == .singleChoice ? "circle" : "square")
// icon.tintColor = isSelected ? .systemBlue : .lightGray
container
.
addSubview
(
icon
)
container
.
addSubview
(
label
)
override
init
(
frame
:
CGRect
)
{
super
.
init
(
frame
:
frame
)
addSubview
(
iconView
)
addSubview
(
contentLabel
)
icon
.
snp
.
makeConstraints
{
make
in
icon
View
.
snp
.
makeConstraints
{
make
in
make
.
left
.
centerY
.
equalToSuperview
()
make
.
width
.
height
.
equalTo
(
14
)
}
l
abel
.
snp
.
makeConstraints
{
make
in
make
.
left
.
equalTo
(
icon
.
snp
.
right
)
.
offset
(
8
)
contentL
abel
.
snp
.
makeConstraints
{
make
in
make
.
left
.
equalTo
(
icon
View
.
snp
.
right
)
.
offset
(
8
)
make
.
right
.
top
.
bottom
.
equalToSuperview
()
}
}
return
container
required
init
?(
coder
:
NSCoder
)
{
fatalError
(
"init(coder:) has not been implemented"
)
}
// MARK: - Actions
func
setup
(
text
:
String
,
isSelected
:
Bool
)
{
updateState
(
isSelected
:
isSelected
)
contentLabel
.
text
=
text
}
@objc
private
func
optionButtonTapped
(
_
sender
:
UIContr
ol
)
{
optionSelected
?(
sender
.
tag
)
func
updateState
(
isSelected
:
Bo
ol
)
{
iconView
.
image
=
isSelected
?
UIImage
(
named
:
"plan_question_checked"
)
:
UIImage
(
named
:
"plan_question_unchecked"
)
}
}
galaxy/galaxy/Classes/Modules/Plan(方案)/VM/YHSurveyViewModel.swift
0 → 100644
View file @
81b75573
//
// YHSurveyViewModel.swift
// galaxy
//
// Created by alexzzw on 2025/3/28.
// Copyright © 2025 https://www.galaxy-immi.com. All rights reserved.
//
import
UIKit
class
YHSurveyViewModel
:
YHBaseViewModel
{
var
surveyContainerModel
:
YHSurveyContainerModel
?
var
responseModel
:
YHSurveyResponseModel
?
var
planState
:
YHSurveyRenewalPlanState
?
}
extension
YHSurveyViewModel
{
/*
问卷内容
*/
func
getSurveyContent
(
callback
:
@escaping
(
_
contentModel
:
YHSurveyContainerModel
?,
_
error
:
YHErrorModel
?)
->
Void
)
{
let
strUrl
=
YHBaseUrlManager
.
shared
.
curURL
()
+
YHAllApiName
.
Survey
.
surveyContent
_
=
YHNetRequest
.
getRequest
(
url
:
strUrl
,
params
:
[:])
{
[
weak
self
]
json
,
_
in
// 1. json字符串 转 对象
printLog
(
"model 是 ==>
\(
json
)
"
)
if
json
.
code
==
200
{
guard
let
dic
=
json
.
data
?
.
peel
as?
[
String
:
Any
],
let
resultModel
=
YHSurveyContainerModel
.
deserialize
(
from
:
dic
)
else
{
let
err
=
YHErrorModel
(
errorCode
:
YHErrorCode
.
dictParseError
.
rawValue
,
errorMsg
:
YHErrorCode
.
dictParseError
.
description
())
callback
(
nil
,
err
)
return
}
self
?
.
surveyContainerModel
=
resultModel
callback
(
resultModel
,
nil
)
}
else
{
let
err
=
YHErrorModel
(
errorCode
:
Int32
(
json
.
code
),
errorMsg
:
json
.
msg
.
isEmpty
?
""
:
json
.
msg
)
callback
(
nil
,
err
)
}
}
failBlock
:
{
err
in
callback
(
nil
,
err
)
}
}
/*
问卷提交
*/
func
submitSurveyAnswer
(
requestModel
:
YHSurveySubmitRequestModel
,
callBackBlock
:
@escaping
(
_
responseModel
:
YHSurveyResponseModel
?,
_
error
:
YHErrorModel
?)
->
Void
)
{
let
strUrl
=
YHBaseUrlManager
.
shared
.
curURL
()
+
YHAllApiName
.
Survey
.
submitSurveyAnswer
let
answerDetails
:
[[
String
:
Any
]]
=
requestModel
.
answerDetails
.
compactMap
({
item
in
let
optionExtra
:
[[
String
:
Any
]]
=
item
.
optionExtra
.
compactMap
{
extra
in
[
"option_id"
:
extra
.
optionId
,
"extra"
:
extra
.
extra
,
"title"
:
extra
.
title
,
"option_key"
:
extra
.
optionKey
]
}
return
[
"question_id"
:
item
.
questionId
,
"question_type"
:
item
.
questionType
,
"text"
:
""
,
"title"
:
item
.
title
,
"question_key"
:
item
.
questionKey
,
"option_extra"
:
optionExtra
,
"file_list"
:
[]]
})
let
params
:
[
String
:
Any
]
=
[
"survey_id"
:
requestModel
.
surveyId
,
"answer_details"
:
answerDetails
]
_
=
YHNetRequest
.
postRequest
(
url
:
strUrl
,
params
:
params
)
{
[
weak
self
]
json
,
_
in
// 1. json字符串 转 对象
if
json
.
code
==
200
{
guard
let
dic
=
json
.
data
?
.
peel
as?
[
String
:
Any
],
let
resultModel
=
YHSurveyResponseModel
.
deserialize
(
from
:
dic
)
else
{
let
err
=
YHErrorModel
(
errorCode
:
YHErrorCode
.
dictParseError
.
rawValue
,
errorMsg
:
YHErrorCode
.
dictParseError
.
description
())
callBackBlock
(
nil
,
err
)
return
}
self
?
.
responseModel
=
resultModel
callBackBlock
(
resultModel
,
nil
)
}
else
{
let
err
=
YHErrorModel
(
errorCode
:
Int32
(
json
.
code
),
errorMsg
:
json
.
msg
.
isEmpty
?
""
:
json
.
msg
)
callBackBlock
(
nil
,
err
)
}
}
failBlock
:
{
err
in
callBackBlock
(
nil
,
err
)
}
}
/*
问卷是否生成方案
*/
func
getRenewalPlanState
(
callback
:
@escaping
(
_
planState
:
YHSurveyRenewalPlanState
?,
_
error
:
YHErrorModel
?)
->
Void
)
{
let
strUrl
=
YHBaseUrlManager
.
shared
.
curURL
()
+
YHAllApiName
.
Survey
.
getRenewalPlanState
_
=
YHNetRequest
.
getRequest
(
url
:
strUrl
,
params
:
[:])
{
[
weak
self
]
json
,
_
in
// 1. json字符串 转 对象
printLog
(
"model 是 ==>
\(
json
)
"
)
if
json
.
code
==
200
{
guard
let
dic
=
json
.
data
?
.
peel
as?
[
String
:
Any
],
let
resultModel
=
YHSurveyRenewalPlanState
.
deserialize
(
from
:
dic
)
else
{
let
err
=
YHErrorModel
(
errorCode
:
YHErrorCode
.
dictParseError
.
rawValue
,
errorMsg
:
YHErrorCode
.
dictParseError
.
description
())
callback
(
nil
,
err
)
return
}
self
?
.
planState
=
resultModel
callback
(
resultModel
,
nil
)
}
else
{
let
err
=
YHErrorModel
(
errorCode
:
Int32
(
json
.
code
),
errorMsg
:
json
.
msg
.
isEmpty
?
""
:
json
.
msg
)
callback
(
nil
,
err
)
}
}
failBlock
:
{
err
in
callback
(
nil
,
err
)
}
}
}
galaxy/galaxy/Classes/Tools/NetWork/YHAllApiName.swift
View file @
81b75573
...
...
@@ -752,4 +752,11 @@ class YHAllApiName {
}
// 问卷
struct
Survey
{
static
let
surveyContent
=
"super-app/renewal/advice/survey-content"
static
let
submitSurveyAnswer
=
"super-app/renewal/advice/submit-survey-answer"
static
let
getRenewalPlanState
=
"super-app/renewal/advice/get-renewal-plan-is-generate"
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment