无故事王国
2024-05-23 efc3ee1d65062b2fc0ef83df06df18509661180e
提交
229个文件已添加
7843 ■■■■■ 已修改文件
DolphinEnglishLearnStudent.xcodeproj/project.pbxproj 800 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent.xcodeproj/project.xcworkspace/contents.xcworkspacedata 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/AppDelegate.swift 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/AccentColor.colorset/Contents.json 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/AppIcon.appiconset/Contents.json 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Bg/Contents.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Bg/bg_login.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Bg/bg_login.imageset/bg_login.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Bg/bg_login.imageset/bg_login@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Bg/bg_logo.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Bg/bg_logo.imageset/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Bg/bg_logo.imageset/logo@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/Contents.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_add.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_add.imageset/btn_add.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_add.imageset/btn_add@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_add_un.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_add_un.imageset/btn_add_un.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_add_un.imageset/btn_add_un@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_back.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_back.imageset/btn_back.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_back.imageset/btn_back@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_choose.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_choose.imageset/btn_choose.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_choose.imageset/btn_choose@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_choose_u.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_choose_u.imageset/btn_choose_u.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_choose_u.imageset/btn_choose_u@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_close_circle.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_close_circle.imageset/btn_close_circle.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_close_circle.imageset/btn_close_circle@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_delete.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_delete.imageset/btn_delete.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_delete.imageset/btn_delete@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_edit.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_edit.imageset/btn_edit.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_edit.imageset/btn_edit@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_edit_b.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_edit_b.imageset/btn_edit.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_edit_b.imageset/btn_edit@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_photo_placeholder.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_photo_placeholder.imageset/btn_photo_placeholder.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_photo_placeholder.imageset/btn_photo_placeholder@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_reduce.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_reduce.imageset/btn_reduce.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_reduce.imageset/btn_reduce@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_reduce_un.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_reduce_un.imageset/btn_reduce_un.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_reduce_un.imageset/btn_reduce_un@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_refresh.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_refresh.imageset/btn_refresh.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_refresh.imageset/btn_refresh@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Contents.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/Contents.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_arrow_up.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_arrow_up.imageset/home_arrow_up.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_arrow_up.imageset/home_arrow_up@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_culture.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_culture.imageset/home_culture.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_culture.imageset/home_culture@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_listen.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_listen.imageset/home_listen.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_listen.imageset/home_listen@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_read.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_read.imageset/home_read.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_read.imageset/home_read@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_read_1.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_read_1.imageset/home_read_1.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_read_1.imageset/home_read_1@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_write.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_write.imageset/home_write.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_write.imageset/home_write@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_address.imageset/Contents.json 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_address.imageset/dingweiweizhi 1.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_address.imageset/dingweiweizhi.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_address.imageset/dingweiweizhi@2x 1.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_address.imageset/dingweiweizhi@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_address.imageset/dingweiweizhi@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_camera.imageset/Contents.json 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_camera.imageset/icon_camera@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_camera.imageset/icon_camera@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_camera.imageset/xiangji1fill.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_coin.imageset/Contents.json 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_coin.imageset/icon_coin.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_coin.imageset/icon_coin@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_coin.imageset/record_one.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_coin.imageset/record_one@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_coin.imageset/record_one@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_fail.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_fail.imageset/icon_fail.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_fail.imageset/icon_fail@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_feedback.imageset/Contents.json 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_feedback.imageset/icon_feedback.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_feedback.imageset/icon_feedback@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_feedback.imageset/modify_order.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_feedback.imageset/modify_order@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_feedback.imageset/modify_order@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_input_code.imageset/Contents.json 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_input_code.imageset/icon_input_code.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_input_code.imageset/icon_input_code@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_input_code.imageset/icon_input_code@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_input_phone.imageset/Contents.json 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_input_phone.imageset/icon_input_phone.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_input_phone.imageset/icon_input_phone@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_input_phone.imageset/icon_input_phone@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_listen.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_listen.imageset/icon_listen.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_listen.imageset/icon_listen@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_more.imageset/Contents.json 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_more.imageset/icon_more.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_more.imageset/icon_more@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_more.imageset/icon_more@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_more_gray.imageset/Contents.json 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_more_gray.imageset/icon_more_gray.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_more_gray.imageset/icon_more_gray@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_more_gray.imageset/icon_more_gray@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_poker.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_poker.imageset/icon_poker.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_poker.imageset/icon_poker@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_record.imageset/Contents.json 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_record.imageset/icon_record.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_record.imageset/icon_record@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_record.imageset/shangchuanziliao.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_record.imageset/shangchuanziliao@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_record.imageset/shangchuanziliao@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_search.imageset/Contents.json 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_search.imageset/icon_search.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_search.imageset/icon_search@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_search.imageset/icon_search@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_share.imageset/Contents.json 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_share.imageset/icon_share.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_share.imageset/icon_share@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_share.imageset/share.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_share.imageset/share@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_share.imageset/share@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_success.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_success.imageset/icon_success.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_success.imageset/icon_success@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_vip.imageset/Contents.json 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_vip.imageset/icon_vip.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_vip.imageset/icon_vip@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_vip.imageset/icon_vip@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_waring.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_waring.imageset/icon_waring.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_waring.imageset/icon_waring@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/launchScreen.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/launchScreen.imageset/launchScreen@1x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/launchScreen.imageset/launchScreen@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/logo.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/logo.imageset/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/logo.imageset/logo@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/Contents.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_home.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_home.imageset/nav_home.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_home.imageset/nav_home@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_home_s.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_home_s.imageset/nav_home_s.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_home_s.imageset/nav_home_s@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_market.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_market.imageset/nav_market.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_market.imageset/nav_market@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_market_s.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_market_s.imageset/nav_market_s.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_market_s.imageset/nav_market_s@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_me.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_me.imageset/nav_me.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_me.imageset/nav_me@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_me_s.imageset/Contents.json 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_me_s.imageset/nav_me_s.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_me_s.imageset/nav_me_s@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Base.lproj/LaunchScreen.storyboard 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Base.lproj/Main.storyboard 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Base/BaseNav.swift 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Base/BaseTabBarVC.swift 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Base/BaseVC.swift 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Base/TapBtn.swift 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Config/Config.swift 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Config/Enums.swift 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Info.plist 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Login/LoginVC.swift 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Login/LoginVC.xib 220 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/CCell/AwardListCCell.swift 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/CCell/AwardListCCell.xib 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/HomeVC.swift 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/HomeVC.xib 226 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/HomeListenMenuVC.swift 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/HomeListenMenuVC.xib 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/HomeListenSubVC.swift 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/HomeListenVC.swift 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/TCell/HomeListen_item_TCell.swift 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/TCell/HomeListen_item_TCell.xib 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/TCell/HomeListen_process_TCell.swift 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/TCell/HomeListen_process_TCell.xib 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/View/AwardListView.swift 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/View/AwardListView.xib 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Market/CCell/MarketCCell.swift 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Market/CCell/MarketCCell.xib 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Market/MarketVC.swift 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Market/MarketVC.xib 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Market/VC/ExchangeResultVC.swift 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Market/VC/ExchangeResultVC.xib 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Market/VC/MarketContentVC.swift 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Market/VC/MarketContentVC.xib 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Market/VC/MarketExchangeVC.swift 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Market/VC/MarketExchangeVC.xib 418 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/MeVC.swift 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/MeVC.xib 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/TCell/AddressManageTCell.swift 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/TCell/AddressManageTCell.xib 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/TCell/GoodsItemTCell.swift 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/TCell/GoodsItemTCell.xib 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/TCell/Home_1_TCell.swift 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/TCell/Home_1_TCell.xib 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/VC/AddressManageHandleVC.swift 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/VC/AddressManageHandleVC.xib 257 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/VC/AddressManageVC.swift 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/VC/CoinRecordHistoryVC.swift 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/VC/CoinRecordHistoryVC.xib 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/VC/ExchangeRecordHistoryVC.swift 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/VC/StudyVC.swift 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Me/VC/StudyVC.xib 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Other/CommonWebVC.swift 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Other/UIView/BitrhdayPickerView.swift 286 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Other/UIView/CommonAlertView.swift 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Other/UIView/CommonAlertView.xib 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Other/UIView/CommonInputView.swift 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Other/UIView/CommonInputView.xib 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/SceneDelegate.swift 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Podfile 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent.xcodeproj/project.pbxproj
New file
@@ -0,0 +1,800 @@
// !$*UTF8*$!
{
    archiveVersion = 1;
    classes = {
    };
    objectVersion = 56;
    objects = {
/* Begin PBXBuildFile section */
        1302782A2BFD957100DDCE81 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278292BFD957100DDCE81 /* AppDelegate.swift */; };
        1302782C2BFD957100DDCE81 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1302782B2BFD957100DDCE81 /* SceneDelegate.swift */; };
        130278312BFD957100DDCE81 /* Base in Resources */ = {isa = PBXBuildFile; fileRef = 130278302BFD957100DDCE81 /* Base */; };
        130278332BFD957300DDCE81 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 130278322BFD957300DDCE81 /* Assets.xcassets */; };
        130278362BFD957300DDCE81 /* Base in Resources */ = {isa = PBXBuildFile; fileRef = 130278352BFD957300DDCE81 /* Base */; };
        130278412BFD978900DDCE81 /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1302783E2BFD978900DDCE81 /* Config.swift */; };
        130278422BFD978900DDCE81 /* Enums.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1302783F2BFD978900DDCE81 /* Enums.swift */; };
        130278482BFD979200DDCE81 /* BaseNav.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278432BFD979200DDCE81 /* BaseNav.swift */; };
        130278492BFD979200DDCE81 /* BaseTabBarVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278442BFD979200DDCE81 /* BaseTabBarVC.swift */; };
        1302784A2BFD979200DDCE81 /* BaseVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278452BFD979200DDCE81 /* BaseVC.swift */; };
        1302784B2BFD979200DDCE81 /* TapBtn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278462BFD979200DDCE81 /* TapBtn.swift */; };
        130278592BFD985E00DDCE81 /* BitrhdayPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278512BFD985E00DDCE81 /* BitrhdayPickerView.swift */; };
        1302785A2BFD985E00DDCE81 /* CommonAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278522BFD985E00DDCE81 /* CommonAlertView.swift */; };
        1302785B2BFD985E00DDCE81 /* CommonAlertView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130278532BFD985E00DDCE81 /* CommonAlertView.xib */; };
        1302785C2BFD985E00DDCE81 /* CommonInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278542BFD985E00DDCE81 /* CommonInputView.swift */; };
        1302785D2BFD985E00DDCE81 /* CommonInputView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130278552BFD985E00DDCE81 /* CommonInputView.xib */; };
        1302785E2BFD985E00DDCE81 /* CommonWebVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278572BFD985E00DDCE81 /* CommonWebVC.swift */; };
        130278612BFD999200DDCE81 /* LoginVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130278602BFD999200DDCE81 /* LoginVC.xib */; };
        130278622BFD999200DDCE81 /* LoginVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1302785F2BFD999200DDCE81 /* LoginVC.swift */; };
        130278662BFD9E8C00DDCE81 /* HomeVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130278652BFD9E8C00DDCE81 /* HomeVC.xib */; };
        130278672BFD9E8C00DDCE81 /* HomeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278642BFD9E8C00DDCE81 /* HomeVC.swift */; };
        130278762BFD9ED600DDCE81 /* MarketCCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1302786A2BFD9ED600DDCE81 /* MarketCCell.swift */; };
        130278772BFD9ED600DDCE81 /* MarketCCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1302786B2BFD9ED600DDCE81 /* MarketCCell.xib */; };
        130278782BFD9ED600DDCE81 /* MarketVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1302786D2BFD9ED600DDCE81 /* MarketVC.swift */; };
        130278792BFD9ED600DDCE81 /* ExchangeResultVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1302786E2BFD9ED600DDCE81 /* ExchangeResultVC.swift */; };
        1302787A2BFD9ED600DDCE81 /* ExchangeResultVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1302786F2BFD9ED600DDCE81 /* ExchangeResultVC.xib */; };
        1302787B2BFD9ED600DDCE81 /* MarketContentVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278702BFD9ED600DDCE81 /* MarketContentVC.swift */; };
        1302787C2BFD9ED600DDCE81 /* MarketContentVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130278712BFD9ED600DDCE81 /* MarketContentVC.xib */; };
        1302787D2BFD9ED600DDCE81 /* MarketExchangeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278722BFD9ED600DDCE81 /* MarketExchangeVC.swift */; };
        1302787E2BFD9ED600DDCE81 /* MarketExchangeVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130278732BFD9ED600DDCE81 /* MarketExchangeVC.xib */; };
        1302787F2BFD9ED600DDCE81 /* MarketVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130278752BFD9ED600DDCE81 /* MarketVC.xib */; };
        130278822BFD9F0700DDCE81 /* MeVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130278812BFD9F0700DDCE81 /* MeVC.xib */; };
        130278832BFD9F0700DDCE81 /* MeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278802BFD9F0700DDCE81 /* MeVC.swift */; };
        130278872BFD9F2A00DDCE81 /* AddressManageHandleVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278842BFD9F2A00DDCE81 /* AddressManageHandleVC.swift */; };
        130278882BFD9F2A00DDCE81 /* AddressManageHandleVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130278852BFD9F2A00DDCE81 /* AddressManageHandleVC.xib */; };
        130278892BFD9F2A00DDCE81 /* AddressManageVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278862BFD9F2A00DDCE81 /* AddressManageVC.swift */; };
        1302788D2BFD9F4200DDCE81 /* CoinRecordHistoryVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1302788B2BFD9F4200DDCE81 /* CoinRecordHistoryVC.swift */; };
        1302788E2BFD9F4200DDCE81 /* CoinRecordHistoryVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1302788C2BFD9F4200DDCE81 /* CoinRecordHistoryVC.xib */; };
        130278962BFD9FBF00DDCE81 /* Home_1_TCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130278902BFD9FBF00DDCE81 /* Home_1_TCell.xib */; };
        130278972BFD9FBF00DDCE81 /* AddressManageTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130278912BFD9FBF00DDCE81 /* AddressManageTCell.xib */; };
        130278982BFD9FBF00DDCE81 /* GoodsItemTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130278922BFD9FBF00DDCE81 /* GoodsItemTCell.xib */; };
        130278992BFD9FBF00DDCE81 /* Home_1_TCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278932BFD9FBF00DDCE81 /* Home_1_TCell.swift */; };
        1302789A2BFD9FBF00DDCE81 /* AddressManageTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278942BFD9FBF00DDCE81 /* AddressManageTCell.swift */; };
        1302789B2BFD9FBF00DDCE81 /* GoodsItemTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278952BFD9FBF00DDCE81 /* GoodsItemTCell.swift */; };
        138964002BFDF98200AEDCD9 /* StudyVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 138963FE2BFDF98200AEDCD9 /* StudyVC.swift */; };
        138964012BFDF98200AEDCD9 /* StudyVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 138963FF2BFDF98200AEDCD9 /* StudyVC.xib */; };
        13E07DF12BFDF1E600B7F5FB /* ExchangeRecordHistoryVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13E07DF02BFDF1E600B7F5FB /* ExchangeRecordHistoryVC.swift */; };
        13EEB8912BFED3F3002996FC /* AwardListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EEB8902BFED3F3002996FC /* AwardListView.swift */; };
        13EEB8932BFED3FA002996FC /* AwardListView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13EEB8922BFED3FA002996FC /* AwardListView.xib */; };
        13EEB8972BFF1531002996FC /* AwardListCCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EEB8952BFF1531002996FC /* AwardListCCell.swift */; };
        13EEB8982BFF1531002996FC /* AwardListCCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13EEB8962BFF1531002996FC /* AwardListCCell.xib */; };
        13EEB89C2BFF1C35002996FC /* HomeListenMenuVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EEB89A2BFF1C35002996FC /* HomeListenMenuVC.swift */; };
        13EEB89D2BFF1C35002996FC /* HomeListenMenuVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13EEB89B2BFF1C35002996FC /* HomeListenMenuVC.xib */; };
        13EEB8A02BFF28A7002996FC /* HomeListenVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EEB89F2BFF28A7002996FC /* HomeListenVC.swift */; };
        13EEB8A42BFF353C002996FC /* HomeListen_process_TCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EEB8A22BFF353C002996FC /* HomeListen_process_TCell.swift */; };
        13EEB8A52BFF353C002996FC /* HomeListen_process_TCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13EEB8A32BFF353C002996FC /* HomeListen_process_TCell.xib */; };
        13EEB8A82BFF354B002996FC /* HomeListen_item_TCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EEB8A62BFF354B002996FC /* HomeListen_item_TCell.swift */; };
        13EEB8A92BFF354B002996FC /* HomeListen_item_TCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13EEB8A72BFF354B002996FC /* HomeListen_item_TCell.xib */; };
        13EEB8AB2BFF36E0002996FC /* HomeListenSubVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EEB8AA2BFF36E0002996FC /* HomeListenSubVC.swift */; };
        AABBA9CFF928AFAC4A01F16D /* Pods_DolphinEnglishLearnStudent.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA21DA5F8583B67AC7D13D0A /* Pods_DolphinEnglishLearnStudent.framework */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
        0A4D4E7CA7617F7B03C7FDFB /* Pods-DolphinEnglishLearnStudent.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DolphinEnglishLearnStudent.release.xcconfig"; path = "Target Support Files/Pods-DolphinEnglishLearnStudent/Pods-DolphinEnglishLearnStudent.release.xcconfig"; sourceTree = "<group>"; };
        130278262BFD957100DDCE81 /* DolphinEnglishLearnStudent.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DolphinEnglishLearnStudent.app; sourceTree = BUILT_PRODUCTS_DIR; };
        130278292BFD957100DDCE81 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
        1302782B2BFD957100DDCE81 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
        130278302BFD957100DDCE81 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
        130278322BFD957300DDCE81 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
        130278352BFD957300DDCE81 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
        130278372BFD957300DDCE81 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
        1302783E2BFD978900DDCE81 /* Config.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = "<group>"; };
        1302783F2BFD978900DDCE81 /* Enums.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Enums.swift; sourceTree = "<group>"; };
        130278432BFD979200DDCE81 /* BaseNav.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseNav.swift; sourceTree = "<group>"; };
        130278442BFD979200DDCE81 /* BaseTabBarVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseTabBarVC.swift; sourceTree = "<group>"; };
        130278452BFD979200DDCE81 /* BaseVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseVC.swift; sourceTree = "<group>"; };
        130278462BFD979200DDCE81 /* TapBtn.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TapBtn.swift; sourceTree = "<group>"; };
        130278512BFD985E00DDCE81 /* BitrhdayPickerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BitrhdayPickerView.swift; sourceTree = "<group>"; };
        130278522BFD985E00DDCE81 /* CommonAlertView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommonAlertView.swift; sourceTree = "<group>"; };
        130278532BFD985E00DDCE81 /* CommonAlertView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CommonAlertView.xib; sourceTree = "<group>"; };
        130278542BFD985E00DDCE81 /* CommonInputView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommonInputView.swift; sourceTree = "<group>"; };
        130278552BFD985E00DDCE81 /* CommonInputView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CommonInputView.xib; sourceTree = "<group>"; };
        130278572BFD985E00DDCE81 /* CommonWebVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommonWebVC.swift; sourceTree = "<group>"; };
        1302785F2BFD999200DDCE81 /* LoginVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginVC.swift; sourceTree = "<group>"; };
        130278602BFD999200DDCE81 /* LoginVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = LoginVC.xib; sourceTree = "<group>"; };
        130278642BFD9E8C00DDCE81 /* HomeVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVC.swift; sourceTree = "<group>"; };
        130278652BFD9E8C00DDCE81 /* HomeVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeVC.xib; sourceTree = "<group>"; };
        1302786A2BFD9ED600DDCE81 /* MarketCCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MarketCCell.swift; sourceTree = "<group>"; };
        1302786B2BFD9ED600DDCE81 /* MarketCCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MarketCCell.xib; sourceTree = "<group>"; };
        1302786D2BFD9ED600DDCE81 /* MarketVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MarketVC.swift; sourceTree = "<group>"; };
        1302786E2BFD9ED600DDCE81 /* ExchangeResultVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeResultVC.swift; sourceTree = "<group>"; };
        1302786F2BFD9ED600DDCE81 /* ExchangeResultVC.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ExchangeResultVC.xib; sourceTree = "<group>"; };
        130278702BFD9ED600DDCE81 /* MarketContentVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MarketContentVC.swift; sourceTree = "<group>"; };
        130278712BFD9ED600DDCE81 /* MarketContentVC.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MarketContentVC.xib; sourceTree = "<group>"; };
        130278722BFD9ED600DDCE81 /* MarketExchangeVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MarketExchangeVC.swift; sourceTree = "<group>"; };
        130278732BFD9ED600DDCE81 /* MarketExchangeVC.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MarketExchangeVC.xib; sourceTree = "<group>"; };
        130278752BFD9ED600DDCE81 /* MarketVC.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MarketVC.xib; sourceTree = "<group>"; };
        130278802BFD9F0700DDCE81 /* MeVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeVC.swift; sourceTree = "<group>"; };
        130278812BFD9F0700DDCE81 /* MeVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MeVC.xib; sourceTree = "<group>"; };
        130278842BFD9F2A00DDCE81 /* AddressManageHandleVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddressManageHandleVC.swift; sourceTree = "<group>"; };
        130278852BFD9F2A00DDCE81 /* AddressManageHandleVC.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AddressManageHandleVC.xib; sourceTree = "<group>"; };
        130278862BFD9F2A00DDCE81 /* AddressManageVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddressManageVC.swift; sourceTree = "<group>"; };
        1302788B2BFD9F4200DDCE81 /* CoinRecordHistoryVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoinRecordHistoryVC.swift; sourceTree = "<group>"; };
        1302788C2BFD9F4200DDCE81 /* CoinRecordHistoryVC.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CoinRecordHistoryVC.xib; sourceTree = "<group>"; };
        130278902BFD9FBF00DDCE81 /* Home_1_TCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Home_1_TCell.xib; sourceTree = "<group>"; };
        130278912BFD9FBF00DDCE81 /* AddressManageTCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AddressManageTCell.xib; sourceTree = "<group>"; };
        130278922BFD9FBF00DDCE81 /* GoodsItemTCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GoodsItemTCell.xib; sourceTree = "<group>"; };
        130278932BFD9FBF00DDCE81 /* Home_1_TCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Home_1_TCell.swift; sourceTree = "<group>"; };
        130278942BFD9FBF00DDCE81 /* AddressManageTCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddressManageTCell.swift; sourceTree = "<group>"; };
        130278952BFD9FBF00DDCE81 /* GoodsItemTCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GoodsItemTCell.swift; sourceTree = "<group>"; };
        138963FE2BFDF98200AEDCD9 /* StudyVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudyVC.swift; sourceTree = "<group>"; };
        138963FF2BFDF98200AEDCD9 /* StudyVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = StudyVC.xib; sourceTree = "<group>"; };
        13E07DF02BFDF1E600B7F5FB /* ExchangeRecordHistoryVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRecordHistoryVC.swift; sourceTree = "<group>"; };
        13EEB8902BFED3F3002996FC /* AwardListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AwardListView.swift; sourceTree = "<group>"; };
        13EEB8922BFED3FA002996FC /* AwardListView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AwardListView.xib; sourceTree = "<group>"; };
        13EEB8952BFF1531002996FC /* AwardListCCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AwardListCCell.swift; sourceTree = "<group>"; };
        13EEB8962BFF1531002996FC /* AwardListCCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AwardListCCell.xib; sourceTree = "<group>"; };
        13EEB89A2BFF1C35002996FC /* HomeListenMenuVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeListenMenuVC.swift; sourceTree = "<group>"; };
        13EEB89B2BFF1C35002996FC /* HomeListenMenuVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeListenMenuVC.xib; sourceTree = "<group>"; };
        13EEB89F2BFF28A7002996FC /* HomeListenVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeListenVC.swift; sourceTree = "<group>"; };
        13EEB8A22BFF353C002996FC /* HomeListen_process_TCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeListen_process_TCell.swift; sourceTree = "<group>"; };
        13EEB8A32BFF353C002996FC /* HomeListen_process_TCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeListen_process_TCell.xib; sourceTree = "<group>"; };
        13EEB8A62BFF354B002996FC /* HomeListen_item_TCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeListen_item_TCell.swift; sourceTree = "<group>"; };
        13EEB8A72BFF354B002996FC /* HomeListen_item_TCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeListen_item_TCell.xib; sourceTree = "<group>"; };
        13EEB8AA2BFF36E0002996FC /* HomeListenSubVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeListenSubVC.swift; sourceTree = "<group>"; };
        E76DEF4767EBA86DA360D0D8 /* Pods-DolphinEnglishLearnStudent.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DolphinEnglishLearnStudent.debug.xcconfig"; path = "Target Support Files/Pods-DolphinEnglishLearnStudent/Pods-DolphinEnglishLearnStudent.debug.xcconfig"; sourceTree = "<group>"; };
        EA21DA5F8583B67AC7D13D0A /* Pods_DolphinEnglishLearnStudent.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_DolphinEnglishLearnStudent.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
        130278232BFD957100DDCE81 /* Frameworks */ = {
            isa = PBXFrameworksBuildPhase;
            buildActionMask = 2147483647;
            files = (
                AABBA9CFF928AFAC4A01F16D /* Pods_DolphinEnglishLearnStudent.framework in Frameworks */,
            );
            runOnlyForDeploymentPostprocessing = 0;
        };
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
        1302781D2BFD957100DDCE81 = {
            isa = PBXGroup;
            children = (
                130278282BFD957100DDCE81 /* DolphinEnglishLearnStudent */,
                130278272BFD957100DDCE81 /* Products */,
                3CD7B950C551024F77E6409B /* Pods */,
                3D5EBB90520C09A33C6F0890 /* Frameworks */,
            );
            sourceTree = "<group>";
        };
        130278272BFD957100DDCE81 /* Products */ = {
            isa = PBXGroup;
            children = (
                130278262BFD957100DDCE81 /* DolphinEnglishLearnStudent.app */,
            );
            name = Products;
            sourceTree = "<group>";
        };
        130278282BFD957100DDCE81 /* DolphinEnglishLearnStudent */ = {
            isa = PBXGroup;
            children = (
                130278632BFD9E5D00DDCE81 /* Moudle */,
                130278582BFD985E00DDCE81 /* Other */,
                1302784E2BFD97EF00DDCE81 /* Login */,
                130278472BFD979200DDCE81 /* Base */,
                130278402BFD978900DDCE81 /* Config */,
                130278292BFD957100DDCE81 /* AppDelegate.swift */,
                1302782B2BFD957100DDCE81 /* SceneDelegate.swift */,
                1302782F2BFD957100DDCE81 /* Main.storyboard */,
                130278322BFD957300DDCE81 /* Assets.xcassets */,
                130278342BFD957300DDCE81 /* LaunchScreen.storyboard */,
                130278372BFD957300DDCE81 /* Info.plist */,
            );
            path = DolphinEnglishLearnStudent;
            sourceTree = "<group>";
        };
        1302783D2BFD973F00DDCE81 /* Home */ = {
            isa = PBXGroup;
            children = (
                13EEB89E2BFF2853002996FC /* Listen */,
                13EEB8942BFF1519002996FC /* CCell */,
                13EEB88F2BFED3C6002996FC /* View */,
                130278642BFD9E8C00DDCE81 /* HomeVC.swift */,
                130278652BFD9E8C00DDCE81 /* HomeVC.xib */,
            );
            path = Home;
            sourceTree = "<group>";
        };
        130278402BFD978900DDCE81 /* Config */ = {
            isa = PBXGroup;
            children = (
                1302783E2BFD978900DDCE81 /* Config.swift */,
                1302783F2BFD978900DDCE81 /* Enums.swift */,
            );
            path = Config;
            sourceTree = "<group>";
        };
        130278472BFD979200DDCE81 /* Base */ = {
            isa = PBXGroup;
            children = (
                130278432BFD979200DDCE81 /* BaseNav.swift */,
                130278442BFD979200DDCE81 /* BaseTabBarVC.swift */,
                130278452BFD979200DDCE81 /* BaseVC.swift */,
                130278462BFD979200DDCE81 /* TapBtn.swift */,
            );
            path = Base;
            sourceTree = "<group>";
        };
        1302784E2BFD97EF00DDCE81 /* Login */ = {
            isa = PBXGroup;
            children = (
                1302785F2BFD999200DDCE81 /* LoginVC.swift */,
                130278602BFD999200DDCE81 /* LoginVC.xib */,
            );
            path = Login;
            sourceTree = "<group>";
        };
        130278562BFD985E00DDCE81 /* UIView */ = {
            isa = PBXGroup;
            children = (
                130278512BFD985E00DDCE81 /* BitrhdayPickerView.swift */,
                130278522BFD985E00DDCE81 /* CommonAlertView.swift */,
                130278532BFD985E00DDCE81 /* CommonAlertView.xib */,
                130278542BFD985E00DDCE81 /* CommonInputView.swift */,
                130278552BFD985E00DDCE81 /* CommonInputView.xib */,
            );
            path = UIView;
            sourceTree = "<group>";
        };
        130278582BFD985E00DDCE81 /* Other */ = {
            isa = PBXGroup;
            children = (
                130278562BFD985E00DDCE81 /* UIView */,
                130278572BFD985E00DDCE81 /* CommonWebVC.swift */,
            );
            path = Other;
            sourceTree = "<group>";
        };
        130278632BFD9E5D00DDCE81 /* Moudle */ = {
            isa = PBXGroup;
            children = (
                130278692BFD9EA700DDCE81 /* Me */,
                130278682BFD9E9D00DDCE81 /* Market */,
                1302783D2BFD973F00DDCE81 /* Home */,
            );
            path = Moudle;
            sourceTree = "<group>";
        };
        130278682BFD9E9D00DDCE81 /* Market */ = {
            isa = PBXGroup;
            children = (
                1302786C2BFD9ED600DDCE81 /* CCell */,
                1302786D2BFD9ED600DDCE81 /* MarketVC.swift */,
                130278752BFD9ED600DDCE81 /* MarketVC.xib */,
                130278742BFD9ED600DDCE81 /* VC */,
            );
            path = Market;
            sourceTree = "<group>";
        };
        130278692BFD9EA700DDCE81 /* Me */ = {
            isa = PBXGroup;
            children = (
                1302788F2BFD9FA100DDCE81 /* TCell */,
                1302788A2BFD9F2C00DDCE81 /* VC */,
                130278802BFD9F0700DDCE81 /* MeVC.swift */,
                130278812BFD9F0700DDCE81 /* MeVC.xib */,
            );
            path = Me;
            sourceTree = "<group>";
        };
        1302786C2BFD9ED600DDCE81 /* CCell */ = {
            isa = PBXGroup;
            children = (
                1302786A2BFD9ED600DDCE81 /* MarketCCell.swift */,
                1302786B2BFD9ED600DDCE81 /* MarketCCell.xib */,
            );
            path = CCell;
            sourceTree = "<group>";
        };
        130278742BFD9ED600DDCE81 /* VC */ = {
            isa = PBXGroup;
            children = (
                1302786E2BFD9ED600DDCE81 /* ExchangeResultVC.swift */,
                1302786F2BFD9ED600DDCE81 /* ExchangeResultVC.xib */,
                130278702BFD9ED600DDCE81 /* MarketContentVC.swift */,
                130278712BFD9ED600DDCE81 /* MarketContentVC.xib */,
                130278722BFD9ED600DDCE81 /* MarketExchangeVC.swift */,
                130278732BFD9ED600DDCE81 /* MarketExchangeVC.xib */,
            );
            path = VC;
            sourceTree = "<group>";
        };
        1302788A2BFD9F2C00DDCE81 /* VC */ = {
            isa = PBXGroup;
            children = (
                13E07DF02BFDF1E600B7F5FB /* ExchangeRecordHistoryVC.swift */,
                138963FE2BFDF98200AEDCD9 /* StudyVC.swift */,
                138963FF2BFDF98200AEDCD9 /* StudyVC.xib */,
                1302788B2BFD9F4200DDCE81 /* CoinRecordHistoryVC.swift */,
                1302788C2BFD9F4200DDCE81 /* CoinRecordHistoryVC.xib */,
                130278842BFD9F2A00DDCE81 /* AddressManageHandleVC.swift */,
                130278852BFD9F2A00DDCE81 /* AddressManageHandleVC.xib */,
                130278862BFD9F2A00DDCE81 /* AddressManageVC.swift */,
            );
            path = VC;
            sourceTree = "<group>";
        };
        1302788F2BFD9FA100DDCE81 /* TCell */ = {
            isa = PBXGroup;
            children = (
                130278942BFD9FBF00DDCE81 /* AddressManageTCell.swift */,
                130278912BFD9FBF00DDCE81 /* AddressManageTCell.xib */,
                130278952BFD9FBF00DDCE81 /* GoodsItemTCell.swift */,
                130278922BFD9FBF00DDCE81 /* GoodsItemTCell.xib */,
                130278932BFD9FBF00DDCE81 /* Home_1_TCell.swift */,
                130278902BFD9FBF00DDCE81 /* Home_1_TCell.xib */,
            );
            path = TCell;
            sourceTree = "<group>";
        };
        13EEB88F2BFED3C6002996FC /* View */ = {
            isa = PBXGroup;
            children = (
                13EEB8902BFED3F3002996FC /* AwardListView.swift */,
                13EEB8922BFED3FA002996FC /* AwardListView.xib */,
            );
            path = View;
            sourceTree = "<group>";
        };
        13EEB8942BFF1519002996FC /* CCell */ = {
            isa = PBXGroup;
            children = (
                13EEB8952BFF1531002996FC /* AwardListCCell.swift */,
                13EEB8962BFF1531002996FC /* AwardListCCell.xib */,
            );
            path = CCell;
            sourceTree = "<group>";
        };
        13EEB89E2BFF2853002996FC /* Listen */ = {
            isa = PBXGroup;
            children = (
                13EEB8A12BFF3507002996FC /* TCell */,
                13EEB89A2BFF1C35002996FC /* HomeListenMenuVC.swift */,
                13EEB89B2BFF1C35002996FC /* HomeListenMenuVC.xib */,
                13EEB89F2BFF28A7002996FC /* HomeListenVC.swift */,
                13EEB8AA2BFF36E0002996FC /* HomeListenSubVC.swift */,
            );
            path = Listen;
            sourceTree = "<group>";
        };
        13EEB8A12BFF3507002996FC /* TCell */ = {
            isa = PBXGroup;
            children = (
                13EEB8A22BFF353C002996FC /* HomeListen_process_TCell.swift */,
                13EEB8A32BFF353C002996FC /* HomeListen_process_TCell.xib */,
                13EEB8A62BFF354B002996FC /* HomeListen_item_TCell.swift */,
                13EEB8A72BFF354B002996FC /* HomeListen_item_TCell.xib */,
            );
            path = TCell;
            sourceTree = "<group>";
        };
        3CD7B950C551024F77E6409B /* Pods */ = {
            isa = PBXGroup;
            children = (
                E76DEF4767EBA86DA360D0D8 /* Pods-DolphinEnglishLearnStudent.debug.xcconfig */,
                0A4D4E7CA7617F7B03C7FDFB /* Pods-DolphinEnglishLearnStudent.release.xcconfig */,
            );
            path = Pods;
            sourceTree = "<group>";
        };
        3D5EBB90520C09A33C6F0890 /* Frameworks */ = {
            isa = PBXGroup;
            children = (
                EA21DA5F8583B67AC7D13D0A /* Pods_DolphinEnglishLearnStudent.framework */,
            );
            name = Frameworks;
            sourceTree = "<group>";
        };
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
        130278252BFD957100DDCE81 /* DolphinEnglishLearnStudent */ = {
            isa = PBXNativeTarget;
            buildConfigurationList = 1302783A2BFD957300DDCE81 /* Build configuration list for PBXNativeTarget "DolphinEnglishLearnStudent" */;
            buildPhases = (
                0E935194E5A417137779DCB1 /* [CP] Check Pods Manifest.lock */,
                130278222BFD957100DDCE81 /* Sources */,
                130278232BFD957100DDCE81 /* Frameworks */,
                130278242BFD957100DDCE81 /* Resources */,
                B937A368B14626E12927F5FE /* [CP] Embed Pods Frameworks */,
            );
            buildRules = (
            );
            dependencies = (
            );
            name = DolphinEnglishLearnStudent;
            productName = DolphinEnglishLearnStudent;
            productReference = 130278262BFD957100DDCE81 /* DolphinEnglishLearnStudent.app */;
            productType = "com.apple.product-type.application";
        };
/* End PBXNativeTarget section */
/* Begin PBXProject section */
        1302781E2BFD957100DDCE81 /* Project object */ = {
            isa = PBXProject;
            attributes = {
                BuildIndependentTargetsInParallel = 1;
                LastSwiftUpdateCheck = 1530;
                LastUpgradeCheck = 1530;
                TargetAttributes = {
                    130278252BFD957100DDCE81 = {
                        CreatedOnToolsVersion = 15.3;
                    };
                };
            };
            buildConfigurationList = 130278212BFD957100DDCE81 /* Build configuration list for PBXProject "DolphinEnglishLearnStudent" */;
            compatibilityVersion = "Xcode 14.0";
            developmentRegion = en;
            hasScannedForEncodings = 0;
            knownRegions = (
                en,
                Base,
            );
            mainGroup = 1302781D2BFD957100DDCE81;
            productRefGroup = 130278272BFD957100DDCE81 /* Products */;
            projectDirPath = "";
            projectRoot = "";
            targets = (
                130278252BFD957100DDCE81 /* DolphinEnglishLearnStudent */,
            );
        };
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
        130278242BFD957100DDCE81 /* Resources */ = {
            isa = PBXResourcesBuildPhase;
            buildActionMask = 2147483647;
            files = (
                13EEB8932BFED3FA002996FC /* AwardListView.xib in Resources */,
                13EEB89D2BFF1C35002996FC /* HomeListenMenuVC.xib in Resources */,
                130278882BFD9F2A00DDCE81 /* AddressManageHandleVC.xib in Resources */,
                130278612BFD999200DDCE81 /* LoginVC.xib in Resources */,
                13EEB8982BFF1531002996FC /* AwardListCCell.xib in Resources */,
                1302785B2BFD985E00DDCE81 /* CommonAlertView.xib in Resources */,
                130278972BFD9FBF00DDCE81 /* AddressManageTCell.xib in Resources */,
                1302787C2BFD9ED600DDCE81 /* MarketContentVC.xib in Resources */,
                130278332BFD957300DDCE81 /* Assets.xcassets in Resources */,
                130278822BFD9F0700DDCE81 /* MeVC.xib in Resources */,
                13EEB8A52BFF353C002996FC /* HomeListen_process_TCell.xib in Resources */,
                1302785D2BFD985E00DDCE81 /* CommonInputView.xib in Resources */,
                1302787A2BFD9ED600DDCE81 /* ExchangeResultVC.xib in Resources */,
                130278362BFD957300DDCE81 /* Base in Resources */,
                1302788E2BFD9F4200DDCE81 /* CoinRecordHistoryVC.xib in Resources */,
                130278312BFD957100DDCE81 /* Base in Resources */,
                138964012BFDF98200AEDCD9 /* StudyVC.xib in Resources */,
                130278662BFD9E8C00DDCE81 /* HomeVC.xib in Resources */,
                130278772BFD9ED600DDCE81 /* MarketCCell.xib in Resources */,
                13EEB8A92BFF354B002996FC /* HomeListen_item_TCell.xib in Resources */,
                130278982BFD9FBF00DDCE81 /* GoodsItemTCell.xib in Resources */,
                130278962BFD9FBF00DDCE81 /* Home_1_TCell.xib in Resources */,
                1302787F2BFD9ED600DDCE81 /* MarketVC.xib in Resources */,
                1302787E2BFD9ED600DDCE81 /* MarketExchangeVC.xib in Resources */,
            );
            runOnlyForDeploymentPostprocessing = 0;
        };
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
        0E935194E5A417137779DCB1 /* [CP] Check Pods Manifest.lock */ = {
            isa = PBXShellScriptBuildPhase;
            buildActionMask = 2147483647;
            files = (
            );
            inputFileListPaths = (
            );
            inputPaths = (
                "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
                "${PODS_ROOT}/Manifest.lock",
            );
            name = "[CP] Check Pods Manifest.lock";
            outputFileListPaths = (
            );
            outputPaths = (
                "$(DERIVED_FILE_DIR)/Pods-DolphinEnglishLearnStudent-checkManifestLockResult.txt",
            );
            runOnlyForDeploymentPostprocessing = 0;
            shellPath = /bin/sh;
            shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
            showEnvVarsInLog = 0;
        };
        B937A368B14626E12927F5FE /* [CP] Embed Pods Frameworks */ = {
            isa = PBXShellScriptBuildPhase;
            buildActionMask = 2147483647;
            files = (
            );
            inputFileListPaths = (
                "${PODS_ROOT}/Target Support Files/Pods-DolphinEnglishLearnStudent/Pods-DolphinEnglishLearnStudent-frameworks-${CONFIGURATION}-input-files.xcfilelist",
            );
            name = "[CP] Embed Pods Frameworks";
            outputFileListPaths = (
                "${PODS_ROOT}/Target Support Files/Pods-DolphinEnglishLearnStudent/Pods-DolphinEnglishLearnStudent-frameworks-${CONFIGURATION}-output-files.xcfilelist",
            );
            runOnlyForDeploymentPostprocessing = 0;
            shellPath = /bin/sh;
            shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-DolphinEnglishLearnStudent/Pods-DolphinEnglishLearnStudent-frameworks.sh\"\n";
            showEnvVarsInLog = 0;
        };
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
        130278222BFD957100DDCE81 /* Sources */ = {
            isa = PBXSourcesBuildPhase;
            buildActionMask = 2147483647;
            files = (
                130278832BFD9F0700DDCE81 /* MeVC.swift in Sources */,
                130278992BFD9FBF00DDCE81 /* Home_1_TCell.swift in Sources */,
                1302784B2BFD979200DDCE81 /* TapBtn.swift in Sources */,
                13EEB8A82BFF354B002996FC /* HomeListen_item_TCell.swift in Sources */,
                130278672BFD9E8C00DDCE81 /* HomeVC.swift in Sources */,
                130278482BFD979200DDCE81 /* BaseNav.swift in Sources */,
                130278622BFD999200DDCE81 /* LoginVC.swift in Sources */,
                13EEB89C2BFF1C35002996FC /* HomeListenMenuVC.swift in Sources */,
                138964002BFDF98200AEDCD9 /* StudyVC.swift in Sources */,
                13EEB8972BFF1531002996FC /* AwardListCCell.swift in Sources */,
                1302782A2BFD957100DDCE81 /* AppDelegate.swift in Sources */,
                130278762BFD9ED600DDCE81 /* MarketCCell.swift in Sources */,
                13EEB8A42BFF353C002996FC /* HomeListen_process_TCell.swift in Sources */,
                130278782BFD9ED600DDCE81 /* MarketVC.swift in Sources */,
                1302785E2BFD985E00DDCE81 /* CommonWebVC.swift in Sources */,
                13EEB8AB2BFF36E0002996FC /* HomeListenSubVC.swift in Sources */,
                1302789B2BFD9FBF00DDCE81 /* GoodsItemTCell.swift in Sources */,
                13E07DF12BFDF1E600B7F5FB /* ExchangeRecordHistoryVC.swift in Sources */,
                130278872BFD9F2A00DDCE81 /* AddressManageHandleVC.swift in Sources */,
                130278892BFD9F2A00DDCE81 /* AddressManageVC.swift in Sources */,
                1302785C2BFD985E00DDCE81 /* CommonInputView.swift in Sources */,
                130278792BFD9ED600DDCE81 /* ExchangeResultVC.swift in Sources */,
                1302788D2BFD9F4200DDCE81 /* CoinRecordHistoryVC.swift in Sources */,
                1302785A2BFD985E00DDCE81 /* CommonAlertView.swift in Sources */,
                1302782C2BFD957100DDCE81 /* SceneDelegate.swift in Sources */,
                1302787D2BFD9ED600DDCE81 /* MarketExchangeVC.swift in Sources */,
                1302789A2BFD9FBF00DDCE81 /* AddressManageTCell.swift in Sources */,
                130278422BFD978900DDCE81 /* Enums.swift in Sources */,
                13EEB8912BFED3F3002996FC /* AwardListView.swift in Sources */,
                130278412BFD978900DDCE81 /* Config.swift in Sources */,
                1302784A2BFD979200DDCE81 /* BaseVC.swift in Sources */,
                130278592BFD985E00DDCE81 /* BitrhdayPickerView.swift in Sources */,
                1302787B2BFD9ED600DDCE81 /* MarketContentVC.swift in Sources */,
                13EEB8A02BFF28A7002996FC /* HomeListenVC.swift in Sources */,
                130278492BFD979200DDCE81 /* BaseTabBarVC.swift in Sources */,
            );
            runOnlyForDeploymentPostprocessing = 0;
        };
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
        1302782F2BFD957100DDCE81 /* Main.storyboard */ = {
            isa = PBXVariantGroup;
            children = (
                130278302BFD957100DDCE81 /* Base */,
            );
            name = Main.storyboard;
            sourceTree = "<group>";
        };
        130278342BFD957300DDCE81 /* LaunchScreen.storyboard */ = {
            isa = PBXVariantGroup;
            children = (
                130278352BFD957300DDCE81 /* Base */,
            );
            name = LaunchScreen.storyboard;
            sourceTree = "<group>";
        };
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
        130278382BFD957300DDCE81 /* Debug */ = {
            isa = XCBuildConfiguration;
            buildSettings = {
                ALWAYS_SEARCH_USER_PATHS = NO;
                ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
                CLANG_ANALYZER_NONNULL = YES;
                CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
                CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
                CLANG_ENABLE_MODULES = YES;
                CLANG_ENABLE_OBJC_ARC = YES;
                CLANG_ENABLE_OBJC_WEAK = YES;
                CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
                CLANG_WARN_BOOL_CONVERSION = YES;
                CLANG_WARN_COMMA = YES;
                CLANG_WARN_CONSTANT_CONVERSION = YES;
                CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
                CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
                CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
                CLANG_WARN_EMPTY_BODY = YES;
                CLANG_WARN_ENUM_CONVERSION = YES;
                CLANG_WARN_INFINITE_RECURSION = YES;
                CLANG_WARN_INT_CONVERSION = YES;
                CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
                CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
                CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
                CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
                CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
                CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
                CLANG_WARN_STRICT_PROTOTYPES = YES;
                CLANG_WARN_SUSPICIOUS_MOVE = YES;
                CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
                CLANG_WARN_UNREACHABLE_CODE = YES;
                CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
                COPY_PHASE_STRIP = NO;
                DEBUG_INFORMATION_FORMAT = dwarf;
                ENABLE_STRICT_OBJC_MSGSEND = YES;
                ENABLE_TESTABILITY = YES;
                ENABLE_USER_SCRIPT_SANDBOXING = YES;
                GCC_C_LANGUAGE_STANDARD = gnu17;
                GCC_DYNAMIC_NO_PIC = NO;
                GCC_NO_COMMON_BLOCKS = YES;
                GCC_OPTIMIZATION_LEVEL = 0;
                GCC_PREPROCESSOR_DEFINITIONS = (
                    "DEBUG=1",
                    "$(inherited)",
                );
                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
                GCC_WARN_UNDECLARED_SELECTOR = YES;
                GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
                GCC_WARN_UNUSED_FUNCTION = YES;
                GCC_WARN_UNUSED_VARIABLE = YES;
                IPHONEOS_DEPLOYMENT_TARGET = 17.4;
                LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
                MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
                MTL_FAST_MATH = YES;
                ONLY_ACTIVE_ARCH = YES;
                SDKROOT = iphoneos;
                SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
                SWIFT_OPTIMIZATION_LEVEL = "-Onone";
            };
            name = Debug;
        };
        130278392BFD957300DDCE81 /* Release */ = {
            isa = XCBuildConfiguration;
            buildSettings = {
                ALWAYS_SEARCH_USER_PATHS = NO;
                ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
                CLANG_ANALYZER_NONNULL = YES;
                CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
                CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
                CLANG_ENABLE_MODULES = YES;
                CLANG_ENABLE_OBJC_ARC = YES;
                CLANG_ENABLE_OBJC_WEAK = YES;
                CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
                CLANG_WARN_BOOL_CONVERSION = YES;
                CLANG_WARN_COMMA = YES;
                CLANG_WARN_CONSTANT_CONVERSION = YES;
                CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
                CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
                CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
                CLANG_WARN_EMPTY_BODY = YES;
                CLANG_WARN_ENUM_CONVERSION = YES;
                CLANG_WARN_INFINITE_RECURSION = YES;
                CLANG_WARN_INT_CONVERSION = YES;
                CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
                CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
                CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
                CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
                CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
                CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
                CLANG_WARN_STRICT_PROTOTYPES = YES;
                CLANG_WARN_SUSPICIOUS_MOVE = YES;
                CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
                CLANG_WARN_UNREACHABLE_CODE = YES;
                CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
                COPY_PHASE_STRIP = NO;
                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                ENABLE_NS_ASSERTIONS = NO;
                ENABLE_STRICT_OBJC_MSGSEND = YES;
                ENABLE_USER_SCRIPT_SANDBOXING = YES;
                GCC_C_LANGUAGE_STANDARD = gnu17;
                GCC_NO_COMMON_BLOCKS = YES;
                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
                GCC_WARN_UNDECLARED_SELECTOR = YES;
                GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
                GCC_WARN_UNUSED_FUNCTION = YES;
                GCC_WARN_UNUSED_VARIABLE = YES;
                IPHONEOS_DEPLOYMENT_TARGET = 17.4;
                LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
                MTL_ENABLE_DEBUG_INFO = NO;
                MTL_FAST_MATH = YES;
                SDKROOT = iphoneos;
                SWIFT_COMPILATION_MODE = wholemodule;
                VALIDATE_PRODUCT = YES;
            };
            name = Release;
        };
        1302783B2BFD957300DDCE81 /* Debug */ = {
            isa = XCBuildConfiguration;
            baseConfigurationReference = E76DEF4767EBA86DA360D0D8 /* Pods-DolphinEnglishLearnStudent.debug.xcconfig */;
            buildSettings = {
                ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
                ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
                CODE_SIGN_STYLE = Manual;
                CURRENT_PROJECT_VERSION = 1;
                DEVELOPMENT_TEAM = "";
                ENABLE_USER_SCRIPT_SANDBOXING = NO;
                GENERATE_INFOPLIST_FILE = YES;
                INFOPLIST_FILE = DolphinEnglishLearnStudent/Info.plist;
                INFOPLIST_KEY_CFBundleDisplayName = "海豚英语";
                INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
                INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
                INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
                INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
                LD_RUNPATH_SEARCH_PATHS = (
                    "$(inherited)",
                    "@executable_path/Frameworks",
                );
                MARKETING_VERSION = 1.0;
                PRODUCT_BUNDLE_IDENTIFIER = com.sinata.dolphinEnLearn.student.DolphinEnglishLearnStudent;
                PRODUCT_NAME = "$(TARGET_NAME)";
                PROVISIONING_PROFILE_SPECIFIER = "";
                SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
                SUPPORTS_MACCATALYST = NO;
                SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
                SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
                SWIFT_EMIT_LOC_STRINGS = YES;
                SWIFT_VERSION = 5.0;
                TARGETED_DEVICE_FAMILY = 2;
            };
            name = Debug;
        };
        1302783C2BFD957300DDCE81 /* Release */ = {
            isa = XCBuildConfiguration;
            baseConfigurationReference = 0A4D4E7CA7617F7B03C7FDFB /* Pods-DolphinEnglishLearnStudent.release.xcconfig */;
            buildSettings = {
                ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
                ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
                CODE_SIGN_STYLE = Manual;
                CURRENT_PROJECT_VERSION = 1;
                DEVELOPMENT_TEAM = "";
                ENABLE_USER_SCRIPT_SANDBOXING = NO;
                GENERATE_INFOPLIST_FILE = YES;
                INFOPLIST_FILE = DolphinEnglishLearnStudent/Info.plist;
                INFOPLIST_KEY_CFBundleDisplayName = "海豚英语";
                INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
                INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
                INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
                INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
                IPHONEOS_DEPLOYMENT_TARGET = 13.0;
                LD_RUNPATH_SEARCH_PATHS = (
                    "$(inherited)",
                    "@executable_path/Frameworks",
                );
                MARKETING_VERSION = 1.0;
                PRODUCT_BUNDLE_IDENTIFIER = com.sinata.dolphinEnLearn.student.DolphinEnglishLearnStudent;
                PRODUCT_NAME = "$(TARGET_NAME)";
                PROVISIONING_PROFILE_SPECIFIER = "";
                SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
                SUPPORTS_MACCATALYST = NO;
                SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
                SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
                SWIFT_EMIT_LOC_STRINGS = YES;
                SWIFT_VERSION = 5.0;
                TARGETED_DEVICE_FAMILY = 2;
            };
            name = Release;
        };
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
        130278212BFD957100DDCE81 /* Build configuration list for PBXProject "DolphinEnglishLearnStudent" */ = {
            isa = XCConfigurationList;
            buildConfigurations = (
                130278382BFD957300DDCE81 /* Debug */,
                130278392BFD957300DDCE81 /* Release */,
            );
            defaultConfigurationIsVisible = 0;
            defaultConfigurationName = Release;
        };
        1302783A2BFD957300DDCE81 /* Build configuration list for PBXNativeTarget "DolphinEnglishLearnStudent" */ = {
            isa = XCConfigurationList;
            buildConfigurations = (
                1302783B2BFD957300DDCE81 /* Debug */,
                1302783C2BFD957300DDCE81 /* Release */,
            );
            defaultConfigurationIsVisible = 0;
            defaultConfigurationName = Release;
        };
/* End XCConfigurationList section */
    };
    rootObject = 1302781E2BFD957100DDCE81 /* Project object */;
}
DolphinEnglishLearnStudent.xcodeproj/project.xcworkspace/contents.xcworkspacedata
New file
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "self:">
   </FileRef>
</Workspace>
DolphinEnglishLearnStudent/AppDelegate.swift
New file
@@ -0,0 +1,36 @@
//
//  AppDelegate.swift
//  DolphinEnglishLearnStudent
//
//  Created by 无故事王国 on 2024/5/22.
//
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
                var window: UIWindow?
                func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
                                // Override point for customization after application launch.
                                return true
                }
                // MARK: UISceneSession Lifecycle
                func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
                                // Called when a new scene session is being created.
                                // Use this method to select a configuration to create the new scene with.
                                return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
                }
                func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
                                // Called when the user discards a scene session.
                                // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
                                // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
                }
}
DolphinEnglishLearnStudent/Assets.xcassets/AccentColor.colorset/Contents.json
New file
@@ -0,0 +1,11 @@
{
  "colors" : [
    {
      "idiom" : "universal"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/AppIcon.appiconset/Contents.json
New file
@@ -0,0 +1,13 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "platform" : "ios",
      "size" : "1024x1024"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Bg/Contents.json
New file
@@ -0,0 +1,6 @@
{
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Bg/bg_login.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "bg_login.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "bg_login@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Bg/bg_login.imageset/bg_login.png
DolphinEnglishLearnStudent/Assets.xcassets/Bg/bg_login.imageset/bg_login@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Bg/bg_logo.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "logo.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "logo@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Bg/bg_logo.imageset/logo.png
DolphinEnglishLearnStudent/Assets.xcassets/Bg/bg_logo.imageset/logo@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/Contents.json
New file
@@ -0,0 +1,6 @@
{
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_add.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "btn_add.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "btn_add@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_add.imageset/btn_add.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_add.imageset/btn_add@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_add_un.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "btn_add_un.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "btn_add_un@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_add_un.imageset/btn_add_un.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_add_un.imageset/btn_add_un@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_back.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "btn_back.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "btn_back@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_back.imageset/btn_back.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_back.imageset/btn_back@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_choose.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "btn_choose.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "btn_choose@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_choose.imageset/btn_choose.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_choose.imageset/btn_choose@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_choose_u.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "btn_choose_u.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "btn_choose_u@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_choose_u.imageset/btn_choose_u.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_choose_u.imageset/btn_choose_u@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_close_circle.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "btn_close_circle.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "btn_close_circle@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_close_circle.imageset/btn_close_circle.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_close_circle.imageset/btn_close_circle@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_delete.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "btn_delete.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "btn_delete@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_delete.imageset/btn_delete.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_delete.imageset/btn_delete@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_edit.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "btn_edit.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "btn_edit@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_edit.imageset/btn_edit.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_edit.imageset/btn_edit@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_edit_b.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "btn_edit.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "btn_edit@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_edit_b.imageset/btn_edit.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_edit_b.imageset/btn_edit@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_photo_placeholder.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "btn_photo_placeholder.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "btn_photo_placeholder@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_photo_placeholder.imageset/btn_photo_placeholder.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_photo_placeholder.imageset/btn_photo_placeholder@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_reduce.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "btn_reduce.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "btn_reduce@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_reduce.imageset/btn_reduce.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_reduce.imageset/btn_reduce@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_reduce_un.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "btn_reduce_un.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "btn_reduce_un@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_reduce_un.imageset/btn_reduce_un.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_reduce_un.imageset/btn_reduce_un@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_refresh.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "filename" : "btn_refresh.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "btn_refresh@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_refresh.imageset/btn_refresh.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_refresh.imageset/btn_refresh@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Contents.json
New file
@@ -0,0 +1,6 @@
{
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/Contents.json
New file
@@ -0,0 +1,6 @@
{
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_arrow_up.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "filename" : "home_arrow_up.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "home_arrow_up@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_arrow_up.imageset/home_arrow_up.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_arrow_up.imageset/home_arrow_up@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_culture.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "filename" : "home_culture.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "home_culture@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_culture.imageset/home_culture.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_culture.imageset/home_culture@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_listen.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "filename" : "home_listen.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "home_listen@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_listen.imageset/home_listen.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_listen.imageset/home_listen@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_read.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "filename" : "home_read.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "home_read@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_read.imageset/home_read.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_read.imageset/home_read@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_read_1.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "filename" : "home_read_1.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "home_read_1@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_read_1.imageset/home_read_1.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_read_1.imageset/home_read_1@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_write.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "filename" : "home_write.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "home_write@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_write.imageset/home_write.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/home_write.imageset/home_write@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_address.imageset/Contents.json
New file
@@ -0,0 +1,33 @@
{
  "images" : [
    {
      "filename" : "dingweiweizhi.png",
      "idiom" : "iphone",
      "scale" : "1x"
    },
    {
      "filename" : "dingweiweizhi@2x.png",
      "idiom" : "iphone",
      "scale" : "2x"
    },
    {
      "filename" : "dingweiweizhi@3x.png",
      "idiom" : "iphone",
      "scale" : "3x"
    },
    {
      "filename" : "dingweiweizhi 1.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "dingweiweizhi@2x 1.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_address.imageset/dingweiweizhi 1.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_address.imageset/dingweiweizhi.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_address.imageset/dingweiweizhi@2x 1.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_address.imageset/dingweiweizhi@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_address.imageset/dingweiweizhi@3x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_camera.imageset/Contents.json
New file
@@ -0,0 +1,23 @@
{
  "images" : [
    {
      "filename" : "xiangji1fill.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_camera@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_camera@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_camera.imageset/icon_camera@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_camera.imageset/icon_camera@3x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_camera.imageset/xiangji1fill.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_coin.imageset/Contents.json
New file
@@ -0,0 +1,33 @@
{
  "images" : [
    {
      "filename" : "record_one.png",
      "idiom" : "iphone",
      "scale" : "1x"
    },
    {
      "filename" : "record_one@2x.png",
      "idiom" : "iphone",
      "scale" : "2x"
    },
    {
      "filename" : "record_one@3x.png",
      "idiom" : "iphone",
      "scale" : "3x"
    },
    {
      "filename" : "icon_coin.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "icon_coin@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_coin.imageset/icon_coin.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_coin.imageset/icon_coin@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_coin.imageset/record_one.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_coin.imageset/record_one@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_coin.imageset/record_one@3x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_fail.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "filename" : "icon_fail.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_fail@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_fail.imageset/icon_fail.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_fail.imageset/icon_fail@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_feedback.imageset/Contents.json
New file
@@ -0,0 +1,33 @@
{
  "images" : [
    {
      "filename" : "modify_order.png",
      "idiom" : "iphone",
      "scale" : "1x"
    },
    {
      "filename" : "modify_order@2x.png",
      "idiom" : "iphone",
      "scale" : "2x"
    },
    {
      "filename" : "modify_order@3x.png",
      "idiom" : "iphone",
      "scale" : "3x"
    },
    {
      "filename" : "icon_feedback.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "icon_feedback@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_feedback.imageset/icon_feedback.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_feedback.imageset/icon_feedback@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_feedback.imageset/modify_order.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_feedback.imageset/modify_order@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_feedback.imageset/modify_order@3x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_input_code.imageset/Contents.json
New file
@@ -0,0 +1,23 @@
{
  "images" : [
    {
      "filename" : "icon_input_code.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_input_code@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_input_code@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_input_code.imageset/icon_input_code.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_input_code.imageset/icon_input_code@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_input_code.imageset/icon_input_code@3x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_input_phone.imageset/Contents.json
New file
@@ -0,0 +1,23 @@
{
  "images" : [
    {
      "filename" : "icon_input_phone.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_input_phone@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_input_phone@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_input_phone.imageset/icon_input_phone.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_input_phone.imageset/icon_input_phone@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_input_phone.imageset/icon_input_phone@3x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_listen.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "filename" : "icon_listen.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_listen@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_listen.imageset/icon_listen.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_listen.imageset/icon_listen@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_more.imageset/Contents.json
New file
@@ -0,0 +1,23 @@
{
  "images" : [
    {
      "filename" : "icon_more.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_more@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_more@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_more.imageset/icon_more.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_more.imageset/icon_more@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_more.imageset/icon_more@3x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_more_gray.imageset/Contents.json
New file
@@ -0,0 +1,23 @@
{
  "images" : [
    {
      "filename" : "icon_more_gray.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_more_gray@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_more_gray@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_more_gray.imageset/icon_more_gray.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_more_gray.imageset/icon_more_gray@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_more_gray.imageset/icon_more_gray@3x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_poker.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "filename" : "icon_poker.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_poker@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_poker.imageset/icon_poker.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_poker.imageset/icon_poker@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_record.imageset/Contents.json
New file
@@ -0,0 +1,33 @@
{
  "images" : [
    {
      "filename" : "shangchuanziliao.png",
      "idiom" : "iphone",
      "scale" : "1x"
    },
    {
      "filename" : "shangchuanziliao@2x.png",
      "idiom" : "iphone",
      "scale" : "2x"
    },
    {
      "filename" : "shangchuanziliao@3x.png",
      "idiom" : "iphone",
      "scale" : "3x"
    },
    {
      "filename" : "icon_record.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "icon_record@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_record.imageset/icon_record.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_record.imageset/icon_record@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_record.imageset/shangchuanziliao.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_record.imageset/shangchuanziliao@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_record.imageset/shangchuanziliao@3x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_search.imageset/Contents.json
New file
@@ -0,0 +1,23 @@
{
  "images" : [
    {
      "filename" : "icon_search.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_search@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_search@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_search.imageset/icon_search.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_search.imageset/icon_search@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_search.imageset/icon_search@3x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_share.imageset/Contents.json
New file
@@ -0,0 +1,33 @@
{
  "images" : [
    {
      "filename" : "share.png",
      "idiom" : "iphone",
      "scale" : "1x"
    },
    {
      "filename" : "share@2x.png",
      "idiom" : "iphone",
      "scale" : "2x"
    },
    {
      "filename" : "share@3x.png",
      "idiom" : "iphone",
      "scale" : "3x"
    },
    {
      "filename" : "icon_share.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "icon_share@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_share.imageset/icon_share.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_share.imageset/icon_share@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_share.imageset/share.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_share.imageset/share@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_share.imageset/share@3x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_success.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "filename" : "icon_success.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_success@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_success.imageset/icon_success.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_success.imageset/icon_success@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_vip.imageset/Contents.json
New file
@@ -0,0 +1,23 @@
{
  "images" : [
    {
      "filename" : "icon_vip.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_vip@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_vip@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_vip.imageset/icon_vip.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_vip.imageset/icon_vip@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_vip.imageset/icon_vip@3x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_waring.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "filename" : "icon_waring.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_waring@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_waring.imageset/icon_waring.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_waring.imageset/icon_waring@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/launchScreen.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "launchScreen@1x.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "launchScreen@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/launchScreen.imageset/launchScreen@1x.png
DolphinEnglishLearnStudent/Assets.xcassets/launchScreen.imageset/launchScreen@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/logo.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "logo.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "logo@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/logo.imageset/logo.png
DolphinEnglishLearnStudent/Assets.xcassets/logo.imageset/logo@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/nav/Contents.json
New file
@@ -0,0 +1,6 @@
{
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_home.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "nav_home.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "nav_home@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_home.imageset/nav_home.png
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_home.imageset/nav_home@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_home_s.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "nav_home_s.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "nav_home_s@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_home_s.imageset/nav_home_s.png
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_home_s.imageset/nav_home_s@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_market.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "nav_market.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "nav_market@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_market.imageset/nav_market.png
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_market.imageset/nav_market@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_market_s.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "nav_market_s.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "nav_market_s@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_market_s.imageset/nav_market_s.png
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_market_s.imageset/nav_market_s@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_me.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "nav_me.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "nav_me@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_me.imageset/nav_me.png
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_me.imageset/nav_me@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_me_s.imageset/Contents.json
New file
@@ -0,0 +1,18 @@
{
  "images" : [
    {
      "filename" : "nav_me_s.png",
      "idiom" : "ipad",
      "scale" : "1x"
    },
    {
      "filename" : "nav_me_s@2x.png",
      "idiom" : "ipad",
      "scale" : "2x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_me_s.imageset/nav_me_s.png
DolphinEnglishLearnStudent/Assets.xcassets/nav/nav_me_s.imageset/nav_me_s@2x.png
DolphinEnglishLearnStudent/Base.lproj/LaunchScreen.storyboard
New file
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="EHf-IW-A2E">
            <objects>
                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
                        <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="53" y="375"/>
        </scene>
    </scenes>
</document>
DolphinEnglishLearnStudent/Base.lproj/Main.storyboard
New file
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="tne-QT-ifu">
            <objects>
                <viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController">
                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
                        <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
            </objects>
        </scene>
    </scenes>
</document>
DolphinEnglishLearnStudent/Base/BaseNav.swift
New file
@@ -0,0 +1,179 @@
//
//  BaseNavigationController.swift
//  BrokerDriver
//
//  Created by 无故事王国 on 2023/4/24.
//
import UIKit
import JQTools
class BaseNav: UINavigationController,UINavigationControllerDelegate {
                /// 需要透明Nav的VC
                private var lucencyVCs = [HomeVC.self]
                private let img = UIImage.jq_gradient(["#B6E0FF","#FFFFFF"],size: CGSize(width: JQ_ScreenW, height: 90),direction: GradientDirection.vertical)
                open override func viewDidLoad() {
                                super.viewDidLoad()
                                self.navigationBar.barTintColor = .white
                                self.navigationBar.titleTextAttributes = [.font:UIFont.systemFont(ofSize: 18, weight: .medium), .foregroundColor:UIColor.white]
                                self.navigationBar.tintColor = UIColor.black
                                self.navigationBar.shadowImage = UIImage()
                                self.navigationBar.isTranslucent = true
                                self.delegate = self
                                self.interactivePopGestureRecognizer?.delegate = self
                                if #available(iOS 15.0, *) {
                                                let scrollBar = UINavigationBarAppearance()
                                                scrollBar.configureWithOpaqueBackground()
                                                scrollBar.backgroundEffect = nil
                                                scrollBar.shadowColor = nil
                                                scrollBar.titleTextAttributes = [.foregroundColor:UIColor.white,.font:Config.NavFont]
                                                scrollBar.backgroundColor = UIColor.clear
                                                scrollBar.backgroundImage = img
                                                let standardBar = UINavigationBarAppearance()
                                                standardBar.configureWithOpaqueBackground()
                                                standardBar.backgroundEffect = nil
                                                standardBar.shadowColor = nil
                                                standardBar.shadowImage = nil
                                                standardBar.titleTextAttributes = [.foregroundColor:UIColor.white,.font:Config.NavFont]
                                                standardBar.backgroundColor = UIColor.clear
                                                standardBar.backgroundImage = img
                                                navigationBar.scrollEdgeAppearance = scrollBar //顶部透明
                                                navigationBar.standardAppearance = standardBar
                                }else {
                                                navigationBar.titleTextAttributes = [.foregroundColor:UIColor.white,.font:Config.NavFont]
                                                navigationBar.isTranslucent = true
                                                navigationBar.setBackgroundImage(UIImage(), for: .default)
                                                navigationBar.shadowImage = UIImage()
                                }
//                                let titleV = UIView()
//                                titleV.sizeToFit()
//                                let imgV = UIImageView(image: UIImage(named: "bg_logo"))
//                                imgV.contentMode = .scaleAspectFit
//                                titleV.addSubview(imgV)
//                                imgV.snp.makeConstraints { make in
//                                                make.edges.equalToSuperview()
//                                }
//
//                                navigationItem.titleView = titleV
                }
                open func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
                                let status = lucencyVCs.contains(where: {$0 == viewController.classForCoder})
                                if (status){
                                                if #available(iOS 15.0, *) {
                                                                navigationBar.standardAppearance.backgroundImage = nil
                                                                navigationBar.scrollEdgeAppearance?.backgroundImage = nil
                                                }else{
                                                                navigationBar.setBackgroundImage(UIImage(), for: .default)
                                                                navigationBar.shadowImage = UIImage()
                                                }
                                }else{
                                                if #available(iOS 15.0, *) {
                                                                navigationBar.standardAppearance.backgroundImage = img
                                                                navigationBar.scrollEdgeAppearance?.backgroundImage = img
                                                }else{
                                                                navigationBar.setBackgroundImage(img, for: .default)
                                                }
                                }
                }
                //侧滑
                public func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {
                                if  viewController == self.viewControllers[0] {
                                                self.interactivePopGestureRecognizer!.delegate = self
                                }else{
                                                self.interactivePopGestureRecognizer!.delegate = nil
                                }
                }
                open override var childForStatusBarHidden: UIViewController? {
                                return self.topViewController
                }
                open override var childForStatusBarStyle: UIViewController? {
                                return self.topViewController
                }
                override var preferredStatusBarStyle: UIStatusBarStyle{
                                return .lightContent
                }
}
class LoginNav: UINavigationController,UINavigationControllerDelegate {
                private var popDelegate: UIGestureRecognizerDelegate?
                open override func viewDidLoad() {
                                super.viewDidLoad()
                                self.navigationBar.barTintColor = .white
                                self.navigationBar.titleTextAttributes = [.font:UIFont.systemFont(ofSize: 18, weight: .medium), .foregroundColor:UIColor.black]
                                self.navigationBar.tintColor = UIColor.black
                                self.navigationBar.shadowImage = UIImage()
                                self.navigationBar.isTranslucent = true
                                self.delegate = self
                                self.popDelegate = self.interactivePopGestureRecognizer?.delegate
                                if #available(iOS 15.0, *) {
                                                let scrollBar = UINavigationBarAppearance()
                                                scrollBar.configureWithOpaqueBackground()
                                                scrollBar.backgroundEffect = nil
                                                scrollBar.shadowColor = nil
                                                scrollBar.titleTextAttributes = [.foregroundColor:Config.ThemeColor,.font:Config.NavFont]
                                                scrollBar.backgroundColor = UIColor.clear
                                                //            scrollBar.backgroundImage = img
                                                let standardBar = UINavigationBarAppearance()
                                                standardBar.configureWithOpaqueBackground()
                                                standardBar.backgroundEffect = nil
                                                standardBar.shadowColor = nil
                                                standardBar.shadowImage = nil
                                                standardBar.titleTextAttributes = [.foregroundColor:Config.ThemeColor,.font:Config.NavFont]
                                                standardBar.backgroundColor = UIColor.clear
                                                //            standardBar.backgroundImage = img
                                                navigationBar.scrollEdgeAppearance = scrollBar //顶部透明
                                                navigationBar.standardAppearance = standardBar
                                }else {
                                                navigationBar.titleTextAttributes = [.foregroundColor:Config.ThemeColor,.font:Config.NavFont]
                                }
                }
                open func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
                }
                //侧滑
                public func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {
                                if  viewController == self.viewControllers[0] {
                                                self.interactivePopGestureRecognizer!.delegate = self.popDelegate
                                }else{
                                                self.interactivePopGestureRecognizer!.delegate = nil
                                }
                }
                open override var childForStatusBarHidden: UIViewController? {
                                return self.topViewController
                }
                open override var childForStatusBarStyle: UIViewController? {
                                return self.topViewController
                }
}
DolphinEnglishLearnStudent/Base/BaseTabBarVC.swift
New file
@@ -0,0 +1,18 @@
//
//  BaseTabBarVC.swift
//  WanPai
//
//  Created by 杨锴 on 2023/6/8.
//
import UIKit
class BaseTabBarVC: UITabBarController {
    override func viewDidLoad() {
        super.viewDidLoad()
        tabBar.backgroundColor = .white
        tabBar.tintColor = Config.ThemeColor
    }
}
DolphinEnglishLearnStudent/Base/BaseVC.swift
New file
@@ -0,0 +1,139 @@
//
//  BaseViewController.swift
//  BrokerDriver
//
//  Created by 无故事王国 on 2023/4/24.
//
import UIKit
import RxSwift
import RxRelay
import RxCocoa
import JQTools
import QMUIKit
class BaseVC: UIViewController {
                var disposeBag:DisposeBag!
                let refreshStatus = BehaviorSubject(value: RefreshStatus.others)
                var yy_popBlock:(() -> Void)?
                open var nav_back_img:UIImage = UIImage.init(named: "btn_back") ?? UIImage.init() {
                                didSet {
                                                let btn = navigationItem.leftBarButtonItem?.customView as! UIButton
                                                btn.setImage(nav_back_img, for: .normal)
                                }
                }
                override func viewWillAppear(_ animated: Bool) {
                                super.viewWillAppear(animated)
                                navigationController?.delegate?.navigationController?(navigationController!, willShow: self, animated: true)
                }
                override func viewDidLoad() {
                                super.viewDidLoad()
//                                let bgGradientImg = UIImageView(image: UIImage.jq_gradient(["#B6E0FF","#FFFFFF"],size: CGSize(width: JQ_ScreenW, height: JQ_ScreenH), direction: .vertical))
//
//                                view.addSubview(bgGradientImg)
//                                bgGradientImg.snp.makeConstraints { make in
//                                                make.top.left.right.equalToSuperview()
//                                                make.height.equalTo(JQ_ScreenW * 0.46)
//                                }
//                                view.sendSubviewToBack(bgGradientImg)
//                                view.backgroundColor = .white
                                disposeBag = DisposeBag()
                                setUI()
                                setRx()
                                setData()
                                if navigationController?.viewControllers.count ?? 0 > 1{
                                                let backButton = QMUIButton(type: .custom)
                                                backButton.setImage(UIImage(named: "btn_back"), for: .normal)
                                                backButton.setTitle(self.title, for: .normal)
                                                backButton.setTitleColor(.black.withAlphaComponent(0.81), for: .normal)
                                                backButton.titleLabel?.font = UIFont.systemFont(ofSize: 18, weight: .medium)
                                                backButton.imagePosition = .left
                                                backButton.spacingBetweenImageAndTitle = 35
                                                backButton.addTarget(self, action: #selector(backItemEvent), for: .touchUpInside)
                                                navigationItem.leftBarButtonItem = UIBarButtonItem(customView: backButton)
                                }
                                if !self.isKind(of: HomeVC.self) && !self.isKind(of: HomeListenSubVC.self){
                                                let titleV = UIView()
                                                titleV.bounds = CGRect(x: 0, y: 0, width: 156, height: 63)
                                                titleV.sizeToFit()
                                                let imgV = UIImageView(image: UIImage(named: "bg_logo"))
                                                imgV.contentMode = .scaleAspectFit
                                                titleV.addSubview(imgV)
                                                imgV.snp.makeConstraints { make in
                                                                make.edges.equalToSuperview()
                                                }
                                                view.addSubview(titleV)
                                                titleV.snp.makeConstraints { make in
                                                                make.top.equalToSuperview().offset(18)
                                                                make.centerX.equalToSuperview()
                                                }
                                                navigationItem.titleView = titleV
                                }
                }
                func setRx(){
                }
                func setUI(){
                                view.backgroundColor = Config.ThemeBGColor
                }
                func setData(){
                }
                func refreshUI(){}
                func push(vc:UIViewController){
                                vc.hidesBottomBarWhenPushed = true
                                navigationController?.pushViewController(vc, animated: true)
                }
                override var preferredStatusBarStyle: UIStatusBarStyle{
                                return .lightContent
                }
                @objc fileprivate func backItemEvent() {
                                // 拦截pop事件
                                if (yy_popBlock != nil) {
                                                yy_popBlock?()
                                                return
                                }
                                navigationController?.popViewController(animated: true)
                }
                override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
                                coordinator.animate(alongsideTransition: { [weak self] (context) in
                                                let orient = UIApplication.shared.statusBarOrientation
                                                switch orient {
                                                                case .landscapeLeft, .landscapeRight:
                                                                                //横屏时禁止左拽滑出
                                                                                self?.navigationController?.interactivePopGestureRecognizer?.isEnabled = false
                                                                default:
                                                                                //竖屏时允许左拽滑出
                                                                                self?.navigationController?.interactivePopGestureRecognizer?.isEnabled = true
                                                }
                                })
                                super.viewWillTransition(to: size, with: coordinator)
                }
                deinit {
                                LogInfo(String(format: "%@ 已释放", NSStringFromClass(self.classForCoder).components(separatedBy: ".").last!))
                }
}
DolphinEnglishLearnStudent/Base/TapBtn.swift
New file
@@ -0,0 +1,10 @@
//
//  TapBtn.swift
//  WanPai
//
//  Created by 杨锴 on 2023/6/8.
//
import UIKit
class TapBtn: UIButton {}
DolphinEnglishLearnStudent/Config/Config.swift
New file
@@ -0,0 +1,99 @@
//
//  Config.swift
//  DolphinEnglishLearnManager
//
//  Created by 无故事王国 on 2024/5/14.
//
import Foundation
import UIKit
import OSLog
import SVProgressHUD
@_exported import JQTools
var sceneDelegate:SceneDelegate? = {
                var uiScreen:UIScene?
                UIApplication.shared.connectedScenes.forEach { scenes in
                                uiScreen = scenes
                }
                return (uiScreen?.delegate as? SceneDelegate)
}()
struct Config {
                static let ThemeBGColor:UIColor = UIColor(hexStr: "#C3BFB3")
                static let ThemeColor:UIColor = UIColor(hexStr: "#4195D3")
                static let NavFontColor = UIColor.black.withAlphaComponent(0.8)
                static let NavFont = UIFont.systemFont(ofSize: 15, weight: .medium)
                static var RatioW:Double{get{return JQ_ScreenW / 810.0}}
                static var RatioH:Double{get{return JQ_ScreenH / 1080.0}}
}
func LogInfo(_ items:Any...,separator:String=" ",file:String=#file,function:String=#function,line:Int=#line){
#if DEBUG
                if #available(iOS 14.0, *) {
                                let logger = Logger(subsystem: "WanPai", category: function)
                                logger.error("\(items)")
                }else{
                                let file = (file as NSString).lastPathComponent.split(separator: ".").first!;
                                print("⚠️⚠️⚠️INFO: \(file)  \(function) [Line: \(line)]: \(items)",separator);
                }
#endif
}
//提示框
func alert(msg: String) {
                SVProgressHUD.showInfo(withStatus: msg)
}
func alertError(msg:String){
                SVProgressHUD.showError(withStatus: msg)
}
func alertSuccess(msg:String){
                SVProgressHUD.showSuccess(withStatus: msg)
}
func showHUD(_ text:String? = nil){
                SVProgressHUD.show(withStatus: text)
}
func hiddenHUD(_ delay:TimeInterval? = nil){
                if delay != nil{
                                SVProgressHUD.dismiss(withDelay: delay!)
                }else{
                                SVProgressHUD.dismiss()
                }
}
extension UIButton{
                public func openCountDown(_ t:Int = 59,defultTitle:String = "获取验证码",textColor:UIColor,unenableColor:UIColor){
                                var time = t //倒计时时间
                                let queue = DispatchQueue.global()
                                let timer = DispatchSource.makeTimerSource(flags: [], queue: queue)
                                timer.schedule(wallDeadline: DispatchWallTime.now(), repeating: .seconds(1));
                                timer.setEventHandler(handler: {
                                                if time <= 0 {
                                                                timer.cancel()
                                                                DispatchQueue.main.async(execute: {
                                                                                self.setTitle(defultTitle, for: .normal)
                                                                                self.setTitleColor(textColor, for: .normal)
                                                                                self.isUserInteractionEnabled = true
                                                                });
                                                }else {
                                                                DispatchQueue.main.async(execute: {
                                                                                self.setTitle("\(time)s", for: .normal)
                                                                                self.setTitleColor(unenableColor, for: .normal)
                                                                                self.isUserInteractionEnabled = false
                                                                });
                                                }
                                                time -= 1
                                });
                                timer.resume()
                }
}
DolphinEnglishLearnStudent/Config/Enums.swift
New file
@@ -0,0 +1,28 @@
//
//  Enums.swift
//  DolphinEnglishLearnManager
//
//  Created by 无故事王国 on 2024/5/17.
//
import Foundation
enum AgreementType:Int{
                case UserProtocol = 1
                case PrivacyPolicy = 2
                case logout = 3
                case aboutUS = 4
                var titleStr:String{
                                switch self {
                                                case .PrivacyPolicy:
                                                                return "隐私政策"
                                                case .UserProtocol:
                                                                return "用户协议"
                                                case .aboutUS:
                                                                return "关于我们"
                                                case .logout:
                                                                return "注销协议"
                                }
                }
}
DolphinEnglishLearnStudent/Info.plist
New file
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>UIApplicationSceneManifest</key>
    <dict>
        <key>UIApplicationSupportsMultipleScenes</key>
        <false/>
        <key>UISceneConfigurations</key>
        <dict>
            <key>UIWindowSceneSessionRoleApplication</key>
            <array>
                <dict>
                    <key>UISceneConfigurationName</key>
                    <string>Default Configuration</string>
                    <key>UISceneDelegateClassName</key>
                    <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
                    <key>UISceneStoryboardFile</key>
                    <string>Main</string>
                </dict>
            </array>
        </dict>
    </dict>
</dict>
</plist>
DolphinEnglishLearnStudent/Login/LoginVC.swift
New file
@@ -0,0 +1,86 @@
//
//  LoginVC.swift
//  DolphinEnglishLearnStudent
//
//  Created by 无故事王国 on 2024/5/22.
//
import UIKit
import QMUIKit
class LoginVC: BaseVC {
                @IBOutlet weak var btn_login: UIButton!
                @IBOutlet weak var tf_authCode: QMUITextField!
                @IBOutlet weak var tf_phone: QMUITextField!
                @IBOutlet weak var btn_isRead: UIButton!
                override func viewDidLoad() {
                                super.viewDidLoad()
                }
                override func setUI() {
                                super.setUI()
                }
                private func authInputPhone()->Bool{
                                guard !tf_phone.text!.isEmpty else {
                                                alert(msg: "请输入手机号");return false
                                }
                                guard tf_phone.text!.jq_isPhone else {
                                                alert(msg: "请输入正确的手机号");return false
                                }
                                return true
                }
                private func authInputCode()->Bool{
                                guard !tf_authCode.text!.isEmpty else {
                                                alert(msg: "请输入验证码");return false
                                }
                                guard tf_phone.text!.count != 6 else {
                                                alert(msg: "请输入6位验证码");return false
                                }
                                return true
                }
                @IBAction func chooseAction(_ sender: UIButton) {
                                sender.isSelected = !sender.isSelected
                }
                /// 隐私协议
                @IBAction func privacyAction(_ sender: UIButton) {
                                let vc = CommonWebVC(type: .privacyAgreement)
                                vc.title = "隐私协议"
                                self.navigationController?.pushViewController(vc, animated: true)
                }
                /// 用户协议
                @IBAction func privacyUserAction(_ sender: UIButton) {
                                let vc = CommonWebVC(type: .userAgreement)
                                vc.title = "用户协议"
                                self.navigationController?.pushViewController(vc, animated: true)
                }
                @IBAction func getCodeAction(_ sender: UIButton) {
                                guard authInputPhone() else {return}
                                sender.openCountDown(60, defultTitle: "获取验证码", textColor:UIColor(hexStr: "#41A2EB"), unenableColor: .gray)
                }
                @IBAction func loginAction(_ sender: UIButton) {
                                guard authInputPhone() else {return}
                                guard authInputCode() else {return}
                                guard btn_isRead.isEnabled else {
                                                alert(msg: "请阅读并同意《隐私协议》《用户协议》");return
                                }
                                sceneDelegate?.loginSuccess()
                }
}
DolphinEnglishLearnStudent/Login/LoginVC.xib
New file
@@ -0,0 +1,220 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="ipad10_9rounded" orientation="landscape" layout="fullscreen" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <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="LoginVC" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
            <connections>
                <outlet property="btn_isRead" destination="zkX-mZ-xif" id="dl5-pq-zHk"/>
                <outlet property="btn_login" destination="X9q-qw-Sc1" id="ZvV-I8-l0i"/>
                <outlet property="tf_authCode" destination="j2G-AV-ggz" id="UTp-X4-vUN"/>
                <outlet property="tf_phone" destination="tfh-6p-iXJ" id="izi-nL-lgo"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="1180" height="820"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="bg_login" translatesAutoresizingMaskIntoConstraints="NO" id="rqd-Xo-f9G">
                    <rect key="frame" x="442" y="66" width="296" height="129"/>
                </imageView>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2PL-Tz-O9m">
                    <rect key="frame" x="432" y="259" width="316" height="47"/>
                    <subviews>
                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_input_phone" translatesAutoresizingMaskIntoConstraints="NO" id="pxt-Uu-WaU">
                            <rect key="frame" x="14" y="14.5" width="16" height="18"/>
                        </imageView>
                        <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入手机号" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="tfh-6p-iXJ" customClass="QMUITextField">
                            <rect key="frame" x="45" y="14.5" width="256" height="18.5"/>
                            <color key="textColor" red="0.2666666667" green="0.29411764709999999" blue="0.3294117647" alpha="0.58999999999999997" colorSpace="custom" customColorSpace="sRGB"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                            <textInputTraits key="textInputTraits" keyboardType="numberPad"/>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="color" keyPath="placeholderColor">
                                    <color key="value" red="0.2666666667" green="0.29411764709999999" blue="0.3294117647" alpha="0.58999999999999997" colorSpace="custom" customColorSpace="sRGB"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="number" keyPath="maximumTextLength">
                                    <integer key="value" value="11"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                        </textField>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="tfh-6p-iXJ" firstAttribute="centerY" secondItem="pxt-Uu-WaU" secondAttribute="centerY" id="99t-mf-OGn"/>
                        <constraint firstAttribute="width" constant="316" id="EDf-pB-sfI"/>
                        <constraint firstItem="pxt-Uu-WaU" firstAttribute="leading" secondItem="2PL-Tz-O9m" secondAttribute="leading" constant="14" id="QEU-zv-05O"/>
                        <constraint firstItem="tfh-6p-iXJ" firstAttribute="leading" secondItem="pxt-Uu-WaU" secondAttribute="trailing" constant="15" id="gf1-nD-LlO"/>
                        <constraint firstAttribute="height" constant="47" id="gkn-b6-NF0"/>
                        <constraint firstItem="pxt-Uu-WaU" firstAttribute="centerY" secondItem="2PL-Tz-O9m" secondAttribute="centerY" id="poG-Nm-9oH"/>
                        <constraint firstAttribute="trailing" secondItem="tfh-6p-iXJ" secondAttribute="trailing" constant="15" id="vN1-bE-7sZ"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB">
                            <real key="value" value="1"/>
                        </userDefinedRuntimeAttribute>
                        <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB">
                            <color key="value" red="0.86666666670000003" green="0.86666666670000003" blue="0.86666666670000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        </userDefinedRuntimeAttribute>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="8"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5aU-uW-fH7">
                    <rect key="frame" x="432" y="325" width="316" height="47"/>
                    <subviews>
                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_input_code" translatesAutoresizingMaskIntoConstraints="NO" id="rNa-Hc-XJJ">
                            <rect key="frame" x="14" y="14.5" width="15" height="18"/>
                        </imageView>
                        <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入验证码" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="j2G-AV-ggz" customClass="QMUITextField">
                            <rect key="frame" x="44" y="14.5" width="127" height="18.5"/>
                            <color key="textColor" red="0.2666666667" green="0.29411764709999999" blue="0.3294117647" alpha="0.58999999999999997" colorSpace="custom" customColorSpace="sRGB"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                            <textInputTraits key="textInputTraits" keyboardType="numberPad"/>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="color" keyPath="placeholderColor">
                                    <color key="value" red="0.2666666667" green="0.29411764709999999" blue="0.3294117647" alpha="0.58999999999999997" colorSpace="custom" customColorSpace="sRGB"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="number" keyPath="maximumTextLength">
                                    <integer key="value" value="6"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                        </textField>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="nrP-lG-Vwu">
                            <rect key="frame" x="226" y="9" width="72" height="29"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="获取验证码"/>
                            <connections>
                                <action selector="getCodeAction:" destination="-1" eventType="touchUpInside" id="8dv-4Y-0hV"/>
                            </connections>
                        </button>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="j2G-AV-ggz" firstAttribute="centerY" secondItem="rNa-Hc-XJJ" secondAttribute="centerY" id="4gP-jA-yDG"/>
                        <constraint firstAttribute="height" constant="47" id="6sj-Ih-W1i"/>
                        <constraint firstAttribute="trailing" secondItem="j2G-AV-ggz" secondAttribute="trailing" constant="145" id="AOH-By-S2v"/>
                        <constraint firstItem="rNa-Hc-XJJ" firstAttribute="leading" secondItem="5aU-uW-fH7" secondAttribute="leading" constant="14" id="Ee7-Nl-uoY"/>
                        <constraint firstItem="rNa-Hc-XJJ" firstAttribute="centerY" secondItem="5aU-uW-fH7" secondAttribute="centerY" id="PSX-Dp-Bah"/>
                        <constraint firstItem="j2G-AV-ggz" firstAttribute="leading" secondItem="rNa-Hc-XJJ" secondAttribute="trailing" constant="15" id="acA-H2-QKX"/>
                        <constraint firstAttribute="width" constant="316" id="br3-38-uYM"/>
                        <constraint firstAttribute="trailing" secondItem="nrP-lG-Vwu" secondAttribute="trailing" constant="18" id="p0f-Zz-Oma"/>
                        <constraint firstItem="nrP-lG-Vwu" firstAttribute="centerY" secondItem="5aU-uW-fH7" secondAttribute="centerY" id="wxa-ng-hHb"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB">
                            <real key="value" value="1"/>
                        </userDefinedRuntimeAttribute>
                        <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB">
                            <color key="value" red="0.86666666670000003" green="0.86666666670000003" blue="0.86666666670000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        </userDefinedRuntimeAttribute>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="8"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="zkX-mZ-xif">
                    <rect key="frame" x="432" y="389" width="28" height="28"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="28" id="C6n-KA-Bq1"/>
                        <constraint firstAttribute="width" constant="28" id="ZrR-qD-rgI"/>
                    </constraints>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <state key="normal" image="btn_choose_u"/>
                    <connections>
                        <action selector="chooseAction:" destination="-1" eventType="touchUpInside" id="taa-1D-MNJ"/>
                    </connections>
                </button>
                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="我已阅读并同意" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Npo-Be-a3K">
                    <rect key="frame" x="462" y="396" width="86" height="14.5"/>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
                    <nil key="highlightedColor"/>
                </label>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Knm-yq-p47">
                    <rect key="frame" x="553" y="389.5" width="62" height="27"/>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <state key="normal" title="《隐私协议》">
                        <color key="titleColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    </state>
                    <connections>
                        <action selector="privacyAction:" destination="-1" eventType="touchUpInside" id="HTq-JH-Off"/>
                    </connections>
                </button>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="G1I-su-UhY">
                    <rect key="frame" x="625" y="389.5" width="62" height="27"/>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <state key="normal" title="《用户协议》">
                        <color key="titleColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    </state>
                    <connections>
                        <action selector="privacyUserAction:" destination="-1" eventType="touchUpInside" id="MzL-Ou-GkL"/>
                    </connections>
                </button>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="X9q-qw-Sc1">
                    <rect key="frame" x="432" y="510.5" width="316" height="47"/>
                    <color key="backgroundColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="47" id="Fae-u5-7uD"/>
                    </constraints>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <state key="normal" title="登录"/>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="8"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                    <connections>
                        <action selector="loginAction:" destination="-1" eventType="touchUpInside" id="4i4-ux-hC4"/>
                    </connections>
                </button>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="rqd-Xo-f9G" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="0XQ-el-QmK"/>
                <constraint firstItem="2PL-Tz-O9m" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="1j1-ur-o1S"/>
                <constraint firstItem="rqd-Xo-f9G" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="42" id="2IP-HE-2Nd"/>
                <constraint firstItem="Npo-Be-a3K" firstAttribute="leading" secondItem="zkX-mZ-xif" secondAttribute="trailing" constant="2" id="2SD-Cj-4aC"/>
                <constraint firstItem="X9q-qw-Sc1" firstAttribute="trailing" secondItem="2PL-Tz-O9m" secondAttribute="trailing" id="FeZ-fg-b7e"/>
                <constraint firstItem="X9q-qw-Sc1" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="Jiw-eq-Tov"/>
                <constraint firstItem="zkX-mZ-xif" firstAttribute="leading" secondItem="2PL-Tz-O9m" secondAttribute="leading" id="LFh-Er-UzQ"/>
                <constraint firstItem="zkX-mZ-xif" firstAttribute="top" secondItem="5aU-uW-fH7" secondAttribute="bottom" constant="17" id="Oa1-Da-W5X"/>
                <constraint firstItem="5aU-uW-fH7" firstAttribute="top" secondItem="2PL-Tz-O9m" secondAttribute="bottom" constant="19" id="W1L-8z-2UP"/>
                <constraint firstItem="2PL-Tz-O9m" firstAttribute="top" secondItem="rqd-Xo-f9G" secondAttribute="bottom" constant="64" id="XTa-78-dDJ"/>
                <constraint firstItem="Npo-Be-a3K" firstAttribute="centerY" secondItem="zkX-mZ-xif" secondAttribute="centerY" id="duz-aL-bOk"/>
                <constraint firstItem="X9q-qw-Sc1" firstAttribute="leading" secondItem="2PL-Tz-O9m" secondAttribute="leading" id="eEa-iQ-ozX"/>
                <constraint firstItem="Knm-yq-p47" firstAttribute="leading" secondItem="Npo-Be-a3K" secondAttribute="trailing" constant="5" id="eS2-b7-UQk"/>
                <constraint firstItem="G1I-su-UhY" firstAttribute="leading" secondItem="Knm-yq-p47" secondAttribute="trailing" constant="10" id="gn2-Be-fVb"/>
                <constraint firstItem="Knm-yq-p47" firstAttribute="centerY" secondItem="zkX-mZ-xif" secondAttribute="centerY" id="iba-cz-icy"/>
                <constraint firstItem="X9q-qw-Sc1" firstAttribute="top" secondItem="Knm-yq-p47" secondAttribute="bottom" constant="94" id="kEm-5T-0op"/>
                <constraint firstItem="5aU-uW-fH7" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="mMU-RV-beK"/>
                <constraint firstItem="G1I-su-UhY" firstAttribute="centerY" secondItem="zkX-mZ-xif" secondAttribute="centerY" id="r29-ab-IDV"/>
            </constraints>
            <point key="canvasLocation" x="140" y="20"/>
        </view>
    </objects>
    <resources>
        <image name="bg_login" width="296" height="129"/>
        <image name="btn_choose_u" width="28" height="28"/>
        <image name="icon_input_code" width="15" height="18"/>
        <image name="icon_input_phone" width="16" height="18"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
DolphinEnglishLearnStudent/Moudle/Home/CCell/AwardListCCell.swift
New file
@@ -0,0 +1,25 @@
//
//  AwardListCCell.swift
//  DolphinEnglishLearnStudent
//
//  Created by 无故事王国 on 2024/5/23.
//
import UIKit
import JQTools
class AwardListCCell: UICollectionViewCell {
                @IBOutlet weak var image_awar: UIImageView!
                override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }
                override func layoutSubviews() {
                                super.layoutSubviews()
                                image_awar.jq_addShadows(shadowColor: UIColor(hexStr: "#B9B9B9").withAlphaComponent(0.5), corner: 8, radius: 4, offset: CGSize(width: 0, height: 2), opacity: 1)
                }
}
DolphinEnglishLearnStudent/Moudle/Home/CCell/AwardListCCell.xib
New file
@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="ipad10_9rounded" orientation="portrait" layout="fullscreen" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
        <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"/>
        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="_AwardListCCell" id="gTV-IL-0wX" customClass="AwardListCCell" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="276" height="526"/>
            <autoresizingMask key="autoresizingMask"/>
            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
                <rect key="frame" x="0.0" y="0.0" width="276" height="526"/>
                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                <subviews>
                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="YbH-L3-L1g">
                        <rect key="frame" x="0.0" y="0.0" width="276" height="359"/>
                        <color key="backgroundColor" red="0.61960784310000006" green="0.54117647059999996" blue="0.85882352939999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstAttribute="width" secondItem="YbH-L3-L1g" secondAttribute="height" multiplier="1:1.3" id="K9A-Ng-kLe"/>
                        </constraints>
                    </imageView>
                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wPP-pc-amm">
                        <rect key="frame" x="0.0" y="368" width="276" height="19.5"/>
                        <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                        <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                        <nil key="highlightedColor"/>
                    </label>
                </subviews>
            </view>
            <constraints>
                <constraint firstItem="YbH-L3-L1g" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="C0W-AG-Aw4"/>
                <constraint firstItem="wPP-pc-amm" firstAttribute="top" secondItem="YbH-L3-L1g" secondAttribute="bottom" constant="9" id="GC1-zu-CB5"/>
                <constraint firstItem="wPP-pc-amm" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="PdU-qW-J7e"/>
                <constraint firstAttribute="trailing" secondItem="YbH-L3-L1g" secondAttribute="trailing" id="SOa-S8-Xhi"/>
                <constraint firstAttribute="trailing" secondItem="wPP-pc-amm" secondAttribute="trailing" id="UHp-wV-FRO"/>
                <constraint firstItem="YbH-L3-L1g" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="WD8-o4-ZS3"/>
            </constraints>
            <size key="customSize" width="276" height="526"/>
            <connections>
                <outlet property="image_awar" destination="YbH-L3-L1g" id="kuW-TO-4BH"/>
            </connections>
            <point key="canvasLocation" x="130.2439024390244" y="140.84745762711864"/>
        </collectionViewCell>
    </objects>
</document>
DolphinEnglishLearnStudent/Moudle/Home/HomeVC.swift
New file
@@ -0,0 +1,27 @@
//
//  HomeVC.swift
//  DolphinEnglishLearnStudent
//
//  Created by 无故事王国 on 2024/5/22.
//
import UIKit
class HomeVC: BaseVC {
    override func viewDidLoad() {
        super.viewDidLoad()
                                AwardListView.show {
                                }
    }
                @IBAction func listenAction(_ sender: UIButton) {
                                let listenMenuVC = HomeListenMenuVC()
                                listenMenuVC.title = "第一年学习周目选择"
                                push(vc: listenMenuVC)
                }
}
DolphinEnglishLearnStudent/Moudle/Home/HomeVC.xib
New file
@@ -0,0 +1,226 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="ipad10_9rounded" orientation="landscape" layout="fullscreen" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <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="HomeVC" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
            <connections>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="1180" height="820"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="u25-QY-P0i">
                    <rect key="frame" x="0.0" y="0.0" width="299.5" height="820"/>
                    <subviews>
                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="logo" translatesAutoresizingMaskIntoConstraints="NO" id="3du-Pw-IgI">
                            <rect key="frame" x="77.5" y="40" width="144" height="136"/>
                        </imageView>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="欢迎使用海豚英语!" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nUx-UB-L4X">
                            <rect key="frame" x="18" y="193" width="263.5" height="33.5"/>
                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="28"/>
                            <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="海豚英语学习体系" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oad-Jg-rwh">
                            <rect key="frame" x="18" y="238.5" width="171" height="29"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="29" id="cDC-9c-PN8"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" pointSize="21"/>
                            <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                            <nil key="highlightedColor"/>
                        </label>
                    </subviews>
                    <color key="backgroundColor" red="0.25490196078431371" green="0.63529411764705879" blue="0.92156862745098034" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    <constraints>
                        <constraint firstAttribute="width" secondItem="u25-QY-P0i" secondAttribute="height" multiplier="0.365:1" id="1p9-mr-7Cm"/>
                        <constraint firstItem="oad-Jg-rwh" firstAttribute="top" secondItem="nUx-UB-L4X" secondAttribute="bottom" constant="12" id="4gV-bW-UaL"/>
                        <constraint firstItem="3du-Pw-IgI" firstAttribute="top" secondItem="u25-QY-P0i" secondAttribute="topMargin" constant="8" id="bed-Zd-FF0"/>
                        <constraint firstItem="nUx-UB-L4X" firstAttribute="top" secondItem="3du-Pw-IgI" secondAttribute="bottom" constant="17" id="fRe-0s-Fyh"/>
                        <constraint firstItem="3du-Pw-IgI" firstAttribute="centerX" secondItem="u25-QY-P0i" secondAttribute="centerX" id="jBE-CO-PUA"/>
                        <constraint firstItem="oad-Jg-rwh" firstAttribute="leading" secondItem="u25-QY-P0i" secondAttribute="leading" constant="18" id="tWV-v1-fVv"/>
                        <constraint firstAttribute="trailing" secondItem="nUx-UB-L4X" secondAttribute="trailing" constant="18" id="uua-ac-KNt"/>
                        <constraint firstItem="nUx-UB-L4X" firstAttribute="leading" secondItem="u25-QY-P0i" secondAttribute="leading" constant="18" id="vAG-59-elc"/>
                    </constraints>
                </view>
                <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="8a7-s7-2fd">
                    <rect key="frame" x="332.5" y="675" width="380" height="88"/>
                    <subviews>
                        <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="A0m-iE-WEq">
                            <rect key="frame" x="0.0" y="0.0" width="380" height="59"/>
                            <subviews>
                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_arrow_up" translatesAutoresizingMaskIntoConstraints="NO" id="uJm-Us-sBO">
                                    <rect key="frame" x="33" y="11" width="20" height="37"/>
                                </imageView>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstItem="uJm-Us-sBO" firstAttribute="leading" secondItem="A0m-iE-WEq" secondAttribute="leading" constant="33" id="0xE-kt-Yeh"/>
                                <constraint firstAttribute="height" constant="59" id="JuD-so-WAc"/>
                                <constraint firstItem="uJm-Us-sBO" firstAttribute="centerY" secondItem="A0m-iE-WEq" secondAttribute="centerY" id="MoR-NR-35e"/>
                            </constraints>
                        </view>
                        <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vB7-Gs-18h">
                            <rect key="frame" x="0.0" y="0.0" width="380" height="88"/>
                            <subviews>
                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="EhG-4I-wv7">
                                    <rect key="frame" x="0.0" y="0.0" width="99" height="88"/>
                                    <subviews>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="第二年" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9yR-aO-6u5">
                                            <rect key="frame" x="0.0" y="52" width="99" height="22"/>
                                            <constraints>
                                                <constraint firstAttribute="height" constant="22" id="pNn-aw-KDe"/>
                                            </constraints>
                                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/>
                                            <nil key="textColor"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_read" translatesAutoresizingMaskIntoConstraints="NO" id="vJh-51-3CD">
                                            <rect key="frame" x="31" y="13" width="37" height="37"/>
                                        </imageView>
                                    </subviews>
                                    <color key="backgroundColor" red="0.61960784313725492" green="0.54117647058823526" blue="0.85882352941176465" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <constraints>
                                        <constraint firstAttribute="trailing" secondItem="9yR-aO-6u5" secondAttribute="trailing" id="BPZ-TF-juS"/>
                                        <constraint firstAttribute="height" constant="88" id="EBl-vD-Rry"/>
                                        <constraint firstAttribute="width" constant="99" id="FPs-bT-2XV"/>
                                        <constraint firstItem="9yR-aO-6u5" firstAttribute="leading" secondItem="EhG-4I-wv7" secondAttribute="leading" id="MrA-Ic-bYP"/>
                                        <constraint firstItem="vJh-51-3CD" firstAttribute="top" secondItem="EhG-4I-wv7" secondAttribute="top" constant="13" id="OWt-Bu-tCJ"/>
                                        <constraint firstItem="vJh-51-3CD" firstAttribute="centerX" secondItem="9yR-aO-6u5" secondAttribute="centerX" id="USs-dV-4Ye"/>
                                        <constraint firstAttribute="bottom" secondItem="9yR-aO-6u5" secondAttribute="bottom" constant="14" id="mSq-jc-zkL"/>
                                    </constraints>
                                </view>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="认读" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NOj-Vj-QlF">
                                    <rect key="frame" x="99" y="0.0" width="281" height="88"/>
                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                    <nil key="textColor"/>
                                    <nil key="highlightedColor"/>
                                </label>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstAttribute="trailing" secondItem="NOj-Vj-QlF" secondAttribute="trailing" id="7wF-XH-l6X"/>
                                <constraint firstItem="EhG-4I-wv7" firstAttribute="leading" secondItem="vB7-Gs-18h" secondAttribute="leading" id="Ena-XQ-Eb9"/>
                                <constraint firstAttribute="width" constant="380" id="Spe-Jo-zr8"/>
                                <constraint firstItem="NOj-Vj-QlF" firstAttribute="top" secondItem="vB7-Gs-18h" secondAttribute="top" id="Ta7-te-qDu"/>
                                <constraint firstItem="EhG-4I-wv7" firstAttribute="top" secondItem="vB7-Gs-18h" secondAttribute="top" id="U5D-Qx-VKe"/>
                                <constraint firstAttribute="bottom" secondItem="NOj-Vj-QlF" secondAttribute="bottom" id="bbH-QH-G5Q"/>
                                <constraint firstItem="NOj-Vj-QlF" firstAttribute="leading" secondItem="EhG-4I-wv7" secondAttribute="trailing" id="h6u-ko-LpA"/>
                                <constraint firstAttribute="bottom" secondItem="EhG-4I-wv7" secondAttribute="bottom" id="wIZ-VU-t3V"/>
                                <constraint firstAttribute="height" constant="88" id="wtU-jm-ALX"/>
                            </constraints>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                    <real key="value" value="14"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                        </view>
                        <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Dtu-QM-cC6">
                            <rect key="frame" x="0.0" y="0.0" width="380" height="59"/>
                            <subviews>
                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_arrow_up" translatesAutoresizingMaskIntoConstraints="NO" id="8gt-hY-WEX">
                                    <rect key="frame" x="33" y="11" width="20" height="37"/>
                                </imageView>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstItem="8gt-hY-WEX" firstAttribute="centerY" secondItem="Dtu-QM-cC6" secondAttribute="centerY" id="Mqh-tf-Wo1"/>
                                <constraint firstItem="8gt-hY-WEX" firstAttribute="leading" secondItem="Dtu-QM-cC6" secondAttribute="leading" constant="33" id="bkS-IH-Ia7"/>
                                <constraint firstAttribute="height" constant="59" id="gkV-nf-bnN"/>
                            </constraints>
                        </view>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vDp-Gp-qMt" customClass="TapBtn" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
                            <rect key="frame" x="0.0" y="0.0" width="380" height="88"/>
                            <subviews>
                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="638-4h-RmO">
                                    <rect key="frame" x="0.0" y="0.0" width="99" height="88"/>
                                    <subviews>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="第一年" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mzm-m2-TUM">
                                            <rect key="frame" x="0.0" y="50" width="99" height="22"/>
                                            <constraints>
                                                <constraint firstAttribute="height" constant="22" id="0E8-lU-VAm"/>
                                            </constraints>
                                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/>
                                            <nil key="textColor"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_listen" translatesAutoresizingMaskIntoConstraints="NO" id="G0e-mp-Ewt">
                                            <rect key="frame" x="28.5" y="16" width="42" height="28"/>
                                        </imageView>
                                    </subviews>
                                    <color key="backgroundColor" red="0.42745098039215684" green="0.81960784313725488" blue="0.72941176470588232" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <constraints>
                                        <constraint firstAttribute="bottom" secondItem="mzm-m2-TUM" secondAttribute="bottom" constant="16" id="1DJ-Ab-UMy"/>
                                        <constraint firstAttribute="trailing" secondItem="mzm-m2-TUM" secondAttribute="trailing" id="4EB-JA-dgg"/>
                                        <constraint firstAttribute="height" constant="88" id="Ez7-4n-UUU"/>
                                        <constraint firstItem="G0e-mp-Ewt" firstAttribute="centerX" secondItem="mzm-m2-TUM" secondAttribute="centerX" id="Fep-Ru-CO8"/>
                                        <constraint firstAttribute="width" constant="99" id="a46-Aj-ZVI"/>
                                        <constraint firstItem="G0e-mp-Ewt" firstAttribute="top" secondItem="638-4h-RmO" secondAttribute="top" constant="16" id="lcU-Ve-EuA"/>
                                        <constraint firstItem="mzm-m2-TUM" firstAttribute="leading" secondItem="638-4h-RmO" secondAttribute="leading" id="ysB-ce-xHs"/>
                                    </constraints>
                                </view>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="听" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rYc-7O-AJr">
                                    <rect key="frame" x="99" y="0.0" width="281" height="88"/>
                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                    <nil key="textColor"/>
                                    <nil key="highlightedColor"/>
                                </label>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstAttribute="bottom" secondItem="rYc-7O-AJr" secondAttribute="bottom" id="1Cy-Uo-TQl"/>
                                <constraint firstItem="638-4h-RmO" firstAttribute="leading" secondItem="vDp-Gp-qMt" secondAttribute="leading" id="906-Em-QM1"/>
                                <constraint firstAttribute="width" constant="380" id="Fci-Un-Bb0"/>
                                <constraint firstItem="rYc-7O-AJr" firstAttribute="top" secondItem="vDp-Gp-qMt" secondAttribute="top" id="IuS-gO-xrq"/>
                                <constraint firstAttribute="trailing" secondItem="rYc-7O-AJr" secondAttribute="trailing" id="KQJ-pj-kUy"/>
                                <constraint firstAttribute="height" constant="88" id="XI2-on-coS"/>
                                <constraint firstItem="638-4h-RmO" firstAttribute="top" secondItem="vDp-Gp-qMt" secondAttribute="top" id="ZWW-ad-FCa"/>
                                <constraint firstAttribute="bottom" secondItem="638-4h-RmO" secondAttribute="bottom" id="pMS-Rh-ZiE"/>
                                <constraint firstItem="rYc-7O-AJr" firstAttribute="leading" secondItem="638-4h-RmO" secondAttribute="trailing" id="zhf-yy-Qje"/>
                            </constraints>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                    <real key="value" value="14"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                            <connections>
                                <action selector="listenAction:" destination="-1" eventType="touchUpInside" id="MbU-jm-Qjr"/>
                            </connections>
                        </view>
                    </subviews>
                </stackView>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstAttribute="bottom" secondItem="u25-QY-P0i" secondAttribute="bottom" id="CfI-2x-pVb"/>
                <constraint firstItem="u25-QY-P0i" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="QEu-6j-zme"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="8a7-s7-2fd" secondAttribute="bottom" constant="37" id="esM-dS-4XS"/>
                <constraint firstItem="8a7-s7-2fd" firstAttribute="leading" secondItem="u25-QY-P0i" secondAttribute="trailing" constant="33" id="lge-cR-TPq"/>
                <constraint firstItem="u25-QY-P0i" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="snI-gI-0vp"/>
            </constraints>
            <point key="canvasLocation" x="44.745762711864408" y="19.756097560975608"/>
        </view>
    </objects>
    <resources>
        <image name="home_arrow_up" width="20" height="37"/>
        <image name="home_listen" width="42" height="28"/>
        <image name="home_read" width="37" height="37"/>
        <image name="logo" width="144" height="136"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
DolphinEnglishLearnStudent/Moudle/Home/Listen/HomeListenMenuVC.swift
New file
@@ -0,0 +1,186 @@
//
//  HomeListenMenuVC.swift
//  DolphinEnglishLearnStudent
//
//  Created by 无故事王国 on 2024/5/23.
//
import UIKit
class HomeListenMenuVC: BaseVC {
                @IBOutlet weak var tableView: UITableView!
                @IBOutlet weak var collectionView: UICollectionView!
                private var titleItems = ["第一季","第二季","第三季","第四季"]
                private var selectIndexPath:IndexPath = IndexPath(row: 0, section: 0)
                override func viewDidLoad() {
        super.viewDidLoad()
    }
                override func setUI() {
                                super.setUI()
                                tableView.delegate = self
                                tableView.dataSource = self
                                tableView.separatorStyle = .none
                                tableView.showsVerticalScrollIndicator = false
                                tableView.register(HomeListenMenuTCell.self, forCellReuseIdentifier: "_HomeListenMenuTCell")
                                tableView.reloadData()
                                collectionView.delegate = self
                                collectionView.dataSource = self
                                collectionView.showsVerticalScrollIndicator = false
                                collectionView.contentInset = .init(top: 20, left: 20, bottom: 20, right: 20)
                                collectionView.register(HomeListenMenuCCell.self, forCellWithReuseIdentifier: "_HomeListenMenuCCell")
                }
}
extension HomeListenMenuVC:UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout{
                func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
                                let vc = HomeListenVC()
                                push(vc: vc)
                }
                func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
                                let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_HomeListenMenuCCell", for: indexPath) as! HomeListenMenuCCell
                                cell.setTitle(week: "第一周", title: "提示基础认知能力", coin: 2000)
                                cell.contentView.backgroundColor = UIColor.qmui_random()
                                return cell
                }
                func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
                                return 20
                }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
                                let w = (collectionView.jq_width - 80) / 3
                                return CGSize(width: w, height:  w * 0.64)
                }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
                                return 23
                }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
                                return 19
                }
}
extension HomeListenMenuVC:UITableViewDataSource,UITableViewDelegate{
                func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
                                selectIndexPath = indexPath
                                tableView.reloadData()
                }
                func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
                                return 56
                }
                func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                                let cell = tableView.dequeueReusableCell(withIdentifier: "_HomeListenMenuTCell") as! HomeListenMenuTCell
                                cell.titleL.text = titleItems[indexPath.row]
                                if indexPath == selectIndexPath{
                                                cell.titleL.font = UIFont.systemFont(ofSize: 18, weight: .medium)
                                                cell.titleL.textColor = UIColor(hexStr: "#41A2EB")
                                }else{
                                                cell.titleL.font = UIFont.systemFont(ofSize: 18)
                                                cell.titleL.textColor = .black.withAlphaComponent(0.4)
                                }
                                cell.lineView.isHidden = indexPath.row == titleItems.count - 1
                                return cell
                }
                func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
                                return titleItems.count
                }
}
class HomeListenMenuTCell:UITableViewCell{
                private(set) var titleL:UILabel!
                let lineView = UIView()
                override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
                                super.init(style: style, reuseIdentifier: reuseIdentifier)
                                titleL = UILabel()
                                titleL.textAlignment = .center
                                contentView.addSubview(titleL)
                                titleL.snp.makeConstraints { make in
                                                make.edges.equalToSuperview()
                                }
                                lineView.backgroundColor = UIColor(hexStr: "#979797").withAlphaComponent(0.28)
                                contentView.addSubview(lineView)
                                lineView.snp.makeConstraints { make in
                                                make.left.bottom.right.equalToSuperview()
                                                make.height.equalTo(1)
                                }
                }
                required init?(coder: NSCoder) {
                                fatalError("init(coder:) has not been implemented")
                }
}
class HomeListenMenuCCell:UICollectionViewCell{
                private var label_week = UILabel()
                private var label_title = UILabel()
                private var label_completeCoin = UILabel()
                override init(frame: CGRect) {
                                super.init(frame: frame)
                                contentView.jq_cornerRadius = 4
                                label_title.textAlignment = .center
                                label_title.textColor = .white
                                label_title.font = .systemFont(ofSize: 16, weight: .semibold)
                                contentView.addSubview(label_title)
                                label_title.snp.makeConstraints { make in
                                                make.left.right.equalToSuperview()
                                                make.centerY.equalToSuperview()
                                                make.height.equalTo(22)
                                }
                                label_week.textAlignment = .center
                                label_week.textColor = .white
                                label_week.font = .systemFont(ofSize: 14, weight: .medium)
                                contentView.addSubview(label_week)
                                label_week.snp.makeConstraints { make in
                                                make.bottom.equalTo(label_title.snp.top).offset(-10)
                                                make.left.right.equalToSuperview()
                                                make.height.equalTo(20)
                                }
                                label_completeCoin.textAlignment = .center
                                label_completeCoin.textColor = .white
                                label_completeCoin.font = .systemFont(ofSize: 11, weight: .medium)
                                contentView.addSubview(label_completeCoin)
                                label_completeCoin.snp.makeConstraints { make in
                                                make.top.equalTo(label_title.snp.bottom).offset(9)
                                                make.left.right.equalToSuperview()
                                                make.height.equalTo(16)
                                }
                }
                func setTitle(week:String,title:String,coin:Int){
                                label_week.text = week
                                label_title.text = title
                                label_completeCoin.text = "完成后可获积分数:\(coin)"
                }
                required init?(coder: NSCoder) {
                                fatalError("init(coder:) has not been implemented")
                }
}
DolphinEnglishLearnStudent/Moudle/Home/Listen/HomeListenMenuVC.xib
New file
@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="ipad10_9rounded" orientation="landscape" layout="fullscreen" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <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="HomeListenMenuVC" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
            <connections>
                <outlet property="collectionView" destination="mmc-nd-yVU" id="zw8-K8-PzH"/>
                <outlet property="tableView" destination="xi2-nl-i7f" id="7fq-SJ-9Fb"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="1180" height="820"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="xi2-nl-i7f">
                    <rect key="frame" x="40" y="51" width="166.5" height="684"/>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstAttribute="width" secondItem="xi2-nl-i7f" secondAttribute="height" multiplier="1:4.111" id="5Mg-Sf-wdh"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="8"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </tableView>
                <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="mmc-nd-yVU">
                    <rect key="frame" x="247.5" y="51" width="670.5" height="684"/>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstAttribute="width" secondItem="mmc-nd-yVU" secondAttribute="height" multiplier="1:1.02" id="3UF-AD-QMr"/>
                    </constraints>
                    <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="w0j-4F-a20">
                        <size key="itemSize" width="128" height="128"/>
                        <size key="headerReferenceSize" width="0.0" height="0.0"/>
                        <size key="footerReferenceSize" width="0.0" height="0.0"/>
                        <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
                    </collectionViewFlowLayout>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="8"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </collectionView>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" red="0.76470588235294112" green="0.74901960784313726" blue="0.70196078431372544" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
            <constraints>
                <constraint firstItem="xi2-nl-i7f" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="40" id="M3E-6g-qAA"/>
                <constraint firstItem="mmc-nd-yVU" firstAttribute="bottom" secondItem="xi2-nl-i7f" secondAttribute="bottom" id="O2b-Tx-tt6"/>
                <constraint firstItem="mmc-nd-yVU" firstAttribute="top" secondItem="xi2-nl-i7f" secondAttribute="top" id="fNh-mY-cOr"/>
                <constraint firstItem="mmc-nd-yVU" firstAttribute="leading" secondItem="xi2-nl-i7f" secondAttribute="trailing" constant="41" id="jkY-X9-tWg"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="xi2-nl-i7f" secondAttribute="bottom" constant="65" id="pyR-TT-B1H"/>
                <constraint firstItem="xi2-nl-i7f" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="27" id="zsE-hp-93C"/>
            </constraints>
            <point key="canvasLocation" x="88" y="20"/>
        </view>
    </objects>
    <resources>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
DolphinEnglishLearnStudent/Moudle/Home/Listen/HomeListenSubVC.swift
New file
@@ -0,0 +1,81 @@
//
//  HomeListenSubVC.swift
//  DolphinEnglishLearnStudent
//
//  Created by 无故事王国 on 2024/5/23.
//
import UIKit
class HomeListenSubVC: BaseVC {
                private var page:Int!
                private var tableView:UITableView!
                required init(page:Int) {
                                self.page = page
                                super.init(nibName: nil, bundle: nil)
                }
                required init?(coder: NSCoder) {
                                fatalError("init(coder:) has not been implemented")
                }
    override func viewDidLoad() {
        super.viewDidLoad()
                                navigationItem.titleView = UIView()
    }
                override func setUI() {
                                super.setUI()
                                tableView = UITableView(frame: .zero, style: .plain)
                                tableView.delegate = self
                                tableView.dataSource = self
                                tableView.separatorStyle = .none
                                tableView.backgroundColor = Config.ThemeBGColor
                                tableView.register(UINib(nibName: "HomeListen_process_TCell", bundle: nil), forCellReuseIdentifier: "_HomeListen_process_TCell")
                                tableView.register(UINib(nibName: "HomeListen_item_TCell", bundle: nil), forCellReuseIdentifier: "_HomeListen_item_TCell")
                                view.addSubview(tableView)
                                tableView.snp.makeConstraints { make in
                                                make.edges.equalToSuperview()
                                }
                }
}
extension HomeListenSubVC:UITableViewDelegate{
}
extension HomeListenSubVC:UITableViewDataSource{
                func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
                                if section == 0{
                                                return 1
                                }
                                return 5
                }
                func numberOfSections(in tableView: UITableView) -> Int {
                                if page <= 5{
                                                return 2
                                }
                                return 1
                }
                func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                                if indexPath.section == 0{
                                                let cell = tableView.dequeueReusableCell(withIdentifier: "_HomeListen_process_TCell", for: indexPath) as! HomeListen_process_TCell
                                                return cell
                                }else{
                                                let cell = tableView.dequeueReusableCell(withIdentifier: "_HomeListen_item_TCell", for: indexPath) as! HomeListen_item_TCell
                                                return cell
                                }
                }
                func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
                                if indexPath.section == 0{
                                                return 145.5
                                }else{
                                                return 127.5
                                }
                }
}
DolphinEnglishLearnStudent/Moudle/Home/Listen/HomeListenVC.swift
New file
@@ -0,0 +1,110 @@
//
//  HomeListenVC.swift
//  DolphinEnglishLearnStudent
//
//  Created by 无故事王国 on 2024/5/23.
//
import UIKit
import SPPageMenu
import FFPage
class HomeListenVC: BaseVC {
                //限制后面的点击:天数(1开始)
                private var limitDay = 5
                private lazy var menu:SPPageMenu = {
                                let menu = SPPageMenu(frame: .zero, trackerStyle: .line)
                                menu.itemTitleFont = UIFont(name: "Impact", size: 18) ?? .systemFont(ofSize: 18, weight: .medium)
                                menu.setItems(["Day1","Day2","Day3","Day4","Day5","自主游戏","听故事"], selectedItemIndex: 0)
                                menu.selectedItemTitleColor = UIColor(hexStr: "#41A2EB")
                                menu.unSelectedItemTitleColor = UIColor.black.withAlphaComponent(0.71)
                                menu.trackerWidth = 22
                                menu.setTrackerHeight(6, cornerRadius: 3)
                                menu.trackerFollowingMode = .half
                                menu.tracker.image = UIImage.jq_image(with: UIColor(hexStr: "#41A2EB"), size: CGSize(width: 1, height: 1), alpha: 1)
                                menu.permutationWay = .notScrollAdaptContent
                                menu.dividingLineHeight = 0.001
                                return menu
                }()
                private lazy var pageVC:FFPageViewController = {
                                let vc = FFPageViewController()
                                vc.scrollview.isScrollEnabled = false
                                return vc
                }()
//                private lazy var tableView:UITableView = {
//                                 let table = UITableView(frame: .zero, style: .plain)
//                                table.register(UINib(nibName: "HomeListen_item_TCell", bundle: nil), forCellReuseIdentifier: "_HomeListen_item_TCell")
//                                table.register(UINib(nibName: "HomeListen_process_TCell", bundle: nil), forCellReuseIdentifier: "_HomeListen_process_TCell")
//                                return table
//                }()
    override func viewDidLoad() {
        super.viewDidLoad()
    }
                override func setUI() {
                                super.setUI()
                                let topMenuView = UIView()
                                topMenuView.backgroundColor = .white
                                topMenuView.jq_cornerRadius = 8
                                view.addSubview(topMenuView)
                                topMenuView.snp.makeConstraints { make in
                                                make.top.equalTo(self.view.safeAreaLayoutGuide).offset(9)
                                                make.left.equalTo(234)
                                                make.right.equalTo(-234)
                                                make.height.equalTo(59)
                                }
                                menu.delegate = self
                                topMenuView.addSubview(menu)
                                menu.snp.makeConstraints { make in
                                                make.left.right.equalToSuperview()
                                                make.centerY.equalToSuperview()
                                                make.height.equalTo(32)
                                }
                                pageVC.delegate = self
                                view.addSubview(pageVC.view)
                                pageVC.view.snp.makeConstraints { make in
                                                make.top.equalTo(menu.snp.bottom).offset(19)
                                                make.left.equalTo(topMenuView.snp.left)
                                                make.right.equalTo(topMenuView.snp.right)
                                                make.bottom.equalTo(self.view.safeAreaLayoutGuide.snp.bottom)
                                }
                                for (index,titleL) in (menu.subviews.last?.subviews[1].subviews ?? []).filter({$0 is UIButton}).enumerated(){
                                                if index >= limitDay{
                                                                if let btn = titleL as?  UIButton{
                                                                                btn.setTitleColor(.black.withAlphaComponent(0.33), for: .normal)
                                                                                menu.setEnabled(false, forItemAt: UInt(index))
                                                                }
                                                }
                                }
                }
}
extension HomeListenVC:SPPageMenuDelegate{
                func pageMenu(_ pageMenu: SPPageMenu, itemSelectedAt index: Int) {
                                pageVC.scroll(toPage: index, animation: true)
                }
}
extension HomeListenVC:FFPageViewControllerDelegate{
                func totalPagesOfpageViewController(_ pageViewConteoller: FFPageViewController) -> UInt {
                                return menu.numberOfItems
                }
                func pageViewController(_ pageViewController: FFPageViewController, currentPageChanged currentPage: Int) {
                                menu.selectedItemIndex = currentPage
                }
                func pageViewController(_ pageViewConteoller: FFPageViewController, controllerForPage page: Int) -> UIViewController {
                                return HomeListenSubVC(page: page)
                }
}
DolphinEnglishLearnStudent/Moudle/Home/Listen/TCell/HomeListen_item_TCell.swift
New file
@@ -0,0 +1,17 @@
//
//  HomeListen_item_TCell.swift
//  DolphinEnglishLearnStudent
//
//  Created by 无故事王国 on 2024/5/23.
//
import UIKit
class HomeListen_item_TCell: UITableViewCell {
    override func awakeFromNib() {
        super.awakeFromNib()
                                backgroundColor = .clear
                                selectionStyle = .none
    }
}
DolphinEnglishLearnStudent/Moudle/Home/Listen/TCell/HomeListen_item_TCell.xib
New file
@@ -0,0 +1,151 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="ipad10_9rounded" orientation="portrait" layout="fullscreen" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
        <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="default" indentationWidth="10" reuseIdentifier="_HomeListen_item_TCell" rowHeight="197" id="KGk-i7-Jjw" customClass="HomeListen_item_TCell" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="717" height="197"/>
            <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="717" height="197"/>
                <autoresizingMask key="autoresizingMask"/>
                <subviews>
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Guy-ui-ByM">
                        <rect key="frame" x="0.0" y="9.5" width="717" height="178"/>
                        <subviews>
                            <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="cKb-Od-cB2">
                                <rect key="frame" x="16" y="9" width="259.5" height="160"/>
                                <subviews>
                                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9XB-yf-tzC">
                                        <rect key="frame" x="0.0" y="0.0" width="129.5" height="160"/>
                                        <subviews>
                                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_poker" translatesAutoresizingMaskIntoConstraints="NO" id="Pyr-Ec-RCQ">
                                                <rect key="frame" x="28" y="50" width="74" height="60"/>
                                            </imageView>
                                        </subviews>
                                        <color key="backgroundColor" red="1" green="0.60392156862745094" blue="0.52156862745098043" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                        <constraints>
                                            <constraint firstAttribute="width" secondItem="9XB-yf-tzC" secondAttribute="height" multiplier="1:1.234" id="9KC-H4-J1y"/>
                                            <constraint firstItem="Pyr-Ec-RCQ" firstAttribute="centerY" secondItem="9XB-yf-tzC" secondAttribute="centerY" id="HNc-cw-kQ0"/>
                                            <constraint firstItem="Pyr-Ec-RCQ" firstAttribute="centerX" secondItem="9XB-yf-tzC" secondAttribute="centerX" id="aC6-ti-BE3"/>
                                        </constraints>
                                        <userDefinedRuntimeAttributes>
                                            <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                            <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                                <real key="value" value="12"/>
                                            </userDefinedRuntimeAttribute>
                                        </userDefinedRuntimeAttributes>
                                    </view>
                                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="pk7-Y8-Mtb">
                                        <rect key="frame" x="129.5" y="0.0" width="130" height="160"/>
                                        <subviews>
                                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_listen" translatesAutoresizingMaskIntoConstraints="NO" id="bVi-Cw-eCh">
                                                <rect key="frame" x="0.0" y="0.0" width="130" height="45"/>
                                                <constraints>
                                                    <constraint firstAttribute="height" constant="45" id="Yfd-aW-m4r"/>
                                                </constraints>
                                            </imageView>
                                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Oso-ec-JKg">
                                                <rect key="frame" x="57.5" y="89" width="14.5" height="67"/>
                                                <string key="text">万
声</string>
                                                <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
                                                <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                <nil key="highlightedColor"/>
                                            </label>
                                        </subviews>
                                        <color key="backgroundColor" red="0.43137254901960786" green="0.76470588235294112" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                        <constraints>
                                            <constraint firstAttribute="bottom" secondItem="Oso-ec-JKg" secondAttribute="bottom" constant="4" id="3Jf-oX-Olt"/>
                                            <constraint firstItem="bVi-Cw-eCh" firstAttribute="top" secondItem="pk7-Y8-Mtb" secondAttribute="top" id="3Pe-Da-l1s"/>
                                            <constraint firstAttribute="trailing" secondItem="bVi-Cw-eCh" secondAttribute="trailing" id="HEo-5n-Awl"/>
                                            <constraint firstItem="Oso-ec-JKg" firstAttribute="centerX" secondItem="pk7-Y8-Mtb" secondAttribute="centerX" id="WhM-2o-e3W"/>
                                            <constraint firstItem="bVi-Cw-eCh" firstAttribute="leading" secondItem="pk7-Y8-Mtb" secondAttribute="leading" id="cnC-jC-pl9"/>
                                            <constraint firstAttribute="width" secondItem="pk7-Y8-Mtb" secondAttribute="height" multiplier="1:1.234" id="hyD-ob-Qo7"/>
                                        </constraints>
                                        <userDefinedRuntimeAttributes>
                                            <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                            <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                                <real key="value" value="12"/>
                                            </userDefinedRuntimeAttribute>
                                        </userDefinedRuntimeAttributes>
                                    </view>
                                </subviews>
                            </stackView>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="---" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="28J-ZC-IiE">
                                <rect key="frame" x="288.5" y="9" width="22.5" height="19.5"/>
                                <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/>
                                <nil key="textColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="KYj-jQ-pUN">
                                <rect key="frame" x="288.5" y="37.5" width="26" height="17"/>
                                <subviews>
                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VQQ-aH-jOl">
                                        <rect key="frame" x="7" y="0.0" width="12" height="17"/>
                                        <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="12"/>
                                        <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                        <nil key="highlightedColor"/>
                                    </label>
                                </subviews>
                                <color key="backgroundColor" red="0.40000000000000002" green="0.81176470588235294" blue="0.98039215686274506" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <constraints>
                                    <constraint firstItem="VQQ-aH-jOl" firstAttribute="top" secondItem="KYj-jQ-pUN" secondAttribute="top" id="0nh-wt-xuh"/>
                                    <constraint firstAttribute="height" constant="17" id="6uJ-xn-2wu"/>
                                    <constraint firstAttribute="bottom" secondItem="VQQ-aH-jOl" secondAttribute="bottom" id="EQm-V2-car"/>
                                    <constraint firstAttribute="trailing" secondItem="VQQ-aH-jOl" secondAttribute="trailing" constant="7" id="dXS-my-h4B"/>
                                    <constraint firstItem="VQQ-aH-jOl" firstAttribute="leading" secondItem="KYj-jQ-pUN" secondAttribute="leading" constant="7" id="nnj-iB-cDe"/>
                                </constraints>
                                <userDefinedRuntimeAttributes>
                                    <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                    <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                        <real key="value" value="8.5"/>
                                    </userDefinedRuntimeAttribute>
                                </userDefinedRuntimeAttributes>
                            </view>
                        </subviews>
                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                        <constraints>
                            <constraint firstItem="28J-ZC-IiE" firstAttribute="top" secondItem="cKb-Od-cB2" secondAttribute="top" id="7qV-c6-M1L"/>
                            <constraint firstItem="KYj-jQ-pUN" firstAttribute="top" secondItem="28J-ZC-IiE" secondAttribute="bottom" constant="9" id="8ef-d6-Ldd"/>
                            <constraint firstAttribute="bottom" secondItem="cKb-Od-cB2" secondAttribute="bottom" constant="9" id="MCc-Tr-PfZ"/>
                            <constraint firstItem="cKb-Od-cB2" firstAttribute="top" secondItem="Guy-ui-ByM" secondAttribute="top" constant="9" id="azZ-9G-Vx9"/>
                            <constraint firstItem="KYj-jQ-pUN" firstAttribute="leading" secondItem="28J-ZC-IiE" secondAttribute="leading" id="mEO-XJ-SfX"/>
                            <constraint firstItem="28J-ZC-IiE" firstAttribute="leading" secondItem="cKb-Od-cB2" secondAttribute="trailing" constant="13" id="onY-uc-tED"/>
                            <constraint firstItem="cKb-Od-cB2" firstAttribute="leading" secondItem="Guy-ui-ByM" secondAttribute="leading" constant="16" id="uFp-bW-414"/>
                        </constraints>
                        <userDefinedRuntimeAttributes>
                            <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                            <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                <real key="value" value="8"/>
                            </userDefinedRuntimeAttribute>
                        </userDefinedRuntimeAttributes>
                    </view>
                </subviews>
                <constraints>
                    <constraint firstItem="Guy-ui-ByM" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="9.5" id="7KM-CF-lvk"/>
                    <constraint firstItem="Guy-ui-ByM" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="Gxj-pF-662"/>
                    <constraint firstAttribute="bottom" secondItem="Guy-ui-ByM" secondAttribute="bottom" constant="9.5" id="QOJ-zv-9Zc"/>
                    <constraint firstAttribute="trailing" secondItem="Guy-ui-ByM" secondAttribute="trailing" id="Z4n-MP-9SL"/>
                </constraints>
            </tableViewCellContentView>
            <point key="canvasLocation" x="282.80487804878049" y="47.033898305084747"/>
        </tableViewCell>
    </objects>
    <resources>
        <image name="icon_listen" width="64" height="45"/>
        <image name="icon_poker" width="74" height="60"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
DolphinEnglishLearnStudent/Moudle/Home/Listen/TCell/HomeListen_process_TCell.swift
New file
@@ -0,0 +1,18 @@
//
//  HomeListen_process_TCell.swift
//  DolphinEnglishLearnStudent
//
//  Created by 无故事王国 on 2024/5/23.
//
import UIKit
class HomeListen_process_TCell: UITableViewCell {
    override func awakeFromNib() {
        super.awakeFromNib()
                                backgroundColor = .clear
                                selectionStyle = .none
    }
}
DolphinEnglishLearnStudent/Moudle/Home/Listen/TCell/HomeListen_process_TCell.xib
New file
@@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="ipad10_9rounded" orientation="portrait" layout="fullscreen" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
        <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="default" indentationWidth="10" reuseIdentifier="_HomeListen_process_TCell" rowHeight="202" id="KGk-i7-Jjw" customClass="HomeListen_process_TCell" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="541" height="202"/>
            <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="541" height="202"/>
                <autoresizingMask key="autoresizingMask"/>
                <subviews>
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="RXp-OG-LEf">
                        <rect key="frame" x="0.0" y="9.5" width="541" height="183"/>
                        <subviews>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="当前周目:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0OR-m9-gOV">
                                <rect key="frame" x="22" y="17" width="96.5" height="29"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="29" id="RHk-nY-HVy"/>
                                </constraints>
                                <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="21"/>
                                <color key="textColor" red="0.16862745098039217" green="0.21176470588235294" blue="0.28235294117647058" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="已完成:0%" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tZm-jl-aPX">
                                <rect key="frame" x="427.5" y="20.5" width="101.5" height="22"/>
                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
                                <color key="textColor" red="0.96078431372549022" green="0.47450980392156861" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4vp-cM-Wt2">
                                <rect key="frame" x="23" y="58" width="495" height="22"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="22" id="Pn7-ug-yZr"/>
                                </constraints>
                                <fontDescription key="fontDescription" type="system" pointSize="16"/>
                                <nil key="textColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5YC-oK-utb">
                                <rect key="frame" x="22" y="104" width="20" height="6"/>
                                <color key="backgroundColor" red="0.25490196078431371" green="0.63529411764705879" blue="0.92156862745098034" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="6" id="Q4v-Ro-Ym2"/>
                                    <constraint firstAttribute="width" constant="20" id="Zzl-QC-ej8"/>
                                </constraints>
                                <userDefinedRuntimeAttributes>
                                    <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                    <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                        <real key="value" value="3"/>
                                    </userDefinedRuntimeAttribute>
                                </userDefinedRuntimeAttributes>
                            </view>
                        </subviews>
                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                        <constraints>
                            <constraint firstItem="5YC-oK-utb" firstAttribute="leading" secondItem="RXp-OG-LEf" secondAttribute="leading" constant="22" id="4MR-IW-urq"/>
                            <constraint firstItem="4vp-cM-Wt2" firstAttribute="top" secondItem="0OR-m9-gOV" secondAttribute="bottom" constant="12" id="4Zn-aZ-6B5"/>
                            <constraint firstItem="tZm-jl-aPX" firstAttribute="centerY" secondItem="0OR-m9-gOV" secondAttribute="centerY" id="5Aq-B8-hHc"/>
                            <constraint firstAttribute="trailing" secondItem="tZm-jl-aPX" secondAttribute="trailing" constant="12" id="9TX-lG-lmM"/>
                            <constraint firstItem="5YC-oK-utb" firstAttribute="top" secondItem="4vp-cM-Wt2" secondAttribute="bottom" constant="24" id="CrR-Tw-f7R"/>
                            <constraint firstItem="4vp-cM-Wt2" firstAttribute="leading" secondItem="RXp-OG-LEf" secondAttribute="leading" constant="23" id="NVz-na-8L9"/>
                            <constraint firstItem="0OR-m9-gOV" firstAttribute="top" secondItem="RXp-OG-LEf" secondAttribute="top" constant="17" id="NpO-xF-QHk"/>
                            <constraint firstItem="0OR-m9-gOV" firstAttribute="leading" secondItem="RXp-OG-LEf" secondAttribute="leading" constant="22" id="ZAU-qP-L58"/>
                            <constraint firstAttribute="trailing" secondItem="4vp-cM-Wt2" secondAttribute="trailing" constant="23" id="zdS-VW-orc"/>
                        </constraints>
                        <userDefinedRuntimeAttributes>
                            <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                            <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                <real key="value" value="8"/>
                            </userDefinedRuntimeAttribute>
                        </userDefinedRuntimeAttributes>
                    </view>
                </subviews>
                <constraints>
                    <constraint firstAttribute="bottom" secondItem="RXp-OG-LEf" secondAttribute="bottom" constant="9.5" id="3HV-Qy-NWd"/>
                    <constraint firstItem="RXp-OG-LEf" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="cE9-xW-dTp"/>
                    <constraint firstAttribute="trailing" secondItem="RXp-OG-LEf" secondAttribute="trailing" id="dbu-uh-LIe"/>
                    <constraint firstItem="RXp-OG-LEf" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="9.5" id="gb6-Z8-JH9"/>
                </constraints>
            </tableViewCellContentView>
            <point key="canvasLocation" x="168.65853658536585" y="60"/>
        </tableViewCell>
    </objects>
    <resources>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
DolphinEnglishLearnStudent/Moudle/Home/View/AwardListView.swift
New file
@@ -0,0 +1,75 @@
//
//  AwardListView.swift
//  DolphinEnglishLearnStudent
//
//  Created by 无故事王国 on 2024/5/23.
//
import UIKit
class AwardListView: UIView,JQNibView{
                @IBOutlet weak var collectionView: UICollectionView!
                @IBOutlet weak var view_container: UIView!
                override func awakeFromNib() {
                                super.awakeFromNib()
                                self.alpha = 0
                                collectionView.delegate = self
                                collectionView.dataSource = self
                                collectionView.register(UINib(nibName: "AwardListCCell", bundle: nil), forCellWithReuseIdentifier: "_AwardListCCell")
                                view_container.transform = .init(scaleX: 0.1, y: 0.1)
                                collectionView.contentInset = UIEdgeInsets(top: 0, left: 37, bottom: 0, right: 37)
                                layoutIfNeeded()
                }
                static func show(clouse:@escaping ()->Void){
                                let awardListView = AwardListView.jq_loadNibView()
                                sceneDelegate?.window?.addSubview(awardListView)
                                awardListView.frame = sceneDelegate?.window?.frame ?? .zero
                                UIView.animate(withDuration: 0.4) {
                                                awardListView.alpha = 1
                                                awardListView.view_container.transform = .init(translationX: 1.0, y: 1.0)
                                                awardListView.layoutIfNeeded()
                                }
                }
                @IBAction func closeAction(_ sender: UIButton) {
                                UIView.animate(withDuration: 0.4) {
                                                self.alpha = 0
                                                self.view_container.transform = .init(scaleX: 0.1, y: 0.1)
                                } completion: { _ in
                                                self.removeFromSuperview()
                                }
                }
}
extension AwardListView:UICollectionViewDelegate{
}
extension AwardListView:UICollectionViewDataSource{
                func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
                                let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_AwardListCCell", for: indexPath) as! AwardListCCell
                                return cell
                }
                func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
                                return 6
                }
}
extension AwardListView:UICollectionViewDelegateFlowLayout{
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
                                let w = (self.jq_width - 74 - 190) / 3.0
                                return CGSize(width: w, height: w * 1.552)
                }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
                                return 44
                }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
                                return 44
                }
}
DolphinEnglishLearnStudent/Moudle/Home/View/AwardListView.xib
New file
@@ -0,0 +1,127 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="ipad10_9rounded" orientation="landscape" layout="fullscreen" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <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"/>
        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="AwardListView" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="1180" height="820"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Tck-Uv-W9Z">
                    <rect key="frame" x="144" y="100" width="892" height="624"/>
                    <subviews>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="可兑换商品" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="D5s-Ls-BXc">
                            <rect key="frame" x="405" y="25" width="82" height="18"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="18" id="Z5F-Lg-och"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/>
                            <nil key="textColor"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="当前积分可兑换商品推荐:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hKD-mg-1cZ">
                            <rect key="frame" x="37" y="61" width="188" height="19.5"/>
                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Dhw-Zu-pJB">
                            <rect key="frame" x="386.5" y="556" width="119" height="47"/>
                            <color key="backgroundColor" red="0.0" green="0.45882352939999999" blue="0.89019607840000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="47" id="3uv-Oo-dho"/>
                                <constraint firstAttribute="width" constant="119" id="rPr-Dj-p6N"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="关闭"/>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                    <real key="value" value="8"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                            <connections>
                                <action selector="closeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="aa9-P7-ZZI"/>
                            </connections>
                        </button>
                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_waring" translatesAutoresizingMaskIntoConstraints="NO" id="kkz-0v-xBJ">
                            <rect key="frame" x="39" y="517" width="21" height="21"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="21" id="XAG-a1-iFb"/>
                                <constraint firstAttribute="width" constant="21" id="n2z-Hg-gRv"/>
                            </constraints>
                        </imageView>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="坚持学习可以获得更多积分,快去学习吧!" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eeD-SQ-zo0">
                            <rect key="frame" x="68" y="517" width="339.5" height="21"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
                            <color key="textColor" red="0.9882352941176471" green="0.27843137254901962" blue="0.27843137254901962" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="zVp-Tg-9B3">
                            <rect key="frame" x="0.0" y="98.5" width="892" height="391.5"/>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="10" minimumInteritemSpacing="10" id="P8S-zu-bAi">
                                <size key="itemSize" width="128" height="128"/>
                                <size key="headerReferenceSize" width="0.0" height="0.0"/>
                                <size key="footerReferenceSize" width="0.0" height="0.0"/>
                                <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
                            </collectionViewFlowLayout>
                        </collectionView>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="D5s-Ls-BXc" firstAttribute="centerX" secondItem="Tck-Uv-W9Z" secondAttribute="centerX" id="45c-sq-9HF"/>
                        <constraint firstItem="kkz-0v-xBJ" firstAttribute="leading" secondItem="Tck-Uv-W9Z" secondAttribute="leading" constant="39" id="6Lo-yi-RK1"/>
                        <constraint firstItem="kkz-0v-xBJ" firstAttribute="top" secondItem="zVp-Tg-9B3" secondAttribute="bottom" constant="27" id="8uY-Eo-zMC"/>
                        <constraint firstItem="zVp-Tg-9B3" firstAttribute="leading" secondItem="Tck-Uv-W9Z" secondAttribute="leading" id="CRP-Wh-fHx"/>
                        <constraint firstAttribute="bottom" secondItem="kkz-0v-xBJ" secondAttribute="bottom" constant="86" id="Etz-Mz-uTs"/>
                        <constraint firstAttribute="bottom" secondItem="Dhw-Zu-pJB" secondAttribute="bottom" constant="21" id="HXo-y1-3a0"/>
                        <constraint firstAttribute="trailing" secondItem="zVp-Tg-9B3" secondAttribute="trailing" id="Igj-CJ-nuP"/>
                        <constraint firstItem="hKD-mg-1cZ" firstAttribute="top" secondItem="D5s-Ls-BXc" secondAttribute="bottom" constant="18" id="Mn3-gU-sch"/>
                        <constraint firstItem="eeD-SQ-zo0" firstAttribute="centerY" secondItem="kkz-0v-xBJ" secondAttribute="centerY" id="X0b-NN-ofo"/>
                        <constraint firstItem="Dhw-Zu-pJB" firstAttribute="centerX" secondItem="Tck-Uv-W9Z" secondAttribute="centerX" id="fQp-XS-xCM"/>
                        <constraint firstItem="eeD-SQ-zo0" firstAttribute="leading" secondItem="kkz-0v-xBJ" secondAttribute="trailing" constant="8" id="hKP-Ty-7Y3"/>
                        <constraint firstAttribute="width" secondItem="Tck-Uv-W9Z" secondAttribute="height" multiplier="1:0.7" id="iKP-00-Qoi"/>
                        <constraint firstItem="hKD-mg-1cZ" firstAttribute="leading" secondItem="Tck-Uv-W9Z" secondAttribute="leading" constant="37" id="mRv-D6-UgX"/>
                        <constraint firstItem="zVp-Tg-9B3" firstAttribute="top" secondItem="hKD-mg-1cZ" secondAttribute="bottom" constant="18" id="xYk-hA-c8w"/>
                        <constraint firstItem="D5s-Ls-BXc" firstAttribute="top" secondItem="Tck-Uv-W9Z" secondAttribute="top" constant="25" id="zeZ-Zz-bNN"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="10"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
            </subviews>
            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="sRGB"/>
            <constraints>
                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="Tck-Uv-W9Z" secondAttribute="trailing" constant="144" id="jyZ-Gt-dNN"/>
                <constraint firstItem="Tck-Uv-W9Z" firstAttribute="centerX" secondItem="vUN-kp-3ea" secondAttribute="centerX" id="nai-67-kdE"/>
                <constraint firstItem="Tck-Uv-W9Z" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" constant="144" id="pMH-2G-RcV"/>
                <constraint firstItem="Tck-Uv-W9Z" firstAttribute="centerY" secondItem="vUN-kp-3ea" secondAttribute="centerY" id="rRB-EM-sQj"/>
            </constraints>
            <connections>
                <outlet property="collectionView" destination="zVp-Tg-9B3" id="SFZ-0l-V2S"/>
                <outlet property="view_container" destination="Tck-Uv-W9Z" id="FAd-As-nd1"/>
            </connections>
            <point key="canvasLocation" x="30.508474576271187" y="19.756097560975608"/>
        </view>
    </objects>
    <resources>
        <image name="icon_waring" width="21" height="21"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
DolphinEnglishLearnStudent/Moudle/Market/CCell/MarketCCell.swift
New file
@@ -0,0 +1,25 @@
//
//  MarketCCell.swift
//  DolphinEnglishLearnManager
//
//  Created by 无故事王国 on 2024/5/21.
//
import UIKit
class MarketCCell: UICollectionViewCell {
                @IBOutlet weak var cover_imageView: UIImageView!
                @IBOutlet weak var label_title: UILabel!
                @IBOutlet weak var label_coin: UILabel!
                override func awakeFromNib() {
        super.awakeFromNib()
    }
                override func layoutSubviews() {
                                super.layoutSubviews()
                                jq_addShadows(shadowColor: UIColor(hexStr: "#D9D9D9"), corner: 8, radius: 20, offset: CGSize(width: 0, height: 20), opacity: 1)
                }
}
DolphinEnglishLearnStudent/Moudle/Market/CCell/MarketCCell.xib
New file
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" 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="22684"/>
        <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"/>
        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="_MarketCCell" id="gTV-IL-0wX" customClass="MarketCCell" customModule="DolphinEnglishLearnManager" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="470" height="519"/>
            <autoresizingMask key="autoresizingMask"/>
            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
                <rect key="frame" x="0.0" y="0.0" width="470" height="519"/>
                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                <subviews>
                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="2cm-3W-Dip">
                        <rect key="frame" x="0.0" y="0.0" width="470" height="352.66666666666669"/>
                        <constraints>
                            <constraint firstAttribute="width" secondItem="2cm-3W-Dip" secondAttribute="height" multiplier="1:0.75" id="U9h-Bg-isg"/>
                        </constraints>
                    </imageView>
                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cZP-Mn-OJ6">
                        <rect key="frame" x="7" y="360.66666666666669" width="456" height="17"/>
                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
                        <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                        <nil key="highlightedColor"/>
                    </label>
                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0积分" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="B7C-Df-hv9">
                        <rect key="frame" x="417.66666666666669" y="492" width="39.333333333333314" height="17"/>
                        <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                        <color key="textColor" red="0.96862745098039216" green="0.27450980392156865" blue="0.1764705882352941" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <nil key="highlightedColor"/>
                    </label>
                </subviews>
            </view>
            <viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/>
            <constraints>
                <constraint firstAttribute="trailing" secondItem="2cm-3W-Dip" secondAttribute="trailing" id="2be-nz-zYP"/>
                <constraint firstAttribute="trailing" secondItem="cZP-Mn-OJ6" secondAttribute="trailing" constant="7" id="6U5-wt-yPs"/>
                <constraint firstAttribute="trailing" secondItem="B7C-Df-hv9" secondAttribute="trailing" constant="13" id="CCg-Jf-Mwe"/>
                <constraint firstAttribute="bottom" secondItem="B7C-Df-hv9" secondAttribute="bottom" constant="10" id="MLQ-id-sQE"/>
                <constraint firstItem="2cm-3W-Dip" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="MX5-We-LCK"/>
                <constraint firstItem="cZP-Mn-OJ6" firstAttribute="top" secondItem="2cm-3W-Dip" secondAttribute="bottom" constant="8" id="Xrn-7e-mOW"/>
                <constraint firstItem="2cm-3W-Dip" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="lQn-8e-jEv"/>
                <constraint firstItem="cZP-Mn-OJ6" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="7" id="tDr-lk-oeH"/>
            </constraints>
            <size key="customSize" width="470" height="519"/>
            <connections>
                <outlet property="cover_imageView" destination="2cm-3W-Dip" id="Rgm-EG-CCF"/>
                <outlet property="label_coin" destination="B7C-Df-hv9" id="RFw-M6-RQB"/>
                <outlet property="label_title" destination="cZP-Mn-OJ6" id="7hk-XA-3Jx"/>
            </connections>
            <point key="canvasLocation" x="459.5419847328244" y="185.56338028169014"/>
        </collectionViewCell>
    </objects>
</document>
DolphinEnglishLearnStudent/Moudle/Market/MarketVC.swift
New file
@@ -0,0 +1,70 @@
//
//  MarketVC.swift
//  DolphinEnglishLearnManager
//
//  Created by 无故事王国 on 2024/5/21.
//
import UIKit
import QMUIKit
class MarketVC: BaseVC {
                @IBOutlet weak var tf_search: QMUITextField!
                @IBOutlet weak var menu_collectView: UICollectionView!
                @IBOutlet weak var content_collectionView: UICollectionView!
                private var cellW = (JQ_ScreenW - 130 - 15) / 4.0
    override func viewDidLoad() {
        super.viewDidLoad()
    }
                override func setUI() {
                                super.setUI()
                                tf_search.placeholderColor = UIColor.black.withAlphaComponent(0.81)
                                content_collectionView.delegate = self
                                content_collectionView.dataSource = self
                                content_collectionView.backgroundColor = .clear
                                content_collectionView.contentInset = UIEdgeInsets(top: 0, left: 65, bottom: 0, right:65)
                                content_collectionView.register(UINib(nibName: "MarketCCell", bundle: nil), forCellWithReuseIdentifier: "_MarketCCell")
                }
                @IBAction func searchAction(_ sender: UIButton) {
                }
}
extension MarketVC:UICollectionViewDelegate{
                func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
                                let vc = MarketContentVC()
                                vc.title = "商品详情"
                                push(vc: vc)
                }
}
extension MarketVC:UICollectionViewDataSource{
                func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
                                return 30
                }
                func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
                            let cell    =  collectionView.dequeueReusableCell(withReuseIdentifier: "_MarketCCell", for: indexPath) as! MarketCCell
                                cell.backgroundColor = .gray.withAlphaComponent(0.5)
                                return cell
                }
}
extension MarketVC:UICollectionViewDelegateFlowLayout{
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
                                return CGSize(width: cellW, height: cellW * 1.09)
                }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
                                return 24
                }
                func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
                                return 5
                }
}
DolphinEnglishLearnStudent/Moudle/Market/MarketVC.xib
New file
@@ -0,0 +1,159 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="ipad12_9" orientation="portrait" layout="fullscreen" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <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="MarketVC" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
            <connections>
                <outlet property="content_collectionView" destination="EPp-Vf-S4a" id="nYe-TY-YF6"/>
                <outlet property="menu_collectView" destination="OCn-Jg-gWg" id="v5E-bg-k90"/>
                <outlet property="tf_search" destination="Jv9-DX-cX8" id="Y6V-ux-8OL"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="1024" height="1366"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Unb-0E-8fJ">
                    <rect key="frame" x="65" y="34" width="894" height="40"/>
                    <subviews>
                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_search" translatesAutoresizingMaskIntoConstraints="NO" id="zmK-72-DKs">
                            <rect key="frame" x="13" y="12" width="16" height="16"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="16" id="0xZ-2Z-8Dz"/>
                                <constraint firstAttribute="width" constant="16" id="EnL-UP-mkT"/>
                            </constraints>
                        </imageView>
                        <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="输入商品关键字搜索" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Jv9-DX-cX8" customClass="QMUITextField">
                            <rect key="frame" x="41" y="0.0" width="778" height="40"/>
                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
                            <textInputTraits key="textInputTraits"/>
                        </textField>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="6Xu-Kn-W1A">
                            <rect key="frame" x="824" y="0.0" width="70" height="40"/>
                            <color key="backgroundColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <constraints>
                                <constraint firstAttribute="width" constant="70" id="N7X-vk-Rib"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="搜索"/>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                    <real key="value" value="20"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                            <connections>
                                <action selector="searchAction:" destination="-1" eventType="touchUpInside" id="CdE-PQ-Cgh"/>
                            </connections>
                        </button>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="Jv9-DX-cX8" firstAttribute="top" secondItem="Unb-0E-8fJ" secondAttribute="top" id="36L-0R-08F"/>
                        <constraint firstItem="zmK-72-DKs" firstAttribute="centerY" secondItem="Unb-0E-8fJ" secondAttribute="centerY" id="Hl9-3g-NFk"/>
                        <constraint firstItem="Jv9-DX-cX8" firstAttribute="leading" secondItem="zmK-72-DKs" secondAttribute="trailing" constant="12" id="NhE-fA-vsR"/>
                        <constraint firstAttribute="bottom" secondItem="6Xu-Kn-W1A" secondAttribute="bottom" id="Ob3-Uq-uwF"/>
                        <constraint firstAttribute="height" constant="40" id="VCY-SL-5x2"/>
                        <constraint firstAttribute="trailing" secondItem="6Xu-Kn-W1A" secondAttribute="trailing" id="ZTD-iX-ro1"/>
                        <constraint firstItem="6Xu-Kn-W1A" firstAttribute="top" secondItem="Unb-0E-8fJ" secondAttribute="top" id="bVt-3j-Dv8"/>
                        <constraint firstAttribute="bottom" secondItem="Jv9-DX-cX8" secondAttribute="bottom" id="h10-zI-uxk"/>
                        <constraint firstItem="zmK-72-DKs" firstAttribute="leading" secondItem="Unb-0E-8fJ" secondAttribute="leading" constant="13" id="j6U-On-Kd2"/>
                        <constraint firstItem="6Xu-Kn-W1A" firstAttribute="leading" secondItem="Jv9-DX-cX8" secondAttribute="trailing" constant="5" id="vBS-vy-uLv"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="20"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="82B-Dg-Sap">
                    <rect key="frame" x="946" y="102" width="13" height="29"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="29" id="wW2-Vh-riV"/>
                    </constraints>
                    <fontDescription key="fontDescription" name="Impact" family="Impact" pointSize="24"/>
                    <color key="textColor" red="0.99607843139999996" green="0.14117647059999999" blue="0.050980392159999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    <nil key="highlightedColor"/>
                </label>
                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="剩余积分:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="A9t-n3-Bmf">
                    <rect key="frame" x="867" y="105.5" width="74" height="22"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="22" id="YFs-Uk-JaX"/>
                    </constraints>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.81000000000000005" colorSpace="custom" customColorSpace="calibratedRGB"/>
                    <nil key="highlightedColor"/>
                </label>
                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="商品分类:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Jg0-dG-OCI">
                    <rect key="frame" x="65" y="105.5" width="74" height="22"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="22" id="tki-uv-Hgf"/>
                    </constraints>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.81000000000000005" colorSpace="custom" customColorSpace="calibratedRGB"/>
                    <nil key="highlightedColor"/>
                </label>
                <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="OCn-Jg-gWg">
                    <rect key="frame" x="152" y="96" width="705" height="41"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="41" id="A5O-nk-89N"/>
                    </constraints>
                    <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="ozO-lT-kFv">
                        <size key="itemSize" width="128" height="128"/>
                        <size key="headerReferenceSize" width="0.0" height="0.0"/>
                        <size key="footerReferenceSize" width="0.0" height="0.0"/>
                        <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
                    </collectionViewFlowLayout>
                </collectionView>
                <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="EPp-Vf-S4a">
                    <rect key="frame" x="0.0" y="159" width="1024" height="1207"/>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="YMW-eo-TCY">
                        <size key="itemSize" width="128" height="128"/>
                        <size key="headerReferenceSize" width="0.0" height="0.0"/>
                        <size key="footerReferenceSize" width="0.0" height="0.0"/>
                        <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
                    </collectionViewFlowLayout>
                </collectionView>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="82B-Dg-Sap" firstAttribute="trailing" secondItem="Unb-0E-8fJ" secondAttribute="trailing" id="04D-Ur-Vzd"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="Unb-0E-8fJ" secondAttribute="trailing" constant="65" id="9yv-3Y-78Y"/>
                <constraint firstItem="Unb-0E-8fJ" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="65" id="O97-uk-THq"/>
                <constraint firstItem="82B-Dg-Sap" firstAttribute="top" secondItem="Unb-0E-8fJ" secondAttribute="bottom" constant="28" id="OiX-TJ-i3e"/>
                <constraint firstItem="A9t-n3-Bmf" firstAttribute="leading" secondItem="OCn-Jg-gWg" secondAttribute="trailing" constant="10" id="Q2g-q0-rku"/>
                <constraint firstItem="OCn-Jg-gWg" firstAttribute="leading" secondItem="Jg0-dG-OCI" secondAttribute="trailing" constant="13" id="Rup-A4-pfm"/>
                <constraint firstItem="82B-Dg-Sap" firstAttribute="centerY" secondItem="A9t-n3-Bmf" secondAttribute="centerY" id="bHH-o4-cLV"/>
                <constraint firstItem="82B-Dg-Sap" firstAttribute="leading" secondItem="A9t-n3-Bmf" secondAttribute="trailing" constant="5" id="buA-2r-a7T"/>
                <constraint firstItem="Jg0-dG-OCI" firstAttribute="leading" secondItem="Unb-0E-8fJ" secondAttribute="leading" id="eac-Va-hFg"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="EPp-Vf-S4a" secondAttribute="trailing" id="jLa-um-hSS"/>
                <constraint firstItem="EPp-Vf-S4a" firstAttribute="top" secondItem="OCn-Jg-gWg" secondAttribute="bottom" constant="22" id="l0E-ZM-qAm"/>
                <constraint firstItem="Unb-0E-8fJ" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="14" id="nM6-Hl-pP0"/>
                <constraint firstItem="OCn-Jg-gWg" firstAttribute="centerY" secondItem="Jg0-dG-OCI" secondAttribute="centerY" id="qj3-NG-f1r"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="EPp-Vf-S4a" secondAttribute="bottom" id="tAh-It-yfg"/>
                <constraint firstItem="EPp-Vf-S4a" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="vY3-YE-qeC"/>
                <constraint firstItem="82B-Dg-Sap" firstAttribute="centerY" secondItem="Jg0-dG-OCI" secondAttribute="centerY" id="wIi-bv-dga"/>
            </constraints>
            <point key="canvasLocation" x="138" y="21"/>
        </view>
    </objects>
    <resources>
        <image name="icon_search" width="16" height="16"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
DolphinEnglishLearnStudent/Moudle/Market/VC/ExchangeResultVC.swift
New file
@@ -0,0 +1,52 @@
//
//  ExchangeResultVC.swift
//  DolphinEnglishLearnManager
//
//  Created by 无故事王国 on 2024/5/21.
//
import UIKit
class ExchangeResultVC: BaseVC {
                enum ExchangeResultType{
                                case success
                                case fail(String)
                }
                private var resultType:ExchangeResultType!
                @IBOutlet weak var img_result: UIImageView!
                @IBOutlet weak var label_type: UILabel!
                @IBOutlet weak var label_subType: UILabel!
                @IBOutlet weak var back_btn: UIButton!
                @IBOutlet weak var btn_order: UIButton!
                init(resultType:ExchangeResultType) {
                                super.init(nibName: nil, bundle: nil)
                                self.resultType = resultType
                }
                required init?(coder: NSCoder) {
                                fatalError("init(coder:) has not been implemented")
                }
    override func viewDidLoad() {
        super.viewDidLoad()
                                switch resultType {
                                                case .success:
                                                                label_type.text = "兑换成功!"
                                                                label_subType.text = ""
                                                                img_result.image = UIImage(named: "icon_success")
                                                case .fail(let subTitle):
                                                                label_type.text = "兑换失败!"
                                                                label_subType.text = subTitle
                                                                btn_order.isHidden = true
                                                                img_result.image = UIImage(named: "icon_fail")
                                                case .none:
                                                                break
                                }
    }
}
DolphinEnglishLearnStudent/Moudle/Market/VC/ExchangeResultVC.xib
New file
@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="ipad12_9" orientation="portrait" layout="fullscreen" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <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="ExchangeResultVC" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
            <connections>
                <outlet property="back_btn" destination="Nyx-Nz-by6" id="DFU-zr-XcZ"/>
                <outlet property="btn_order" destination="gZA-Zs-XKS" id="VsH-nN-zar"/>
                <outlet property="img_result" destination="WIa-7P-Bf1" id="o6N-ts-w70"/>
                <outlet property="label_subType" destination="lpP-CH-CdV" id="Rp0-7c-eOb"/>
                <outlet property="label_type" destination="O5B-wn-Esz" id="WJ9-J0-xMl"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="1024" height="1366"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="VxI-3j-WUN">
                    <rect key="frame" x="99" y="43" width="826" height="1323"/>
                    <subviews>
                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="WIa-7P-Bf1">
                            <rect key="frame" x="375.5" y="30" width="75" height="75"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="75" id="KLa-7i-28e"/>
                                <constraint firstAttribute="width" constant="75" id="uco-r2-Ki1"/>
                            </constraints>
                        </imageView>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="O5B-wn-Esz">
                            <rect key="frame" x="405" y="134" width="16.5" height="25"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="25" id="BJ3-sF-4No"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <stackView opaque="NO" contentMode="scaleToFill" spacing="94" translatesAutoresizingMaskIntoConstraints="NO" id="aqw-2Q-ccA">
                            <rect key="frame" x="242" y="274" width="342" height="39.5"/>
                            <subviews>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Nyx-Nz-by6">
                                    <rect key="frame" x="0.0" y="0.0" width="124" height="39.5"/>
                                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                    <constraints>
                                        <constraint firstAttribute="width" secondItem="Nyx-Nz-by6" secondAttribute="height" multiplier="1:0.32" id="2Tx-Vi-WZ4"/>
                                        <constraint firstAttribute="width" constant="124" id="shE-lB-SNE"/>
                                    </constraints>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" title="返回主页">
                                        <color key="titleColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    </state>
                                    <userDefinedRuntimeAttributes>
                                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                            <real key="value" value="4"/>
                                        </userDefinedRuntimeAttribute>
                                        <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB">
                                            <color key="value" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                        </userDefinedRuntimeAttribute>
                                        <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB">
                                            <real key="value" value="1"/>
                                        </userDefinedRuntimeAttribute>
                                    </userDefinedRuntimeAttributes>
                                </button>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gZA-Zs-XKS">
                                    <rect key="frame" x="218" y="0.0" width="124" height="39.5"/>
                                    <color key="backgroundColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <constraints>
                                        <constraint firstAttribute="width" secondItem="gZA-Zs-XKS" secondAttribute="height" multiplier="1:0.32" id="0iz-f8-sBd"/>
                                        <constraint firstAttribute="width" constant="124" id="no6-KJ-YlK"/>
                                    </constraints>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" title="查看订单"/>
                                    <userDefinedRuntimeAttributes>
                                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                            <real key="value" value="4"/>
                                        </userDefinedRuntimeAttribute>
                                    </userDefinedRuntimeAttributes>
                                </button>
                            </subviews>
                        </stackView>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lpP-CH-CdV">
                            <rect key="frame" x="406.5" y="169" width="13.5" height="20"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="20" id="hmc-cj-PH2"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.60999999999999999" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="aqw-2Q-ccA" firstAttribute="top" secondItem="O5B-wn-Esz" secondAttribute="bottom" constant="115" id="01i-1s-vGv"/>
                        <constraint firstItem="WIa-7P-Bf1" firstAttribute="top" secondItem="VxI-3j-WUN" secondAttribute="top" constant="30" id="8FS-WV-fzD"/>
                        <constraint firstItem="O5B-wn-Esz" firstAttribute="top" secondItem="WIa-7P-Bf1" secondAttribute="bottom" constant="29" id="LcC-Pn-4cZ"/>
                        <constraint firstItem="lpP-CH-CdV" firstAttribute="top" secondItem="O5B-wn-Esz" secondAttribute="bottom" constant="10" id="PUc-i1-j3R"/>
                        <constraint firstItem="O5B-wn-Esz" firstAttribute="centerX" secondItem="WIa-7P-Bf1" secondAttribute="centerX" id="YHY-KZ-NSV"/>
                        <constraint firstItem="lpP-CH-CdV" firstAttribute="centerX" secondItem="WIa-7P-Bf1" secondAttribute="centerX" id="bvO-J3-QW5"/>
                        <constraint firstItem="WIa-7P-Bf1" firstAttribute="centerX" secondItem="VxI-3j-WUN" secondAttribute="centerX" id="cc8-Nd-McS"/>
                        <constraint firstItem="aqw-2Q-ccA" firstAttribute="centerX" secondItem="WIa-7P-Bf1" secondAttribute="centerX" id="mFA-jn-dVT"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="8"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="VxI-3j-WUN" secondAttribute="trailing" constant="99" id="Iat-hg-uhk"/>
                <constraint firstItem="VxI-3j-WUN" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="23" id="R5c-zV-QAE"/>
                <constraint firstItem="VxI-3j-WUN" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="99" id="aNF-ge-CLX"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="VxI-3j-WUN" secondAttribute="bottom" id="pWe-V4-eqI"/>
            </constraints>
            <point key="canvasLocation" x="98" y="21"/>
        </view>
    </objects>
    <resources>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
DolphinEnglishLearnStudent/Moudle/Market/VC/MarketContentVC.swift
New file
@@ -0,0 +1,55 @@
//
//  MarketContentVC.swift
//  DolphinEnglishLearnManager
//
//  Created by 无故事王国 on 2024/5/21.
//
import UIKit
import WebKit
class MarketContentVC: BaseVC {
                @IBOutlet weak var scrollView: UIScrollView!
                @IBOutlet weak var image_cover: UIImageView!
                @IBOutlet weak var view_footer: UIView!
                @IBOutlet weak var view_container: UIView!
                @IBOutlet weak var label_coin: UILabel!
                @IBOutlet weak var label_title: UILabel!
                @IBOutlet weak var label_categry: UILabel!
                @IBOutlet weak var label_info: UILabel!
                @IBOutlet weak var webView: WKWebView!
                @IBOutlet weak var label_surplusCoin: UILabel!
                @IBOutlet weak var label_costCoin: UILabel!
                @IBOutlet weak var cons_footHei: NSLayoutConstraint!
                override func viewDidLoad() {
        super.viewDidLoad()
    }
                override func setUI() {
                                super.setUI()
                                scrollView.contentInset = UIEdgeInsets(top: 26, left: 0, bottom: 31, right: 0)
                                cons_footHei.constant = 54 + UIDevice.jq_safeEdges.bottom
                }
                @IBAction func exchangeAction(_ sender: UIButton) {
//                                CommonAlertView.show(isSinple: true, content: "兑换失败,当前剩余积分不足!") {
//
//                                }
                                let vc = MarketExchangeVC()
                                vc.title = "立即兑换"
                                push(vc: vc)
                }
                override func viewDidLayoutSubviews() {
                                super.viewDidLayoutSubviews()
                                image_cover.jq_addCorners(corner: [.topLeft,.topRight], radius: 8)
                                view_footer.jq_addShadows(shadowColor: UIColor(hexStr: "#DEDEDE").withAlphaComponent(0.5), corner: 0, radius: 4, offset: CGSize(width: 0, height: -1), opacity: 1)
                                view_container.jq_addShadows(shadowColor: UIColor(hexStr: "#D9D9D9").withAlphaComponent(0.28), corner: 8, radius: 5, offset: CGSize(width: 0, height: 2), opacity: 1)
                }
}
DolphinEnglishLearnStudent/Moudle/Market/VC/MarketContentVC.xib
New file
@@ -0,0 +1,233 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="ipad12_9" orientation="portrait" layout="fullscreen" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <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="MarketContentVC" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
            <connections>
                <outlet property="cons_footHei" destination="O1c-0y-Iw9" id="Oj2-S6-uVD"/>
                <outlet property="image_cover" destination="HQ8-qZ-zeA" id="0xr-UI-5I9"/>
                <outlet property="label_categry" destination="YLo-dD-PTM" id="kCG-k8-Baa"/>
                <outlet property="label_coin" destination="yrU-ab-vv9" id="4UT-Q9-CO3"/>
                <outlet property="label_costCoin" destination="Br9-rb-zWu" id="Qyp-x1-Ff0"/>
                <outlet property="label_info" destination="kR5-RX-1Ha" id="cvV-F1-x1p"/>
                <outlet property="label_surplusCoin" destination="sQy-qj-ems" id="FaO-3K-U3Z"/>
                <outlet property="label_title" destination="PgE-zX-EIu" id="FWi-qa-sK0"/>
                <outlet property="scrollView" destination="loc-rm-BZe" id="xqU-OW-GgJ"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
                <outlet property="view_container" destination="3V0-GL-Fmn" id="D6J-fr-4H2"/>
                <outlet property="view_footer" destination="mp9-Bg-Kez" id="41u-8O-co7"/>
                <outlet property="webView" destination="ZOY-ws-sjP" id="bXL-3r-nKs"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="1024" height="1366"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mp9-Bg-Kez">
                    <rect key="frame" x="0.0" y="1312" width="1024" height="54"/>
                    <subviews>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="47G-CM-alP">
                            <rect key="frame" x="875" y="7.5" width="109" height="39"/>
                            <color key="backgroundColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <constraints>
                                <constraint firstAttribute="width" secondItem="47G-CM-alP" secondAttribute="height" multiplier="1:0.36" id="QfK-ys-hlP"/>
                                <constraint firstAttribute="width" constant="109" id="qbL-gB-8KW"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="立即兑换"/>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                    <real key="value" value="20"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                            <connections>
                                <action selector="exchangeAction:" destination="-1" eventType="touchUpInside" id="94B-mA-VBe"/>
                            </connections>
                        </button>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="积分" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WKk-eD-2Hb">
                            <rect key="frame" x="823" y="16.5" width="37" height="21.5"/>
                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
                            <color key="textColor" red="0.96862745100000003" green="0.27450980390000002" blue="0.1764705882" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Br9-rb-zWu">
                            <rect key="frame" x="813" y="16" width="10" height="22"/>
                            <fontDescription key="fontDescription" name="Impact" family="Impact" pointSize="18"/>
                            <color key="textColor" red="0.96862745100000003" green="0.27450980390000002" blue="0.1764705882" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="剩余积分:0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sQy-qj-ems">
                            <rect key="frame" x="40" y="16" width="92" height="22"/>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                            <nil key="textColor"/>
                            <nil key="highlightedColor"/>
                        </label>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="Br9-rb-zWu" firstAttribute="centerY" secondItem="sQy-qj-ems" secondAttribute="centerY" id="1O6-3C-dCB"/>
                        <constraint firstItem="WKk-eD-2Hb" firstAttribute="centerY" secondItem="mp9-Bg-Kez" secondAttribute="centerY" id="8Pb-Kd-JoK"/>
                        <constraint firstItem="sQy-qj-ems" firstAttribute="top" secondItem="mp9-Bg-Kez" secondAttribute="top" constant="16" id="CD5-UU-eLb"/>
                        <constraint firstItem="WKk-eD-2Hb" firstAttribute="leading" secondItem="Br9-rb-zWu" secondAttribute="trailing" id="Fmd-EM-IH2"/>
                        <constraint firstItem="47G-CM-alP" firstAttribute="leading" secondItem="WKk-eD-2Hb" secondAttribute="trailing" constant="15" id="K8e-zI-xYh"/>
                        <constraint firstAttribute="height" constant="54" id="O1c-0y-Iw9"/>
                        <constraint firstItem="47G-CM-alP" firstAttribute="centerY" secondItem="sQy-qj-ems" secondAttribute="centerY" id="RlJ-Nq-ngW"/>
                        <constraint firstItem="WKk-eD-2Hb" firstAttribute="centerY" secondItem="sQy-qj-ems" secondAttribute="centerY" id="ThX-M4-na3"/>
                        <constraint firstItem="sQy-qj-ems" firstAttribute="leading" secondItem="mp9-Bg-Kez" secondAttribute="leading" constant="40" id="l0r-bN-i7w"/>
                        <constraint firstAttribute="trailing" secondItem="47G-CM-alP" secondAttribute="trailing" constant="40" id="szD-sR-9iL"/>
                    </constraints>
                </view>
                <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" translatesAutoresizingMaskIntoConstraints="NO" id="loc-rm-BZe">
                    <rect key="frame" x="234" y="20" width="556" height="1292"/>
                    <subviews>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3V0-GL-Fmn">
                            <rect key="frame" x="0.0" y="0.0" width="556" height="681"/>
                            <subviews>
                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="HQ8-qZ-zeA">
                                    <rect key="frame" x="0.0" y="0.0" width="556" height="319.5"/>
                                    <color key="backgroundColor" systemColor="systemGray5Color"/>
                                    <constraints>
                                        <constraint firstAttribute="width" secondItem="HQ8-qZ-zeA" secondAttribute="height" multiplier="1:0.575" id="4sO-41-6AB"/>
                                    </constraints>
                                </imageView>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yrU-ab-vv9">
                                    <rect key="frame" x="14" y="329.5" width="10" height="25"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="25" id="aYX-Lj-BOi"/>
                                    </constraints>
                                    <fontDescription key="fontDescription" name="Impact" family="Impact" pointSize="18"/>
                                    <color key="textColor" red="0.96862745100000003" green="0.27450980390000002" blue="0.1764705882" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <nil key="highlightedColor"/>
                                </label>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="积分" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LtS-Mg-aeT">
                                    <rect key="frame" x="24" y="329.5" width="37" height="25"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="25" id="8tS-gu-9LD"/>
                                    </constraints>
                                    <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
                                    <color key="textColor" red="0.96862745100000003" green="0.27450980390000002" blue="0.1764705882" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <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="PgE-zX-EIu">
                                    <rect key="frame" x="14" y="361.5" width="528" height="19.5"/>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                    <nil key="highlightedColor"/>
                                </label>
                                <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="SHM-HW-3QJ">
                                    <rect key="frame" x="14" y="388" width="528" height="20"/>
                                    <subviews>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YLo-dD-PTM">
                                            <rect key="frame" x="0.0" y="0.0" width="264" height="20"/>
                                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.51000000000000001" colorSpace="custom" customColorSpace="sRGB"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kR5-RX-1Ha">
                                            <rect key="frame" x="264" y="0.0" width="264" height="20"/>
                                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                            <color key="textColor" red="0.8901960784313725" green="0.45098039215686275" blue="0.14117647058823529" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                    </subviews>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="20" id="wXD-0r-aP2"/>
                                    </constraints>
                                </stackView>
                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3WZ-Jf-leh">
                                    <rect key="frame" x="13" y="423" width="530" height="1"/>
                                    <color key="backgroundColor" red="0.59215686274509804" green="0.59215686274509804" blue="0.59215686274509804" alpha="0.19" colorSpace="custom" customColorSpace="sRGB"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="1" id="i9E-8g-CZz"/>
                                    </constraints>
                                </view>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="商品详情" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fkp-fX-eUo">
                                    <rect key="frame" x="14" y="439" width="65.5" height="22"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="22" id="vw4-BH-Uhz"/>
                                    </constraints>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                    <nil key="highlightedColor"/>
                                </label>
                                <wkWebView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZOY-ws-sjP">
                                    <rect key="frame" x="14" y="471" width="528" height="200"/>
                                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="200" id="xMb-sR-Ext"/>
                                    </constraints>
                                    <wkWebViewConfiguration key="configuration">
                                        <audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/>
                                        <wkPreferences key="preferences"/>
                                    </wkWebViewConfiguration>
                                </wkWebView>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstItem="fkp-fX-eUo" firstAttribute="top" secondItem="3WZ-Jf-leh" secondAttribute="bottom" constant="15" id="1lu-mH-O3t"/>
                                <constraint firstItem="HQ8-qZ-zeA" firstAttribute="leading" secondItem="3V0-GL-Fmn" secondAttribute="leading" id="2L8-TY-eC1"/>
                                <constraint firstAttribute="trailing" secondItem="SHM-HW-3QJ" secondAttribute="trailing" constant="14" id="3fT-Df-Icu"/>
                                <constraint firstItem="ZOY-ws-sjP" firstAttribute="top" secondItem="fkp-fX-eUo" secondAttribute="bottom" constant="10" id="4Sb-GV-SMH"/>
                                <constraint firstItem="fkp-fX-eUo" firstAttribute="leading" secondItem="3V0-GL-Fmn" secondAttribute="leading" constant="14" id="CGr-W8-bYc"/>
                                <constraint firstItem="LtS-Mg-aeT" firstAttribute="centerY" secondItem="yrU-ab-vv9" secondAttribute="centerY" id="Eqy-fC-VXN"/>
                                <constraint firstItem="SHM-HW-3QJ" firstAttribute="leading" secondItem="3V0-GL-Fmn" secondAttribute="leading" constant="14" id="IcX-sV-UsY"/>
                                <constraint firstAttribute="trailing" secondItem="PgE-zX-EIu" secondAttribute="trailing" constant="14" id="KOH-43-2e0"/>
                                <constraint firstItem="3WZ-Jf-leh" firstAttribute="top" secondItem="SHM-HW-3QJ" secondAttribute="bottom" constant="15" id="TZb-uR-n12"/>
                                <constraint firstItem="yrU-ab-vv9" firstAttribute="leading" secondItem="3V0-GL-Fmn" secondAttribute="leading" constant="14" id="bvf-qv-PXf"/>
                                <constraint firstItem="LtS-Mg-aeT" firstAttribute="leading" secondItem="yrU-ab-vv9" secondAttribute="trailing" id="ce9-HT-eYR"/>
                                <constraint firstItem="yrU-ab-vv9" firstAttribute="top" secondItem="HQ8-qZ-zeA" secondAttribute="bottom" constant="10" id="fcu-Lq-OG7"/>
                                <constraint firstAttribute="trailing" secondItem="3WZ-Jf-leh" secondAttribute="trailing" constant="13" id="gDs-iU-l4D"/>
                                <constraint firstItem="HQ8-qZ-zeA" firstAttribute="top" secondItem="3V0-GL-Fmn" secondAttribute="top" id="gge-7H-yMR"/>
                                <constraint firstItem="ZOY-ws-sjP" firstAttribute="leading" secondItem="3V0-GL-Fmn" secondAttribute="leading" constant="14" id="k11-lO-F1N"/>
                                <constraint firstItem="SHM-HW-3QJ" firstAttribute="top" secondItem="PgE-zX-EIu" secondAttribute="bottom" constant="7" id="kjs-SE-QJz"/>
                                <constraint firstItem="3WZ-Jf-leh" firstAttribute="leading" secondItem="3V0-GL-Fmn" secondAttribute="leading" constant="13" id="msq-Yj-Hkl"/>
                                <constraint firstItem="PgE-zX-EIu" firstAttribute="top" secondItem="yrU-ab-vv9" secondAttribute="bottom" constant="7" id="tro-c3-NxF"/>
                                <constraint firstItem="PgE-zX-EIu" firstAttribute="leading" secondItem="3V0-GL-Fmn" secondAttribute="leading" constant="14" id="upN-6F-Xy0"/>
                                <constraint firstAttribute="bottom" secondItem="ZOY-ws-sjP" secondAttribute="bottom" constant="10" id="x2O-1I-fif"/>
                                <constraint firstAttribute="trailing" secondItem="HQ8-qZ-zeA" secondAttribute="trailing" id="xc1-2D-IN1"/>
                                <constraint firstAttribute="trailing" secondItem="ZOY-ws-sjP" secondAttribute="trailing" constant="14" id="zdu-6P-uIG"/>
                            </constraints>
                        </view>
                    </subviews>
                    <constraints>
                        <constraint firstItem="3V0-GL-Fmn" firstAttribute="top" secondItem="loc-rm-BZe" secondAttribute="top" id="5Wq-mT-Rso"/>
                        <constraint firstItem="3V0-GL-Fmn" firstAttribute="centerX" secondItem="loc-rm-BZe" secondAttribute="centerX" id="Kll-DS-2YM"/>
                        <constraint firstAttribute="trailing" secondItem="3V0-GL-Fmn" secondAttribute="trailing" id="Ptl-oU-1l1"/>
                        <constraint firstAttribute="bottom" secondItem="3V0-GL-Fmn" secondAttribute="bottom" id="jiI-WM-Att"/>
                        <constraint firstItem="3V0-GL-Fmn" firstAttribute="leading" secondItem="loc-rm-BZe" secondAttribute="leading" id="rIK-fX-4Ue"/>
                    </constraints>
                </scrollView>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="loc-rm-BZe" secondAttribute="trailing" constant="234" id="Bvr-V9-9Vy"/>
                <constraint firstItem="mp9-Bg-Kez" firstAttribute="top" secondItem="loc-rm-BZe" secondAttribute="bottom" id="ERX-Wt-77X"/>
                <constraint firstItem="mp9-Bg-Kez" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="HzL-M1-sYN"/>
                <constraint firstAttribute="bottom" secondItem="mp9-Bg-Kez" secondAttribute="bottom" id="NJ0-yE-1Uk"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="mp9-Bg-Kez" secondAttribute="trailing" id="fSg-6D-BUS"/>
                <constraint firstItem="loc-rm-BZe" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" id="m3s-nM-NF5"/>
                <constraint firstItem="loc-rm-BZe" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="234" id="yge-pA-Gn4"/>
            </constraints>
            <point key="canvasLocation" x="47.4609375" y="20.644216691068813"/>
        </view>
    </objects>
    <resources>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
        <systemColor name="systemGray5Color">
            <color red="0.89803921568627454" green="0.89803921568627454" blue="0.91764705882352937" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
        </systemColor>
    </resources>
</document>
DolphinEnglishLearnStudent/Moudle/Market/VC/MarketExchangeVC.swift
New file
@@ -0,0 +1,59 @@
//
//  MarketExchangeVC.swift
//  DolphinEnglishLearnManager
//
//  Created by 无故事王国 on 2024/5/21.
//
import UIKit
import RxRelay
class MarketViewModel{
                var number = BehaviorRelay<Int>(value:1)
}
class MarketExchangeVC: BaseVC {
                @IBOutlet weak var scrollView: UIScrollView!
                @IBOutlet weak var view_footer: UIView!
                @IBOutlet weak var view_container: UIView!
                @IBOutlet weak var field_number: UITextField!
                @IBOutlet weak var cons_footerHei: NSLayoutConstraint!
                private var viewModel = MarketViewModel()
    override func viewDidLoad() {
        super.viewDidLoad()
    }
                override func setUI() {
                                super.setUI()
                                view_container.jq_cornerRadius = 8
                                scrollView.contentInset = UIEdgeInsets(top: 26, left: 0, bottom: 31, right: 0)
                                cons_footerHei.constant = 54 + UIDevice.jq_safeEdges.bottom
                }
                override func setRx() {
                                viewModel.number.subscribe(onNext: {[weak self] num in
                                                self?.field_number.text = "\(num)"
                                }).disposed(by: disposeBag)
                }
                @IBAction func addNumAction(_ sender: UIButton) {
                                let num = viewModel.number.value + 1
                                viewModel.number.accept(num)
                }
                @IBAction func reduceAction(_ sender: UIButton) {
                                let num = max(1,viewModel.number.value - 1)
                                viewModel.number.accept(num)
                }
                @IBAction func exchangeAction(_ sender: UIButton) {
                                CommonAlertView.show(content: "确认兑换当前商品吗?") {
                                                let vc = ExchangeResultVC(resultType: .success)
                                                vc.title = "商品详情"
                                                self.push(vc: vc)
                                }
                }
}
DolphinEnglishLearnStudent/Moudle/Market/VC/MarketExchangeVC.xib
New file
@@ -0,0 +1,418 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="ipad12_9" orientation="portrait" layout="fullscreen" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <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="MarketExchangeVC" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
            <connections>
                <outlet property="cons_footerHei" destination="71z-Eh-Ya8" id="V0f-Rh-ggi"/>
                <outlet property="field_number" destination="1nG-XY-fwB" id="xye-yR-VBc"/>
                <outlet property="scrollView" destination="hFz-gY-osL" id="xXh-5z-6XE"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
                <outlet property="view_container" destination="4wG-oJ-eBG" id="8U4-Q9-4Ap"/>
                <outlet property="view_footer" destination="d3o-Ba-FIK" id="EMz-WT-ojz"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="1024" height="1366"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="d3o-Ba-FIK">
                    <rect key="frame" x="234" y="1312" width="556" height="54"/>
                    <subviews>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="N4Y-Qi-AD2">
                            <rect key="frame" x="432" y="7.5" width="109" height="39"/>
                            <color key="backgroundColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <constraints>
                                <constraint firstAttribute="width" secondItem="N4Y-Qi-AD2" secondAttribute="height" multiplier="1:0.36" id="IKR-3V-mAJ"/>
                                <constraint firstAttribute="width" constant="109" id="zt9-Ks-KMl"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="立即兑换"/>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                    <real key="value" value="20"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                            <connections>
                                <action selector="exchangeAction:" destination="-1" eventType="touchUpInside" id="1qq-90-R3m"/>
                            </connections>
                        </button>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="积分" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="REn-PL-iJ3">
                            <rect key="frame" x="380" y="16.5" width="37" height="21.5"/>
                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
                            <color key="textColor" red="0.96862745100000003" green="0.27450980390000002" blue="0.1764705882" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Nka-ZK-eeP">
                            <rect key="frame" x="370" y="16" width="10" height="22"/>
                            <fontDescription key="fontDescription" name="Impact" family="Impact" pointSize="18"/>
                            <color key="textColor" red="0.96862745100000003" green="0.27450980390000002" blue="0.1764705882" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="54" id="71z-Eh-Ya8"/>
                        <constraint firstItem="REn-PL-iJ3" firstAttribute="leading" secondItem="Nka-ZK-eeP" secondAttribute="trailing" id="9KQ-lI-kf1"/>
                        <constraint firstItem="N4Y-Qi-AD2" firstAttribute="centerY" secondItem="d3o-Ba-FIK" secondAttribute="centerY" id="YnF-Od-MLx"/>
                        <constraint firstItem="REn-PL-iJ3" firstAttribute="centerY" secondItem="Nka-ZK-eeP" secondAttribute="centerY" id="ecU-c8-3VB"/>
                        <constraint firstItem="REn-PL-iJ3" firstAttribute="centerY" secondItem="d3o-Ba-FIK" secondAttribute="centerY" id="fBc-bE-3Ub"/>
                        <constraint firstAttribute="trailing" secondItem="N4Y-Qi-AD2" secondAttribute="trailing" constant="15" id="mSg-9x-1dh"/>
                        <constraint firstItem="N4Y-Qi-AD2" firstAttribute="leading" secondItem="REn-PL-iJ3" secondAttribute="trailing" constant="15" id="ydl-uL-nuJ"/>
                    </constraints>
                </view>
                <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hFz-gY-osL">
                    <rect key="frame" x="234" y="20" width="556" height="1292"/>
                    <subviews>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4wG-oJ-eBG">
                            <rect key="frame" x="0.0" y="0.0" width="556" height="600"/>
                            <subviews>
                                <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="HCf-Ym-o1O">
                                    <rect key="frame" x="0.0" y="0.0" width="556" height="600"/>
                                    <subviews>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sfn-3Q-b7V">
                                            <rect key="frame" x="0.0" y="0.0" width="556" height="90"/>
                                            <subviews>
                                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5h7-8X-cXI">
                                                    <rect key="frame" x="0.0" y="87" width="556" height="3"/>
                                                    <color key="backgroundColor" red="0.8901960784313725" green="0.97254901960784312" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <constraints>
                                                        <constraint firstAttribute="height" constant="3" id="7Bs-Y1-RKJ"/>
                                                    </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="ph9-Ra-CxP">
                                                    <rect key="frame" x="14" y="28" width="492" height="20"/>
                                                    <constraints>
                                                        <constraint firstAttribute="height" constant="20" id="cgw-w2-dsN"/>
                                                    </constraints>
                                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                                    <color key="textColor" red="0.011764705882352941" green="0.015686274509803921" blue="0.019607843137254902" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_more_gray" translatesAutoresizingMaskIntoConstraints="NO" id="jKh-8m-ogE">
                                                    <rect key="frame" x="536" y="40" width="6" height="10"/>
                                                </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="Hns-QV-baw">
                                                    <rect key="frame" x="14" y="53" width="492" height="14.5"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                            <constraints>
                                                <constraint firstItem="jKh-8m-ogE" firstAttribute="centerY" secondItem="sfn-3Q-b7V" secondAttribute="centerY" id="AIT-eX-UYg"/>
                                                <constraint firstAttribute="trailing" secondItem="5h7-8X-cXI" secondAttribute="trailing" id="Byx-At-ZHn"/>
                                                <constraint firstAttribute="height" constant="90" id="Gtx-jC-H0V"/>
                                                <constraint firstItem="ph9-Ra-CxP" firstAttribute="leading" secondItem="sfn-3Q-b7V" secondAttribute="leading" constant="14" id="L6f-uW-gIs"/>
                                                <constraint firstItem="ph9-Ra-CxP" firstAttribute="top" secondItem="sfn-3Q-b7V" secondAttribute="top" constant="28" id="Pzt-wT-2Uz"/>
                                                <constraint firstAttribute="bottom" secondItem="5h7-8X-cXI" secondAttribute="bottom" id="dS7-Gn-QOD"/>
                                                <constraint firstAttribute="trailing" secondItem="jKh-8m-ogE" secondAttribute="trailing" constant="14" id="fpD-Vw-mh2"/>
                                                <constraint firstItem="5h7-8X-cXI" firstAttribute="leading" secondItem="sfn-3Q-b7V" secondAttribute="leading" id="g86-ED-gAW"/>
                                                <constraint firstItem="Hns-QV-baw" firstAttribute="trailing" secondItem="ph9-Ra-CxP" secondAttribute="trailing" id="hFX-F5-1NJ"/>
                                                <constraint firstItem="Hns-QV-baw" firstAttribute="leading" secondItem="ph9-Ra-CxP" secondAttribute="leading" id="l9W-26-0ij"/>
                                                <constraint firstItem="Hns-QV-baw" firstAttribute="top" secondItem="ph9-Ra-CxP" secondAttribute="bottom" constant="5" id="mta-MA-VXe"/>
                                                <constraint firstAttribute="trailing" secondItem="ph9-Ra-CxP" secondAttribute="trailing" constant="50" id="oe6-gk-huK"/>
                                            </constraints>
                                        </view>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Pcy-2J-bsd">
                                            <rect key="frame" x="0.0" y="90" width="556" height="366"/>
                                            <subviews>
                                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="QM5-dP-No2">
                                                    <rect key="frame" x="14" y="15" width="170" height="170"/>
                                                    <constraints>
                                                        <constraint firstAttribute="width" constant="170" id="gTg-aH-0dy"/>
                                                        <constraint firstAttribute="width" secondItem="QM5-dP-No2" secondAttribute="height" multiplier="1:1" id="xVR-OV-Dag"/>
                                                    </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="SZF-J0-byW">
                                                    <rect key="frame" x="197" y="15" width="346" height="19.5"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="数量" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="EeU-Wx-jBI">
                                                    <rect key="frame" x="14" y="203" width="25" height="17"/>
                                                    <constraints>
                                                        <constraint firstAttribute="height" constant="17" id="wBn-J0-yYG"/>
                                                    </constraints>
                                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="积分" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="h4B-Ju-L2P">
                                                    <rect key="frame" x="499" y="165.5" width="33" height="19.5"/>
                                                    <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/>
                                                    <color key="textColor" red="0.96862745100000003" green="0.27450980390000002" blue="0.1764705882" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Zy6-3Q-Lgi">
                                                    <rect key="frame" x="490" y="165.5" width="9" height="20"/>
                                                    <fontDescription key="fontDescription" name="Impact" family="Impact" pointSize="16"/>
                                                    <color key="textColor" red="0.96862745100000003" green="0.27450980390000002" blue="0.1764705882" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="备注" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MS7-3T-DWG">
                                                    <rect key="frame" x="14" y="237" width="25" height="17"/>
                                                    <constraints>
                                                        <constraint firstAttribute="height" constant="17" id="d8J-ex-Cso"/>
                                                    </constraints>
                                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5zn-TC-ZAu">
                                                    <rect key="frame" x="14" y="266" width="528" height="85"/>
                                                    <subviews>
                                                        <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="Rq2-vc-D0Q" customClass="QMUITextView">
                                                            <rect key="frame" x="10" y="13" width="508" height="67"/>
                                                            <color key="textColor" systemColor="labelColor"/>
                                                            <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                                            <textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
                                                            <userDefinedRuntimeAttributes>
                                                                <userDefinedRuntimeAttribute type="number" keyPath="maximumTextLength">
                                                                    <integer key="value" value="200"/>
                                                                </userDefinedRuntimeAttribute>
                                                                <userDefinedRuntimeAttribute type="string" keyPath="placeholder" value="请输入不超过200字的备注"/>
                                                                <userDefinedRuntimeAttribute type="color" keyPath="placeholderColor">
                                                                    <color key="value" red="0.4823529411764706" green="0.4823529411764706" blue="0.50588235294117645" alpha="0.44" colorSpace="custom" customColorSpace="sRGB"/>
                                                                </userDefinedRuntimeAttribute>
                                                            </userDefinedRuntimeAttributes>
                                                        </textView>
                                                    </subviews>
                                                    <color key="backgroundColor" red="0.96078431372549022" green="0.96470588235294119" blue="0.98039215686274506" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <constraints>
                                                        <constraint firstAttribute="bottom" secondItem="Rq2-vc-D0Q" secondAttribute="bottom" constant="5" id="0Cw-7y-UU8"/>
                                                        <constraint firstAttribute="height" constant="85" id="cfd-jh-BOD"/>
                                                        <constraint firstItem="Rq2-vc-D0Q" firstAttribute="top" secondItem="5zn-TC-ZAu" secondAttribute="top" constant="13" id="dzq-Zq-Nn7"/>
                                                        <constraint firstItem="Rq2-vc-D0Q" firstAttribute="leading" secondItem="5zn-TC-ZAu" secondAttribute="leading" constant="10" id="o28-6B-ks8"/>
                                                        <constraint firstAttribute="trailing" secondItem="Rq2-vc-D0Q" secondAttribute="trailing" constant="10" id="psV-5N-czS"/>
                                                    </constraints>
                                                    <userDefinedRuntimeAttributes>
                                                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                                            <real key="value" value="2"/>
                                                        </userDefinedRuntimeAttribute>
                                                    </userDefinedRuntimeAttributes>
                                                </view>
                                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xEk-ac-udO">
                                                    <rect key="frame" x="12" y="365" width="530" height="1"/>
                                                    <color key="backgroundColor" red="0.59215686274509804" green="0.59215686274509804" blue="0.59215686274509804" alpha="0.19" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <constraints>
                                                        <constraint firstAttribute="height" constant="1" id="Sqh-1l-0AK"/>
                                                    </constraints>
                                                </view>
                                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Y1j-mH-7vJ">
                                                    <rect key="frame" x="472" y="207" width="42" height="22"/>
                                                    <subviews>
                                                        <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="1" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="1nG-XY-fwB">
                                                            <rect key="frame" x="0.0" y="0.0" width="42" height="22"/>
                                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                                                            <textInputTraits key="textInputTraits" keyboardType="numberPad"/>
                                                        </textField>
                                                    </subviews>
                                                    <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                                    <constraints>
                                                        <constraint firstItem="1nG-XY-fwB" firstAttribute="leading" secondItem="Y1j-mH-7vJ" secondAttribute="leading" id="9b3-RM-v4h"/>
                                                        <constraint firstAttribute="height" constant="22" id="R3q-Nk-4iS"/>
                                                        <constraint firstAttribute="bottom" secondItem="1nG-XY-fwB" secondAttribute="bottom" id="Xx9-sr-dwe"/>
                                                        <constraint firstAttribute="width" constant="42" id="oWK-ot-4U7"/>
                                                        <constraint firstItem="1nG-XY-fwB" firstAttribute="top" secondItem="Y1j-mH-7vJ" secondAttribute="top" id="tkb-yS-R2g"/>
                                                        <constraint firstAttribute="trailing" secondItem="1nG-XY-fwB" secondAttribute="trailing" id="zsH-Qp-Uz9"/>
                                                    </constraints>
                                                </view>
                                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="wqg-IO-Jti">
                                                    <rect key="frame" x="514" y="207" width="32" height="22"/>
                                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                                    <state key="normal" image="btn_add"/>
                                                    <state key="disabled" image="btn_add_un"/>
                                                    <connections>
                                                        <action selector="addNumAction:" destination="-1" eventType="touchUpInside" id="N9f-5O-JZz"/>
                                                    </connections>
                                                </button>
                                                <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="H9G-ck-ezM">
                                                    <rect key="frame" x="702" y="206" width="32" height="22"/>
                                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                                    <state key="normal" image="btn_reduce"/>
                                                    <state key="disabled" image="btn_reduce_un"/>
                                                    <connections>
                                                        <action selector="reduceAction:" destination="-1" eventType="touchUpInside" id="kjW-Nx-vAZ"/>
                                                    </connections>
                                                </button>
                                            </subviews>
                                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                            <constraints>
                                                <constraint firstAttribute="trailing" secondItem="SZF-J0-byW" secondAttribute="trailing" constant="13" id="2bc-jD-0jQ"/>
                                                <constraint firstItem="QM5-dP-No2" firstAttribute="top" secondItem="Pcy-2J-bsd" secondAttribute="top" constant="15" id="3oV-je-E0W"/>
                                                <constraint firstItem="SZF-J0-byW" firstAttribute="leading" secondItem="QM5-dP-No2" secondAttribute="trailing" constant="13" id="4nD-DW-K4G"/>
                                                <constraint firstItem="wqg-IO-Jti" firstAttribute="leading" secondItem="Y1j-mH-7vJ" secondAttribute="trailing" id="96J-NH-U7L"/>
                                                <constraint firstItem="MS7-3T-DWG" firstAttribute="top" secondItem="EeU-Wx-jBI" secondAttribute="bottom" constant="17" id="APQ-K4-sOj"/>
                                                <constraint firstAttribute="trailing" secondItem="xEk-ac-udO" secondAttribute="trailing" constant="14" id="AaJ-eg-xRI"/>
                                                <constraint firstAttribute="trailing" secondItem="Y1j-mH-7vJ" secondAttribute="trailing" constant="42" id="Cnz-nI-ucx"/>
                                                <constraint firstItem="xEk-ac-udO" firstAttribute="leading" secondItem="Pcy-2J-bsd" secondAttribute="leading" constant="12" id="DSj-62-NMj"/>
                                                <constraint firstItem="MS7-3T-DWG" firstAttribute="leading" secondItem="EeU-Wx-jBI" secondAttribute="leading" id="EM3-jV-CSR"/>
                                                <constraint firstAttribute="trailing" secondItem="wqg-IO-Jti" secondAttribute="trailing" constant="10" id="Goo-fu-khj"/>
                                                <constraint firstAttribute="trailing" secondItem="h4B-Ju-L2P" secondAttribute="trailing" constant="24" id="IR2-x4-cFb"/>
                                                <constraint firstAttribute="bottom" secondItem="xEk-ac-udO" secondAttribute="bottom" id="KBt-SR-4KH"/>
                                                <constraint firstItem="wqg-IO-Jti" firstAttribute="centerY" secondItem="Y1j-mH-7vJ" secondAttribute="centerY" id="KJ6-H3-YR4"/>
                                                <constraint firstItem="SZF-J0-byW" firstAttribute="top" secondItem="QM5-dP-No2" secondAttribute="top" id="N7D-wc-hs4"/>
                                                <constraint firstItem="Y1j-mH-7vJ" firstAttribute="top" secondItem="h4B-Ju-L2P" secondAttribute="bottom" constant="22" id="RcG-f4-yEi"/>
                                                <constraint firstItem="h4B-Ju-L2P" firstAttribute="centerY" secondItem="Zy6-3Q-Lgi" secondAttribute="centerY" id="ScA-Kv-FAY"/>
                                                <constraint firstItem="xEk-ac-udO" firstAttribute="top" secondItem="5zn-TC-ZAu" secondAttribute="bottom" constant="14" id="TRf-HU-Y0g"/>
                                                <constraint firstAttribute="trailing" secondItem="5zn-TC-ZAu" secondAttribute="trailing" constant="14" id="XsR-S7-5se"/>
                                                <constraint firstItem="h4B-Ju-L2P" firstAttribute="leading" secondItem="Zy6-3Q-Lgi" secondAttribute="trailing" id="XyT-7a-Pzk"/>
                                                <constraint firstItem="5zn-TC-ZAu" firstAttribute="top" secondItem="MS7-3T-DWG" secondAttribute="bottom" constant="12" id="Zb6-DZ-qrC"/>
                                                <constraint firstItem="5zn-TC-ZAu" firstAttribute="leading" secondItem="Pcy-2J-bsd" secondAttribute="leading" constant="14" id="gfc-ka-HC8"/>
                                                <constraint firstItem="EeU-Wx-jBI" firstAttribute="top" secondItem="QM5-dP-No2" secondAttribute="bottom" constant="18" id="kWP-Z3-Uve"/>
                                                <constraint firstItem="QM5-dP-No2" firstAttribute="leading" secondItem="Pcy-2J-bsd" secondAttribute="leading" constant="14" id="lJI-a1-yyL"/>
                                                <constraint firstItem="EeU-Wx-jBI" firstAttribute="leading" secondItem="Pcy-2J-bsd" secondAttribute="leading" constant="14" id="pIg-OO-tpF"/>
                                                <constraint firstItem="h4B-Ju-L2P" firstAttribute="bottom" secondItem="QM5-dP-No2" secondAttribute="bottom" id="z2m-b7-4WH"/>
                                            </constraints>
                                        </view>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="wtR-SK-T7a">
                                            <rect key="frame" x="0.0" y="456" width="556" height="144"/>
                                            <subviews>
                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="订单明细" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Iiz-eZ-hKI">
                                                    <rect key="frame" x="14" y="14" width="49.5" height="17"/>
                                                    <constraints>
                                                        <constraint firstAttribute="height" constant="17" id="BUE-9o-zpr"/>
                                                    </constraints>
                                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                                <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillEqually" spacing="12" translatesAutoresizingMaskIntoConstraints="NO" id="GgK-VE-bt3">
                                                    <rect key="frame" x="14" y="43" width="528" height="78"/>
                                                    <subviews>
                                                        <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="0IF-ep-QG5">
                                                            <rect key="frame" x="0.0" y="0.0" width="528" height="18"/>
                                                            <subviews>
                                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="订单编号" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="I5K-7H-2kX">
                                                                    <rect key="frame" x="0.0" y="0.0" width="264" height="18"/>
                                                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.63" colorSpace="custom" customColorSpace="sRGB"/>
                                                                    <nil key="highlightedColor"/>
                                                                </label>
                                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BaU-rt-9wh">
                                                                    <rect key="frame" x="264" y="0.0" width="264" height="18"/>
                                                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                                                    <nil key="highlightedColor"/>
                                                                </label>
                                                            </subviews>
                                                            <constraints>
                                                                <constraint firstAttribute="height" constant="18" id="jue-fW-Woh"/>
                                                            </constraints>
                                                        </stackView>
                                                        <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="aXO-Lw-AE6">
                                                            <rect key="frame" x="0.0" y="30" width="528" height="18"/>
                                                            <subviews>
                                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="商品数量" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="G58-Z2-Ufd">
                                                                    <rect key="frame" x="0.0" y="0.0" width="264" height="18"/>
                                                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.63" colorSpace="custom" customColorSpace="sRGB"/>
                                                                    <nil key="highlightedColor"/>
                                                                </label>
                                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="p4X-ju-9r7">
                                                                    <rect key="frame" x="264" y="0.0" width="264" height="18"/>
                                                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                                                    <nil key="highlightedColor"/>
                                                                </label>
                                                            </subviews>
                                                            <constraints>
                                                                <constraint firstAttribute="height" constant="18" id="z3i-7e-ve5"/>
                                                            </constraints>
                                                        </stackView>
                                                        <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="3vf-Jc-xSQ">
                                                            <rect key="frame" x="0.0" y="60" width="528" height="18"/>
                                                            <subviews>
                                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="所需积分" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ubT-g7-SAE">
                                                                    <rect key="frame" x="0.0" y="0.0" width="264" height="18"/>
                                                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.63" colorSpace="custom" customColorSpace="sRGB"/>
                                                                    <nil key="highlightedColor"/>
                                                                </label>
                                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vFF-je-HEk">
                                                                    <rect key="frame" x="264" y="0.0" width="264" height="18"/>
                                                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                                                    <nil key="highlightedColor"/>
                                                                </label>
                                                            </subviews>
                                                            <constraints>
                                                                <constraint firstAttribute="height" constant="18" id="VMl-Xk-7UY"/>
                                                            </constraints>
                                                        </stackView>
                                                    </subviews>
                                                </stackView>
                                            </subviews>
                                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                            <constraints>
                                                <constraint firstAttribute="trailing" secondItem="GgK-VE-bt3" secondAttribute="trailing" constant="14" id="BDH-9D-eCw"/>
                                                <constraint firstItem="GgK-VE-bt3" firstAttribute="top" secondItem="Iiz-eZ-hKI" secondAttribute="bottom" constant="12" id="Eo3-Oh-a3Z"/>
                                                <constraint firstAttribute="bottom" secondItem="GgK-VE-bt3" secondAttribute="bottom" constant="23" id="JHg-Uk-oLp"/>
                                                <constraint firstItem="GgK-VE-bt3" firstAttribute="leading" secondItem="wtR-SK-T7a" secondAttribute="leading" constant="14" id="Yqm-RF-aCO"/>
                                                <constraint firstItem="Iiz-eZ-hKI" firstAttribute="top" secondItem="wtR-SK-T7a" secondAttribute="top" constant="14" id="iU6-By-9gQ"/>
                                                <constraint firstItem="Iiz-eZ-hKI" firstAttribute="leading" secondItem="wtR-SK-T7a" secondAttribute="leading" constant="14" id="nOZ-ZO-2M3"/>
                                            </constraints>
                                        </view>
                                    </subviews>
                                </stackView>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstItem="HCf-Ym-o1O" firstAttribute="top" secondItem="4wG-oJ-eBG" secondAttribute="top" id="DCz-af-SfU"/>
                                <constraint firstItem="HCf-Ym-o1O" firstAttribute="leading" secondItem="4wG-oJ-eBG" secondAttribute="leading" id="O0W-Vj-MQu"/>
                                <constraint firstAttribute="trailing" secondItem="HCf-Ym-o1O" secondAttribute="trailing" id="kLn-ey-BR3"/>
                                <constraint firstAttribute="bottom" secondItem="HCf-Ym-o1O" secondAttribute="bottom" id="p31-FG-x1V"/>
                            </constraints>
                        </view>
                    </subviews>
                    <constraints>
                        <constraint firstItem="4wG-oJ-eBG" firstAttribute="centerX" secondItem="hFz-gY-osL" secondAttribute="centerX" id="Ekr-Mf-mRx"/>
                        <constraint firstItem="4wG-oJ-eBG" firstAttribute="top" secondItem="hFz-gY-osL" secondAttribute="top" id="GBX-fU-1sC"/>
                        <constraint firstAttribute="trailing" secondItem="4wG-oJ-eBG" secondAttribute="trailing" id="OKc-BC-Gr0"/>
                        <constraint firstAttribute="bottom" secondItem="4wG-oJ-eBG" secondAttribute="bottom" id="WOf-kE-3hm"/>
                        <constraint firstItem="4wG-oJ-eBG" firstAttribute="leading" secondItem="hFz-gY-osL" secondAttribute="leading" id="e0X-ZE-osE"/>
                    </constraints>
                </scrollView>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="hFz-gY-osL" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="234" id="3WH-fe-XhR"/>
                <constraint firstItem="d3o-Ba-FIK" firstAttribute="leading" secondItem="hFz-gY-osL" secondAttribute="leading" id="6GX-JT-Etr"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="hFz-gY-osL" secondAttribute="trailing" constant="234" id="RBz-Ca-CDY"/>
                <constraint firstItem="d3o-Ba-FIK" firstAttribute="top" secondItem="hFz-gY-osL" secondAttribute="bottom" id="VbC-Vh-fBI"/>
                <constraint firstAttribute="bottom" secondItem="d3o-Ba-FIK" secondAttribute="bottom" id="bIt-jr-ybB"/>
                <constraint firstItem="hFz-gY-osL" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" id="hoD-uS-Uua"/>
                <constraint firstItem="d3o-Ba-FIK" firstAttribute="trailing" secondItem="hFz-gY-osL" secondAttribute="trailing" id="iPc-7p-fmI"/>
            </constraints>
            <point key="canvasLocation" x="97.8515625" y="20.644216691068813"/>
        </view>
    </objects>
    <resources>
        <image name="btn_add" width="10" height="10"/>
        <image name="btn_add_un" width="10" height="10"/>
        <image name="btn_reduce" width="10" height="2"/>
        <image name="btn_reduce_un" width="10" height="2"/>
        <image name="icon_more_gray" width="6" height="10"/>
        <systemColor name="labelColor">
            <color white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
DolphinEnglishLearnStudent/Moudle/Me/MeVC.swift
New file
@@ -0,0 +1,75 @@
//
//  MeVC.swift
//  DolphinEnglishLearnStudent
//
//  Created by 无故事王国 on 2024/5/22.
//
import UIKit
import QMUIKit
class MeVC: BaseVC {
                @IBOutlet weak var btn_address: QMUIButton!
                @IBOutlet weak var btn_coinRecord: QMUIButton!
                @IBOutlet weak var btn_exchangeRecord: QMUIButton!
                @IBOutlet weak var btn_share: QMUIButton!
                @IBOutlet weak var btn_etudyRecord: QMUIButton!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
                override func setUI() {
                                super.setUI()
                                btn_address.spacingBetweenImageAndTitle = 11
                                btn_coinRecord.spacingBetweenImageAndTitle = 11
                                btn_exchangeRecord.spacingBetweenImageAndTitle = 11
                                btn_share.spacingBetweenImageAndTitle = 11
                                btn_etudyRecord.spacingBetweenImageAndTitle = 11
                                btn_address.imagePosition = .top
                                btn_coinRecord.imagePosition = .top
                                btn_exchangeRecord.imagePosition = .top
                                btn_share.imagePosition = .top
                                btn_etudyRecord.imagePosition = .top
                }
                /// 地址管理
                @IBAction func addressManageAction(_ sender: QMUIButton) {
                                let vc = AddressManageVC(type: .handle)
                                vc.title = "地址管理"
                                push(vc: vc)
                }
                @IBAction func coinHistoryAction(_ sender: QMUIButton) {
                                let vc = CoinRecordHistoryVC()
                                vc.title = "积分明细"
                                push(vc: vc)
                }
                @IBAction func exchangeHistoryAction(_ sender: QMUIButton) {
                                let vc = ExchangeRecordHistoryVC()
                                vc.title = "兑换记录"
                                push(vc: vc)
                }
                @IBAction func studyRecord(_ sender: QMUIButton) {
                                let vc = StudyVC()
                                vc.title = "学习记录"
                                push(vc: vc)
                }
                @IBAction func shareAction(_ sender: QMUIButton) {
                }
                @IBAction func quitAction(_ sender: UIButton) {
                                CommonAlertView.show(content: "确认退出当前账户吗?") {
                                }
                }
}
DolphinEnglishLearnStudent/Moudle/Me/MeVC.xib
New file
@@ -0,0 +1,207 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="ipad10_9rounded" orientation="landscape" layout="fullscreen" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <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="MeVC" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
            <connections>
                <outlet property="btn_address" destination="gcd-Sg-l2C" id="yXD-39-cKv"/>
                <outlet property="btn_coinRecord" destination="mty-Gt-zOb" id="oj9-Zv-p4Z"/>
                <outlet property="btn_etudyRecord" destination="0pk-gO-3Qh" id="SeS-bo-pn4"/>
                <outlet property="btn_exchangeRecord" destination="uH5-eT-V9Z" id="8gd-zT-JND"/>
                <outlet property="btn_share" destination="gtG-mF-MKi" id="ejw-y9-ugq"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="1180" height="820"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ora-D0-c8V">
                    <rect key="frame" x="156" y="43" width="868" height="131"/>
                    <subviews>
                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="qXF-FL-HEr">
                            <rect key="frame" x="16" y="18.5" width="94" height="94"/>
                            <constraints>
                                <constraint firstAttribute="width" constant="94" id="amf-fS-Jue"/>
                                <constraint firstAttribute="height" constant="94" id="tT8-rb-MEe"/>
                            </constraints>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                    <real key="value" value="47"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                        </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="D0d-O7-Pt2">
                            <rect key="frame" x="128" y="40.5" width="46" height="21.5"/>
                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.78000000000000003" colorSpace="custom" customColorSpace="calibratedRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LJb-Ki-p3S">
                            <rect key="frame" x="128" y="72" width="13.5" height="20"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="20" id="6Mf-TD-g30"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="calibratedRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="D0d-O7-Pt2" firstAttribute="leading" secondItem="qXF-FL-HEr" secondAttribute="trailing" constant="18" id="0RC-Ct-neE"/>
                        <constraint firstItem="LJb-Ki-p3S" firstAttribute="top" secondItem="D0d-O7-Pt2" secondAttribute="bottom" constant="10" id="ILj-gS-zIv"/>
                        <constraint firstItem="qXF-FL-HEr" firstAttribute="centerY" secondItem="Ora-D0-c8V" secondAttribute="centerY" id="OLa-Ch-3Ab"/>
                        <constraint firstItem="qXF-FL-HEr" firstAttribute="leading" secondItem="Ora-D0-c8V" secondAttribute="leading" constant="16" id="XVR-3Y-0ky"/>
                        <constraint firstItem="D0d-O7-Pt2" firstAttribute="top" secondItem="qXF-FL-HEr" secondAttribute="top" constant="22" id="t9P-Q3-DXe"/>
                        <constraint firstAttribute="height" constant="131" id="yW9-GD-apo"/>
                        <constraint firstItem="LJb-Ki-p3S" firstAttribute="leading" secondItem="D0d-O7-Pt2" secondAttribute="leading" id="yb5-Js-wff"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="8"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="e6a-MV-XUk">
                    <rect key="frame" x="156" y="193" width="868" height="158"/>
                    <subviews>
                        <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillEqually" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="eBA-xA-cf9">
                            <rect key="frame" x="0.0" y="0.0" width="868" height="158"/>
                            <subviews>
                                <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="Uoo-e1-5Na">
                                    <rect key="frame" x="0.0" y="0.0" width="868" height="158"/>
                                    <subviews>
                                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gcd-Sg-l2C" customClass="QMUIButton">
                                            <rect key="frame" x="0.0" y="0.0" width="173.5" height="158"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                            <state key="normal" title="地址管理" image="icon_address">
                                                <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="0.75" colorSpace="custom" customColorSpace="sRGB"/>
                                            </state>
                                            <connections>
                                                <action selector="addressManageAction:" destination="-1" eventType="touchUpInside" id="iZY-Wk-fdR"/>
                                            </connections>
                                        </button>
                                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="mty-Gt-zOb" customClass="QMUIButton">
                                            <rect key="frame" x="173.5" y="0.0" width="173.5" height="158"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                            <state key="normal" title="积分明细" image="icon_coin">
                                                <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="0.75" colorSpace="custom" customColorSpace="sRGB"/>
                                            </state>
                                            <connections>
                                                <action selector="coinHistoryAction:" destination="-1" eventType="touchUpInside" id="Phd-DG-dl8"/>
                                            </connections>
                                        </button>
                                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uH5-eT-V9Z" customClass="QMUIButton">
                                            <rect key="frame" x="347" y="0.0" width="174" height="158"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                            <state key="normal" title="兑换记录" image="icon_record">
                                                <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="0.75" colorSpace="custom" customColorSpace="sRGB"/>
                                            </state>
                                            <connections>
                                                <action selector="exchangeHistoryAction:" destination="-1" eventType="touchUpInside" id="FI6-zw-awE"/>
                                            </connections>
                                        </button>
                                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0pk-gO-3Qh" customClass="QMUIButton">
                                            <rect key="frame" x="521" y="0.0" width="173.5" height="158"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                            <state key="normal" title="学习记录" image="icon_feedback">
                                                <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="0.75" colorSpace="custom" customColorSpace="sRGB"/>
                                            </state>
                                            <connections>
                                                <action selector="studyRecord:" destination="-1" eventType="touchUpInside" id="ggL-Pj-jCU"/>
                                            </connections>
                                        </button>
                                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gtG-mF-MKi" customClass="QMUIButton">
                                            <rect key="frame" x="694.5" y="0.0" width="173.5" height="158"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                            <state key="normal" title="分享好友" image="icon_share">
                                                <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="0.75" colorSpace="custom" customColorSpace="sRGB"/>
                                            </state>
                                            <connections>
                                                <action selector="shareAction:" destination="-1" eventType="touchUpInside" id="mmm-mt-qBh"/>
                                            </connections>
                                        </button>
                                    </subviews>
                                </stackView>
                            </subviews>
                        </stackView>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="eBA-xA-cf9" firstAttribute="top" secondItem="e6a-MV-XUk" secondAttribute="top" id="6Rv-YX-eW3"/>
                        <constraint firstAttribute="bottom" secondItem="eBA-xA-cf9" secondAttribute="bottom" id="SZj-oC-XlE"/>
                        <constraint firstAttribute="height" constant="158" id="Tyr-UQ-W0h"/>
                        <constraint firstAttribute="trailing" secondItem="eBA-xA-cf9" secondAttribute="trailing" id="lrL-cf-jkF"/>
                        <constraint firstItem="eBA-xA-cf9" firstAttribute="leading" secondItem="e6a-MV-XUk" secondAttribute="leading" id="pax-oJ-hc8"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="8"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0ov-a9-SIh">
                    <rect key="frame" x="517" y="746" width="146" height="35"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="35" id="Pmu-jq-26R"/>
                        <constraint firstAttribute="width" constant="146" id="WBn-bB-h5a"/>
                    </constraints>
                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <state key="normal" title="退出登录"/>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB">
                            <real key="value" value="1"/>
                        </userDefinedRuntimeAttribute>
                        <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB">
                            <color key="value" red="0.90196078431372551" green="0.90196078431372551" blue="0.90196078431372551" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                    <connections>
                        <action selector="quitAction:" destination="-1" eventType="touchUpInside" id="322-D8-aP5"/>
                    </connections>
                </button>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="e6a-MV-XUk" firstAttribute="trailing" secondItem="Ora-D0-c8V" secondAttribute="trailing" id="2Vg-Gn-vCR"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="0ov-a9-SIh" secondAttribute="bottom" constant="19" id="9Nj-G9-pFt"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="Ora-D0-c8V" secondAttribute="trailing" constant="156" id="J8V-r0-2Tg"/>
                <constraint firstItem="Ora-D0-c8V" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="19" id="Sf2-5e-8rp"/>
                <constraint firstItem="e6a-MV-XUk" firstAttribute="top" secondItem="Ora-D0-c8V" secondAttribute="bottom" constant="19" id="Ucv-hg-egV"/>
                <constraint firstItem="0ov-a9-SIh" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="hZE-3Q-G5A"/>
                <constraint firstItem="e6a-MV-XUk" firstAttribute="leading" secondItem="Ora-D0-c8V" secondAttribute="leading" id="yaJ-po-bJn"/>
                <constraint firstItem="Ora-D0-c8V" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="156" id="z4O-Qy-ttE"/>
            </constraints>
            <point key="canvasLocation" x="45" y="20"/>
        </view>
    </objects>
    <resources>
        <image name="icon_address" width="39" height="36"/>
        <image name="icon_coin" width="36" height="39"/>
        <image name="icon_feedback" width="34" height="39"/>
        <image name="icon_record" width="34" height="35"/>
        <image name="icon_share" width="30" height="39"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
DolphinEnglishLearnStudent/Moudle/Me/TCell/AddressManageTCell.swift
New file
@@ -0,0 +1,61 @@
//
//  AddressManageTCell.swift
//  DolphinEnglishLearnManager
//
//  Created by 无故事王国 on 2024/5/20.
//
import UIKit
class AddressManageTCell: UITableViewCell {
                var isFist:Bool = false
                var isLast:Bool = false
                @IBOutlet weak var btn_default: UIButton!
                @IBOutlet weak var btn_delete: UIButton!
                @IBOutlet weak var btn_edit: UIButton!
                @IBOutlet weak var img_more: UIImageView!
    override func awakeFromNib() {
        super.awakeFromNib()
                                selectionStyle = .none
    }
                func isDefault(_ state:Bool){
                                if state{
                                                btn_default.setTitle(" 默认 ", for: .normal)
                                                btn_default.backgroundColor = UIColor(hexStr: "#F7462D")
                                                btn_default.setTitleColor(.white, for: .normal)
                                                btn_default.jq_cornerRadius = 8.5
                                                btn_default.jq_size = CGSize.init(width: 42, height: 17)
                                                btn_default.sizeToFit()
                                }else{
                                                let attribute = AttributedStringbuilder.build().add(string: "设为默认", withFont: .systemFont(ofSize: 14, weight: .medium), withColor: UIColor(hexStr: "#41A2EB")).underLine(color: UIColor(hexStr: "#41A2EB")).mutableAttributedString
                                                btn_default.setAttributedTitle(attribute, for: .normal)
                                }
                }
                @IBAction func deleteAction(_ sender: UIButton) {
                                CommonAlertView.show(content:"确认删除所选信息吗?") {
                                }
                }
                @IBAction func editAction(_ sender: UIButton) {
                                let vc = AddressManageHandleVC()
                                vc.title = "编辑地址"
                                JQ_currentViewController().jq_push(vc: vc)
                }
                override func layoutSubviews() {
                                if isFist{
                                                contentView.jq_addCorners(corner: [.topLeft,.topRight], radius: 10)
                                }
                                if isLast{
                                                contentView.jq_addCorners(corner: [.bottomLeft,.bottomLeft], radius: 10)
                                }
                }
}
DolphinEnglishLearnStudent/Moudle/Me/TCell/AddressManageTCell.xib
New file
@@ -0,0 +1,118 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" 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="22684"/>
        <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="default" indentationWidth="10" rowHeight="95" id="KGk-i7-Jjw" customClass="AddressManageTCell" customModule="DolphinEnglishLearnManager" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="447" height="95"/>
            <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="447" height="95"/>
                <autoresizingMask key="autoresizingMask"/>
                <subviews>
                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LabelLabelLabelLabelLabelLabelLabelLabelLabelLabelLabelLabelLabelLabelLabelLabelLabelLabelLabel" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Qjx-I2-glv">
                        <rect key="frame" x="14" y="17" width="343" height="20"/>
                        <constraints>
                            <constraint firstAttribute="height" constant="20" id="pSh-9D-wSG"/>
                        </constraints>
                        <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                        <nil key="textColor"/>
                        <nil key="highlightedColor"/>
                    </label>
                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ezc-re-P3r">
                        <rect key="frame" x="375" y="18.666666666666668" width="58" height="17.000000000000004"/>
                        <constraints>
                            <constraint firstAttribute="height" constant="17" id="0Kf-PA-7Or"/>
                            <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="42" id="4RT-3H-dH2"/>
                        </constraints>
                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
                        <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                        <state key="normal" title="设为默认">
                            <color key="titleColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        </state>
                    </button>
                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="-- | --" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="g9x-qe-0Me">
                        <rect key="frame" x="13.999999999999996" y="42" width="41.666666666666657" height="17"/>
                        <constraints>
                            <constraint firstAttribute="height" constant="17" id="04w-Er-l9A"/>
                        </constraints>
                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
                        <nil key="textColor"/>
                        <nil key="highlightedColor"/>
                    </label>
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Sjj-oO-GNP">
                        <rect key="frame" x="0.0" y="92" width="447" height="3"/>
                        <color key="backgroundColor" red="0.8901960784313725" green="0.97254901960784312" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstAttribute="height" constant="3" id="oGW-Do-Mb7"/>
                        </constraints>
                    </view>
                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WFf-ch-GdK">
                        <rect key="frame" x="417" y="65" width="22" height="22"/>
                        <constraints>
                            <constraint firstAttribute="width" constant="22" id="MYR-Gw-7HP"/>
                        </constraints>
                        <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                        <state key="normal" image="btn_edit_b"/>
                        <connections>
                            <action selector="editAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="Ff1-yE-neb"/>
                        </connections>
                    </button>
                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="a8n-tE-gqa">
                        <rect key="frame" x="387" y="65" width="22" height="22"/>
                        <constraints>
                            <constraint firstAttribute="width" constant="22" id="O11-LV-N1c"/>
                        </constraints>
                        <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                        <state key="normal" image="btn_delete"/>
                        <connections>
                            <action selector="deleteAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="iyg-mk-Xa2"/>
                        </connections>
                    </button>
                    <imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_more_gray" translatesAutoresizingMaskIntoConstraints="NO" id="Qav-bf-Mlo">
                        <rect key="frame" x="427" y="42.666666666666664" width="6" height="10"/>
                    </imageView>
                </subviews>
                <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                <constraints>
                    <constraint firstItem="Sjj-oO-GNP" firstAttribute="top" secondItem="WFf-ch-GdK" secondAttribute="bottom" constant="5" id="19d-dy-g3v"/>
                    <constraint firstAttribute="trailing" secondItem="ezc-re-P3r" secondAttribute="trailing" constant="14" id="3We-3h-tgl"/>
                    <constraint firstAttribute="trailing" secondItem="Qav-bf-Mlo" secondAttribute="trailing" constant="14" id="5CH-E8-JHk"/>
                    <constraint firstItem="g9x-qe-0Me" firstAttribute="top" secondItem="Qjx-I2-glv" secondAttribute="bottom" constant="5" id="IXI-3H-V1L"/>
                    <constraint firstAttribute="bottom" secondItem="Sjj-oO-GNP" secondAttribute="bottom" id="Iij-PX-IvL"/>
                    <constraint firstItem="Sjj-oO-GNP" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="Jw5-AC-vFm"/>
                    <constraint firstItem="g9x-qe-0Me" firstAttribute="leading" secondItem="Qjx-I2-glv" secondAttribute="leading" id="Y24-Yc-nQe"/>
                    <constraint firstItem="WFf-ch-GdK" firstAttribute="leading" secondItem="a8n-tE-gqa" secondAttribute="trailing" constant="8" id="ZOQ-1v-5Kt"/>
                    <constraint firstItem="WFf-ch-GdK" firstAttribute="centerY" secondItem="a8n-tE-gqa" secondAttribute="centerY" id="b33-sU-VH8"/>
                    <constraint firstAttribute="trailing" secondItem="WFf-ch-GdK" secondAttribute="trailing" constant="8" id="cdZ-LG-HxC"/>
                    <constraint firstAttribute="trailing" secondItem="Qjx-I2-glv" secondAttribute="trailing" constant="90" id="ilg-if-crt"/>
                    <constraint firstItem="ezc-re-P3r" firstAttribute="centerY" secondItem="Qjx-I2-glv" secondAttribute="centerY" id="jaZ-YW-hs3"/>
                    <constraint firstAttribute="trailing" secondItem="Sjj-oO-GNP" secondAttribute="trailing" id="kpi-gS-qGK"/>
                    <constraint firstItem="Qav-bf-Mlo" firstAttribute="centerY" secondItem="H2p-sc-9uM" secondAttribute="centerY" id="mf1-dH-JFG"/>
                    <constraint firstItem="Qjx-I2-glv" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="17" id="n6m-UK-hwu"/>
                    <constraint firstItem="Qjx-I2-glv" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="yMI-eD-vUL"/>
                </constraints>
            </tableViewCellContentView>
            <viewLayoutGuide key="safeArea" id="njF-e1-oar"/>
            <connections>
                <outlet property="btn_default" destination="ezc-re-P3r" id="6eH-YL-mTQ"/>
                <outlet property="btn_delete" destination="a8n-tE-gqa" id="elJ-VF-A4k"/>
                <outlet property="btn_edit" destination="WFf-ch-GdK" id="Wfz-Oo-mbZ"/>
                <outlet property="img_more" destination="Qav-bf-Mlo" id="ykH-wg-Brt"/>
            </connections>
            <point key="canvasLocation" x="202.29007633587784" y="49.647887323943664"/>
        </tableViewCell>
    </objects>
    <resources>
        <image name="btn_delete" width="12" height="15"/>
        <image name="btn_edit_b" width="13" height="14"/>
        <image name="icon_more_gray" width="6" height="10"/>
    </resources>
</document>
DolphinEnglishLearnStudent/Moudle/Me/TCell/GoodsItemTCell.swift
New file
@@ -0,0 +1,27 @@
//
//  GoodsItemTCell.swift
//  DolphinEnglishLearnManager
//
//  Created by 无故事王国 on 2024/5/20.
//
import UIKit
class GoodsItemTCell: UITableViewCell {
                @IBOutlet weak var view_container: UIView!
                override func awakeFromNib() {
        super.awakeFromNib()
                                selectionStyle = .none
                                backgroundColor = .clear
                                view_container.jq_addShadows(shadowColor: UIColor(hexStr: "#D9D9D9").withAlphaComponent(0.28), corner: 8, radius: 3, offset: CGSize(width: 0, height: 2), opacity: 1)
    }
                @IBAction func handleAction(_ sender: UIButton) {
                                let vc = AddressManageVC(type: .choose)
                                vc.title = "修改地址"
                                JQ_currentViewController().jq_push(vc: vc)
                }
}
DolphinEnglishLearnStudent/Moudle/Me/TCell/GoodsItemTCell.xib
New file
@@ -0,0 +1,149 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" 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="22684"/>
        <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="default" indentationWidth="10" reuseIdentifier="_GoodsItemTCell" rowHeight="344" id="KGk-i7-Jjw" customClass="GoodsItemTCell" customModule="DolphinEnglishLearnManager" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="532" height="344"/>
            <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="532" height="344"/>
                <autoresizingMask key="autoresizingMask"/>
                <subviews>
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="EWl-m5-3O9">
                        <rect key="frame" x="0.0" y="6" width="532" height="332"/>
                        <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="9oA-7x-in6">
                                <rect key="frame" x="8" y="19" width="41.333333333333336" height="20.333333333333329"/>
                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                <nil key="textColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="HZS-Oe-5LR">
                                <rect key="frame" x="8" y="52.333333333333343" width="148" height="148"/>
                                <constraints>
                                    <constraint firstAttribute="width" constant="148" id="D3I-iy-k6w"/>
                                    <constraint firstAttribute="width" secondItem="HZS-Oe-5LR" secondAttribute="height" multiplier="1:1" id="YQJ-eG-71N"/>
                                </constraints>
                                <userDefinedRuntimeAttributes>
                                    <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                    <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                        <real key="value" value="4"/>
                                    </userDefinedRuntimeAttribute>
                                </userDefinedRuntimeAttributes>
                            </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="UdI-oe-WSO">
                                <rect key="frame" x="173" y="52.333333333333336" width="234" height="19.333333333333336"/>
                                <fontDescription key="fontDescription" type="system" pointSize="16"/>
                                <color key="textColor" red="0.082352941176470587" green="0.086274509803921567" blue="0.094117647058823528" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0积分" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nMG-SO-H2Z">
                                <rect key="frame" x="481" y="52.666666666666664" width="40" height="18.666666666666664"/>
                                <fontDescription key="fontDescription" name="DINAlternate-Bold" family="DIN Alternate" pointSize="16"/>
                                <color key="textColor" red="0.96862745100000003" green="0.27450980390000002" blue="0.1764705882" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <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="viA-yT-ZWk">
                                <rect key="frame" x="173" y="71.666666666666671" width="359" height="17"/>
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                <nil key="textColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillEqually" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="vd5-iK-Ujb">
                                <rect key="frame" x="173" y="95.666666666666686" width="303" height="70"/>
                                <subviews>
                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="商品数量:-" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PlF-D7-xZD">
                                        <rect key="frame" x="0.0" y="0.0" width="303" height="20"/>
                                        <constraints>
                                            <constraint firstAttribute="height" constant="20" id="ima-Vh-7Ak"/>
                                        </constraints>
                                        <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
                                        <color key="textColor" red="0.082352941176470587" green="0.086274509803921567" blue="0.094117647058823528" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                        <nil key="highlightedColor"/>
                                    </label>
                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="收获信息:-" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qnF-SM-ngM">
                                        <rect key="frame" x="0.0" y="25" width="303" height="20"/>
                                        <constraints>
                                            <constraint firstAttribute="height" constant="20" id="SzN-h8-eUd"/>
                                        </constraints>
                                        <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
                                        <color key="textColor" red="0.08235294118" green="0.086274509799999996" blue="0.094117647060000004" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                        <nil key="highlightedColor"/>
                                    </label>
                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="发货信息:-" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cSS-lo-Yba">
                                        <rect key="frame" x="0.0" y="49.999999999999986" width="303" height="20"/>
                                        <constraints>
                                            <constraint firstAttribute="height" constant="20" id="mDC-DF-Wc3"/>
                                        </constraints>
                                        <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
                                        <color key="textColor" red="0.08235294118" green="0.086274509799999996" blue="0.094117647060000004" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                        <nil key="highlightedColor"/>
                                    </label>
                                </subviews>
                            </stackView>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xwt-lH-fyW">
                                <rect key="frame" x="397" y="274" width="124" height="40"/>
                                <color key="backgroundColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <constraints>
                                    <constraint firstAttribute="width" constant="124" id="3Ct-u1-c4s"/>
                                    <constraint firstAttribute="height" constant="40" id="Sht-mV-Ugr"/>
                                </constraints>
                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                <state key="normal" title="--"/>
                                <userDefinedRuntimeAttributes>
                                    <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                    <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                        <real key="value" value="4"/>
                                    </userDefinedRuntimeAttribute>
                                </userDefinedRuntimeAttributes>
                                <connections>
                                    <action selector="handleAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="dgK-UX-7H1"/>
                                </connections>
                            </button>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="UdI-oe-WSO" firstAttribute="leading" secondItem="HZS-Oe-5LR" secondAttribute="trailing" constant="17" id="57C-Fp-3AO"/>
                            <constraint firstItem="viA-yT-ZWk" firstAttribute="leading" secondItem="UdI-oe-WSO" secondAttribute="leading" id="6Fj-YY-5Lr"/>
                            <constraint firstAttribute="trailing" secondItem="xwt-lH-fyW" secondAttribute="trailing" constant="11" id="6RI-NH-2my"/>
                            <constraint firstItem="9oA-7x-in6" firstAttribute="leading" secondItem="EWl-m5-3O9" secondAttribute="leading" constant="8" id="AHE-Ei-2xt"/>
                            <constraint firstItem="vd5-iK-Ujb" firstAttribute="leading" secondItem="UdI-oe-WSO" secondAttribute="leading" id="CRk-D7-Sa0"/>
                            <constraint firstItem="9oA-7x-in6" firstAttribute="top" secondItem="EWl-m5-3O9" secondAttribute="top" constant="19" id="Kd6-sy-ai0"/>
                            <constraint firstAttribute="trailing" secondItem="nMG-SO-H2Z" secondAttribute="trailing" constant="11" id="NXe-Od-1mg"/>
                            <constraint firstAttribute="bottom" secondItem="xwt-lH-fyW" secondAttribute="bottom" constant="18" id="Ncc-MB-We2"/>
                            <constraint firstItem="UdI-oe-WSO" firstAttribute="top" secondItem="HZS-Oe-5LR" secondAttribute="top" id="ZyM-TK-6FN"/>
                            <constraint firstAttribute="trailing" secondItem="viA-yT-ZWk" secondAttribute="trailing" id="d0F-tv-fNn"/>
                            <constraint firstItem="viA-yT-ZWk" firstAttribute="top" secondItem="UdI-oe-WSO" secondAttribute="bottom" id="fFu-Xa-Vst"/>
                            <constraint firstItem="vd5-iK-Ujb" firstAttribute="top" secondItem="viA-yT-ZWk" secondAttribute="bottom" constant="7" id="kmP-P0-Yhd"/>
                            <constraint firstItem="nMG-SO-H2Z" firstAttribute="centerY" secondItem="UdI-oe-WSO" secondAttribute="centerY" id="ne0-kd-EzF"/>
                            <constraint firstItem="HZS-Oe-5LR" firstAttribute="top" secondItem="9oA-7x-in6" secondAttribute="bottom" constant="13" id="nvs-xY-hiH"/>
                            <constraint firstItem="HZS-Oe-5LR" firstAttribute="leading" secondItem="EWl-m5-3O9" secondAttribute="leading" constant="8" id="u6c-56-glh"/>
                            <constraint firstAttribute="trailing" secondItem="vd5-iK-Ujb" secondAttribute="trailing" constant="56" id="ucU-JO-6dg"/>
                            <constraint firstAttribute="trailing" secondItem="UdI-oe-WSO" secondAttribute="trailing" constant="125" id="z0n-ib-Q7m"/>
                        </constraints>
                    </view>
                </subviews>
                <constraints>
                    <constraint firstAttribute="bottom" secondItem="EWl-m5-3O9" secondAttribute="bottom" constant="6" id="8Fg-uF-Si8"/>
                    <constraint firstAttribute="trailing" secondItem="EWl-m5-3O9" secondAttribute="trailing" id="EfQ-Ub-XHB"/>
                    <constraint firstItem="EWl-m5-3O9" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="P02-wF-uT4"/>
                    <constraint firstItem="EWl-m5-3O9" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="6" id="avD-p2-D0M"/>
                </constraints>
            </tableViewCellContentView>
            <viewLayoutGuide key="safeArea" id="njF-e1-oar"/>
            <connections>
                <outlet property="view_container" destination="EWl-m5-3O9" id="vyU-l1-0CY"/>
            </connections>
            <point key="canvasLocation" x="259.5419847328244" y="126.05633802816902"/>
        </tableViewCell>
    </objects>
</document>
DolphinEnglishLearnStudent/Moudle/Me/TCell/Home_1_TCell.swift
New file
@@ -0,0 +1,17 @@
//
//  Home_1_TCell.swift
//  DolphinEnglishLearnManager
//
//  Created by 无故事王国 on 2024/5/17.
//
import UIKit
class Home_1_TCell: UITableViewCell {
    override func awakeFromNib() {
        super.awakeFromNib()
                                selectionStyle = .none
    }
}
DolphinEnglishLearnStudent/Moudle/Me/TCell/Home_1_TCell.xib
New file
@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" 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="22684"/>
        <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="default" indentationWidth="10" reuseIdentifier="_Home_1_TCell" id="KGk-i7-Jjw" customClass="Home_1_TCell" customModule="DolphinEnglishLearnManager" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
            <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="320" height="44"/>
                <autoresizingMask key="autoresizingMask"/>
                <subviews>
                    <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="xga-Br-Izz">
                        <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
                        <subviews>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LLg-mN-hnD">
                                <rect key="frame" x="0.0" y="0.0" width="80" height="44"/>
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.79000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bXA-iA-Sgc">
                                <rect key="frame" x="80" y="0.0" width="80" height="44"/>
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.79000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tft-ra-5If">
                                <rect key="frame" x="160" y="0.0" width="80" height="44"/>
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.79000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="UQ2-uJ-GO9">
                                <rect key="frame" x="240" y="0.0" width="80" height="44"/>
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.79000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                        </subviews>
                    </stackView>
                </subviews>
                <constraints>
                    <constraint firstAttribute="bottom" secondItem="xga-Br-Izz" secondAttribute="bottom" id="AtE-En-WKT"/>
                    <constraint firstItem="xga-Br-Izz" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="Khq-ji-jpd"/>
                    <constraint firstAttribute="trailing" secondItem="xga-Br-Izz" secondAttribute="trailing" id="cyE-9M-z5E"/>
                    <constraint firstItem="xga-Br-Izz" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="dHd-ao-jYA"/>
                </constraints>
            </tableViewCellContentView>
            <point key="canvasLocation" x="139" y="21"/>
        </tableViewCell>
    </objects>
</document>
DolphinEnglishLearnStudent/Moudle/Me/VC/AddressManageHandleVC.swift
New file
@@ -0,0 +1,22 @@
//
//  AddressManageHandleVC.swift
//  DolphinEnglishLearnManager
//
//  Created by 无故事王国 on 2024/5/20.
//
import UIKit
class AddressManageHandleVC: BaseVC {
                @IBOutlet weak var view_container: UIView!
                override func viewDidLoad() {
        super.viewDidLoad()
    }
                override func setUI() {
                                super.setUI()
                                view_container.jq_addShadows(shadowColor: UIColor(hexStr: "#D9D9D9").withAlphaComponent(0.28), corner: 8, radius: 20, offset: CGSize(width: 0, height: 2), opacity: 1)
                }
}
DolphinEnglishLearnStudent/Moudle/Me/VC/AddressManageHandleVC.xib
New file
@@ -0,0 +1,257 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="ipad12_9" orientation="landscape" layout="fullscreen" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <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="AddressManageHandleVC" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
            <connections>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
                <outlet property="view_container" destination="qgb-Bj-4P0" id="eaY-Jn-MsE"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="1366" height="1024"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qgb-Bj-4P0">
                    <rect key="frame" x="239" y="47" width="888" height="614.5"/>
                    <subviews>
                        <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="Bml-2O-Jkw">
                            <rect key="frame" x="0.0" y="0.0" width="888" height="216"/>
                            <subviews>
                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gL0-u1-iqI">
                                    <rect key="frame" x="0.0" y="0.0" width="888" height="54"/>
                                    <subviews>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="收件人姓名" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ah0-ec-HCT">
                                            <rect key="frame" x="14" y="18.5" width="71.5" height="17"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                            <nil key="textColor"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入收件人姓名" textAlignment="right" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="oWU-h5-9OT">
                                            <rect key="frame" x="104.5" y="0.0" width="764.5" height="54"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                            <textInputTraits key="textInputTraits"/>
                                        </textField>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Uen-aK-Q1M">
                                            <rect key="frame" x="0.0" y="53.5" width="888" height="0.5"/>
                                            <color key="backgroundColor" red="0.83137254901960778" green="0.83137254901960778" blue="0.83137254901960778" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                            <constraints>
                                                <constraint firstAttribute="height" constant="0.40000000000000002" id="XCy-jl-IZa"/>
                                            </constraints>
                                        </view>
                                    </subviews>
                                    <constraints>
                                        <constraint firstAttribute="bottom" secondItem="Uen-aK-Q1M" secondAttribute="bottom" id="3zj-HR-HYt"/>
                                        <constraint firstItem="Uen-aK-Q1M" firstAttribute="leading" secondItem="gL0-u1-iqI" secondAttribute="leading" id="4Yk-Ed-kGC"/>
                                        <constraint firstItem="ah0-ec-HCT" firstAttribute="centerY" secondItem="gL0-u1-iqI" secondAttribute="centerY" id="6hl-TP-L2A"/>
                                        <constraint firstItem="oWU-h5-9OT" firstAttribute="top" secondItem="gL0-u1-iqI" secondAttribute="top" id="ESm-p3-34K"/>
                                        <constraint firstAttribute="height" constant="54" id="IJG-Tb-gVo"/>
                                        <constraint firstAttribute="trailing" secondItem="Uen-aK-Q1M" secondAttribute="trailing" id="OIA-XV-9b2"/>
                                        <constraint firstItem="oWU-h5-9OT" firstAttribute="leading" secondItem="ah0-ec-HCT" secondAttribute="trailing" constant="19" id="OcR-ld-cPf"/>
                                        <constraint firstAttribute="bottom" secondItem="oWU-h5-9OT" secondAttribute="bottom" id="pdz-74-YVb"/>
                                        <constraint firstAttribute="trailing" secondItem="oWU-h5-9OT" secondAttribute="trailing" constant="19" id="r3R-4N-DlD"/>
                                        <constraint firstItem="ah0-ec-HCT" firstAttribute="leading" secondItem="gL0-u1-iqI" secondAttribute="leading" constant="14" id="yKM-o1-uAk"/>
                                    </constraints>
                                </view>
                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="pzg-aG-m2r">
                                    <rect key="frame" x="0.0" y="54" width="888" height="54"/>
                                    <subviews>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="收件人电话" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qmm-Jk-RkU">
                                            <rect key="frame" x="14" y="18.5" width="71.5" height="17"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                            <nil key="textColor"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入收件人电话" textAlignment="right" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="fLZ-09-hXt" customClass="QMUITextField">
                                            <rect key="frame" x="104.5" y="0.0" width="764.5" height="54"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                            <textInputTraits key="textInputTraits" keyboardType="phonePad"/>
                                            <userDefinedRuntimeAttributes>
                                                <userDefinedRuntimeAttribute type="number" keyPath="maximumTextLength">
                                                    <integer key="value" value="11"/>
                                                </userDefinedRuntimeAttribute>
                                            </userDefinedRuntimeAttributes>
                                        </textField>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="m7c-5g-7aN">
                                            <rect key="frame" x="0.0" y="53.5" width="888" height="0.5"/>
                                            <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                            <constraints>
                                                <constraint firstAttribute="height" constant="0.40000000000000002" id="exs-sq-0nR"/>
                                            </constraints>
                                        </view>
                                    </subviews>
                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                    <constraints>
                                        <constraint firstAttribute="bottom" secondItem="fLZ-09-hXt" secondAttribute="bottom" id="6aU-3m-zB7"/>
                                        <constraint firstAttribute="bottom" secondItem="m7c-5g-7aN" secondAttribute="bottom" id="CgK-zF-akg"/>
                                        <constraint firstItem="fLZ-09-hXt" firstAttribute="leading" secondItem="qmm-Jk-RkU" secondAttribute="trailing" constant="19" id="DPY-M5-NQO"/>
                                        <constraint firstItem="qmm-Jk-RkU" firstAttribute="leading" secondItem="pzg-aG-m2r" secondAttribute="leading" constant="14" id="Heo-HM-1uX"/>
                                        <constraint firstItem="m7c-5g-7aN" firstAttribute="leading" secondItem="pzg-aG-m2r" secondAttribute="leading" id="IaR-PY-X2E"/>
                                        <constraint firstAttribute="height" constant="54" id="OVr-4I-0qi"/>
                                        <constraint firstAttribute="trailing" secondItem="m7c-5g-7aN" secondAttribute="trailing" id="QUx-yW-9DA"/>
                                        <constraint firstAttribute="trailing" secondItem="fLZ-09-hXt" secondAttribute="trailing" constant="19" id="WeA-xm-WKk"/>
                                        <constraint firstItem="qmm-Jk-RkU" firstAttribute="centerY" secondItem="pzg-aG-m2r" secondAttribute="centerY" id="eBj-TW-GLs"/>
                                        <constraint firstItem="fLZ-09-hXt" firstAttribute="top" secondItem="pzg-aG-m2r" secondAttribute="top" id="vka-A8-vgA"/>
                                    </constraints>
                                </view>
                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="HrP-X4-olT">
                                    <rect key="frame" x="0.0" y="108" width="888" height="54"/>
                                    <subviews>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="所在城市" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nQE-ee-ydX">
                                            <rect key="frame" x="14" y="18.5" width="57.5" height="17"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                            <nil key="textColor"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请选择" textAlignment="right" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="FIR-Ti-oMo" customClass="QMUITextField">
                                            <rect key="frame" x="90.5" y="0.0" width="753.5" height="54"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                            <textInputTraits key="textInputTraits" keyboardType="phonePad"/>
                                            <userDefinedRuntimeAttributes>
                                                <userDefinedRuntimeAttribute type="number" keyPath="maximumTextLength">
                                                    <integer key="value" value="11"/>
                                                </userDefinedRuntimeAttribute>
                                            </userDefinedRuntimeAttributes>
                                        </textField>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="RaS-F3-Z6G">
                                            <rect key="frame" x="0.0" y="53.5" width="888" height="0.5"/>
                                            <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                            <constraints>
                                                <constraint firstAttribute="height" constant="0.40000000000000002" id="1bU-eZ-QZg"/>
                                            </constraints>
                                        </view>
                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_more" translatesAutoresizingMaskIntoConstraints="NO" id="cjf-3I-DOC">
                                            <rect key="frame" x="863" y="22" width="6" height="10"/>
                                        </imageView>
                                    </subviews>
                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                    <constraints>
                                        <constraint firstItem="cjf-3I-DOC" firstAttribute="leading" secondItem="FIR-Ti-oMo" secondAttribute="trailing" constant="19" id="5Hs-BO-mcP"/>
                                        <constraint firstAttribute="trailing" secondItem="RaS-F3-Z6G" secondAttribute="trailing" id="8IR-R7-ulg"/>
                                        <constraint firstAttribute="bottom" secondItem="RaS-F3-Z6G" secondAttribute="bottom" id="8RU-6v-9pr"/>
                                        <constraint firstItem="FIR-Ti-oMo" firstAttribute="top" secondItem="HrP-X4-olT" secondAttribute="top" id="9v0-GU-DRy"/>
                                        <constraint firstAttribute="trailing" secondItem="cjf-3I-DOC" secondAttribute="trailing" constant="19" id="IiA-OS-VQd"/>
                                        <constraint firstItem="RaS-F3-Z6G" firstAttribute="leading" secondItem="HrP-X4-olT" secondAttribute="leading" id="RwP-WM-n8r"/>
                                        <constraint firstAttribute="bottom" secondItem="FIR-Ti-oMo" secondAttribute="bottom" id="U32-3i-2Aw"/>
                                        <constraint firstItem="nQE-ee-ydX" firstAttribute="leading" secondItem="HrP-X4-olT" secondAttribute="leading" constant="14" id="Xgd-EK-N8S"/>
                                        <constraint firstItem="FIR-Ti-oMo" firstAttribute="leading" secondItem="nQE-ee-ydX" secondAttribute="trailing" constant="19" id="Z9I-sm-KCY"/>
                                        <constraint firstAttribute="height" constant="54" id="dZt-uB-2f2"/>
                                        <constraint firstItem="cjf-3I-DOC" firstAttribute="centerY" secondItem="HrP-X4-olT" secondAttribute="centerY" id="h3V-dz-Q8t"/>
                                        <constraint firstItem="nQE-ee-ydX" firstAttribute="centerY" secondItem="HrP-X4-olT" secondAttribute="centerY" id="pQA-0y-qHp"/>
                                    </constraints>
                                </view>
                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="eNK-zb-eqQ">
                                    <rect key="frame" x="0.0" y="162" width="888" height="54"/>
                                    <subviews>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="所在城市" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uwd-8E-QFK">
                                            <rect key="frame" x="14" y="18.5" width="57.5" height="17"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                            <nil key="textColor"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入" textAlignment="right" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="9Rg-uR-zdR" customClass="QMUITextField">
                                            <rect key="frame" x="90.5" y="0.0" width="778.5" height="54"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                            <textInputTraits key="textInputTraits" keyboardType="phonePad"/>
                                            <userDefinedRuntimeAttributes>
                                                <userDefinedRuntimeAttribute type="number" keyPath="maximumTextLength">
                                                    <integer key="value" value="11"/>
                                                </userDefinedRuntimeAttribute>
                                            </userDefinedRuntimeAttributes>
                                        </textField>
                                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1bK-P9-OGL">
                                            <rect key="frame" x="0.0" y="53.5" width="888" height="0.5"/>
                                            <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                            <constraints>
                                                <constraint firstAttribute="height" constant="0.40000000000000002" id="oza-e2-xX2"/>
                                            </constraints>
                                        </view>
                                    </subviews>
                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                    <constraints>
                                        <constraint firstAttribute="trailing" secondItem="9Rg-uR-zdR" secondAttribute="trailing" constant="19" id="Ffp-Yv-6hg"/>
                                        <constraint firstItem="9Rg-uR-zdR" firstAttribute="top" secondItem="eNK-zb-eqQ" secondAttribute="top" id="Juy-4v-1zw"/>
                                        <constraint firstAttribute="bottom" secondItem="1bK-P9-OGL" secondAttribute="bottom" id="Lr4-s0-5h2"/>
                                        <constraint firstItem="uwd-8E-QFK" firstAttribute="leading" secondItem="eNK-zb-eqQ" secondAttribute="leading" constant="14" id="NTr-m6-of0"/>
                                        <constraint firstAttribute="bottom" secondItem="9Rg-uR-zdR" secondAttribute="bottom" id="OtV-Pb-UFW"/>
                                        <constraint firstAttribute="height" constant="54" id="TE3-H9-e5m"/>
                                        <constraint firstItem="uwd-8E-QFK" firstAttribute="centerY" secondItem="eNK-zb-eqQ" secondAttribute="centerY" id="TT8-8r-fOg"/>
                                        <constraint firstItem="9Rg-uR-zdR" firstAttribute="leading" secondItem="uwd-8E-QFK" secondAttribute="trailing" constant="19" id="TrI-bn-NEf"/>
                                        <constraint firstAttribute="trailing" secondItem="1bK-P9-OGL" secondAttribute="trailing" id="b0o-0x-upF"/>
                                        <constraint firstItem="1bK-P9-OGL" firstAttribute="leading" secondItem="eNK-zb-eqQ" secondAttribute="leading" id="gkx-px-UXi"/>
                                    </constraints>
                                </view>
                            </subviews>
                        </stackView>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="X5q-Za-IDi">
                            <rect key="frame" x="13" y="237" width="78" height="28"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="28" id="bzI-82-Yfj"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
                            <inset key="titleEdgeInsets" minX="0.0" minY="-3" maxX="0.0" maxY="0.0"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="设为默认" image="btn_choose_u">
                                <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                            </state>
                            <state key="selected" title="设为默认" image="btn_choose"/>
                        </button>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstAttribute="width" secondItem="qgb-Bj-4P0" secondAttribute="height" multiplier="1:0.692" id="2UQ-68-UdJ"/>
                        <constraint firstItem="Bml-2O-Jkw" firstAttribute="top" secondItem="qgb-Bj-4P0" secondAttribute="top" id="73r-hT-fIq"/>
                        <constraint firstItem="Bml-2O-Jkw" firstAttribute="leading" secondItem="qgb-Bj-4P0" secondAttribute="leading" id="AqW-n8-1Ha"/>
                        <constraint firstAttribute="bottom" secondItem="Bml-2O-Jkw" secondAttribute="bottom" priority="750" id="ZEE-8U-YsJ"/>
                        <constraint firstItem="X5q-Za-IDi" firstAttribute="top" secondItem="Bml-2O-Jkw" secondAttribute="bottom" constant="21" id="hFb-X9-NHr"/>
                        <constraint firstAttribute="trailing" secondItem="Bml-2O-Jkw" secondAttribute="trailing" id="l5Q-qW-ZNU"/>
                        <constraint firstItem="X5q-Za-IDi" firstAttribute="leading" secondItem="qgb-Bj-4P0" secondAttribute="leading" constant="13" id="y3B-WM-o64"/>
                    </constraints>
                </view>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="tQp-s7-qDk">
                    <rect key="frame" x="525" y="918" width="316" height="47"/>
                    <color key="backgroundColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    <constraints>
                        <constraint firstAttribute="width" secondItem="tQp-s7-qDk" secondAttribute="height" multiplier="1:0.148" id="Ziu-PL-WhU"/>
                        <constraint firstAttribute="width" constant="316" id="gAL-Xd-A8I"/>
                    </constraints>
                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                    <state key="normal" title="保存"/>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="8"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </button>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="qgb-Bj-4P0" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="27" id="DHN-Jz-e7A"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="tQp-s7-qDk" secondAttribute="bottom" constant="59" id="KE1-XE-8aA"/>
                <constraint firstItem="tQp-s7-qDk" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="nl5-NS-fSq"/>
                <constraint firstItem="qgb-Bj-4P0" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="239" id="vAz-C0-V6x"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="qgb-Bj-4P0" secondAttribute="trailing" constant="239" id="vaW-kC-duk"/>
            </constraints>
            <point key="canvasLocation" x="97.8515625" y="20.644216691068813"/>
        </view>
    </objects>
    <resources>
        <image name="btn_choose" width="28" height="28"/>
        <image name="btn_choose_u" width="28" height="28"/>
        <image name="icon_more" width="6" height="10"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
DolphinEnglishLearnStudent/Moudle/Me/VC/AddressManageVC.swift
New file
@@ -0,0 +1,109 @@
//
//  AddressManageVC.swift
//  DolphinEnglishLearnManager
//
//  Created by 无故事王国 on 2024/5/20.
//
import UIKit
class AddressManageVC: BaseVC {
                enum AddressManageType{
                                case handle
                                case choose
                }
                private var tableView:UITableView!
                private var addressManageType:AddressManageType!
                required init(type:AddressManageType) {
                                super.init(nibName: nil, bundle: nil)
                                self.addressManageType = type
                }
                required init?(coder: NSCoder) {
                                fatalError("init(coder:) has not been implemented")
                }
    override func viewDidLoad() {
        super.viewDidLoad()
    }
                override func setUI() {
                                super.setUI()
                                var completeBtn:UIButton?
                                if addressManageType == .handle{
                                                completeBtn = UIButton(type: .custom)
                                                completeBtn!.jq_cornerRadius = 8
                                                completeBtn!.addTarget(self, action: #selector(handleAction), for: .touchUpInside)
                                                completeBtn!.setTitleColor(.white, for: .normal)
                                                completeBtn!.titleLabel?.font = UIFont.systemFont(ofSize: 16, weight: .medium)
                                                completeBtn!.setTitle("添加地址", for: .normal)
                                                completeBtn!.backgroundColor = UIColor(hexStr: "#41A2EB")
                                                view.addSubview(completeBtn!)
                                                completeBtn!.snp.makeConstraints { make in
                                                                make.width.equalTo(316)
                                                                make.centerX.equalToSuperview()
                                                                make.bottom.equalToSuperview().offset(-31)
                                                                make.height.equalTo(47)
                                                }
                                }
                                tableView = UITableView(frame: .zero, style: .plain)
                                tableView.delegate = self
                                tableView.dataSource = self
                                tableView.backgroundColor = .clear
                                tableView.separatorStyle = .none
                                tableView.register(UINib(nibName: "AddressManageTCell", bundle: nil), forCellReuseIdentifier: "_AddressManageTCell")
                                tableView.jq_addShadows(shadowColor: UIColor(hexStr: "#D9D9D9"), corner: 0, radius: 20, offset: CGSize(width: 0, height: 2), opacity: 1)
                                view.addSubview(tableView)
                                tableView.snp.makeConstraints { make in
                                                make.top.equalTo(self.view.safeAreaLayoutGuide).offset(27)
                                                make.left.equalTo(239)
                                                make.right.equalTo(-239)
                                                make.height.equalTo(47)
                                                if completeBtn != nil{
                                                                make.bottom.equalTo(completeBtn!.snp.top).offset(10)
                                                }else{
                                                                make.bottom.equalToSuperview()
                                                }
                                }
                }
                @objc func handleAction(){
                                let vc = AddressManageHandleVC()
                                vc.title = "地址管理"
                                JQ_currentViewController().jq_push(vc: vc)
                }
}
extension AddressManageVC:UITableViewDelegate{
}
extension AddressManageVC:UITableViewDataSource{
                func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                                 let cell = tableView.dequeueReusableCell(withIdentifier: "_AddressManageTCell") as! AddressManageTCell
                                cell.isFist = indexPath.row == 0
                                cell.isLast = indexPath.row == 9
                                cell.isDefault(indexPath.row == 0)
                                cell.btn_edit.isHidden = addressManageType == .choose
                                cell.btn_delete.isHidden = addressManageType == .choose
                                cell.img_more.isHidden = addressManageType != .choose
                                cell.btn_default.isHidden = addressManageType == .choose
                                return cell
                }
                func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
                                return 10
                }
                func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
                                return 78
                }
}
DolphinEnglishLearnStudent/Moudle/Me/VC/CoinRecordHistoryVC.swift
New file
@@ -0,0 +1,80 @@
//
//  CoinRecordHistoryVC.swift
//  DolphinEnglishLearnManager
//
//  Created by 无故事王国 on 2024/5/20.
//
import UIKit
import RxRelay
class CoinRecordHistoryViewModel{
                var selectDate = BehaviorRelay<Date?>(value:nil)
}
class CoinRecordHistoryVC: BaseVC {
                @IBOutlet weak var view_menuTitle: UIView!
                @IBOutlet weak var tableView: UITableView!
                @IBOutlet weak var label_coin: UILabel!
                @IBOutlet weak var btn_selectDate: UIButton!
                private var viewModel  = CoinRecordHistoryViewModel()
                override func viewDidLoad() {
                                super.viewDidLoad()
                }
                override func setUI() {
                                super.setUI()
                                view_menuTitle.jq_addCorners(corner: [.topLeft,.topRight], radius: 20)
                                tableView.delegate = self
                                tableView.dataSource = self
                                tableView.register(UINib(nibName: "Home_1_TCell", bundle: nil), forCellReuseIdentifier: "_Home_1_TCell")
                                tableView.separatorStyle = .none
                }
                override func setRx() {
                                viewModel.selectDate.subscribe(onNext: {[weak self]date in
                                                if let d = date{
                                                                let formartDate = String(format: "%ld-%02ld", d.jq_nowYear(),d.jq_nowMonth())
                                                                self?.btn_selectDate.setTitle(formartDate, for: .normal)
                                                }
                                }).disposed(by: disposeBag)
                }
                @IBAction func chooseDateTimeAction(_ sender: UIButton) {
                                let year = viewModel.selectDate.value?.jq_nowYear() ?? Date().jq_nowYear()
                                let month = viewModel.selectDate.value?.jq_nowMonth() ?? Date().jq_nowMonth()
                                BitrhdayPickerView.show(title: "查询时间", type: .YM, defaultYear: year, defaultMonth: month, defaultDay: 0, minYear: 0) {[weak self] date in
                                                self?.viewModel.selectDate.accept(date)
                                }
                }
}
extension CoinRecordHistoryVC:UITableViewDelegate{
}
extension CoinRecordHistoryVC:UITableViewDataSource{
                func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                                let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_1_TCell", for: indexPath) as! Home_1_TCell
                                if indexPath.row % 2 == 0{
                                                cell.contentView.backgroundColor = UIColor(hexStr: "#F4FAFE")
                                }else{
                                                cell.contentView.backgroundColor = .white
                                }
                                return cell
                }
                func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
                                return 5
                }
                func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
                                return 40
                }
}
DolphinEnglishLearnStudent/Moudle/Me/VC/CoinRecordHistoryVC.xib
New file
@@ -0,0 +1,195 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="ipad12_9" orientation="landscape" layout="fullscreen" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <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="CoinRecordHistoryVC" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
            <connections>
                <outlet property="btn_selectDate" destination="3Jm-Of-Dcm" id="qsy-0i-QGG"/>
                <outlet property="label_coin" destination="8QY-yj-pnL" id="zMl-nz-9AN"/>
                <outlet property="tableView" destination="CXF-w6-yPv" id="p0a-Ff-dbJ"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
                <outlet property="view_menuTitle" destination="u4d-62-Qi9" id="5Zo-Rn-Ec7"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="1366" height="1024"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <stackView opaque="NO" contentMode="scaleToFill" spacing="6" translatesAutoresizingMaskIntoConstraints="NO" id="6id-1t-5Uz">
                    <rect key="frame" x="549" y="47" width="268.5" height="36"/>
                    <subviews>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="查询时间:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1YG-qG-YRK">
                            <rect key="frame" x="0.0" y="0.0" width="64.5" height="36"/>
                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
                            <nil key="textColor"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sGC-8I-HbA">
                            <rect key="frame" x="70.5" y="0.0" width="156" height="36"/>
                            <subviews>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3Jm-Of-Dcm">
                                    <rect key="frame" x="16" y="3.5" width="135" height="29"/>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" title="请选择">
                                        <color key="titleColor" red="0.16862745098039217" green="0.17254901960784313" blue="0.23529411764705882" alpha="0.52000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
                                    </state>
                                    <connections>
                                        <action selector="chooseDateTimeAction:" destination="-1" eventType="touchUpInside" id="COg-wp-7Xr"/>
                                    </connections>
                                </button>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstItem="3Jm-Of-Dcm" firstAttribute="centerY" secondItem="sGC-8I-HbA" secondAttribute="centerY" id="KQC-2f-zzM"/>
                                <constraint firstAttribute="width" constant="156" id="LAD-QX-hQR"/>
                                <constraint firstAttribute="trailing" secondItem="3Jm-Of-Dcm" secondAttribute="trailing" constant="5" id="PAm-7m-R1M"/>
                                <constraint firstItem="3Jm-Of-Dcm" firstAttribute="leading" secondItem="sGC-8I-HbA" secondAttribute="leading" constant="16" id="bcE-Pm-Edg"/>
                            </constraints>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                    <real key="value" value="8"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB">
                                    <real key="value" value="1"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB">
                                    <color key="value" red="0.9137254901960784" green="0.89411764705882346" blue="0.89411764705882346" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                        </view>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8B4-O0-0IK">
                            <rect key="frame" x="232.5" y="0.0" width="36" height="36"/>
                            <constraints>
                                <constraint firstAttribute="width" constant="36" id="L2s-63-TnI"/>
                            </constraints>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" image="btn_refresh"/>
                        </button>
                    </subviews>
                    <constraints>
                        <constraint firstAttribute="height" constant="36" id="0vz-SC-Yss"/>
                    </constraints>
                </stackView>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="h41-Kv-0dU">
                    <rect key="frame" x="376.5" y="99" width="613" height="136"/>
                    <subviews>
                        <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="equalSpacing" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="n0n-N2-UC2">
                            <rect key="frame" x="270" y="29.5" width="73.5" height="77"/>
                            <subviews>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8QY-yj-pnL">
                                    <rect key="frame" x="0.0" y="0.0" width="73.5" height="44"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="44" id="Wff-NG-0ls"/>
                                    </constraints>
                                    <fontDescription key="fontDescription" name="Impact" family="Impact" pointSize="36"/>
                                    <color key="textColor" red="0.96862745098039216" green="0.27450980392156865" blue="0.1764705882352941" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <nil key="highlightedColor"/>
                                </label>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="剩余积分" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dfZ-HK-g71">
                                    <rect key="frame" x="0.0" y="52" width="73.5" height="25"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="25" id="k1W-R8-qMN"/>
                                    </constraints>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.84999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
                                    <nil key="highlightedColor"/>
                                </label>
                            </subviews>
                        </stackView>
                    </subviews>
                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                    <constraints>
                        <constraint firstItem="n0n-N2-UC2" firstAttribute="centerX" secondItem="h41-Kv-0dU" secondAttribute="centerX" id="FYl-hh-y1q"/>
                        <constraint firstAttribute="height" constant="136" id="GBC-Og-Xcx"/>
                        <constraint firstItem="n0n-N2-UC2" firstAttribute="centerY" secondItem="h41-Kv-0dU" secondAttribute="centerY" id="KqG-kC-da6"/>
                        <constraint firstAttribute="width" secondItem="h41-Kv-0dU" secondAttribute="height" multiplier="1:0.222" id="Tpp-Vn-C6t"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="8"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="u4d-62-Qi9">
                    <rect key="frame" x="376.5" y="263" width="613" height="46"/>
                    <subviews>
                        <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="cEO-p5-yCx">
                            <rect key="frame" x="0.0" y="0.0" width="613" height="46"/>
                            <subviews>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="时间" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fG1-r6-ybo">
                                    <rect key="frame" x="0.0" y="0.0" width="153.5" height="46"/>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                    <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <nil key="highlightedColor"/>
                                </label>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="数量" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="M7l-Zc-0F0">
                                    <rect key="frame" x="153.5" y="0.0" width="153" height="46"/>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                    <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <nil key="highlightedColor"/>
                                </label>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="方式" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PyX-EF-UjE">
                                    <rect key="frame" x="306.5" y="0.0" width="153" height="46"/>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                    <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <nil key="highlightedColor"/>
                                </label>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="类型" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0H0-RS-1GQ">
                                    <rect key="frame" x="459.5" y="0.0" width="153.5" height="46"/>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                    <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <nil key="highlightedColor"/>
                                </label>
                            </subviews>
                        </stackView>
                    </subviews>
                    <color key="backgroundColor" red="0.25490196078431371" green="0.63529411764705879" blue="0.92156862745098034" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    <constraints>
                        <constraint firstItem="cEO-p5-yCx" firstAttribute="leading" secondItem="u4d-62-Qi9" secondAttribute="leading" id="0A6-iH-PQE"/>
                        <constraint firstAttribute="bottom" secondItem="cEO-p5-yCx" secondAttribute="bottom" id="QXW-cy-YUz"/>
                        <constraint firstItem="cEO-p5-yCx" firstAttribute="top" secondItem="u4d-62-Qi9" secondAttribute="top" id="gDT-cU-ETt"/>
                        <constraint firstAttribute="trailing" secondItem="cEO-p5-yCx" secondAttribute="trailing" id="qSE-H1-fkq"/>
                        <constraint firstAttribute="height" constant="46" id="tuz-lU-gFh"/>
                    </constraints>
                </view>
                <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="CXF-w6-yPv">
                    <rect key="frame" x="376.5" y="309" width="613" height="715"/>
                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                </tableView>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="u4d-62-Qi9" firstAttribute="trailing" secondItem="h41-Kv-0dU" secondAttribute="trailing" id="3M6-RK-l7e"/>
                <constraint firstItem="6id-1t-5Uz" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="27" id="6Ot-zv-91p"/>
                <constraint firstItem="h41-Kv-0dU" firstAttribute="top" secondItem="6id-1t-5Uz" secondAttribute="bottom" constant="16" id="6tF-6k-FWQ"/>
                <constraint firstItem="u4d-62-Qi9" firstAttribute="top" secondItem="h41-Kv-0dU" secondAttribute="bottom" constant="28" id="I9P-mS-b4V"/>
                <constraint firstItem="CXF-w6-yPv" firstAttribute="trailing" secondItem="u4d-62-Qi9" secondAttribute="trailing" id="Ozv-B7-3Fh"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="CXF-w6-yPv" secondAttribute="bottom" id="S4K-IA-ZQi"/>
                <constraint firstItem="6id-1t-5Uz" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="bFz-1p-Q89"/>
                <constraint firstItem="h41-Kv-0dU" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="hSb-wb-caJ"/>
                <constraint firstItem="u4d-62-Qi9" firstAttribute="leading" secondItem="h41-Kv-0dU" secondAttribute="leading" id="m8w-t5-Fl0"/>
                <constraint firstItem="CXF-w6-yPv" firstAttribute="leading" secondItem="u4d-62-Qi9" secondAttribute="leading" id="mNz-Os-vxP"/>
                <constraint firstItem="CXF-w6-yPv" firstAttribute="top" secondItem="u4d-62-Qi9" secondAttribute="bottom" id="t3Y-1o-1bl"/>
            </constraints>
            <point key="canvasLocation" x="100" y="21"/>
        </view>
    </objects>
    <resources>
        <image name="btn_refresh" width="21" height="22"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
DolphinEnglishLearnStudent/Moudle/Me/VC/ExchangeRecordHistoryVC.swift
New file
@@ -0,0 +1,57 @@
//
//  ExchangeRecordHistoryVC.swift
//  DolphinEnglishLearnManager
//
//  Created by 无故事王国 on 2024/5/20.
//
import UIKit
class ExchangeRecordHistoryVC: BaseVC {
                private var tableView:UITableView!
    override func viewDidLoad() {
        super.viewDidLoad()
    }
                override func setUI() {
                                super.setUI()
                                tableView = UITableView(frame: .zero, style: .plain)
                                tableView.delegate = self
                                tableView.dataSource = self
                                tableView.backgroundColor = .clear
                                tableView.separatorStyle = .none
                                tableView.register(UINib(nibName: "GoodsItemTCell", bundle: nil), forCellReuseIdentifier: "_GoodsItemTCell")
                                view.addSubview(tableView)
                                tableView.snp.makeConstraints { make in
                                                make.left.equalTo(239 * Config.RatioW)
                                                make.right.equalTo(-239 * Config.RatioW)
                                                make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(27 * Config.RatioW)
                                                make.bottom.equalTo(self.view.safeAreaLayoutGuide.snp.bottom).offset(-5)
                                }
                }
}
extension ExchangeRecordHistoryVC:UITableViewDelegate{
}
extension ExchangeRecordHistoryVC:UITableViewDataSource{
                func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                                let cell = tableView.dequeueReusableCell(withIdentifier: "_GoodsItemTCell") as! GoodsItemTCell
                                return cell
                }
                func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
                                return 10
                }
                func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
                                return 221 * Config.RatioH
                }
}
DolphinEnglishLearnStudent/Moudle/Me/VC/StudyVC.swift
New file
@@ -0,0 +1,58 @@
//
//  StudyVC.swift
//  DolphinEnglishLearnStudent
//
//  Created by 无故事王国 on 2024/5/22.
//
import UIKit
class StudyVC: BaseVC {
                @IBOutlet weak var view_menu: UIView!
                @IBOutlet weak var tableView: UITableView!
    override func viewDidLoad() {
        super.viewDidLoad()
    }
                override func setUI() {
                                super.setUI()
                                tableView.delegate = self
                                tableView.dataSource = self
                                tableView.register(UINib(nibName: "Home_1_TCell", bundle: nil), forCellReuseIdentifier: "_Home_1_TCell")
                                tableView.separatorStyle = .none
                }
                override func viewDidLayoutSubviews() {
                                super.viewDidLayoutSubviews()
                                view_menu.jq_addCorners(corner: [.topLeft,.topRight], radius: 20)
                }
}
extension StudyVC:UITableViewDelegate{
}
extension StudyVC:UITableViewDataSource{
                func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                                let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_1_TCell", for: indexPath) as! Home_1_TCell
                                if indexPath.row % 2 == 0{
                                                cell.contentView.backgroundColor = UIColor(hexStr: "#F4FAFE")
                                }else{
                                                cell.contentView.backgroundColor = .white
                                }
                                return cell
                }
                func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
                                return 5
                }
                func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
                                return 40
                }
}
DolphinEnglishLearnStudent/Moudle/Me/VC/StudyVC.xib
New file
@@ -0,0 +1,184 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="ipad10_9rounded" orientation="landscape" layout="fullscreen" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <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="StudyVC" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
            <connections>
                <outlet property="tableView" destination="byc-YG-6j2" id="BDN-57-WDq"/>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
                <outlet property="view_menu" destination="1HY-aY-obo" id="m6s-HL-ZwQ"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="1180" height="820"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="x3k-K2-glo">
                    <rect key="frame" x="283.5" y="52" width="613" height="136"/>
                    <subviews>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="当前进度:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6E8-Ab-gRb">
                            <rect key="frame" x="22" y="17" width="96.5" height="29"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="29" id="bIR-GJ-Usg"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="21"/>
                            <color key="textColor" red="0.16862745098039217" green="0.21176470588235294" blue="0.28235294117647058" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="剩余进度:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SYT-bU-Qar">
                            <rect key="frame" x="491.5" y="17" width="96.5" height="29"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="29" id="0YH-5q-Ccp"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="21"/>
                            <color key="textColor" red="0.16862745100000001" green="0.21176470589999999" blue="0.28235294119999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="crR-lR-Tnj">
                            <rect key="frame" x="23" y="58" width="14.5" height="22"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="22" id="QIB-yI-iy3"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
                            <nil key="textColor"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="r1z-jS-qK4">
                            <rect key="frame" x="23" y="92" width="14.5" height="22"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="22" id="hFD-0q-Uwy"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
                            <nil key="textColor"/>
                            <nil key="highlightedColor"/>
                        </label>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstAttribute="width" secondItem="x3k-K2-glo" secondAttribute="height" multiplier="1:0.222" id="3C0-9H-hAq"/>
                        <constraint firstItem="r1z-jS-qK4" firstAttribute="top" secondItem="crR-lR-Tnj" secondAttribute="bottom" constant="12" id="4NZ-ha-9oF"/>
                        <constraint firstItem="6E8-Ab-gRb" firstAttribute="top" secondItem="x3k-K2-glo" secondAttribute="top" constant="17" id="B2L-vZ-JVR"/>
                        <constraint firstItem="crR-lR-Tnj" firstAttribute="leading" secondItem="x3k-K2-glo" secondAttribute="leading" constant="23" id="KW4-Yy-p5I"/>
                        <constraint firstItem="crR-lR-Tnj" firstAttribute="top" secondItem="6E8-Ab-gRb" secondAttribute="bottom" constant="12" id="Nna-34-c4E"/>
                        <constraint firstAttribute="height" constant="136" id="SnI-6o-cMn"/>
                        <constraint firstItem="r1z-jS-qK4" firstAttribute="leading" secondItem="crR-lR-Tnj" secondAttribute="leading" id="Su0-0g-Pl4"/>
                        <constraint firstItem="6E8-Ab-gRb" firstAttribute="leading" secondItem="x3k-K2-glo" secondAttribute="leading" constant="22" id="hVW-hh-43s"/>
                        <constraint firstItem="SYT-bU-Qar" firstAttribute="centerY" secondItem="6E8-Ab-gRb" secondAttribute="centerY" id="hbg-me-fve"/>
                        <constraint firstAttribute="trailing" secondItem="SYT-bU-Qar" secondAttribute="trailing" constant="25" id="hqy-r2-ptR"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="8"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Q0Z-Ir-Pcf">
                    <rect key="frame" x="283.5" y="197" width="613" height="476"/>
                    <subviews>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="游戏测试成绩" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7a7-SF-J1X">
                            <rect key="frame" x="22" y="23" width="128.5" height="25.5"/>
                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="21"/>
                            <nil key="textColor"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1HY-aY-obo">
                            <rect key="frame" x="0.0" y="68.5" width="613" height="46"/>
                            <subviews>
                                <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="mSL-o7-Koy">
                                    <rect key="frame" x="0.0" y="0.0" width="613" height="46"/>
                                    <subviews>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="时间" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1j1-3c-m3Y">
                                            <rect key="frame" x="0.0" y="0.0" width="153.5" height="46"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                            <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="游戏名称" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="L9n-Bg-sY1">
                                            <rect key="frame" x="153.5" y="0.0" width="153" height="46"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                            <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="用时时间" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Vz2-MW-iZr">
                                            <rect key="frame" x="306.5" y="0.0" width="153" height="46"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                            <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="正确率" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BxB-1C-twj">
                                            <rect key="frame" x="459.5" y="0.0" width="153.5" height="46"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                            <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                    </subviews>
                                </stackView>
                            </subviews>
                            <color key="backgroundColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <constraints>
                                <constraint firstAttribute="trailing" secondItem="mSL-o7-Koy" secondAttribute="trailing" id="Pox-yQ-sHb"/>
                                <constraint firstAttribute="bottom" secondItem="mSL-o7-Koy" secondAttribute="bottom" id="Usd-cY-Pwz"/>
                                <constraint firstItem="mSL-o7-Koy" firstAttribute="leading" secondItem="1HY-aY-obo" secondAttribute="leading" id="lXF-UO-EGS"/>
                                <constraint firstAttribute="height" constant="46" id="pxa-lz-L66"/>
                                <constraint firstItem="mSL-o7-Koy" firstAttribute="top" secondItem="1HY-aY-obo" secondAttribute="top" id="w4F-kc-2Ia"/>
                            </constraints>
                        </view>
                        <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="byc-YG-6j2">
                            <rect key="frame" x="0.0" y="114.5" width="613" height="361.5"/>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                        </tableView>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="7a7-SF-J1X" firstAttribute="top" secondItem="Q0Z-Ir-Pcf" secondAttribute="top" constant="23" id="5ek-LF-x9w"/>
                        <constraint firstItem="1HY-aY-obo" firstAttribute="leading" secondItem="Q0Z-Ir-Pcf" secondAttribute="leading" id="9VC-yK-0f0"/>
                        <constraint firstItem="byc-YG-6j2" firstAttribute="leading" secondItem="Q0Z-Ir-Pcf" secondAttribute="leading" id="Nvf-2P-aHG"/>
                        <constraint firstItem="byc-YG-6j2" firstAttribute="top" secondItem="1HY-aY-obo" secondAttribute="bottom" id="Qb0-c6-2AJ"/>
                        <constraint firstItem="1HY-aY-obo" firstAttribute="top" secondItem="7a7-SF-J1X" secondAttribute="bottom" constant="20" id="Rd1-5t-1RW"/>
                        <constraint firstItem="7a7-SF-J1X" firstAttribute="leading" secondItem="Q0Z-Ir-Pcf" secondAttribute="leading" constant="22" id="XkC-cE-SMK"/>
                        <constraint firstAttribute="bottom" secondItem="byc-YG-6j2" secondAttribute="bottom" id="bzm-73-grP"/>
                        <constraint firstAttribute="trailing" secondItem="byc-YG-6j2" secondAttribute="trailing" id="tqr-zm-xgY"/>
                        <constraint firstAttribute="trailing" secondItem="1HY-aY-obo" secondAttribute="trailing" id="uNS-ha-LB1"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="8"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="x3k-K2-glo" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="2VV-rc-ZEk"/>
                <constraint firstItem="x3k-K2-glo" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="28" id="3SN-hj-aGB"/>
                <constraint firstItem="Q0Z-Ir-Pcf" firstAttribute="trailing" secondItem="x3k-K2-glo" secondAttribute="trailing" id="WBL-S4-VeV"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="Q0Z-Ir-Pcf" secondAttribute="bottom" constant="127" id="eYq-Uy-Tiy"/>
                <constraint firstItem="Q0Z-Ir-Pcf" firstAttribute="leading" secondItem="x3k-K2-glo" secondAttribute="leading" id="qYd-pz-O8f"/>
                <constraint firstItem="Q0Z-Ir-Pcf" firstAttribute="top" secondItem="x3k-K2-glo" secondAttribute="bottom" constant="9" id="rR1-Ia-raL"/>
            </constraints>
            <userDefinedRuntimeAttributes>
                <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                    <real key="value" value="8"/>
                </userDefinedRuntimeAttribute>
            </userDefinedRuntimeAttributes>
            <point key="canvasLocation" x="139.83050847457628" y="19.756097560975608"/>
        </view>
    </objects>
    <resources>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
DolphinEnglishLearnStudent/Other/CommonWebVC.swift
New file
@@ -0,0 +1,86 @@
//
//  CommonWebVC.swift
//  DolphinEnglishLearnManager
//
//  Created by 无故事王国 on 2024/5/14.
//
import UIKit
import WebKit
class CommonWebVC: BaseVC {
                enum CommonWebType{
                                case logoff
                                case userAgreement
                                case privacyAgreement
                                case userGuide
                }
                private var type:CommonWebType!
                init(type:CommonWebType) {
                                super.init(nibName: nil, bundle: nil)
                                self.type = type
                }
                required init?(coder: NSCoder) {
                                fatalError("init(coder:) has not been implemented")
                }
                override func viewDidLoad() {
                                super.viewDidLoad()
                }
                override func setUI() {
                                super.setUI()
                                if type == .logoff{
                                                let completeBtn = UIButton(type: .custom)
                                                completeBtn.jq_cornerRadius = 8
                                                completeBtn.addTarget(self, action: #selector(handleAction), for: .touchUpInside)
                                                completeBtn.setTitleColor(.white, for: .normal)
                                                completeBtn.titleLabel?.font = UIFont.systemFont(ofSize: 16, weight: .medium)
                                                completeBtn.setTitle("确认(10s)", for: .normal)
                                                completeBtn.backgroundColor = UIColor(hexStr: "#41A2EB")
                                                view.addSubview(completeBtn)
                                                completeBtn.snp.makeConstraints { make in
                                                                make.width.equalTo(316)
                                                                make.centerX.equalToSuperview()
                                                                make.bottom.equalToSuperview().offset(-91)
                                                                make.height.equalTo(47)
                                                }
                                                var time = 10 //倒计时时间
                                                let queue = DispatchQueue.global()
                                                let timer = DispatchSource.makeTimerSource(flags: [], queue: queue)
                                                timer.schedule(wallDeadline: DispatchWallTime.now(), repeating: .seconds(1));
                                                timer.setEventHandler(handler: {
                                                                if time <= 0 {
                                                                                timer.cancel()
                                                                                DispatchQueue.main.async(execute: {
                                                                                                completeBtn.setTitle("确认", for: .normal)
                                                                                                completeBtn.isUserInteractionEnabled = true
                                                                                                completeBtn.backgroundColor = UIColor(hexStr: "#41A2EB")
                                                                                });
                                                                }else {
                                                                                DispatchQueue.main.async(execute: {
                                                                                                completeBtn.setTitle("确认\(time)s", for: .normal)
                                                                                                completeBtn.isUserInteractionEnabled = false
                                                                                                completeBtn.backgroundColor = .gray
                                                                                });
                                                                }
                                                                time -= 1
                                                });
                                                timer.resume()
                                }
                }
                @objc func handleAction(sender:UIButton){
                                CommonAlertView.show(content:"确认注销当前登录账户吗?") {
                                }
                }
}
DolphinEnglishLearnStudent/Other/UIView/BitrhdayPickerView.swift
New file
@@ -0,0 +1,286 @@
//
//  BitrhdayPickerView.swift
//  JKFitness
//
//  Created by 无故事王国 on 2024/2/20.
//
import UIKit
import JQTools
class BitrhdayPickerView: UIView {
                enum DateType {
                                case YMD
                                case YM
                }
                private var view_content:UIView = {
                                let v = UIView()
                                v.backgroundColor = .white
                                return v
                }()
                private var label_title:UILabel = {
                                let label = UILabel()
                                label.font = .systemFont(ofSize: 18, weight: .medium)
                                label.textColor = .black.withAlphaComponent(0.8)
                                return label
                }()
                private var btn_close:UIButton = {
                                let btn = UIButton(type: .custom)
                                btn.setImage(UIImage(named: "btn_close_circle"), for: .normal)
                                return btn
                }()
                private var btn_complete:UIButton = {
                                let btn = UIButton(type: .custom)
                                btn.setTitle("确认", for: .normal)
                                btn.titleLabel?.font = UIFont.systemFont(ofSize: 14, weight: .medium)
                                btn.setTitleColor(.white, for: .normal)
                                btn.backgroundColor = Config.ThemeColor
                                btn.jq_cornerRadius = 8
                                return btn
                }()
                private var picker:UIPickerView = {
                                let pickerView = UIPickerView()
                                return pickerView
                }()
                private var minYear:Int = 1960
                private var maxYear:Int = Date().jq_nowYear() + 1
                private var defaultYear:Int?
                private var defaultMonth:Int?
                private var defaultDay:Int?
                private var resultValue:Double = 0
                private var type:DateType!
                private var clouse:((Date)->Void)!
                override init(frame: CGRect) {
                                super.init(frame: frame)
                                backgroundColor = UIColor.black.withAlphaComponent(0)
                                addSubview(view_content)
                                view_content.snp.makeConstraints { make in
                                                make.left.right.equalToSuperview()
                                                make.bottom.equalToSuperview().offset(JQ_ScreenW * 0.3278)
                                                make.height.equalTo(JQ_ScreenW * 0.3278)
                                }
                                view_content.addSubview(btn_close)
                                btn_close.addTarget(self, action: #selector(closeAction), for: .touchUpInside)
                                btn_close.snp.makeConstraints { make in
                                                make.top.equalTo(10)
                                                make.right.equalTo(-11)
                                                make.width.height.equalTo(23)
                                }
                                view_content.addSubview(label_title)
                                label_title.snp.makeConstraints { make in
                                                make.top.equalTo(30)
                                                make.centerX.equalToSuperview()
                                                make.height.equalTo(18)
                                }
                                layoutIfNeeded()
                }
                private func setUI(){
                                var items = Array<String>()
                                if type == .YMD{
                                                items = ["年","月","日"]
                                }else{
                                                items = ["年","月"]
                                }
                                let stackView =  UIStackView()
                                stackView.axis = .horizontal
                                stackView.distribution = .fillEqually
                                stackView.spacing = 113
                                view_content.addSubview(stackView)
                                stackView.snp.makeConstraints { make in
                                                make.top.equalTo(label_title.snp.bottom).offset(27)
                                                make.height.equalTo(25)
                                                make.centerX.equalToSuperview()
                                }
                                for (_,v) in items.enumerated(){
                                                let label     = UILabel()
                                                label.text = v
                                                label.font = UIFont.systemFont(ofSize: 18, weight: .medium)
                                                label.textColor = .black.withAlphaComponent(0.8)
                                                label.textAlignment = .center
                                                stackView.addArrangedSubview(label)
                                }
                                view_content.addSubview(btn_complete)
                                btn_complete.snp.makeConstraints { make in
                                                make.bottom.equalToSuperview().offset(-UIDevice.jq_safeEdges.bottom)
                                                make.centerX.equalToSuperview()
                                                make.width.equalTo(JQ_ScreenW * 0.1487)
                                                make.height.equalTo(47)
                                }
                                view_content.addSubview(picker)
                                picker.delegate = self
                                picker.dataSource = self
                                picker.snp.makeConstraints { make in
                                                make.top.equalTo(label_title.snp.bottom).offset(50)
                                                make.bottom.equalTo(btn_complete.snp.top)
                                                make.centerX.equalToSuperview()
                                }
                                btn_complete.addTarget(self, action: #selector(completeAction), for: .touchUpInside)
                }
                required init?(coder: NSCoder) {
                                fatalError("init(coder:) has not been implemented")
                }
                static func show(title:String,type:DateType,defaultYear:Int? = nil,defaultMonth:Int? = nil,defaultDay:Int? = nil,minYear:Int = 1960,clouse:@escaping (Date)->Void){
                                let pickerView = BitrhdayPickerView(frame: sceneDelegate?.window?.frame ?? .zero)
                                pickerView.minYear = minYear
                                pickerView.clouse = clouse
                                pickerView.label_title.text = title
                                pickerView.defaultYear = defaultYear
                                pickerView.defaultMonth = defaultMonth
                                pickerView.defaultDay = defaultDay
                                pickerView.type = type
                                sceneDelegate?.window?.addSubview(pickerView)
                                pickerView.setUI()
                                UIView.animate(withDuration: 0.35) {
                                                pickerView.backgroundColor = UIColor.black.withAlphaComponent(0.7)
                                                pickerView.view_content.snp.updateConstraints { make in
                                                                make.bottom.equalToSuperview()
                                                }
                                                pickerView.layoutIfNeeded()
                                }completion: { _ in
                                                pickerView.picker.reloadAllComponents()
                                                switch type {
                                                                case .YMD:
                                                                                if defaultDay != nil{
                                                                                                pickerView.picker.selectRow(defaultDay! - 1, inComponent: 2, animated: true)
                                                                                }
                                                                                fallthrough
                                                                case .YM:
                                                                                if defaultYear != nil{
                                                                                                pickerView.picker.selectRow(defaultYear! - pickerView.minYear, inComponent: 0, animated: true)
                                                                                }
                                                                                if defaultMonth != nil{
                                                                                                pickerView.picker.selectRow(defaultMonth! - 1, inComponent: 1, animated: true)
                                                                                }
                                                }
                                                pickerView.picker.reloadAllComponents()
                                }
                }
                @objc func closeAction(){
                                UIView.animate(withDuration: 0.35) {
                                                self.backgroundColor = UIColor.black.withAlphaComponent(0)
                                                self.view_content.snp.updateConstraints { make in
                                                                make.bottom.equalToSuperview().offset(JQ_ScreenW * 0.3278)
                                                }
                                                self.layoutIfNeeded()
                                }completion: { _ in
                                                self.removeFromSuperview()
                                }
                }
                @objc func completeAction(){
                                let year = picker.selectedRow(inComponent: 0) + minYear
                                let month = picker.selectedRow(inComponent: 1) + 1
                                var day = 1
                                if type == .YMD{
                                                day = picker.selectedRow(inComponent: 2) + 1
                                }
                                clouse(Date.jq_format(year: year, month: month, day: day,hour: 0,minute: 0,second: 0)!)
                                closeAction()
                }
}
extension BitrhdayPickerView:UIPickerViewDelegate & UIPickerViewDataSource{
                func numberOfComponents(in pickerView: UIPickerView) -> Int {
                                if type == .YMD{
                                                return 3
                                }
                                if type == .YM{
                                                return 2
                                }
                                return 0
                }
                func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
                                return 40
                }
                func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
                                var resultLabel:UILabel?
                                if let label = view as? UILabel{
                                                resultLabel = label
                                }else{
                                                resultLabel = UILabel()
                                                resultLabel!.font = UIFont.systemFont(ofSize: 18, weight: .semibold)
                                                resultLabel!.textColor = UIColor(hexStr: "#3C3C3C")
                                                resultLabel!.textAlignment = .center
                                }
                                if component == 0{
                                                resultLabel!.text = "\(minYear + row)"
                                }
                                if component == 1{
                                                resultLabel!.text = String(format: "%02ld", row + 1)
                                }
                                if component == 2{
                                                resultLabel!.text = String(format: "%02ld", row + 1)
                                }
                                return resultLabel!
                }
                func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
                                if component == 0{
                                                return maxYear - minYear
                                }
                                if component == 1{
                                                if pickerView.selectedRow(inComponent: 0) + minYear == Date().jq_nowYear(){
                                                                return Date().jq_nowMonth()
                                                }
                                                return 12
                                }
                                if component == 2{
                                                if pickerView.selectedRow(inComponent: 0) + minYear == Date().jq_nowYear() && pickerView.selectedRow(inComponent: 1) + 1 == Date().jq_nowMonth(){
                                                                return Date().jq_nowDay()
                                                }
                                                return Date.jq_getDays(pickerView.selectedRow(inComponent: 0) + minYear, pickerView.selectedRow(inComponent: 1) + 1)
                                }
                                return 0
                }
                func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
                                if component == 0{
                                                pickerView.reloadComponent(1)
                                                if type == .YMD{
                                                                pickerView.reloadComponent(2)
                                                }
                                }
                                if component == 1 && type == .YMD{
                                                pickerView.reloadComponent(2)
                                }
                }
}
DolphinEnglishLearnStudent/Other/UIView/CommonAlertView.swift
New file
@@ -0,0 +1,66 @@
//
//  CommonAlertView.swift
//  DolphinEnglishLearnManager
//
//  Created by 无故事王国 on 2024/5/17.
//
import UIKit
class CommonAlertView: UIView,JQNibView{
                @IBOutlet weak var view_container: UIView!
                @IBOutlet weak var label_content: UILabel!
                @IBOutlet weak var btn_complete: UIButton!
                @IBOutlet weak var btn_close: UIButton!
                @IBOutlet weak var cons_btnClose: NSLayoutConstraint!
                private var clouse:(()->Void)!
                override func awakeFromNib() {
                                super.awakeFromNib()
                                self.alpha = 0
                                view_container.transform = .init(scaleX: 0.1, y: 0.1)
                                layoutIfNeeded()
                }
                static func show(isSinple:Bool = false, content:String,clouse:@escaping ()->Void){
                                 let commonAlertView = CommonAlertView.jq_loadNibView()
                                sceneDelegate?.window?.addSubview(commonAlertView)
                                commonAlertView.label_content.text = content
                                commonAlertView.clouse = clouse
                                commonAlertView.frame = sceneDelegate?.window?.frame ?? .zero
                                if isSinple{
                                                commonAlertView.btn_complete.isHidden = true
                                                commonAlertView.cons_btnClose.constant = 219 * Config.RatioW
                                                commonAlertView.btn_close.backgroundColor = Config.ThemeColor
                                                commonAlertView.btn_close.jq_borderWidth = 0
                                                commonAlertView.btn_close.setTitleColor(.white, for: .normal)
                                }
                                UIView.animate(withDuration: 0.4) {
                                                commonAlertView.alpha = 1
                                                commonAlertView.view_container.transform = .init(translationX: 1.0, y: 1.0)
                                                commonAlertView.layoutIfNeeded()
                                }
                }
                @IBAction func closeAction(_ sender: UIButton) {
                                UIView.animate(withDuration: 0.4) {
                                                self.alpha = 0
                                                self.view_container.transform = .init(scaleX: 0.1, y: 0.1)
                                } completion: { _ in
                                                self.removeFromSuperview()
                                }
                }
                @IBAction func completeAction(_ sender: UIButton) {
                                UIView.animate(withDuration: 0.4) {
                                                self.alpha = 0
                                                self.view_container.transform = .init(scaleX: 0.1, y: 0.1)
                                } completion: { _ in
                                                self.removeFromSuperview()
                                                self.clouse()
                                }
                }
}
DolphinEnglishLearnStudent/Other/UIView/CommonAlertView.xib
New file
@@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="ipad12_9" orientation="portrait" layout="fullscreen" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <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"/>
        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="CommonAlertView" customModule="DolphinEnglishLearnManager" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="1024" height="1366"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iXV-rC-7jh">
                    <rect key="frame" x="307.5" y="569" width="409" height="248.5"/>
                    <subviews>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="提示" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lyG-sK-hpk">
                            <rect key="frame" x="186" y="32" width="37" height="21.5"/>
                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
                            <nil key="textColor"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <stackView opaque="NO" contentMode="scaleToFill" spacing="27" translatesAutoresizingMaskIntoConstraints="NO" id="4CG-pJ-vfV">
                            <rect key="frame" x="67" y="182.5" width="275" height="40"/>
                            <subviews>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="eUg-Ri-V3v">
                                    <rect key="frame" x="0.0" y="0.0" width="124" height="40"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="40" id="8OA-Ib-Rfl"/>
                                        <constraint firstAttribute="width" constant="124" id="Wam-9U-4f6"/>
                                    </constraints>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" title="关闭">
                                        <color key="titleColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    </state>
                                    <userDefinedRuntimeAttributes>
                                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                            <real key="value" value="4"/>
                                        </userDefinedRuntimeAttribute>
                                        <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB">
                                            <color key="value" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                        </userDefinedRuntimeAttribute>
                                        <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB">
                                            <real key="value" value="1"/>
                                        </userDefinedRuntimeAttribute>
                                    </userDefinedRuntimeAttributes>
                                    <connections>
                                        <action selector="closeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="QtB-fw-4O8"/>
                                    </connections>
                                </button>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Qeb-KI-yJN">
                                    <rect key="frame" x="151" y="0.0" width="124" height="40"/>
                                    <color key="backgroundColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="40" id="gA3-ga-PM7"/>
                                        <constraint firstAttribute="width" constant="124" id="sTB-P5-uWe"/>
                                    </constraints>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" title="确认"/>
                                    <userDefinedRuntimeAttributes>
                                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                            <real key="value" value="4"/>
                                        </userDefinedRuntimeAttribute>
                                    </userDefinedRuntimeAttributes>
                                    <connections>
                                        <action selector="completeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="Frc-fB-CAw"/>
                                    </connections>
                                </button>
                            </subviews>
                        </stackView>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CVE-yP-zb4">
                            <rect key="frame" x="20" y="99.5" width="369" height="20"/>
                            <constraints>
                                <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="20" id="nwo-4g-f7n"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="4CG-pJ-vfV" firstAttribute="top" secondItem="CVE-yP-zb4" secondAttribute="bottom" constant="63" id="B5i-qR-HdF"/>
                        <constraint firstItem="4CG-pJ-vfV" firstAttribute="centerX" secondItem="iXV-rC-7jh" secondAttribute="centerX" id="KVF-n3-qVT"/>
                        <constraint firstItem="CVE-yP-zb4" firstAttribute="top" secondItem="lyG-sK-hpk" secondAttribute="bottom" constant="46" id="LHn-X6-s5n"/>
                        <constraint firstAttribute="width" constant="408.56999999999999" id="LYU-a3-xpN"/>
                        <constraint firstAttribute="trailing" secondItem="CVE-yP-zb4" secondAttribute="trailing" constant="20" id="XcM-RH-MOg"/>
                        <constraint firstAttribute="bottom" secondItem="4CG-pJ-vfV" secondAttribute="bottom" constant="26" id="cEB-nM-gID"/>
                        <constraint firstItem="lyG-sK-hpk" firstAttribute="centerX" secondItem="iXV-rC-7jh" secondAttribute="centerX" id="dXZ-Ev-3vZ"/>
                        <constraint firstItem="CVE-yP-zb4" firstAttribute="centerX" secondItem="iXV-rC-7jh" secondAttribute="centerX" id="sAa-RM-EM2"/>
                        <constraint firstItem="lyG-sK-hpk" firstAttribute="top" secondItem="iXV-rC-7jh" secondAttribute="top" constant="32" id="t4W-8p-o9L"/>
                        <constraint firstItem="CVE-yP-zb4" firstAttribute="leading" secondItem="iXV-rC-7jh" secondAttribute="leading" constant="20" id="yiR-k6-hOd"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="10"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
            </subviews>
            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="sRGB"/>
            <constraints>
                <constraint firstItem="iXV-rC-7jh" firstAttribute="centerY" secondItem="vUN-kp-3ea" secondAttribute="centerY" id="CQd-Q7-Cd5"/>
                <constraint firstItem="iXV-rC-7jh" firstAttribute="centerX" secondItem="vUN-kp-3ea" secondAttribute="centerX" id="Dog-nm-40j"/>
            </constraints>
            <connections>
                <outlet property="btn_close" destination="eUg-Ri-V3v" id="tyN-SJ-Of9"/>
                <outlet property="btn_complete" destination="Qeb-KI-yJN" id="HYR-zf-9Y4"/>
                <outlet property="cons_btnClose" destination="Wam-9U-4f6" id="Tsy-Di-28D"/>
                <outlet property="label_content" destination="CVE-yP-zb4" id="wNk-0t-cph"/>
                <outlet property="view_container" destination="iXV-rC-7jh" id="TzA-4l-9IR"/>
            </connections>
            <point key="canvasLocation" x="140" y="21"/>
        </view>
    </objects>
    <resources>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
DolphinEnglishLearnStudent/Other/UIView/CommonInputView.swift
New file
@@ -0,0 +1,64 @@
//
//  CommonInputView.swift
//  DolphinEnglishLearnManager
//
//  Created by 无故事王国 on 2024/5/20.
//
import UIKit
class CommonInputView: UIView,JQNibView {
                @IBOutlet weak var view_container: UIView!
                @IBOutlet weak var label_title: UILabel!
                @IBOutlet weak var label_hint: UILabel!
                @IBOutlet weak var tf_input: UITextField!
                private var clouse:((String)->Void)!
                override func awakeFromNib() {
                                super.awakeFromNib()
                                self.alpha = 0
                                view_container.transform = .init(scaleX: 0.1, y: 0.1)
                                layoutIfNeeded()
                }
                static func show( _ title:String,hintTitle:String,clouse:@escaping (String)->Void){
                                let commonAlertView = CommonInputView.jq_loadNibView()
                                sceneDelegate?.window?.addSubview(commonAlertView)
                                commonAlertView.label_title.text = title
                                commonAlertView.label_hint.text = hintTitle
                                commonAlertView.clouse = clouse
                                commonAlertView.frame = sceneDelegate?.window?.frame ?? .zero
                                UIView.animate(withDuration: 0.4) {
                                                commonAlertView.alpha = 1
                                                commonAlertView.view_container.transform = .init(translationX: 1.0, y: 1.0)
                                                commonAlertView.layoutIfNeeded()
                                }
                }
                @IBAction func closeAction(_ sender: UIButton) {
                                UIView.animate(withDuration: 0.4) {
                                                self.alpha = 0
                                                self.view_container.transform = .init(scaleX: 0.1, y: 0.1)
                                } completion: { _ in
                                                self.removeFromSuperview()
                                }
                }
                @IBAction func completeAction(_ sender: UIButton) {
                                guard !tf_input.text!.isEmpty else {
                                                alertError(msg: "请输入");return
                                }
                                let text = tf_input.text!
                                UIView.animate(withDuration: 0.4) {
                                                self.alpha = 0
                                                self.view_container.transform = .init(scaleX: 0.1, y: 0.1)
                                } completion: { _ in
                                                self.removeFromSuperview()
                                                self.clouse(text)
                                }
                }
}
DolphinEnglishLearnStudent/Other/UIView/CommonInputView.xib
New file
@@ -0,0 +1,167 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="ipad10_5" orientation="portrait" layout="fullscreen" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <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"/>
        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="CommonInputView" customModule="DolphinEnglishLearnManager" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="834" height="1112"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aTu-ac-nDC">
                    <rect key="frame" x="213" y="443.5" width="408" height="245"/>
                    <subviews>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="提示" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CM3-8b-5R5">
                            <rect key="frame" x="185.5" y="32" width="37" height="18"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="18" id="f7t-r4-sa3"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <stackView opaque="NO" contentMode="scaleToFill" spacing="27" translatesAutoresizingMaskIntoConstraints="NO" id="GI4-lv-pPf">
                            <rect key="frame" x="66.5" y="179" width="275" height="40"/>
                            <subviews>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="THe-jt-YIv">
                                    <rect key="frame" x="0.0" y="0.0" width="124" height="40"/>
                                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                    <constraints>
                                        <constraint firstAttribute="width" secondItem="THe-jt-YIv" secondAttribute="height" multiplier="1:0.32" id="0ol-46-y42"/>
                                        <constraint firstAttribute="width" constant="124" id="P2W-FU-6oD"/>
                                    </constraints>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" title="关闭">
                                        <color key="titleColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    </state>
                                    <userDefinedRuntimeAttributes>
                                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                            <real key="value" value="4"/>
                                        </userDefinedRuntimeAttribute>
                                        <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB">
                                            <color key="value" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                        </userDefinedRuntimeAttribute>
                                        <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB">
                                            <real key="value" value="1"/>
                                        </userDefinedRuntimeAttribute>
                                    </userDefinedRuntimeAttributes>
                                    <connections>
                                        <action selector="closeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="HXK-Pq-WVN"/>
                                    </connections>
                                </button>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Smc-3N-N0n">
                                    <rect key="frame" x="151" y="0.0" width="124" height="40"/>
                                    <color key="backgroundColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <constraints>
                                        <constraint firstAttribute="width" secondItem="Smc-3N-N0n" secondAttribute="height" multiplier="1:0.32" id="Gs2-MJ-sgr"/>
                                        <constraint firstAttribute="width" constant="124" id="RXY-cw-y10"/>
                                        <constraint firstAttribute="width" secondItem="Smc-3N-N0n" secondAttribute="height" multiplier="1:0.32" id="zYE-8p-JTm"/>
                                    </constraints>
                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" title="确认"/>
                                    <userDefinedRuntimeAttributes>
                                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                            <real key="value" value="4"/>
                                        </userDefinedRuntimeAttribute>
                                    </userDefinedRuntimeAttributes>
                                    <connections>
                                        <action selector="completeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="LkC-0h-1IS"/>
                                    </connections>
                                </button>
                            </subviews>
                        </stackView>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="姓名:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Qwi-Cc-CYp">
                            <rect key="frame" x="59" y="96.5" width="41" height="19.5"/>
                            <constraints>
                                <constraint firstAttribute="width" constant="41" id="vTc-C9-MAn"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="AES-WH-hsy">
                            <rect key="frame" x="105" y="83.5" width="236.5" height="45.5"/>
                            <subviews>
                                <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="vOk-AH-OKW">
                                    <rect key="frame" x="16" y="0.0" width="220.5" height="45.5"/>
                                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.37" colorSpace="custom" customColorSpace="sRGB"/>
                                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
                                    <textInputTraits key="textInputTraits"/>
                                </textField>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstItem="vOk-AH-OKW" firstAttribute="centerY" secondItem="AES-WH-hsy" secondAttribute="centerY" id="0Sa-Od-Zku"/>
                                <constraint firstAttribute="bottom" secondItem="vOk-AH-OKW" secondAttribute="bottom" id="19L-KH-woI"/>
                                <constraint firstAttribute="trailing" secondItem="vOk-AH-OKW" secondAttribute="trailing" id="IdQ-Gb-QGa"/>
                                <constraint firstItem="vOk-AH-OKW" firstAttribute="top" secondItem="AES-WH-hsy" secondAttribute="top" id="N1h-2w-crt"/>
                                <constraint firstItem="vOk-AH-OKW" firstAttribute="leading" secondItem="AES-WH-hsy" secondAttribute="leading" constant="16" id="nYx-hP-KvP"/>
                            </constraints>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                    <real key="value" value="3"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB">
                                    <color key="value" red="0.93333333333333335" green="0.93333333333333335" blue="0.93333333333333335" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB">
                                    <real key="value" value="1"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                        </view>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="AES-WH-hsy" firstAttribute="leading" secondItem="Qwi-Cc-CYp" secondAttribute="trailing" constant="5" id="4gK-wN-X9u"/>
                        <constraint firstItem="CM3-8b-5R5" firstAttribute="centerX" secondItem="aTu-ac-nDC" secondAttribute="centerX" id="ASx-O9-cXf"/>
                        <constraint firstAttribute="bottom" secondItem="GI4-lv-pPf" secondAttribute="bottom" constant="26" id="HEd-Lx-ZfI"/>
                        <constraint firstItem="CM3-8b-5R5" firstAttribute="top" secondItem="aTu-ac-nDC" secondAttribute="top" constant="32" id="Puc-m7-hT6"/>
                        <constraint firstItem="GI4-lv-pPf" firstAttribute="top" secondItem="Qwi-Cc-CYp" secondAttribute="bottom" constant="63" id="WRx-7O-3IC"/>
                        <constraint firstItem="GI4-lv-pPf" firstAttribute="top" secondItem="AES-WH-hsy" secondAttribute="bottom" constant="50" id="ZBe-Bw-Q3m"/>
                        <constraint firstAttribute="width" constant="408" id="aS1-2Q-peX"/>
                        <constraint firstItem="GI4-lv-pPf" firstAttribute="centerX" secondItem="aTu-ac-nDC" secondAttribute="centerX" id="fmv-Wh-ahj"/>
                        <constraint firstItem="AES-WH-hsy" firstAttribute="centerY" secondItem="Qwi-Cc-CYp" secondAttribute="centerY" id="kNH-of-fPV"/>
                        <constraint firstItem="GI4-lv-pPf" firstAttribute="trailing" secondItem="AES-WH-hsy" secondAttribute="trailing" id="sCh-W2-MNE"/>
                        <constraint firstAttribute="width" secondItem="aTu-ac-nDC" secondAttribute="height" multiplier="1:0.6" id="u01-xe-RDR"/>
                        <constraint firstItem="Qwi-Cc-CYp" firstAttribute="leading" secondItem="aTu-ac-nDC" secondAttribute="leading" constant="59" id="vHk-EM-8MN"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="8"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
            </subviews>
            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="sRGB"/>
            <constraints>
                <constraint firstItem="aTu-ac-nDC" firstAttribute="centerY" secondItem="vUN-kp-3ea" secondAttribute="centerY" id="u5z-Yo-s1G"/>
                <constraint firstItem="aTu-ac-nDC" firstAttribute="centerX" secondItem="vUN-kp-3ea" secondAttribute="centerX" id="x4m-bJ-yce"/>
            </constraints>
            <connections>
                <outlet property="label_hint" destination="Qwi-Cc-CYp" id="z4z-rs-Io8"/>
                <outlet property="label_title" destination="CM3-8b-5R5" id="3Kx-tk-chw"/>
                <outlet property="tf_input" destination="vOk-AH-OKW" id="eeR-6B-yD6"/>
                <outlet property="view_container" destination="aTu-ac-nDC" id="qDD-bp-aam"/>
            </connections>
            <point key="canvasLocation" x="97.841726618705039" y="20.50359712230216"/>
        </view>
    </objects>
    <resources>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
DolphinEnglishLearnStudent/SceneDelegate.swift
New file
@@ -0,0 +1,82 @@
//
//  SceneDelegate.swift
//  DolphinEnglishLearnStudent
//
//  Created by 无故事王国 on 2024/5/22.
//
import UIKit
import SVProgressHUD
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
                var window: UIWindow?
                func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
                                guard let windowScene = (scene as? UIWindowScene) else { return }
                                window = UIWindow(windowScene: windowScene)
                                window?.frame = windowScene.coordinateSpace.bounds
                                if #available(iOS 13.0, *) {
                                                window?.overrideUserInterfaceStyle = .light
                                }
                                SVProgressHUD.setMaximumDismissTimeInterval(1.5)
                                SVProgressHUD.setDefaultMaskType(.custom)
                                loginSuccess()
                }
                func sceneDidDisconnect(_ scene: UIScene) {
                                // Called as the scene is being released by the system.
                                // This occurs shortly after the scene enters the background, or when its session is discarded.
                                // Release any resources associated with this scene that can be re-created the next time the scene connects.
                                // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
                }
                func sceneDidBecomeActive(_ scene: UIScene) {
                                // Called when the scene has moved from an inactive state to an active state.
                                // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
                }
                func sceneWillResignActive(_ scene: UIScene) {
                                // Called when the scene will move from an active state to an inactive state.
                                // This may occur due to temporary interruptions (ex. an incoming phone call).
                }
                func sceneWillEnterForeground(_ scene: UIScene) {
                                // Called as the scene transitions from the background to the foreground.
                                // Use this method to undo the changes made on entering the background.
                }
                func sceneDidEnterBackground(_ scene: UIScene) {
                                // Called as the scene transitions from the foreground to the background.
                                // Use this method to save data, release shared resources, and store enough scene-specific state information
                                // to restore the scene back to its current state.
                }
}
extension SceneDelegate{
                func loginSuccess(){
                                let tabBar = BaseTabBarVC()
                                let homeNav = BaseNav(rootViewController: HomeVC())
                                homeNav.tabBarItem = UITabBarItem(title: "首页", image: UIImage(named: "nav_home"), selectedImage: UIImage(named: "nav_home_s")!.withRenderingMode(.alwaysOriginal))
                                let marketNav = BaseNav(rootViewController: MarketVC())
                                marketNav.tabBarItem = UITabBarItem(title: "商城", image: UIImage(named: "nav_market"), selectedImage: UIImage(named: "nav_market_s")!.withRenderingMode(.alwaysOriginal))
                                let meNav = BaseNav(rootViewController: MeVC())
                                meNav.tabBarItem = UITabBarItem(title: "我的", image: UIImage(named: "nav_me"), selectedImage: UIImage(named: "nav_me_s")!.withRenderingMode(.alwaysOriginal))
                                tabBar.viewControllers = [homeNav,marketNav,meNav]
                                sceneDelegate?.window?.rootViewController = tabBar
                                sceneDelegate?.window?.makeKeyAndVisible()
                }
                func needLogin(){
                                sceneDelegate?.window?.rootViewController = BaseNav(rootViewController: LoginVC())
                                sceneDelegate?.window?.makeKeyAndVisible()
                }
}
Podfile
New file
@@ -0,0 +1,17 @@
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target 'DolphinEnglishLearnStudent' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!
  # Pods for DolphinEnglishLearnStudent
  pod 'JQTools',:path=> '/Users/yvkd/MyProject/JQTools' # 个人开发库
  pod 'SwifterSwift' # Swift便捷常用工具库
  pod 'FFPage' # 分页
  pod 'SPPageMenu' # 配合FFPage 顶部导航分页
#  pod 'Alamofire' # 网络请求框架
  pod 'SVProgressHUD' # 提示框组件
  pod 'CryptoSwift' # 常用加密算法
end