commit 9a7a46bc46215f65b18cbcd13056f0aa8c5fc618 Author: lijia Date: Mon Jan 24 10:08:16 2022 +0800 企业端初始化 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..fb7f4a8 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..c69b70f --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..70ac3f8 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..860da66 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..797acea --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/app/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..343a8c5 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,119 @@ +plugins { + id 'com.android.application' + id 'kotlin-android' + id 'kotlin-kapt' + id 'kotlin-android-extensions' +} + +def releaseTime() { + return new Date().format("yyyyMMddHHmm", TimeZone.getTimeZone("GMT+08:00")) +} + +android { + + signingConfigs { + config { + keyAlias 'examine' + keyPassword '210419' + storeFile file('examine.jks') + storePassword '210419' + v1SigningEnabled true + v2SigningEnabled true + } + } + + compileSdkVersion 30 + buildToolsVersion "30.0.3" + + compileSdkVersion rootProject.ext.android["compileSdkVersion"] + + defaultConfig { + applicationId rootProject.ext.android["applicationId"] + minSdkVersion rootProject.ext.android["minSdkVersion"] + targetSdkVersion rootProject.ext.android["targetSdkVersion"] + versionCode rootProject.ext.android["versionCode"] + versionName rootProject.ext.android["versionName"] + multiDexEnabled true + flavorDimensions "CHANNEL_VALUE" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + signingConfig signingConfigs.config + } + debug { + signingConfig signingConfigs.config + } + } + + productFlavors { + + text_product { + applicationId rootProject.ext.android.applicationId + manifestPlaceholders = [CHANNEL_VALUE: "管理端(测试)"] + +// buildConfigField "String", "BASE_URL", "\"http://192.168.2.197:8090/\"" + buildConfigField "String", "BASE_URL", "\"http://pass.dahehuoyun.com:8090/\"" + buildConfigField "String", "BASE_HEAD_URL", "\"http://47.104.167.116:8080/guns/gunsApi/kaptcha/\"" + buildConfigField "boolean", "isTest", "true" + //APP名称,可以在androidMainfest中引用 +// resValue "string", "appName", "审核测试" + } + sign_product { + applicationId rootProject.ext.android.applicationId + manifestPlaceholders = [CHANNEL_VALUE: "管理端"] + buildConfigField "String", "BASE_URL", "\"http://pass.dahehuoyun.com:8090/\"" + buildConfigField "String", "BASE_HEAD_URL", "\"http://47.104.167.116:8080/guns/gunsApi/kaptcha/\"" + buildConfigField "boolean", "isTest", "false" +// resValue "string", "appName", "审核" + } + } + productFlavors.all { flavor -> + flavor.manifestPlaceholders = [CHANNEL_VALUE: name] + } + + android.applicationVariants.all { variant -> + variant.outputs.all { +// println("======="+variant.productFlavors[0].properties.get("resValues").getAt("appName").properties.get("value")) +// println("======="+variant.productFlavors[0].properties.get("buildConfigFields").getAt("isTest").properties.get("value")) +// println("+++++"+variant.productFlavors[0].name) + //获取渠道名称 + def isText = variant.productFlavors[0].properties.get("buildConfigFields").getAt("isTest").properties.get("value") + def appName = null + if (isText=="true") { + appName = '管理端测试_' + }else{ + appName = '管理端正式_' + } + outputFileName =appName+"${variant.buildType.name}_${defaultConfig.versionName}_${releaseTime()}.apk" + + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = '1.8' + } +} + +dependencies { + + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + implementation 'androidx.core:core-ktx:1.3.1' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'com.google.android.material:material:1.2.1' + implementation 'androidx.constraintlayout:constraintlayout:2.0.1' + testImplementation 'junit:junit:4.+' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + + + implementation project(path: ':mylibrary') +} \ No newline at end of file diff --git a/app/examine.jks b/app/examine.jks new file mode 100644 index 0000000..be9cbc1 Binary files /dev/null and b/app/examine.jks differ diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/sign_product/release/output-metadata.json b/app/sign_product/release/output-metadata.json new file mode 100644 index 0000000..cfd0e45 --- /dev/null +++ b/app/sign_product/release/output-metadata.json @@ -0,0 +1,18 @@ +{ + "version": 2, + "artifactType": { + "type": "APK", + "kind": "Directory" + }, + "applicationId": "com.dahe.examine", + "variantName": "sign_productRelease", + "elements": [ + { + "type": "SINGLE", + "filters": [], + "versionCode": 4, + "versionName": "1.0.4", + "outputFile": "管理端正式_release_1.0.4_202201240931.apk" + } + ] +} \ No newline at end of file diff --git a/app/sign_product/release/管理端正式_release_1.0.4_202201240931.apk b/app/sign_product/release/管理端正式_release_1.0.4_202201240931.apk new file mode 100644 index 0000000..2610cb2 Binary files /dev/null and b/app/sign_product/release/管理端正式_release_1.0.4_202201240931.apk differ diff --git a/app/src/androidTest/java/com/dahe/examine/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/dahe/examine/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..65bc123 --- /dev/null +++ b/app/src/androidTest/java/com/dahe/examine/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.dahe.examine + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.dahe.pass", appContext.packageName) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..8713e05 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/province.json b/app/src/main/assets/province.json new file mode 100644 index 0000000..2166cb4 --- /dev/null +++ b/app/src/main/assets/province.json @@ -0,0 +1,5354 @@ +[ + { + "name": "北京市", + "city": [ + { + "name": "北京市", + "area": [ + "东城区", + "西城区", + "崇文区", + "宣武区", + "朝阳区", + "丰台区", + "石景山区", + "海淀区", + "门头沟区", + "房山区", + "通州区", + "顺义区", + "昌平区", + "大兴区", + "平谷区", + "怀柔区", + "密云县", + "延庆县" + ] + } + ] + }, + { + "name": "天津市", + "city": [ + { + "name": "天津市", + "area": [ + "和平区", + "河东区", + "河西区", + "南开区", + "河北区", + "红桥区", + "塘沽区", + "汉沽区", + "大港区", + "东丽区", + "西青区", + "津南区", + "北辰区", + "武清区", + "宝坻区", + "宁河县", + "静海县", + "蓟 县" + ] + } + ] + }, + { + "name": "河北省", + "city": [ + { + "name": "石家庄市", + "area": [ + "长安区", + "桥东区", + "桥西区", + "新华区", + "郊 区", + "井陉矿区", + "井陉县", + "正定县", + "栾城县", + "行唐县", + "灵寿县", + "高邑县", + "深泽县", + "赞皇县", + "无极县", + "平山县", + "元氏县", + "赵 县", + "辛集市", + "藁", + "晋州市", + "新乐市", + "鹿泉市" + ] + }, + { + "name": "唐山市", + "area": [ + "路南区", + "路北区", + "古冶区", + "开平区", + "新 区", + "丰润县", + "滦 县", + "滦南县", + "乐亭县", + "迁西县", + "玉田县", + "唐海县", + "遵化市", + "丰南市", + "迁安市" + ] + }, + { + "name": "秦皇岛市", + "area": [ + "海港区", + "山海关区", + "北戴河区", + "青龙满族自治县", + "昌黎县", + "抚宁县", + "卢龙县" + ] + }, + { + "name": "邯郸市", + "area": [ + "邯山区", + "丛台区", + "复兴区", + "峰峰矿区", + "邯郸县", + "临漳县", + "成安县", + "大名县", + "涉 县", + "磁 县", + "肥乡县", + "永年县", + "邱 县", + "鸡泽县", + "广平县", + "馆陶县", + "魏 县", + "曲周县", + "武安市" + ] + }, + { + "name": "邢台市", + "area": [ + "桥东区", + "桥西区", + "邢台县", + "临城县", + "内丘县", + "柏乡县", + "隆尧县", + "任 县", + "南和县", + "宁晋县", + "巨鹿县", + "新河县", + "广宗县", + "平乡县", + "威 县", + "清河县", + "临西县", + "南宫市", + "沙河市" + ] + }, + { + "name": "保定市", + "area": [ + "新市区", + "北市区", + "南市区", + "满城县", + "清苑县", + "涞水县", + "阜平县", + "徐水县", + "定兴县", + "唐 县", + "高阳县", + "容城县", + "涞源县", + "望都县", + "安新县", + "易 县", + "曲阳县", + "蠡 县", + "顺平县", + "博野", + "雄县", + "涿州市", + "定州市", + "安国市", + "高碑店市" + ] + }, + { + "name": "张家口", + "area": [ + "桥东区", + "桥西区", + "宣化区", + "下花园区", + "宣化县", + "张北县", + "康保县", + "沽源县", + "尚义县", + "蔚 县", + "阳原县", + "怀安县", + "万全县", + "怀来县", + "涿鹿县", + "赤城县", + "崇礼县" + ] + }, + { + "name": "承德市", + "area": [ + "双桥区", + "双滦区", + "鹰手营子矿区", + "承德县", + "兴隆县", + "平泉县", + "滦平县", + "隆化县", + "丰宁满族自治县", + "宽城满族自治县", + "围场满族蒙古族自治县" + ] + }, + { + "name": "沧州市", + "area": [ + "新华区", + "运河区", + "沧 县", + "青 县", + "东光县", + "海兴县", + "盐山县", + "肃宁县", + "南皮县", + "吴桥县", + "献 县", + "孟村回族自治县", + "泊头市", + "任丘市", + "黄骅市", + "河间市" + ] + }, + { + "name": "廊坊市", + "area": [ + "安次区", + "固安县", + "永清县", + "香河县", + "大城县", + "文安县", + "大厂回族自治县", + "霸州市", + "三河市" + ] + }, + { + "name": "衡水市", + "area": [ + "桃城区", + "枣强县", + "武邑县", + "武强县", + "饶阳县", + "安平县", + "故城县", + "景 县", + "阜城县", + "冀州市", + "深州市" + ] + } + ] + }, + { + "name": "山西省", + "city": [ + { + "name": "太原市", + "area": [ + "小店区", + "迎泽区", + "杏花岭区", + "尖草坪区", + "万柏林区", + "晋源区", + "清徐县", + "阳曲县", + "娄烦县", + "古交市" + ] + }, + { + "name": "大同市", + "area": [ + "城 区", + "矿 区", + "南郊区", + "新荣区", + "阳高县", + "天镇县", + "广灵县", + "灵丘县", + "浑源县", + "左云县", + "大同县" + ] + }, + { + "name": "阳泉市", + "area": [ + "城 区", + "矿 区", + "郊 区", + "平定县", + "盂 县" + ] + }, + { + "name": "长治市", + "area": [ + "城 区", + "郊 区", + "长治县", + "襄垣县", + "屯留县", + "平顺县", + "黎城县", + "壶关县", + "长子县", + "武乡县", + "沁 县", + "沁源县", + "潞城市" + ] + }, + { + "name": "晋城市", + "area": [ + "城 区", + "沁水县", + "阳城县", + "陵川县", + "泽州县", + "高平市" + ] + }, + { + "name": "朔州市", + "area": [ + "朔城区", + "平鲁区", + "山阴县", + "应 县", + "右玉县", + "怀仁县" + ] + }, + { + "name": "忻州市", + "area": [ + "忻府区", + "原平市", + "定襄县", + "五台县", + "代 县", + "繁峙县", + "宁武县", + "静乐县", + "神池县", + "五寨县", + "岢岚县", + "河曲县", + "保德县", + "偏关县" + ] + }, + { + "name": "吕梁市", + "area": [ + "离石区", + "孝义市", + "汾阳市", + "文水县", + "交城县", + "兴 县", + "临 县", + "柳林县", + "石楼县", + "岚 县", + "方山县", + "中阳县", + "交口县" + ] + }, + { + "name": "晋中市", + "area": [ + "榆次市", + "介休市", + "榆社县", + "左权县", + "和顺县", + "昔阳县", + "寿阳县", + "太谷县", + "祁 县", + "平遥县", + "灵石县" + ] + }, + { + "name": "临汾市", + "area": [ + "临汾市", + "侯马市", + "霍州市", + "曲沃县", + "翼城县", + "襄汾县", + "洪洞县", + "古 县", + "安泽县", + "浮山县", + "吉 县", + "乡宁县", + "蒲 县", + "大宁县", + "永和县", + "隰 县", + "汾西县" + ] + }, + { + "name": "运城市", + "area": [ + "运城市", + "永济市", + "河津市", + "芮城县", + "临猗县", + "万荣县", + "新绛县", + "稷山县", + "闻喜县", + "夏 县", + "绛 县", + "平陆县", + "垣曲县" + ] + } + ] + }, + { + "name": "内蒙古", + "city": [ + { + "name": "呼和浩特市", + "area": [ + "新城区", + "回民区", + "玉泉区", + "郊 区", + "土默特左旗", + "托克托县", + "和林格尔县", + "清水河县", + "武川县" + ] + }, + { + "name": "包头市", + "area": [ + "东河区", + "昆都伦区", + "青山区", + "石拐矿区", + "白云矿区", + "郊 区", + "土默特右旗", + "固阳县", + "达尔罕茂明安联合旗" + ] + }, + { + "name": "乌海市", + "area": [ + "海勃湾区", + "海南区", + "乌达区" + ] + }, + { + "name": "赤峰市", + "area": [ + "红山区", + "元宝山区", + "松山区", + "阿鲁科尔沁旗", + "巴林左旗", + "巴林右旗", + "林西县", + "克什克腾旗", + "翁牛特旗", + "喀喇沁旗", + "宁城县", + "敖汉旗" + ] + }, + { + "name": "呼伦贝尔市", + "area": [ + "海拉尔市", + "满洲里市", + "扎兰屯市", + "牙克石市", + "根河市", + "额尔古纳市", + "阿荣旗", + "莫力达瓦达斡尔族自治旗", + "鄂伦春自治旗", + "鄂温克族自治旗", + "新巴尔虎右旗", + "新巴尔虎左旗", + "陈巴尔虎旗" + ] + }, + { + "name": "兴安盟", + "area": [ + "乌兰浩特市", + "阿尔山市", + "科尔沁右翼前旗", + "科尔沁右翼中旗", + "扎赉特旗", + "突泉县" + ] + }, + { + "name": "通辽市", + "area": [ + "科尔沁区", + "霍林郭勒市", + "科尔沁左翼中旗", + "科尔沁左翼后旗", + "开鲁县", + "库伦旗", + "奈曼旗", + "扎鲁特旗" + ] + }, + { + "name": "锡林郭勒盟", + "area": [ + "二连浩特市", + "锡林浩特市", + "阿巴嘎旗", + "苏尼特左旗", + "苏尼特右旗", + "东乌珠穆沁旗", + "西乌珠穆沁旗", + "太仆寺旗", + "镶黄旗", + "正镶白旗", + "正蓝旗", + "多伦县" + ] + }, + { + "name": "乌兰察布盟", + "area": [ + "集宁市", + "丰镇市", + "卓资县", + "化德县", + "商都县", + "兴和县", + "凉城县", + "察哈尔右翼前旗", + "察哈尔右翼中旗", + "察哈尔右翼后旗", + "四子王旗" + ] + }, + { + "name": "伊克昭盟", + "area": [ + "东胜市", + "达拉特旗", + "准格尔旗", + "鄂托克前旗", + "鄂托克旗", + "杭锦旗", + "乌审旗", + "伊金霍洛旗" + ] + }, + { + "name": "巴彦淖尔盟", + "area": [ + "临河市", + "五原县", + "磴口县", + "乌拉特前旗", + "乌拉特中旗", + "乌拉特后旗", + "杭锦后旗" + ] + }, + { + "name": "阿拉善盟", + "area": [ + "阿拉善左旗", + "阿拉善右旗", + "额济纳旗" + ] + } + ] + }, + { + "name": "辽宁省", + "city": [ + { + "name": "沈阳市", + "area": [ + "沈河区", + "皇姑区", + "和平区", + "大东区", + "铁西区", + "苏家屯区", + "东陵区", + "于洪区", + "新民市", + "法库县", + "辽中县", + "康平县", + "新城子区", + "其他" + ] + }, + { + "name": "大连市", + "area": [ + "西岗区", + "中山区", + "沙河口区", + "甘井子区", + "旅顺口区", + "金州区", + "瓦房店市", + "普兰店市", + "庄河市", + "长海县", + "其他" + ] + }, + { + "name": "鞍山市", + "area": [ + "铁东区", + "铁西区", + "立山区", + "千山区", + "海城市", + "台安县", + "岫岩满族自治县", + "其他" + ] + }, + { + "name": "抚顺市", + "area": [ + "顺城区", + "新抚区", + "东洲区", + "望花区", + "抚顺县", + "清原满族自治县", + "新宾满族自治县", + "其他" + ] + }, + { + "name": "本溪市", + "area": [ + "平山区", + "明山区", + "溪湖区", + "南芬区", + "本溪满族自治县", + "桓仁满族自治县", + "其他" + ] + }, + { + "name": "丹东市", + "area": [ + "振兴区", + "元宝区", + "振安区", + "东港市", + "凤城市", + "宽甸满族自治县", + "其他" + ] + }, + { + "name": "锦州市", + "area": [ + "太和区", + "古塔区", + "凌河区", + "凌海市", + "黑山县", + "义县", + "北宁市", + "其他" + ] + }, + { + "name": "营口市", + "area": [ + "站前区", + "西市区", + "鲅鱼圈区", + "老边区", + "大石桥市", + "盖州市", + "其他" + ] + }, + { + "name": "阜新市", + "area": [ + "海州区", + "新邱区", + "太平区", + "清河门区", + "细河区", + "彰武县", + "阜新蒙古族自治县", + "其他" + ] + }, + { + "name": "辽阳市", + "area": [ + "白塔区", + "文圣区", + "宏伟区", + "太子河区", + "弓长岭区", + "灯塔市", + "辽阳县", + "其他" + ] + }, + { + "name": "盘锦", + "area": [ + "双台子区", + "兴隆台区", + "盘山县", + "大洼县", + "其他" + ] + }, + { + "name": "铁岭市", + "area": [ + "银州区", + "清河区", + "调兵山市", + "开原市", + "铁岭县", + "昌图县", + "西丰县", + "其他" + ] + }, + { + "name": "朝阳市", + "area": [ + "双塔区", + "龙城区", + "凌源市", + "北票市", + "朝阳县", + "建平县", + "喀喇沁左翼蒙古族自治县", + "其他" + ] + }, + { + "name": "葫芦岛市", + "area": [ + "龙港区", + "南票区", + "连山区", + "兴城市", + "绥中县", + "建昌县", + "其他" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "吉林省", + "city": [ + { + "name": "长春市", + "area": [ + "朝阳区", + "宽城区", + "二道区", + "南关区", + "绿园区", + "双阳区", + "九台市", + "榆树市", + "德惠市", + "农安县", + "其他" + ] + }, + { + "name": "吉林市", + "area": [ + "船营区", + "昌邑区", + "龙潭区", + "丰满区", + "舒兰市", + "桦甸市", + "蛟河市", + "磐石市", + "永吉县", + "其他" + ] + }, + { + "name": "四平", + "area": [ + "铁西区", + "铁东区", + "公主岭市", + "双辽市", + "梨树县", + "伊通满族自治县", + "其他" + ] + }, + { + "name": "辽源市", + "area": [ + "龙山区", + "西安区", + "东辽县", + "东丰县", + "其他" + ] + }, + { + "name": "通化市", + "area": [ + "东昌区", + "二道江区", + "梅河口市", + "集安市", + "通化县", + "辉南县", + "柳河县", + "其他" + ] + }, + { + "name": "白山市", + "area": [ + "八道江区", + "江源区", + "临江市", + "靖宇县", + "抚松县", + "长白朝鲜族自治县", + "其他" + ] + }, + { + "name": "松原市", + "area": [ + "宁江区", + "乾安县", + "长岭县", + "扶余县", + "前郭尔罗斯蒙古族自治县", + "其他" + ] + }, + { + "name": "白城市", + "area": [ + "洮北区", + "大安市", + "洮南市", + "镇赉县", + "通榆县", + "其他" + ] + }, + { + "name": "延边朝鲜族自治州", + "area": [ + "延吉市", + "图们市", + "敦化市", + "龙井市", + "珲春市", + "和龙市", + "安图县", + "汪清县", + "其他" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "黑龙江省", + "city": [ + { + "name": "哈尔滨市", + "area": [ + "松北区", + "道里区", + "南岗区", + "平房区", + "香坊区", + "道外区", + "呼兰区", + "阿城区", + "双城市", + "尚志市", + "五常市", + "宾县", + "方正县", + "通河县", + "巴彦县", + "延寿县", + "木兰县", + "依兰县", + "其他" + ] + }, + { + "name": "齐齐哈尔市", + "area": [ + "龙沙区", + "昂昂溪区", + "铁锋区", + "建华区", + "富拉尔基区", + "碾子山区", + "梅里斯达斡尔族区", + "讷河市", + "富裕县", + "拜泉县", + "甘南县", + "依安县", + "克山县", + "泰来县", + "克东县", + "龙江县", + "其他" + ] + }, + { + "name": "鹤岗市", + "area": [ + "兴山区", + "工农区", + "南山区", + "兴安区", + "向阳区", + "东山区", + "萝北县", + "绥滨县", + "其他" + ] + }, + { + "name": "双鸭山", + "area": [ + "尖山区", + "岭东区", + "四方台区", + "宝山区", + "集贤县", + "宝清县", + "友谊县", + "饶河县", + "其他" + ] + }, + { + "name": "鸡西市", + "area": [ + "鸡冠区", + "恒山区", + "城子河区", + "滴道区", + "梨树区", + "麻山区", + "密山市", + "虎林市", + "鸡东县", + "其他" + ] + }, + { + "name": "大庆市", + "area": [ + "萨尔图区", + "红岗区", + "龙凤区", + "让胡路区", + "大同区", + "林甸县", + "肇州县", + "肇源县", + "杜尔伯特蒙古族自治县", + "其他" + ] + }, + { + "name": "伊春市", + "area": [ + "伊春区", + "带岭区", + "南岔区", + "金山屯区", + "西林区", + "美溪区", + "乌马河区", + "翠峦区", + "友好区", + "上甘岭区", + "五营区", + "红星区", + "新青区", + "汤旺河区", + "乌伊岭区", + "铁力市", + "嘉荫县", + "其他" + ] + }, + { + "name": "牡丹江市", + "area": [ + "爱民区", + "东安区", + "阳明区", + "西安区", + "绥芬河市", + "宁安市", + "海林市", + "穆棱市", + "林口县", + "东宁县", + "其他" + ] + }, + { + "name": "佳木斯市", + "area": [ + "向阳区", + "前进区", + "东风区", + "郊区", + "同江市", + "富锦市", + "桦川县", + "抚远县", + "桦南县", + "汤原县", + "其他" + ] + }, + { + "name": "七台河市", + "area": [ + "桃山区", + "新兴区", + "茄子河区", + "勃利县", + "其他" + ] + }, + { + "name": "黑河市", + "area": [ + "爱辉区", + "北安市", + "五大连池市", + "逊克县", + "嫩江县", + "孙吴县", + "其他" + ] + }, + { + "name": "绥化市", + "area": [ + "北林区", + "安达市", + "肇东市", + "海伦市", + "绥棱县", + "兰西县", + "明水县", + "青冈县", + "庆安县", + "望奎县", + "其他" + ] + }, + { + "name": "大兴安岭地区", + "area": [ + "呼玛县", + "塔河县", + "漠河县", + "大兴安岭辖区", + "其他" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "上海市", + "city": [ + { + "name": "上海市", + "area": [ + "黄浦区", + "卢湾区", + "徐汇区", + "长宁区", + "静安区", + "普陀区", + "闸北区", + "虹口区", + "杨浦区", + "宝山区", + "闵行区", + "嘉定区", + "松江区", + "金山区", + "青浦区", + "南汇区", + "奉贤区", + "浦东新区", + "崇明县", + "其他" + ] + } + ] + }, + { + "name": "江苏省", + "city": [ + { + "name": "南京市", + "area": [ + "玄武区", + "白下区", + "秦淮区", + "建邺区", + "鼓楼区", + "下关区", + "栖霞区", + "雨花台区", + "浦口区", + "江宁区", + "六合区", + "溧水县", + "高淳县", + "其他" + ] + }, + { + "name": "苏州市", + "area": [ + "金阊区", + "平江区", + "沧浪区", + "虎丘区", + "吴中区", + "相城区", + "常熟市", + "张家港市", + "昆山市", + "吴江市", + "太仓市", + "其他" + ] + }, + { + "name": "无锡市", + "area": [ + "崇安区", + "南长区", + "北塘区", + "滨湖区", + "锡山区", + "惠山区", + "江阴市", + "宜兴市", + "其他" + ] + }, + { + "name": "常州市", + "area": [ + "钟楼区", + "天宁区", + "戚墅堰区", + "新北区", + "武进区", + "金坛市", + "溧阳市", + "其他" + ] + }, + { + "name": "镇江市", + "area": [ + "京口区", + "润州区", + "丹徒区", + "丹阳市", + "扬中市", + "句容市", + "其他" + ] + }, + { + "name": "南通市", + "area": [ + "崇川区", + "港闸区", + "通州市", + "如皋市", + "海门市", + "启东市", + "海安县", + "如东县", + "其他" + ] + }, + { + "name": "泰州市", + "area": [ + "海陵区", + "高港区", + "姜堰市", + "泰兴市", + "靖江市", + "兴化市", + "其他" + ] + }, + { + "name": "扬州市", + "area": [ + "广陵区", + "维扬区", + "邗江区", + "江都市", + "仪征市", + "高邮市", + "宝应县", + "其他" + ] + }, + { + "name": "盐城市", + "area": [ + "亭湖区", + "盐都区", + "大丰市", + "东台市", + "建湖县", + "射阳县", + "阜宁县", + "滨海县", + "响水县", + "其他" + ] + }, + { + "name": "连云港市", + "area": [ + "新浦区", + "海州区", + "连云区", + "东海县", + "灌云县", + "赣榆县", + "灌南县", + "其他" + ] + }, + { + "name": "徐州市", + "area": [ + "云龙区", + "鼓楼区", + "九里区", + "泉山区", + "贾汪区", + "邳州市", + "新沂市", + "铜山县", + "睢宁县", + "沛县", + "丰县", + "其他" + ] + }, + { + "name": "淮安市", + "area": [ + "清河区", + "清浦区", + "楚州区", + "淮阴区", + "涟水县", + "洪泽县", + "金湖县", + "盱眙县", + "其他" + ] + }, + { + "name": "宿迁市", + "area": [ + "宿城区", + "宿豫区", + "沭阳县", + "泗阳县", + "泗洪县", + "其他" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "浙江省", + "city": [ + { + "name": "杭州市", + "area": [ + "拱墅区", + "西湖区", + "上城区", + "下城区", + "江干区", + "滨江区", + "余杭区", + "萧山区", + "建德市", + "富阳市", + "临安市", + "桐庐县", + "淳安县", + "其他" + ] + }, + { + "name": "宁波市", + "area": [ + "海曙区", + "江东区", + "江北区", + "镇海区", + "北仑区", + "鄞州区", + "余姚市", + "慈溪市", + "奉化市", + "宁海县", + "象山县", + "其他" + ] + }, + { + "name": "温州市", + "area": [ + "鹿城区", + "龙湾区", + "瓯海区", + "瑞安市", + "乐清市", + "永嘉县", + "洞头县", + "平阳县", + "苍南县", + "文成县", + "泰顺县", + "其他" + ] + }, + { + "name": "嘉兴市", + "area": [ + "秀城区", + "秀洲区", + "海宁市", + "平湖市", + "桐乡市", + "嘉善县", + "海盐县", + "其他" + ] + }, + { + "name": "湖州市", + "area": [ + "吴兴区", + "南浔区", + "长兴县", + "德清县", + "安吉县", + "其他" + ] + }, + { + "name": "绍兴市", + "area": [ + "越城区", + "诸暨市", + "上虞市", + "嵊州市", + "绍兴县", + "新昌县", + "其他" + ] + }, + { + "name": "金华市", + "area": [ + "婺城区", + "金东区", + "兰溪市", + "义乌市", + "东阳市", + "永康市", + "武义县", + "浦江县", + "磐安县", + "其他" + ] + }, + { + "name": "衢州市", + "area": [ + "柯城区", + "衢江区", + "江山市", + "龙游县", + "常山县", + "开化县", + "其他" + ] + }, + { + "name": "舟山市", + "area": [ + "定海区", + "普陀区", + "岱山县", + "嵊泗县", + "其他" + ] + }, + { + "name": "台州市", + "area": [ + "椒江区", + "黄岩区", + "路桥区", + "临海市", + "温岭市", + "玉环县", + "天台县", + "仙居县", + "三门县", + "其他" + ] + }, + { + "name": "丽水市", + "area": [ + "莲都区", + "龙泉市", + "缙云县", + "青田县", + "云和县", + "遂昌县", + "松阳县", + "庆元县", + "景宁畲族自治县", + "其他" + ] + }, + { + "name": "其他市", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "安徽省", + "city": [ + { + "name": "合肥市", + "area": [ + "庐阳区", + "瑶海区", + "蜀山区", + "包河区", + "长丰县", + "肥东县", + "肥西县", + "其他" + ] + }, + { + "name": "芜湖市", + "area": [ + "镜湖区", + "弋江区", + "鸠江区", + "三山区", + "芜湖县", + "南陵县", + "繁昌县", + "其他" + ] + }, + { + "name": "蚌埠市", + "area": [ + "蚌山区", + "龙子湖区", + "禹会区", + "淮上区", + "怀远县", + "固镇县", + "五河县", + "其他" + ] + }, + { + "name": "淮南市", + "area": [ + "田家庵区", + "大通区", + "谢家集区", + "八公山区", + "潘集区", + "凤台县", + "其他" + ] + }, + { + "name": "马鞍山市", + "area": [ + "雨山区", + "花山区", + "金家庄区", + "当涂县", + "其他" + ] + }, + { + "name": "淮北市", + "area": [ + "相山区", + "杜集区", + "烈山区", + "濉溪县", + "其他" + ] + }, + { + "name": "铜陵市", + "area": [ + "铜官山区", + "狮子山区", + "郊区", + "铜陵县", + "其他" + ] + }, + { + "name": "安庆市", + "area": [ + "迎江区", + "大观区", + "宜秀区", + "桐城市", + "宿松县", + "枞阳县", + "太湖县", + "怀宁县", + "岳西县", + "望江县", + "潜山县", + "其他" + ] + }, + { + "name": "黄山市", + "area": [ + "屯溪区", + "黄山区", + "徽州区", + "休宁县", + "歙县", + "祁门县", + "黟县", + "其他" + ] + }, + { + "name": "滁州市", + "area": [ + "琅琊区", + "南谯区", + "天长市", + "明光市", + "全椒县", + "来安县", + "定远县", + "凤阳县", + "其他" + ] + }, + { + "name": "阜阳市", + "area": [ + "颍州区", + "颍东区", + "颍泉区", + "界首市", + "临泉县", + "颍上县", + "阜南县", + "太和县", + "其他" + ] + }, + { + "name": "宿州市", + "area": [ + "埇桥区", + "萧县", + "泗县", + "砀山县", + "灵璧县", + "其他" + ] + }, + { + "name": "巢湖市", + "area": [ + "居巢区", + "含山县", + "无为县", + "庐江县", + "和县", + "其他" + ] + }, + { + "name": "六安市", + "area": [ + "金安区", + "裕安区", + "寿县", + "霍山县", + "霍邱县", + "舒城县", + "金寨县", + "其他" + ] + }, + { + "name": "亳州市", + "area": [ + "谯城区", + "利辛县", + "涡阳县", + "蒙城县", + "其他" + ] + }, + { + "name": "池州市", + "area": [ + "贵池区", + "东至县", + "石台县", + "青阳县", + "其他" + ] + }, + { + "name": "宣城市", + "area": [ + "宣州区", + "宁国市", + "广德县", + "郎溪县", + "泾县", + "旌德县", + "绩溪县", + "其他" + ] + }, + { + "name": "其他市", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "福建省", + "city": [ + { + "name": "福州市", + "area": [ + "鼓楼区", + "台江区", + "仓山区", + "马尾区", + "晋安区", + "福清市", + "长乐市", + "闽侯县", + "闽清县", + "永泰县", + "连江县", + "罗源县", + "平潭县", + "其他" + ] + }, + { + "name": "厦门市", + "area": [ + "思明区", + "海沧区", + "湖里区", + "集美区", + "同安区", + "翔安区", + "其他" + ] + }, + { + "name": "莆田市", + "area": [ + "城厢区", + "涵江区", + "荔城区", + "秀屿区", + "仙游县", + "其他" + ] + }, + { + "name": "三明市", + "area": [ + "梅列区", + "三元区", + "永安市", + "明溪县", + "将乐县", + "大田县", + "宁化县", + "建宁县", + "沙县", + "尤溪县", + "清流县", + "泰宁县", + "其他" + ] + }, + { + "name": "泉州市", + "area": [ + "鲤城区", + "丰泽区", + "洛江区", + "泉港区", + "石狮市", + "晋江市", + "南安市", + "惠安县", + "永春县", + "安溪县", + "德化县", + "金门县", + "其他" + ] + }, + { + "name": "漳州市", + "area": [ + "芗城区", + "龙文区", + "龙海市", + "平和县", + "南靖县", + "诏安县", + "漳浦县", + "华安县", + "东山县", + "长泰县", + "云霄县", + "其他" + ] + }, + { + "name": "南平市", + "area": [ + "延平区", + "建瓯市", + "邵武市", + "武夷山市", + "建阳市", + "松溪县", + "光泽县", + "顺昌县", + "浦城县", + "政和县", + "其他" + ] + }, + { + "name": "龙岩市", + "area": [ + "新罗区", + "漳平市", + "长汀县", + "武平县", + "上杭县", + "永定县", + "连城县", + "其他" + ] + }, + { + "name": "宁德市", + "area": [ + "蕉城区", + "福安市", + "福鼎市", + "寿宁县", + "霞浦县", + "柘荣县", + "屏南县", + "古田县", + "周宁县", + "其他" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "江西省", + "city": [ + { + "name": "南昌市", + "area": [ + "东湖区", + "西湖区", + "青云谱区", + "湾里区", + "青山湖区", + "新建县", + "南昌县", + "进贤县", + "安义县", + "其他" + ] + }, + { + "name": "景德镇市", + "area": [ + "珠山区", + "昌江区", + "乐平市", + "浮梁县", + "其他" + ] + }, + { + "name": "萍乡市", + "area": [ + "安源区", + "湘东区", + "莲花县", + "上栗县", + "芦溪县", + "其他" + ] + }, + { + "name": "九江市", + "area": [ + "浔阳区", + "庐山区", + "瑞昌市", + "九江县", + "星子县", + "武宁县", + "彭泽县", + "永修县", + "修水县", + "湖口县", + "德安县", + "都昌县", + "其他" + ] + }, + { + "name": "新余市", + "area": [ + "渝水区", + "分宜县", + "其他" + ] + }, + { + "name": "鹰潭市", + "area": [ + "月湖区", + "贵溪市", + "余江县", + "其他" + ] + }, + { + "name": "赣州市", + "area": [ + "章贡区", + "瑞金市", + "南康市", + "石城县", + "安远县", + "赣县", + "宁都县", + "寻乌县", + "兴国县", + "定南县", + "上犹县", + "于都县", + "龙南县", + "崇义县", + "信丰县", + "全南县", + "大余县", + "会昌县", + "其他" + ] + }, + { + "name": "吉安市", + "area": [ + "吉州区", + "青原区", + "井冈山市", + "吉安县", + "永丰县", + "永新县", + "新干县", + "泰和县", + "峡江县", + "遂川县", + "安福县", + "吉水县", + "万安县", + "其他" + ] + }, + { + "name": "宜春市", + "area": [ + "袁州区", + "丰城市", + "樟树市", + "高安市", + "铜鼓县", + "靖安县", + "宜丰县", + "奉新县", + "万载县", + "上高县", + "其他" + ] + }, + { + "name": "抚州市", + "area": [ + "临川区", + "南丰县", + "乐安县", + "金溪县", + "南城县", + "东乡县", + "资溪县", + "宜黄县", + "广昌县", + "黎川县", + "崇仁县", + "其他" + ] + }, + { + "name": "上饶市", + "area": [ + "信州区", + "德兴市", + "上饶县", + "广丰县", + "鄱阳县", + "婺源县", + "铅山县", + "余干县", + "横峰县", + "弋阳县", + "玉山县", + "万年县", + "其他" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "山东省", + "city": [ + { + "name": "济南市", + "area": [ + "市中区", + "历下区", + "天桥区", + "槐荫区", + "历城区", + "长清区", + "章丘市", + "平阴县", + "济阳县", + "商河县", + "其他" + ] + }, + { + "name": "青岛市", + "area": [ + "市南区", + "市北区", + "城阳区", + "四方区", + "李沧区", + "黄岛区", + "崂山区", + "胶南市", + "胶州市", + "平度市", + "莱西市", + "即墨市", + "其他" + ] + }, + { + "name": "淄博市", + "area": [ + "张店区", + "临淄区", + "淄川区", + "博山区", + "周村区", + "桓台县", + "高青县", + "沂源县", + "其他" + ] + }, + { + "name": "枣庄市", + "area": [ + "市中区", + "山亭区", + "峄城区", + "台儿庄区", + "薛城区", + "滕州市", + "其他" + ] + }, + { + "name": "东营市", + "area": [ + "东营区", + "河口区", + "垦利县", + "广饶县", + "利津县", + "其他" + ] + }, + { + "name": "烟台市", + "area": [ + "芝罘区", + "福山区", + "牟平区", + "莱山区", + "龙口市", + "莱阳市", + "莱州市", + "招远市", + "蓬莱市", + "栖霞市", + "海阳市", + "长岛县", + "其他" + ] + }, + { + "name": "潍坊市", + "area": [ + "潍城区", + "寒亭区", + "坊子区", + "奎文区", + "青州市", + "诸城市", + "寿光市", + "安丘市", + "高密市", + "昌邑市", + "昌乐县", + "临朐县", + "其他" + ] + }, + { + "name": "济宁市", + "area": [ + "市中区", + "任城区", + "曲阜市", + "兖州市", + "邹城市", + "鱼台县", + "金乡县", + "嘉祥县", + "微山县", + "汶上县", + "泗水县", + "梁山县", + "其他" + ] + }, + { + "name": "泰安市", + "area": [ + "泰山区", + "岱岳区", + "新泰市", + "肥城市", + "宁阳县", + "东平县", + "其他" + ] + }, + { + "name": "威海市", + "area": [ + "环翠区", + "乳山市", + "文登市", + "荣成市", + "其他" + ] + }, + { + "name": "日照市", + "area": [ + "东港区", + "岚山区", + "五莲县", + "莒县", + "其他" + ] + }, + { + "name": "莱芜市", + "area": [ + "莱城区", + "钢城区", + "其他" + ] + }, + { + "name": "临沂市", + "area": [ + "兰山区", + "罗庄区", + "河东区", + "沂南县", + "郯城县", + "沂水县", + "苍山县", + "费县", + "平邑县", + "莒南县", + "蒙阴县", + "临沭县", + "其他" + ] + }, + { + "name": "德州市", + "area": [ + "德城区", + "乐陵市", + "禹城市", + "陵县", + "宁津县", + "齐河县", + "武城县", + "庆云县", + "平原县", + "夏津县", + "临邑县", + "其他" + ] + }, + { + "name": "聊城市", + "area": [ + "东昌府区", + "临清市", + "高唐县", + "阳谷县", + "茌平县", + "莘县", + "东阿县", + "冠县", + "其他" + ] + }, + { + "name": "滨州市", + "area": [ + "滨城区", + "邹平县", + "沾化县", + "惠民县", + "博兴县", + "阳信县", + "无棣县", + "其他" + ] + }, + { + "name": "菏泽市", + "area": [ + "牡丹区", + "鄄城县", + "单县", + "郓城县", + "曹县", + "定陶县", + "巨野县", + "东明县", + "成武县", + "其他" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "河南省", + "city": [ + { + "name": "郑州市", + "area": [ + "中原区", + "金水区", + "二七区", + "管城回族区", + "上街区", + "惠济区", + "巩义市", + "新郑市", + "新密市", + "登封市", + "荥阳市", + "中牟县", + "其他" + ] + }, + { + "name": "开封市", + "area": [ + "鼓楼区", + "龙亭区", + "顺河回族区", + "禹王台区", + "金明区", + "开封县", + "尉氏县", + "兰考县", + "杞县", + "通许县", + "其他" + ] + }, + { + "name": "洛阳市", + "area": [ + "西工区", + "老城区", + "涧西区", + "瀍河回族区", + "洛龙区", + "吉利区", + "偃师市", + "孟津县", + "汝阳县", + "伊川县", + "洛宁县", + "嵩县", + "宜阳县", + "新安县", + "栾川县", + "其他" + ] + }, + { + "name": "平顶山市", + "area": [ + "新华区", + "卫东区", + "湛河区", + "石龙区", + "汝州市", + "舞钢市", + "宝丰县", + "叶县", + "郏县", + "鲁山县", + "其他" + ] + }, + { + "name": "安阳市", + "area": [ + "北关区", + "文峰区", + "殷都区", + "龙安区", + "林州市", + "安阳县", + "滑县", + "内黄县", + "汤阴县", + "其他" + ] + }, + { + "name": "鹤壁市", + "area": [ + "淇滨区", + "山城区", + "鹤山区", + "浚县", + "淇县", + "其他" + ] + }, + { + "name": "新乡市", + "area": [ + "卫滨区", + "红旗区", + "凤泉区", + "牧野区", + "卫辉市", + "辉县市", + "新乡县", + "获嘉县", + "原阳县", + "长垣县", + "封丘县", + "延津县", + "其他" + ] + }, + { + "name": "焦作市", + "area": [ + "解放区", + "中站区", + "马村区", + "山阳区", + "沁阳市", + "孟州市", + "修武县", + "温县", + "武陟县", + "博爱县", + "其他" + ] + }, + { + "name": "濮阳市", + "area": [ + "华龙区", + "濮阳县", + "南乐县", + "台前县", + "清丰县", + "范县", + "其他" + ] + }, + { + "name": "许昌市", + "area": [ + "魏都区", + "禹州市", + "长葛市", + "许昌县", + "鄢陵县", + "襄城县", + "其他" + ] + }, + { + "name": "漯河市", + "area": [ + "源汇区", + "郾城区", + "召陵区", + "临颍县", + "舞阳县", + "其他" + ] + }, + { + "name": "三门峡市", + "area": [ + "湖滨区", + "义马市", + "灵宝市", + "渑池县", + "卢氏县", + "陕县", + "其他" + ] + }, + { + "name": "南阳市", + "area": [ + "卧龙区", + "宛城区", + "邓州市", + "桐柏县", + "方城县", + "淅川县", + "镇平县", + "唐河县", + "南召县", + "内乡县", + "新野县", + "社旗县", + "西峡县", + "其他" + ] + }, + { + "name": "商丘市", + "area": [ + "梁园区", + "睢阳区", + "永城市", + "宁陵县", + "虞城县", + "民权县", + "夏邑县", + "柘城县", + "睢县", + "其他" + ] + }, + { + "name": "信阳市", + "area": [ + "浉河区", + "平桥区", + "潢川县", + "淮滨县", + "息县", + "新县", + "商城县", + "固始县", + "罗山县", + "光山县", + "其他" + ] + }, + { + "name": "周口市", + "area": [ + "川汇区", + "项城市", + "商水县", + "淮阳县", + "太康县", + "鹿邑县", + "西华县", + "扶沟县", + "沈丘县", + "郸城县", + "其他" + ] + }, + { + "name": "驻马店市", + "area": [ + "驿城区", + "确山县", + "新蔡县", + "上蔡县", + "西平县", + "泌阳县", + "平舆县", + "汝南县", + "遂平县", + "正阳县", + "其他" + ] + }, + { + "name": "焦作市", + "area": [ + "济源市", + "其他" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "湖北省", + "city": [ + { + "name": "武汉市", + "area": [ + "江岸区", + "武昌区", + "江汉区", + "硚口区", + "汉阳区", + "青山区", + "洪山区", + "东西湖区", + "汉南区", + "蔡甸区", + "江夏区", + "黄陂区", + "新洲区", + "其他" + ] + }, + { + "name": "黄石市", + "area": [ + "黄石港区", + "西塞山区", + "下陆区", + "铁山区", + "大冶市", + "阳新县", + "其他" + ] + }, + { + "name": "十堰市", + "area": [ + "张湾区", + "茅箭区", + "丹江口市", + "郧县", + "竹山县", + "房县", + "郧西县", + "竹溪县", + "其他" + ] + }, + { + "name": "荆州市", + "area": [ + "沙市区", + "荆州区", + "洪湖市", + "石首市", + "松滋市", + "监利县", + "公安县", + "江陵县", + "其他" + ] + }, + { + "name": "宜昌市", + "area": [ + "西陵区", + "伍家岗区", + "点军区", + "猇亭区", + "夷陵区", + "宜都市", + "当阳市", + "枝江市", + "秭归县", + "远安县", + "兴山县", + "五峰土家族自治县", + "长阳土家族自治县", + "其他" + ] + }, + { + "name": "襄樊市", + "area": [ + "襄城区", + "樊城区", + "襄阳区", + "老河口市", + "枣阳市", + "宜城市", + "南漳县", + "谷城县", + "保康县", + "其他" + ] + }, + { + "name": "鄂州市", + "area": [ + "鄂城区", + "华容区", + "梁子湖区", + "其他" + ] + }, + { + "name": "荆门市", + "area": [ + "东宝区", + "掇刀区", + "钟祥市", + "京山县", + "沙洋县", + "其他" + ] + }, + { + "name": "孝感市", + "area": [ + "孝南区", + "应城市", + "安陆市", + "汉川市", + "云梦县", + "大悟县", + "孝昌县", + "其他" + ] + }, + { + "name": "黄冈市", + "area": [ + "黄州区", + "麻城市", + "武穴市", + "红安县", + "罗田县", + "浠水县", + "蕲春县", + "黄梅县", + "英山县", + "团风县", + "其他" + ] + }, + { + "name": "咸宁市", + "area": [ + "咸安区", + "赤壁市", + "嘉鱼县", + "通山县", + "崇阳县", + "通城县", + "其他" + ] + }, + { + "name": "随州市", + "area": [ + "曾都区", + "广水市", + "其他" + ] + }, + { + "name": "恩施土家族苗族自治州", + "area": [ + "恩施市", + "利川市", + "建始县", + "来凤县", + "巴东县", + "鹤峰县", + "宣恩县", + "咸丰县", + "其他" + ] + }, + { + "name": "仙桃市", + "area": [ + "仙桃" + ] + }, + { + "name": "天门市", + "area": [ + "天门" + ] + }, + { + "name": "潜江市", + "area": [ + "潜江" + ] + }, + { + "name": "神农架林区", + "area": [ + "神农架林区" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "湖南省", + "city": [ + { + "name": "长沙市", + "area": [ + "岳麓区", + "芙蓉区", + "天心区", + "开福区", + "雨花区", + "浏阳市", + "长沙县", + "望城县", + "宁乡县", + "其他" + ] + }, + { + "name": "株洲市", + "area": [ + "天元区", + "荷塘区", + "芦淞区", + "石峰区", + "醴陵市", + "株洲县", + "炎陵县", + "茶陵县", + "攸县", + "其他" + ] + }, + { + "name": "湘潭市", + "area": [ + "岳塘区", + "雨湖区", + "湘乡市", + "韶山市", + "湘潭县", + "其他" + ] + }, + { + "name": "衡阳市", + "area": [ + "雁峰区", + "珠晖区", + "石鼓区", + "蒸湘区", + "南岳区", + "耒阳市", + "常宁市", + "衡阳县", + "衡东县", + "衡山县", + "衡南县", + "祁东县", + "其他" + ] + }, + { + "name": "邵阳市", + "area": [ + "双清区", + "大祥区", + "北塔区", + "武冈市", + "邵东县", + "洞口县", + "新邵县", + "绥宁县", + "新宁县", + "邵阳县", + "隆回县", + "城步苗族自治县", + "其他" + ] + }, + { + "name": "岳阳市", + "area": [ + "岳阳楼区", + "云溪区", + "君山区", + "临湘市", + "汨罗市", + "岳阳县", + "湘阴县", + "平江县", + "华容县", + "其他" + ] + }, + { + "name": "常德市", + "area": [ + "武陵区", + "鼎城区", + "津市市", + "澧县", + "临澧县", + "桃源县", + "汉寿县", + "安乡县", + "石门县", + "其他" + ] + }, + { + "name": "张家界市", + "area": [ + "永定区", + "武陵源区", + "慈利县", + "桑植县", + "其他" + ] + }, + { + "name": "益阳市", + "area": [ + "赫山区", + "资阳区", + "沅江市", + "桃江县", + "南县", + "安化县", + "其他" + ] + }, + { + "name": "郴州市", + "area": [ + "北湖区", + "苏仙区", + "资兴市", + "宜章县", + "汝城县", + "安仁县", + "嘉禾县", + "临武县", + "桂东县", + "永兴县", + "桂阳县", + "其他" + ] + }, + { + "name": "永州市", + "area": [ + "冷水滩区", + "零陵区", + "祁阳县", + "蓝山县", + "宁远县", + "新田县", + "东安县", + "江永县", + "道县", + "双牌县", + "江华瑶族自治县", + "其他" + ] + }, + { + "name": "怀化市", + "area": [ + "鹤城区", + "洪江市", + "会同县", + "沅陵县", + "辰溪县", + "溆浦县", + "中方县", + "新晃侗族自治县", + "芷江侗族自治县", + "通道侗族自治县", + "靖州苗族侗族自治县", + "麻阳苗族自治县", + "其他" + ] + }, + { + "name": "娄底市", + "area": [ + "娄星区", + "冷水江市", + "涟源市", + "新化县", + "双峰县", + "其他" + ] + }, + { + "name": "湘西土家族苗族自治州", + "area": [ + "吉首市", + "古丈县", + "龙山县", + "永顺县", + "凤凰县", + "泸溪县", + "保靖县", + "花垣县", + "其他" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "广东省", + "city": [ + { + "name": "广州市", + "area": [ + "越秀区", + "荔湾区", + "海珠区", + "天河区", + "白云区", + "黄埔区", + "番禺区", + "花都区", + "南沙区", + "萝岗区", + "增城市", + "从化市", + "其他" + ] + }, + { + "name": "深圳市", + "area": [ + "福田区", + "罗湖区", + "南山区", + "宝安区", + "龙岗区", + "盐田区", + "其他" + ] + }, + { + "name": "东莞市", + "area": [ + "莞城", + "常平", + "塘厦", + "塘厦", + "塘厦", + "其他" + ] + }, + { + "name": "中山市", + "area": [ + "中山" + ] + }, + { + "name": "潮州市", + "area": [ + "湘桥区", + "潮安县", + "饶平县", + "其他" + ] + }, + { + "name": "揭阳市", + "area": [ + "榕城区", + "揭东县", + "揭西县", + "惠来县", + "普宁市", + "其他" + ] + }, + { + "name": "云浮市", + "area": [ + "云城区", + "新兴县", + "郁南县", + "云安县", + "罗定市", + "其他" + ] + }, + { + "name": "珠海市", + "area": [ + "香洲区", + "斗门区", + "金湾区", + "其他" + ] + }, + { + "name": "汕头市", + "area": [ + "金平区", + "濠江区", + "龙湖区", + "潮阳区", + "潮南区", + "澄海区", + "南澳县", + "其他" + ] + }, + { + "name": "韶关市", + "area": [ + "浈江区", + "武江区", + "曲江区", + "乐昌市", + "南雄市", + "始兴县", + "仁化县", + "翁源县", + "新丰县", + "乳源瑶族自治县", + "其他" + ] + }, + { + "name": "佛山市", + "area": [ + "禅城区", + "南海区", + "顺德区", + "三水区", + "高明区", + "其他" + ] + }, + { + "name": "江门市", + "area": [ + "蓬江区", + "江海区", + "新会区", + "恩平市", + "台山市", + "开平市", + "鹤山市", + "其他" + ] + }, + { + "name": "湛江市", + "area": [ + "赤坎区", + "霞山区", + "坡头区", + "麻章区", + "吴川市", + "廉江市", + "雷州市", + "遂溪县", + "徐闻县", + "其他" + ] + }, + { + "name": "茂名市", + "area": [ + "茂南区", + "茂港区", + "化州市", + "信宜市", + "高州市", + "电白县", + "其他" + ] + }, + { + "name": "肇庆市", + "area": [ + "端州区", + "鼎湖区", + "高要市", + "四会市", + "广宁县", + "怀集县", + "封开县", + "德庆县", + "其他" + ] + }, + { + "name": "惠州市", + "area": [ + "惠城区", + "惠阳区", + "博罗县", + "惠东县", + "龙门县", + "其他" + ] + }, + { + "name": "梅州市", + "area": [ + "梅江区", + "兴宁市", + "梅县", + "大埔县", + "丰顺县", + "五华县", + "平远县", + "蕉岭县", + "其他" + ] + }, + { + "name": "汕尾市", + "area": [ + "城区", + "陆丰市", + "海丰县", + "陆河县", + "其他" + ] + }, + { + "name": "河源市", + "area": [ + "源城区", + "紫金县", + "龙川县", + "连平县", + "和平县", + "东源县", + "其他" + ] + }, + { + "name": "阳江市", + "area": [ + "江城区", + "阳春市", + "阳西县", + "阳东县", + "其他" + ] + }, + { + "name": "清远市", + "area": [ + "清城区", + "英德市", + "连州市", + "佛冈县", + "阳山县", + "清新县", + "连山壮族瑶族自治县", + "连南瑶族自治县", + "其他" + ] + } + ] + }, + { + "name": "广西", + "city": [ + { + "name": "南宁市", + "area": [ + "青秀区", + "兴宁区", + "西乡塘区", + "良庆区", + "江南区", + "邕宁区", + "武鸣县", + "隆安县", + "马山县", + "上林县", + "宾阳县", + "横县", + "其他" + ] + }, + { + "name": "柳州市", + "area": [ + "城中区", + "鱼峰区", + "柳北区", + "柳南区", + "柳江县", + "柳城县", + "鹿寨县", + "融安县", + "融水苗族自治县", + "三江侗族自治县", + "其他" + ] + }, + { + "name": "桂林市", + "area": [ + "象山区", + "秀峰区", + "叠彩区", + "七星区", + "雁山区", + "阳朔县", + "临桂县", + "灵川县", + "全州县", + "平乐县", + "兴安县", + "灌阳县", + "荔浦县", + "资源县", + "永福县", + "龙胜各族自治县", + "恭城瑶族自治县", + "其他" + ] + }, + { + "name": "梧州市", + "area": [ + "万秀区", + "蝶山区", + "长洲区", + "岑溪市", + "苍梧县", + "藤县", + "蒙山县", + "其他" + ] + }, + { + "name": "北海市", + "area": [ + "海城区", + "银海区", + "铁山港区", + "合浦县", + "其他" + ] + }, + { + "name": "防城港市", + "area": [ + "港口区", + "防城区", + "东兴市", + "上思县", + "其他" + ] + }, + { + "name": "钦州市", + "area": [ + "钦南区", + "钦北区", + "灵山县", + "浦北县", + "其他" + ] + }, + { + "name": "贵港市", + "area": [ + "港北区", + "港南区", + "覃塘区", + "桂平市", + "平南县", + "其他" + ] + }, + { + "name": "玉林市", + "area": [ + "玉州区", + "北流市", + "容县", + "陆川县", + "博白县", + "兴业县", + "其他" + ] + }, + { + "name": "百色市", + "area": [ + "右江区", + "凌云县", + "平果县", + "西林县", + "乐业县", + "德保县", + "田林县", + "田阳县", + "靖西县", + "田东县", + "那坡县", + "隆林各族自治县", + "其他" + ] + }, + { + "name": "贺州市", + "area": [ + "八步区", + "钟山县", + "昭平县", + "富川瑶族自治县", + "其他" + ] + }, + { + "name": "河池市", + "area": [ + "金城江区", + "宜州市", + "天峨县", + "凤山县", + "南丹县", + "东兰县", + "都安瑶族自治县", + "罗城仫佬族自治县", + "巴马瑶族自治县", + "环江毛南族自治县", + "大化瑶族自治县", + "其他" + ] + }, + { + "name": "来宾市", + "area": [ + "兴宾区", + "合山市", + "象州县", + "武宣县", + "忻城县", + "金秀瑶族自治县", + "其他" + ] + }, + { + "name": "崇左市", + "area": [ + "江州区", + "凭祥市", + "宁明县", + "扶绥县", + "龙州县", + "大新县", + "天等县", + "其他" + ] + }, + { + "name": "其他市", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "海南省", + "city": [ + { + "name": "海口市", + "area": [ + "龙华区", + "秀英区", + "琼山区", + "美兰区", + "其他" + ] + }, + { + "name": "三亚市", + "area": [ + "三亚市", + "其他" + ] + }, + { + "name": "五指山市", + "area": [ + "五指山" + ] + }, + { + "name": "琼海市", + "area": [ + "琼海" + ] + }, + { + "name": "儋州市", + "area": [ + "儋州" + ] + }, + { + "name": "文昌市", + "area": [ + "文昌" + ] + }, + { + "name": "万宁市", + "area": [ + "万宁" + ] + }, + { + "name": "东方市", + "area": [ + "东方" + ] + }, + { + "name": "澄迈县", + "area": [ + "澄迈县" + ] + }, + { + "name": "定安县", + "area": [ + "定安县" + ] + }, + { + "name": "屯昌县", + "area": [ + "屯昌县" + ] + }, + { + "name": "临高县", + "area": [ + "临高县" + ] + }, + { + "name": "白沙黎族自治县", + "area": [ + "白沙黎族自治县" + ] + }, + { + "name": "昌江黎族自治县", + "area": [ + "昌江黎族自治县" + ] + }, + { + "name": "乐东黎族自治县", + "area": [ + "乐东黎族自治县" + ] + }, + { + "name": "陵水黎族自治县", + "area": [ + "陵水黎族自治县" + ] + }, + { + "name": "保亭黎族苗族自治县", + "area": [ + "保亭黎族苗族自治县" + ] + }, + { + "name": "琼中黎族苗族自治县", + "area": [ + "琼中黎族苗族自治县" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "重庆市", + "city": [ + { + "name": "重庆市", + "area": [ + "渝中区", + "大渡口区", + "江北区", + "南岸区", + "北碚区", + "渝北区", + "巴南区", + "长寿区", + "双桥区", + "沙坪坝区", + "万盛区", + "万州区", + "涪陵区", + "黔江区", + "永川区", + "合川区", + "江津区", + "九龙坡区", + "南川区", + "綦江县", + "潼南县", + "荣昌县", + "璧山县", + "大足县", + "铜梁县", + "梁平县", + "开县", + "忠县", + "城口县", + "垫江县", + "武隆县", + "丰都县", + "奉节县", + "云阳县", + "巫溪县", + "巫山县", + "石柱土家族自治县", + "秀山土家族苗族自治县", + "酉阳土家族苗族自治县", + "彭水苗族土家族自治县", + "其他" + ] + } + ] + }, + { + "name": "四川省", + "city": [ + { + "name": "成都市", + "area": [ + "青羊区", + "锦江区", + "金牛区", + "武侯区", + "成华区", + "龙泉驿区", + "青白江区", + "新都区", + "温江区", + "都江堰市", + "彭州市", + "邛崃市", + "崇州市", + "金堂县", + "郫县", + "新津县", + "双流县", + "蒲江县", + "大邑县", + "其他" + ] + }, + { + "name": "自贡市", + "area": [ + "大安区", + "自流井区", + "贡井区", + "沿滩区", + "荣县", + "富顺县", + "其他" + ] + }, + { + "name": "攀枝花市", + "area": [ + "仁和区", + "米易县", + "盐边县", + "东区", + "西区", + "其他" + ] + }, + { + "name": "泸州市", + "area": [ + "江阳区", + "纳溪区", + "龙马潭区", + "泸县", + "合江县", + "叙永县", + "古蔺县", + "其他" + ] + }, + { + "name": "德阳市", + "area": [ + "旌阳区", + "广汉市", + "什邡市", + "绵竹市", + "罗江县", + "中江县", + "其他" + ] + }, + { + "name": "绵阳市", + "area": [ + "涪城区", + "游仙区", + "江油市", + "盐亭县", + "三台县", + "平武县", + "安县", + "梓潼县", + "北川羌族自治县", + "其他" + ] + }, + { + "name": "广元市", + "area": [ + "元坝区", + "朝天区", + "青川县", + "旺苍县", + "剑阁县", + "苍溪县", + "市中区", + "其他" + ] + }, + { + "name": "遂宁市", + "area": [ + "船山区", + "安居区", + "射洪县", + "蓬溪县", + "大英县", + "其他" + ] + }, + { + "name": "内江市", + "area": [ + "市中区", + "东兴区", + "资中县", + "隆昌县", + "威远县", + "其他" + ] + }, + { + "name": "乐山市", + "area": [ + "市中区", + "五通桥区", + "沙湾区", + "金口河区", + "峨眉山市", + "夹江县", + "井研县", + "犍为县", + "沐川县", + "马边彝族自治县", + "峨边彝族自治县", + "其他" + ] + }, + { + "name": "南充", + "area": [ + "顺庆区", + "高坪区", + "嘉陵区", + "阆中市", + "营山县", + "蓬安县", + "仪陇县", + "南部县", + "西充县", + "其他" + ] + }, + { + "name": "眉山市", + "area": [ + "东坡区", + "仁寿县", + "彭山县", + "洪雅县", + "丹棱县", + "青神县", + "其他" + ] + }, + { + "name": "宜宾市", + "area": [ + "翠屏区", + "宜宾县", + "兴文县", + "南溪县", + "珙县", + "长宁县", + "高县", + "江安县", + "筠连县", + "屏山县", + "其他" + ] + }, + { + "name": "广安市", + "area": [ + "广安区", + "华蓥市", + "岳池县", + "邻水县", + "武胜县", + "其他" + ] + }, + { + "name": "达州市", + "area": [ + "通川区", + "万源市", + "达县", + "渠县", + "宣汉县", + "开江县", + "大竹县", + "其他" + ] + }, + { + "name": "雅安市", + "area": [ + "雨城区", + "芦山县", + "石棉县", + "名山县", + "天全县", + "荥经县", + "宝兴县", + "汉源县", + "其他" + ] + }, + { + "name": "巴中市", + "area": [ + "巴州区", + "南江县", + "平昌县", + "通江县", + "其他" + ] + }, + { + "name": "资阳市", + "area": [ + "雁江区", + "简阳市", + "安岳县", + "乐至县", + "其他" + ] + }, + { + "name": "阿坝藏族羌族自治州", + "area": [ + "马尔康县", + "九寨沟县", + "红原县", + "汶川县", + "阿坝县", + "理县", + "若尔盖县", + "小金县", + "黑水县", + "金川县", + "松潘县", + "壤塘县", + "茂县", + "其他" + ] + }, + { + "name": "甘孜藏族自治州", + "area": [ + "康定县", + "丹巴县", + "炉霍县", + "九龙县", + "甘孜县", + "雅江县", + "新龙县", + "道孚县", + "白玉县", + "理塘县", + "德格县", + "乡城县", + "石渠县", + "稻城县", + "色达县", + "巴塘县", + "泸定县", + "得荣县", + "其他" + ] + }, + { + "name": "凉山彝族自治州", + "area": [ + "西昌市", + "美姑县", + "昭觉县", + "金阳县", + "甘洛县", + "布拖县", + "雷波县", + "普格县", + "宁南县", + "喜德县", + "会东县", + "越西县", + "会理县", + "盐源县", + "德昌县", + "冕宁县", + "木里藏族自治县", + "其他" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "贵州省", + "city": [ + { + "name": "贵阳市", + "area": [ + "南明区", + "云岩区", + "花溪区", + "乌当区", + "白云区", + "小河区", + "清镇市", + "开阳县", + "修文县", + "息烽县", + "其他" + ] + }, + { + "name": "六盘水市", + "area": [ + "钟山区", + "水城县", + "盘县", + "六枝特区", + "其他" + ] + }, + { + "name": "遵义市", + "area": [ + "红花岗区", + "汇川区", + "赤水市", + "仁怀市", + "遵义县", + "绥阳县", + "桐梓县", + "习水县", + "凤冈县", + "正安县", + "余庆县", + "湄潭县", + "道真仡佬族苗族自治县", + "务川仡佬族苗族自治县", + "其他" + ] + }, + { + "name": "安顺市", + "area": [ + "西秀区", + "普定县", + "平坝县", + "镇宁布依族苗族自治县", + "紫云苗族布依族自治县", + "关岭布依族苗族自治县", + "其他" + ] + }, + { + "name": "铜仁地区", + "area": [ + "铜仁市", + "德江县", + "江口县", + "思南县", + "石阡县", + "玉屏侗族自治县", + "松桃苗族自治县", + "印江土家族苗族自治县", + "沿河土家族自治县", + "万山特区", + "其他" + ] + }, + { + "name": "毕节地区", + "area": [ + "毕节市", + "黔西县", + "大方县", + "织金县", + "金沙县", + "赫章县", + "纳雍县", + "威宁彝族回族苗族自治县", + "其他" + ] + }, + { + "name": "黔西南布依族苗族自治州", + "area": [ + "兴义市", + "望谟县", + "兴仁县", + "普安县", + "册亨县", + "晴隆县", + "贞丰县", + "安龙县", + "其他" + ] + }, + { + "name": "黔东南苗族侗族自治州", + "area": [ + "凯里市", + "施秉县", + "从江县", + "锦屏县", + "镇远县", + "麻江县", + "台江县", + "天柱县", + "黄平县", + "榕江县", + "剑河县", + "三穗县", + "雷山县", + "黎平县", + "岑巩县", + "丹寨县", + "其他" + ] + }, + { + "name": "黔南布依族苗族自治州", + "area": [ + "都匀市", + "福泉市", + "贵定县", + "惠水县", + "罗甸县", + "瓮安县", + "荔波县", + "龙里县", + "平塘县", + "长顺县", + "独山县", + "三都水族自治县", + "其他" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "云南省", + "city": [ + { + "name": "昆明市", + "area": [ + "盘龙区", + "五华区", + "官渡区", + "西山区", + "东川区", + "安宁市", + "呈贡县", + "晋宁县", + "富民县", + "宜良县", + "嵩明县", + "石林彝族自治县", + "禄劝彝族苗族自治县", + "寻甸回族彝族自治县", + "其他" + ] + }, + { + "name": "曲靖市", + "area": [ + "麒麟区", + "宣威市", + "马龙县", + "沾益县", + "富源县", + "罗平县", + "师宗县", + "陆良县", + "会泽县", + "其他" + ] + }, + { + "name": "玉溪市", + "area": [ + "红塔区", + "江川县", + "澄江县", + "通海县", + "华宁县", + "易门县", + "峨山彝族自治县", + "新平彝族傣族自治县", + "元江哈尼族彝族傣族自治县", + "其他" + ] + }, + { + "name": "保山市", + "area": [ + "隆阳区", + "施甸县", + "腾冲县", + "龙陵县", + "昌宁县", + "其他" + ] + }, + { + "name": "昭通市", + "area": [ + "昭阳区", + "鲁甸县", + "巧家县", + "盐津县", + "大关县", + "永善县", + "绥江县", + "镇雄县", + "彝良县", + "威信县", + "水富县", + "其他" + ] + }, + { + "name": "丽江市", + "area": [ + "古城区", + "永胜县", + "华坪县", + "玉龙纳西族自治县", + "宁蒗彝族自治县", + "其他" + ] + }, + { + "name": "普洱市", + "area": [ + "思茅区", + "普洱哈尼族彝族自治县", + "墨江哈尼族自治县", + "景东彝族自治县", + "景谷傣族彝族自治县", + "镇沅彝族哈尼族拉祜族自治县", + "江城哈尼族彝族自治县", + "孟连傣族拉祜族佤族自治县", + "澜沧拉祜族自治县", + "西盟佤族自治县", + "其他" + ] + }, + { + "name": "临沧市", + "area": [ + "临翔区", + "凤庆县", + "云县", + "永德县", + "镇康县", + "双江拉祜族佤族布朗族傣族自治县", + "耿马傣族佤族自治县", + "沧源佤族自治县", + "其他" + ] + }, + { + "name": "德宏傣族景颇族自治州", + "area": [ + "潞西市", + "瑞丽市", + "梁河县", + "盈江县", + "陇川县", + "其他" + ] + }, + { + "name": "怒江傈僳族自治州", + "area": [ + "泸水县", + "福贡县", + "贡山独龙族怒族自治县", + "兰坪白族普米族自治县", + "其他" + ] + }, + { + "name": "迪庆藏族自治州", + "area": [ + "香格里拉县", + "德钦县", + "维西傈僳族自治县", + "其他" + ] + }, + { + "name": "大理白族自治州", + "area": [ + "大理市", + "祥云县", + "宾川县", + "弥渡县", + "永平县", + "云龙县", + "洱源县", + "剑川县", + "鹤庆县", + "漾濞彝族自治县", + "南涧彝族自治县", + "巍山彝族回族自治县", + "其他" + ] + }, + { + "name": "楚雄彝族自治州", + "area": [ + "楚雄市", + "双柏县", + "牟定县", + "南华县", + "姚安县", + "大姚县", + "永仁县", + "元谋县", + "武定县", + "禄丰县", + "其他" + ] + }, + { + "name": "红河哈尼族彝族自治州", + "area": [ + "蒙自县", + "个旧市", + "开远市", + "绿春县", + "建水县", + "石屏县", + "弥勒县", + "泸西县", + "元阳县", + "红河县", + "金平苗族瑶族傣族自治县", + "河口瑶族自治县", + "屏边苗族自治县", + "其他" + ] + }, + { + "name": "文山壮族苗族自治州", + "area": [ + "文山县", + "砚山县", + "西畴县", + "麻栗坡县", + "马关县", + "丘北县", + "广南县", + "富宁县", + "其他" + ] + }, + { + "name": "西双版纳傣族自治州", + "area": [ + "景洪市", + "勐海县", + "勐腊县", + "其他" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "西藏", + "city": [ + { + "name": "拉萨市", + "area": [ + "城关区", + "林周县", + "当雄县", + "尼木县", + "曲水县", + "堆龙德庆县", + "达孜县", + "墨竹工卡县", + "其他" + ] + }, + { + "name": "那曲地区", + "area": [ + "那曲县", + "嘉黎县", + "比如县", + "聂荣县", + "安多县", + "申扎县", + "索县", + "班戈县", + "巴青县", + "尼玛县", + "其他" + ] + }, + { + "name": "昌都地区", + "area": [ + "昌都县", + "江达县", + "贡觉县", + "类乌齐县", + "丁青县", + "察雅县", + "八宿县", + "左贡县", + "芒康县", + "洛隆县", + "边坝县", + "其他" + ] + }, + { + "name": "林芝地区", + "area": [ + "林芝县", + "工布江达县", + "米林县", + "墨脱县", + "波密县", + "察隅县", + "朗县", + "其他" + ] + }, + { + "name": "山南地区", + "area": [ + "乃东县", + "扎囊县", + "贡嘎县", + "桑日县", + "琼结县", + "曲松县", + "措美县", + "洛扎县", + "加查县", + "隆子县", + "错那县", + "浪卡子县", + "其他" + ] + }, + { + "name": "日喀则地区", + "area": [ + "日喀则市", + "南木林县", + "江孜县", + "定日县", + "萨迦县", + "拉孜县", + "昂仁县", + "谢通门县", + "白朗县", + "仁布县", + "康马县", + "定结县", + "仲巴县", + "亚东县", + "吉隆县", + "聂拉木县", + "萨嘎县", + "岗巴县", + "其他" + ] + }, + { + "name": "阿里地区", + "area": [ + "噶尔县", + "普兰县", + "札达县", + "日土县", + "革吉县", + "改则县", + "措勤县", + "其他" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "陕西省", + "city": [ + { + "name": "西安市", + "area": [ + "莲湖区", + "新城区", + "碑林区", + "雁塔区", + "灞桥区", + "未央区", + "阎良区", + "临潼区", + "长安区", + "高陵县", + "蓝田县", + "户县", + "周至县", + "其他" + ] + }, + { + "name": "铜川市", + "area": [ + "耀州区", + "王益区", + "印台区", + "宜君县", + "其他" + ] + }, + { + "name": "宝鸡市", + "area": [ + "渭滨区", + "金台区", + "陈仓区", + "岐山县", + "凤翔县", + "陇县", + "太白县", + "麟游县", + "扶风县", + "千阳县", + "眉县", + "凤县", + "其他" + ] + }, + { + "name": "咸阳市", + "area": [ + "秦都区", + "渭城区", + "杨陵区", + "兴平市", + "礼泉县", + "泾阳县", + "永寿县", + "三原县", + "彬县", + "旬邑县", + "长武县", + "乾县", + "武功县", + "淳化县", + "其他" + ] + }, + { + "name": "渭南市", + "area": [ + "临渭区", + "韩城市", + "华阴市", + "蒲城县", + "潼关县", + "白水县", + "澄城县", + "华县", + "合阳县", + "富平县", + "大荔县", + "其他" + ] + }, + { + "name": "延安市", + "area": [ + "宝塔区", + "安塞县", + "洛川县", + "子长县", + "黄陵县", + "延川县", + "富县", + "延长县", + "甘泉县", + "宜川县", + "志丹县", + "黄龙县", + "吴起县", + "其他" + ] + }, + { + "name": "汉中市", + "area": [ + "汉台区", + "留坝县", + "镇巴县", + "城固县", + "南郑县", + "洋县", + "宁强县", + "佛坪县", + "勉县", + "西乡县", + "略阳县", + "其他" + ] + }, + { + "name": "榆林市", + "area": [ + "榆阳区", + "清涧县", + "绥德县", + "神木县", + "佳县", + "府谷县", + "子洲县", + "靖边县", + "横山县", + "米脂县", + "吴堡县", + "定边县", + "其他" + ] + }, + { + "name": "安康市", + "area": [ + "汉滨区", + "紫阳县", + "岚皋县", + "旬阳县", + "镇坪县", + "平利县", + "石泉县", + "宁陕县", + "白河县", + "汉阴县", + "其他" + ] + }, + { + "name": "商洛市", + "area": [ + "商州区", + "镇安县", + "山阳县", + "洛南县", + "商南县", + "丹凤县", + "柞水县", + "其他" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "甘肃省", + "city": [ + { + "name": "兰州市", + "area": [ + "城关区", + "七里河区", + "西固区", + "安宁区", + "红古区", + "永登县", + "皋兰县", + "榆中县", + "其他" + ] + }, + { + "name": "嘉峪关市", + "area": [ + "嘉峪关市", + "其他" + ] + }, + { + "name": "金昌市", + "area": [ + "金川区", + "永昌县", + "其他" + ] + }, + { + "name": "白银市", + "area": [ + "白银区", + "平川区", + "靖远县", + "会宁县", + "景泰县", + "其他" + ] + }, + { + "name": "天水市", + "area": [ + "清水县", + "秦安县", + "甘谷县", + "武山县", + "张家川回族自治县", + "北道区", + "秦城区", + "其他" + ] + }, + { + "name": "武威市", + "area": [ + "凉州区", + "民勤县", + "古浪县", + "天祝藏族自治县", + "其他" + ] + }, + { + "name": "酒泉市", + "area": [ + "肃州区", + "玉门市", + "敦煌市", + "金塔县", + "肃北蒙古族自治县", + "阿克塞哈萨克族自治县", + "安西县", + "其他" + ] + }, + { + "name": "张掖市", + "area": [ + "甘州区", + "民乐县", + "临泽县", + "高台县", + "山丹县", + "肃南裕固族自治县", + "其他" + ] + }, + { + "name": "庆阳市", + "area": [ + "西峰区", + "庆城县", + "环县", + "华池县", + "合水县", + "正宁县", + "宁县", + "镇原县", + "其他" + ] + }, + { + "name": "平凉市", + "area": [ + "崆峒区", + "泾川县", + "灵台县", + "崇信县", + "华亭县", + "庄浪县", + "静宁县", + "其他" + ] + }, + { + "name": "定西市", + "area": [ + "安定区", + "通渭县", + "临洮县", + "漳县", + "岷县", + "渭源县", + "陇西县", + "其他" + ] + }, + { + "name": "陇南市", + "area": [ + "武都区", + "成县", + "宕昌县", + "康县", + "文县", + "西和县", + "礼县", + "两当县", + "徽县", + "其他" + ] + }, + { + "name": "临夏回族自治州", + "area": [ + "临夏市", + "临夏县", + "康乐县", + "永靖县", + "广河县", + "和政县", + "东乡族自治县", + "积石山保安族东乡族撒拉族自治县", + "其他" + ] + }, + { + "name": "甘南藏族自治州", + "area": [ + "合作市", + "临潭县", + "卓尼县", + "舟曲县", + "迭部县", + "玛曲县", + "碌曲县", + "夏河县", + "其他" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "青海省", + "city": [ + { + "name": "西宁市", + "area": [ + "城中区", + "城东区", + "城西区", + "城北区", + "湟源县", + "湟中县", + "大通回族土族自治县", + "其他" + ] + }, + { + "name": "海东地区", + "area": [ + "平安县", + "乐都县", + "民和回族土族自治县", + "互助土族自治县", + "化隆回族自治县", + "循化撒拉族自治县", + "其他" + ] + }, + { + "name": "海北藏族自治州", + "area": [ + "海晏县", + "祁连县", + "刚察县", + "门源回族自治县", + "其他" + ] + }, + { + "name": "海南藏族自治州", + "area": [ + "共和县", + "同德县", + "贵德县", + "兴海县", + "贵南县", + "其他" + ] + }, + { + "name": "黄南藏族自治州", + "area": [ + "同仁县", + "尖扎县", + "泽库县", + "河南蒙古族自治县", + "其他" + ] + }, + { + "name": "果洛藏族自治州", + "area": [ + "玛沁县", + "班玛县", + "甘德县", + "达日县", + "久治县", + "玛多县", + "其他" + ] + }, + { + "name": "玉树藏族自治州", + "area": [ + "玉树县", + "杂多县", + "称多县", + "治多县", + "囊谦县", + "曲麻莱县", + "其他" + ] + }, + { + "name": "海西蒙古族藏族自治州", + "area": [ + "德令哈市", + "格尔木市", + "乌兰县", + "都兰县", + "天峻县", + "其他" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "宁夏", + "city": [ + { + "name": "银川市", + "area": [ + "兴庆区", + "西夏区", + "金凤区", + "灵武市", + "永宁县", + "贺兰县", + "其他" + ] + }, + { + "name": "石嘴山市", + "area": [ + "大武口区", + "惠农区", + "平罗县", + "其他" + ] + }, + { + "name": "吴忠市", + "area": [ + "利通区", + "青铜峡市", + "盐池县", + "同心县", + "其他" + ] + }, + { + "name": "固原市", + "area": [ + "原州区", + "西吉县", + "隆德县", + "泾源县", + "彭阳县", + "其他" + ] + }, + { + "name": "中卫市", + "area": [ + "沙坡头区", + "中宁县", + "海原县", + "其他" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "新疆", + "city": [ + { + "name": "乌鲁木齐市", + "area": [ + "天山区", + "沙依巴克区", + "新市区", + "水磨沟区", + "头屯河区", + "达坂城区", + "东山区", + "乌鲁木齐县", + "其他" + ] + }, + { + "name": "克拉玛依市", + "area": [ + "克拉玛依区", + "独山子区", + "白碱滩区", + "乌尔禾区", + "其他" + ] + }, + { + "name": "吐鲁番地区", + "area": [ + "吐鲁番市", + "托克逊县", + "鄯善县", + "其他" + ] + }, + { + "name": "哈密地区", + "area": [ + "哈密市", + "伊吾县", + "巴里坤哈萨克自治县", + "其他" + ] + }, + { + "name": "和田地区", + "area": [ + "和田市", + "和田县", + "洛浦县", + "民丰县", + "皮山县", + "策勒县", + "于田县", + "墨玉县", + "其他" + ] + }, + { + "name": "阿克苏地区", + "area": [ + "阿克苏市", + "温宿县", + "沙雅县", + "拜城县", + "阿瓦提县", + "库车县", + "柯坪县", + "新和县", + "乌什县", + "其他" + ] + }, + { + "name": "喀什地区", + "area": [ + "喀什市", + "巴楚县", + "泽普县", + "伽师县", + "叶城县", + "岳普湖县", + "疏勒县", + "麦盖提县", + "英吉沙县", + "莎车县", + "疏附县", + "塔什库尔干塔吉克自治县", + "其他" + ] + }, + { + "name": "克孜勒苏柯尔克孜自治州", + "area": [ + "阿图什市", + "阿合奇县", + "乌恰县", + "阿克陶县", + "其他" + ] + }, + { + "name": "巴音郭楞蒙古自治州", + "area": [ + "库尔勒市", + "和静县", + "尉犁县", + "和硕县", + "且末县", + "博湖县", + "轮台县", + "若羌县", + "焉耆回族自治县", + "其他" + ] + }, + { + "name": "昌吉回族自治州", + "area": [ + "昌吉市", + "阜康市", + "奇台县", + "玛纳斯县", + "吉木萨尔县", + "呼图壁县", + "木垒哈萨克自治县", + "米泉市", + "其他" + ] + }, + { + "name": "博尔塔拉蒙古自治州", + "area": [ + "博乐市", + "精河县", + "温泉县", + "其他" + ] + }, + { + "name": "石河子", + "area": [ + "石河子" + ] + }, + { + "name": "阿拉尔", + "area": [ + "阿拉尔" + ] + }, + { + "name": "图木舒克", + "area": [ + "图木舒克" + ] + }, + { + "name": "五家渠", + "area": [ + "五家渠" + ] + }, + { + "name": "伊犁哈萨克自治州", + "area": [ + "伊宁市", + "奎屯市", + "伊宁县", + "特克斯县", + "尼勒克县", + "昭苏县", + "新源县", + "霍城县", + "巩留县", + "察布查尔锡伯自治县", + "塔城地区", + "阿勒泰地区", + "其他" + ] + }, + { + "name": "其他", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "台湾省", + "city": [ + { + "name": "台北市", + "area": [ + "内湖区", + "南港区", + "中正区", + "万华区", + "大同区", + "中山区", + "松山区", + "大安区", + "信义区", + "文山区", + "士林区", + "北投区" + ] + }, + { + "name": "新北市", + "area": [ + "板桥区", + "汐止区", + "新店区", + "其他" + ] + }, + { + "name": "桃园市", + "area": [ + "其他" + ] + }, + { + "name": "台中市", + "area": [ + "其他" + ] + }, + { + "name": "台南市", + "area": [ + "其他" + ] + }, + { + "name": "高雄市", + "area": [ + "其他" + ] + } + ] + }, + { + "name": "澳门", + "city": [ + { + "name": "澳门", + "area": [ + "花地玛堂区", + "圣安多尼堂区", + "大堂区", + "望德堂区", + "风顺堂区", + "嘉模堂区", + "圣方济各堂区", + "路凼", + "其他" + ] + } + ] + }, + { + "name": "香港", + "city": [ + { + "name": "香港", + "area": [ + "深水埗区", + "油尖旺区", + "九龙城区", + "黄大仙区", + "观塘区", + "北区", + "大埔区", + "沙田区", + "西贡区", + "元朗区", + "屯门区", + "荃湾区", + "葵青区", + "离岛区", + "中西区", + "湾仔区", + "东区", + "南区", + "其他" + ] + } + ] + } +] diff --git a/app/src/main/java/com/dahe/examine/MainActivity.kt b/app/src/main/java/com/dahe/examine/MainActivity.kt new file mode 100644 index 0000000..9b7dc39 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/MainActivity.kt @@ -0,0 +1,11 @@ +package com.dahe.examine + +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle + +class MainActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/adapter/ApplyAdapter.kt b/app/src/main/java/com/dahe/examine/adapter/ApplyAdapter.kt new file mode 100644 index 0000000..bb999f3 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/adapter/ApplyAdapter.kt @@ -0,0 +1,26 @@ +package com.dahe.examine.adapter + +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.dahe.examine.R +import com.dahe.examine.bean.ApplyBean + +/** + * @ClassName ApplyAdapter + * @Author 用户 + * @Date 2022/1/13 15:18 + * @Description TODO + */ +class ApplyAdapter(layoutResId: Int) : BaseQuickAdapter(R.layout.item_apply) { + override fun convert(holder: BaseViewHolder, item: ApplyBean) { + holder.setText(R.id.tvTitle,item.enterpriseName) + .setText(R.id.tvSqs,item.numberOfPassesRequired) + .setText(R.id.tvSps,item.countyName) + .setText(R.id.tvTbr,item.enterpriseContact) + .setText(R.id.tvDh,item.enterpriseContactPhone) + .setText(R.id.tvGj,item.nationalClassA) + .setText(R.id.tvCls,item.vehiclesNumber) + .setText(R.id.tvType,"""(${item.chargeType})""") + .setTextColorRes(R.id.tvType,if (item.chargeType.contains("收费")) R.color.color_down_time else R.color.color_green) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/adapter/GoneAdapter.kt b/app/src/main/java/com/dahe/examine/adapter/GoneAdapter.kt new file mode 100644 index 0000000..4483f79 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/adapter/GoneAdapter.kt @@ -0,0 +1,26 @@ +package com.dahe.examine.adapter + +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.dahe.examine.R +import com.dahe.examine.bean.ApplyBean +import com.dahe.examine.bean.PassBean + +/** + * @ClassName ApplyAdapter + * @Author 用户 + * @Date 2022/1/13 15:18 + * @Description TODO + */ +class GoneAdapter(layoutResId: Int) : BaseQuickAdapter(R.layout.item_gone) { + override fun convert(holder: BaseViewHolder, item: ApplyBean) { + holder.setText(R.id.tvTitle,item.enterpriseName) + .setText(R.id.tvSjName,item.name) + .setText(R.id.tvDh,item.phone) + .setText(R.id.tvDs,"""${item.passNo}/${item.numberOfPasses}""") + .setText(R.id.tvZl,item.notUsed) + .setText(R.id.tvType,"""(${item.chargeType})""") + .setTextColorRes(R.id.tvType,if (item.chargeType.contains("收费")) R.color.color_down_time else R.color.color_green) + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/adapter/MyHomePagerAdapter.java b/app/src/main/java/com/dahe/examine/adapter/MyHomePagerAdapter.java new file mode 100644 index 0000000..e68363b --- /dev/null +++ b/app/src/main/java/com/dahe/examine/adapter/MyHomePagerAdapter.java @@ -0,0 +1,49 @@ +package com.dahe.examine.adapter; + + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentStatePagerAdapter; + +import java.util.ArrayList; + +/** + * Created by Administrator on 2018/7/16 0016. + */ + +public class MyHomePagerAdapter extends FragmentStatePagerAdapter { + private String[] mTitles; + private ArrayList mFragments = new ArrayList<>(); + + public MyHomePagerAdapter(FragmentManager fm) { + super(fm); + } + + public MyHomePagerAdapter(FragmentManager fm, String[] mTitles, ArrayList mFragments) { + super(fm); + this.mTitles = mTitles; + this.mFragments = mFragments; + } + + // 初始化每个页卡选项 +// @Override +// public Object instantiateItem(ViewGroup arg0, int arg1) { +// // TODO Auto-generated method stub +// node_return super.instantiateItem(arg0, arg1); +// } + + @Override + public int getCount() { + return mFragments.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return mTitles[position]; + } + + @Override + public Fragment getItem(int position) { + return mFragments.get(position); + } +} diff --git a/app/src/main/java/com/dahe/examine/adapter/NotReportAdapter.kt b/app/src/main/java/com/dahe/examine/adapter/NotReportAdapter.kt new file mode 100644 index 0000000..e778849 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/adapter/NotReportAdapter.kt @@ -0,0 +1,22 @@ +package com.dahe.examine.adapter + +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.dahe.examine.R +import com.dahe.examine.bean.ApplyBean + +/** + * @ClassName ApplyAdapter + * @Author 用户 + * @Date 2022/1/13 15:18 + * @Description TODO + */ +class NotReportAdapter(layoutResId: Int) : BaseQuickAdapter(R.layout.item_not_report) { + override fun convert(holder: BaseViewHolder, item: ApplyBean) { + holder.setText(R.id.tv1,item.enterprise_name) + .setText(R.id.tvSj,"""未报时间:${item.useDate}""") +// .setText(R.id.tvSps,item.numberOfPassesRequired) +// .setText(R.id.tvTbr,item.enterpriseContact) +// .setText(R.id.tvDh,item.enterpriseContactPhone) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/adapter/RecordAdapter.kt b/app/src/main/java/com/dahe/examine/adapter/RecordAdapter.kt new file mode 100644 index 0000000..2a95f5a --- /dev/null +++ b/app/src/main/java/com/dahe/examine/adapter/RecordAdapter.kt @@ -0,0 +1,35 @@ +package com.dahe.examine.adapter + +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.dahe.examine.R +import com.dahe.examine.bean.ApplyBean + +/** + * @ClassName ApplyAdapter + * @Author 用户 + * @Date 2022/1/13 15:18 + * @Description TODO + */ +class RecordAdapter(layoutResId: Int) : BaseQuickAdapter(R.layout.item_record) { + override fun convert(holder: BaseViewHolder, item: ApplyBean) { + holder.setText(R.id.tvTitle,item.enterpriseName) + .setText(R.id.tvSqs,item.numberOfPassesRequired) + .setText(R.id.tvSps,item.numberOfPasses) + .setText(R.id.tvTbr,item.enterpriseContact) + .setText(R.id.tvDh,item.enterpriseContactPhone) + .setText(R.id.tvGjj,item.nationalClassA) + .setText(R.id.tvCl,item.vehiclesNumber) + .setText(R.id.tvSqsj,item.createTime) + .setText(R.id.tvSpsj,item.updateTime) + .setText(R.id.tvJjyy,item.remarks) + .setGone(R.id.llJjyy,if ("1"==item.status) true else false) + .setGone(R.id.tvTime,if ("1"==item.status) false else true) + .setText(R.id.tvSjTitle,if ("1"==item.status) "审核时间:" else "拒绝时间:") + .setText(R.id.tvTime,"""${item.passUsageStartTime}至${item.passUsageEndTime}""") + .setGone(R.id.ivType,if ("0"==item.status) true else false) + .setBackgroundResource(R.id.ivType,if ("1"==item.status) R.drawable.ok_pass else R.drawable.no_pass) + .setText(R.id.tvType,"""(${item.chargeType})""") + .setTextColorRes(R.id.tvType,if (item.chargeType.contains("收费")) R.color.color_down_time else R.color.color_green) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/adapter/UserDetailAdapter.kt b/app/src/main/java/com/dahe/examine/adapter/UserDetailAdapter.kt new file mode 100644 index 0000000..55bae0c --- /dev/null +++ b/app/src/main/java/com/dahe/examine/adapter/UserDetailAdapter.kt @@ -0,0 +1,31 @@ +package com.dahe.examine.adapter + +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.dahe.examine.R +import com.dahe.examine.bean.ApplyBean + +/** + * @ClassName ApplyAdapter + * @Author 用户 + * @Date 2022/1/13 15:18 + * @Description TODO + */ +class UserDetailAdapter(layoutResId: Int) : BaseQuickAdapter(R.layout.item_user) { + override fun convert(holder: BaseViewHolder, item: ApplyBean) { + holder.setText(R.id.tvBh,item.passNo) + .setText(R.id.tvCph,item.vehicle) + .setText(R.id.tvQd,item.startPoint) + .setText(R.id.tvZd,item.endPoint) + .setText(R.id.tvDs,item.transportTonnage) + .setText(R.id.tvZl,item.itemTypeName) + .setText(R.id.tvSjName,item.driverName) + .setText(R.id.tvDh,item.driverPhone) + .setText(R.id.tvStartSj,item.startTime) + .setText(R.id.tvEndTime,item.endTime) + .setText(R.id.tvBz,item.remarks) + .setText(R.id.tvTime,"""${item.useStartTime}至${item.useEndTime}""") + .setText(R.id.tvType,"""(${item.chargeType})""") + .setTextColorRes(R.id.tvType,if (item.chargeType.contains("收费")) R.color.color_down_time else R.color.color_green) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/base/App.java b/app/src/main/java/com/dahe/examine/base/App.java new file mode 100644 index 0000000..2c07e3a --- /dev/null +++ b/app/src/main/java/com/dahe/examine/base/App.java @@ -0,0 +1,124 @@ +package com.dahe.examine.base; + +import android.app.Application; +import android.content.Context; + +import com.dahe.mylibrary.CommonBaseLibrary; +import com.dahe.examine.net.Api; +import com.dahe.examine.oss.OssServiceUtil; +import com.tencent.bugly.crashreport.CrashReport; + +import java.security.SecureRandom; +import java.security.cert.X509Certificate; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSession; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; + +public class App extends Application { + public static final String TAG = "BNSDKSimpleDemo"; + public static final String APP_FOLDER_NAME = TAG; + public static App mApplication = null; + + @Override + public void onCreate() { + super.onCreate(); + mApplication = this; + CommonBaseLibrary.getInstance().init(this, Api.BASE_URL); +// if (BuildConfig.DEBUG){ +// CrashHandler.getInstance().init(this); +// } + CrashReport.initCrashReport(getApplicationContext(), "fc3d9aaf74", false); + + + //预初始化 +// initPush(); + //友盟华为推送通道 +// HuaWeiRegister.register(this); + //在使用SDK各组件之前初始化context信息,传入ApplicationContext +// SDKInitializer.initialize(this); + //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型. + //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。 +// SDKInitializer.setCoordType(CoordType.BD09LL); + +// SophixManager.getInstance().queryAndLoadNewPatch(); + + OssServiceUtil.getInstance().init(); + } + + + public static App getApp() { + return mApplication; + } + + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(base); + + } + + //忽略https的证书校验 + public void handleSSLHandshake() { + try { + TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() { + public X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[0]; + } + + @Override + public void checkClientTrusted(X509Certificate[] certs, String authType) { + } + + @Override + public void checkServerTrusted(X509Certificate[] certs, String authType) { + } + }}; + + SSLContext sc = SSLContext.getInstance("TLS"); + // trustAllCerts信任所有的证书 + sc.init(null, trustAllCerts, new SecureRandom()); + HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); + HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { + @Override + public boolean verify(String hostname, SSLSession session) { + return true; + } + }); + } catch (Exception ignored) { + } + } + + /** + * 初始化推送SDK,在用户隐私政策协议同意后,再做初始化 + */ +// private void initPushSDK() { +// /* +// * 判断用户是否已同意隐私政策 +// * 当同意时,直接进行初始化; +// * 当未同意时,待用户同意后,通过PushHelper.init(...)方法进行初始化。 +// */ +// boolean agreed = SPUtils.hasAgreePrivacyAgreement(this); +// if (agreed && PushHelper.isMainProcess(this)) { +//// if (true) { +// //建议在线程中执行初始化 +// new Thread(new Runnable() { +// @Override +// public void run() { +// PushHelper.init(getApplicationContext()); +// } +// }).start(); +// } +// } + + /*private void initPush(){ + //日志开关 + UMConfigure.setLogEnabled(BuildConfig.DEBUG?true:false); + //预初始化 + PushHelper.preInit(this); + //正式初始化 + initPushSDK(); + }*/ +} diff --git a/app/src/main/java/com/dahe/examine/base/AppConfig.java b/app/src/main/java/com/dahe/examine/base/AppConfig.java new file mode 100644 index 0000000..0cd07fe --- /dev/null +++ b/app/src/main/java/com/dahe/examine/base/AppConfig.java @@ -0,0 +1,16 @@ +package com.dahe.examine.base; + +/** + * @ClassName AppConfig + * @Author 用户 + * @Date 2022/1/14 15:24 + * @Description TODO + */ +public class AppConfig { + + public static final String BEAN= "DA_HE_BEAN"; + public static final String TIME= "DA_HE_TIME"; + public static final String ID= "DA_HE_ID"; + public static final String PWD= "DA_HE_PHONE"; + public static final String CODE= "DA_HE_PHONE"; +} diff --git a/app/src/main/java/com/dahe/examine/bean/AddresBean.java b/app/src/main/java/com/dahe/examine/bean/AddresBean.java new file mode 100644 index 0000000..c579e6b --- /dev/null +++ b/app/src/main/java/com/dahe/examine/bean/AddresBean.java @@ -0,0 +1,233 @@ +package com.dahe.examine.bean; + +import java.io.Serializable; + +/** + * @ClassName AddresBean + * @Author 用户 + * @Date 2022/1/19 14:23 + * @Description TODO + */ +public class AddresBean implements Serializable { + + + private String searchValue; + private String createBy; + private String createTime; + private String updateBy; + private String updateTime; + private String remark; + private ParamsDTO params; + private Integer userId; + private String name; + private String enterpriseName; + private String phone; + private String contacts; + private String nationalClassA; + private String avatarUrl; + private String contactsphone; + private String businessType; + private String placeOfRegistration; + private String nationality; + private String companyAddress; + private String sex; + private String birth; + private String plantAddress; + private String pwd; + private String isDel; + + public String getSearchValue() { + return searchValue; + } + + public void setSearchValue(String searchValue) { + this.searchValue = searchValue; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public ParamsDTO getParams() { + return params; + } + + public void setParams(ParamsDTO params) { + this.params = params; + } + + public Integer getUserId() { + return userId; + } + + public void setUserId(Integer userId) { + this.userId = userId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEnterpriseName() { + return enterpriseName; + } + + public void setEnterpriseName(String enterpriseName) { + this.enterpriseName = enterpriseName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getContacts() { + return contacts; + } + + public void setContacts(String contacts) { + this.contacts = contacts; + } + + public String getNationalClassA() { + return nationalClassA; + } + + public void setNationalClassA(String nationalClassA) { + this.nationalClassA = nationalClassA; + } + + public String getAvatarUrl() { + return avatarUrl; + } + + public void setAvatarUrl(String avatarUrl) { + this.avatarUrl = avatarUrl; + } + + public String getContactsphone() { + return contactsphone; + } + + public void setContactsphone(String contactsphone) { + this.contactsphone = contactsphone; + } + + public String getBusinessType() { + return businessType; + } + + public void setBusinessType(String businessType) { + this.businessType = businessType; + } + + public String getPlaceOfRegistration() { + return placeOfRegistration; + } + + public void setPlaceOfRegistration(String placeOfRegistration) { + this.placeOfRegistration = placeOfRegistration; + } + + public String getNationality() { + return nationality; + } + + public void setNationality(String nationality) { + this.nationality = nationality; + } + + public String getCompanyAddress() { + return companyAddress; + } + + public void setCompanyAddress(String companyAddress) { + this.companyAddress = companyAddress; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public String getBirth() { + return birth; + } + + public void setBirth(String birth) { + this.birth = birth; + } + + public String getPlantAddress() { + return plantAddress; + } + + public void setPlantAddress(String plantAddress) { + this.plantAddress = plantAddress; + } + + public String getPwd() { + return pwd; + } + + public void setPwd(String pwd) { + this.pwd = pwd; + } + + public String getIsDel() { + return isDel; + } + + public void setIsDel(String isDel) { + this.isDel = isDel; + } + + public static class ParamsDTO { + } +} diff --git a/app/src/main/java/com/dahe/examine/bean/ApplyBean.java b/app/src/main/java/com/dahe/examine/bean/ApplyBean.java new file mode 100644 index 0000000..0746eda --- /dev/null +++ b/app/src/main/java/com/dahe/examine/bean/ApplyBean.java @@ -0,0 +1,428 @@ +package com.dahe.examine.bean; + +import java.io.Serializable; + +/** + * @ClassName ApplyBean + * @Author 用户 + * @Date 2022/1/13 15:18 + * @Description TODO + */ +public class ApplyBean implements Serializable { + + private String searchValue; + private String createBy; + private String createTime; + private String updateBy; + private String updateTime; + private String remark; + private String infoId; + private String userId; + private String typeId; + private String enterpriseName; + private String enterpriseContact; + private String enterpriseContactPhone; + private String nationalClassA; + private String vehiclesNumber; + private String numberOfPassesRequired; + private String status; + private String numberOfPasses; + private String passNo; + private String approvedBy; + private String remarks; + private String passUsageStartTime; + private String passUsageEndTime; + private String provinceId; + private String provinceName; + private String cityId; + private String cityName; + private String countyId; + private String countyName; + private String sign; + private String useStartTime; + private String useEndTime; + private String phone; + private String name; + private String notUsed; + private String vehicle; + private String startPoint; + private String endPoint; + private String itemTypeName; + private String transportTonnage; + private String driverName; + private String driverPhone; + private String startTime; + private String endTime; + private String useDate; + private String enterprise_name; + private String chargeType; + + public String getChargeType() { + return chargeType; + } + + public void setChargeType(String chargeType) { + this.chargeType = chargeType; + } + + public String getUseDate() { + return useDate; + } + + public void setUseDate(String useDate) { + this.useDate = useDate; + } + + public String getEnterprise_name() { + return enterprise_name; + } + + public void setEnterprise_name(String enterprise_name) { + this.enterprise_name = enterprise_name; + } + + public String getStartTime() { + return startTime; + } + + public void setStartTime(String startTime) { + this.startTime = startTime; + } + + public String getEndTime() { + return endTime; + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } + + public String getDriverName() { + return driverName; + } + + public void setDriverName(String driverName) { + this.driverName = driverName; + } + + public String getDriverPhone() { + return driverPhone; + } + + public void setDriverPhone(String driverPhone) { + this.driverPhone = driverPhone; + } + + public String getItemTypeName() { + return itemTypeName; + } + + public void setItemTypeName(String itemTypeName) { + this.itemTypeName = itemTypeName; + } + + public String getTransportTonnage() { + return transportTonnage; + } + + public void setTransportTonnage(String transportTonnage) { + this.transportTonnage = transportTonnage; + } + + public String getStartPoint() { + return startPoint; + } + + public void setStartPoint(String startPoint) { + this.startPoint = startPoint; + } + + public String getEndPoint() { + return endPoint; + } + + public void setEndPoint(String endPoint) { + this.endPoint = endPoint; + } + + public String getVehicle() { + return vehicle; + } + + public void setVehicle(String vehicle) { + this.vehicle = vehicle; + } + + public String getPassNo() { + return passNo; + } + + public void setPassNo(String passNo) { + this.passNo = passNo; + } + + public String getNotUsed() { + return notUsed; + } + + public void setNotUsed(String notUsed) { + this.notUsed = notUsed; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUseStartTime() { + return useStartTime; + } + + public void setUseStartTime(String useStartTime) { + this.useStartTime = useStartTime; + } + + public String getUseEndTime() { + return useEndTime; + } + + public void setUseEndTime(String useEndTime) { + this.useEndTime = useEndTime; + } + + public String getSearchValue() { + return searchValue; + } + + public void setSearchValue(String searchValue) { + this.searchValue = searchValue; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getInfoId() { + return infoId; + } + + public void setInfoId(String infoId) { + this.infoId = infoId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getTypeId() { + return typeId; + } + + public void setTypeId(String typeId) { + this.typeId = typeId; + } + + public String getEnterpriseName() { + return enterpriseName; + } + + public void setEnterpriseName(String enterpriseName) { + this.enterpriseName = enterpriseName; + } + + public String getEnterpriseContact() { + return enterpriseContact; + } + + public void setEnterpriseContact(String enterpriseContact) { + this.enterpriseContact = enterpriseContact; + } + + public String getEnterpriseContactPhone() { + return enterpriseContactPhone; + } + + public void setEnterpriseContactPhone(String enterpriseContactPhone) { + this.enterpriseContactPhone = enterpriseContactPhone; + } + + public String getNationalClassA() { + return nationalClassA; + } + + public void setNationalClassA(String nationalClassA) { + this.nationalClassA = nationalClassA; + } + + public String getVehiclesNumber() { + return vehiclesNumber; + } + + public void setVehiclesNumber(String vehiclesNumber) { + this.vehiclesNumber = vehiclesNumber; + } + + public String getNumberOfPassesRequired() { + return numberOfPassesRequired; + } + + public void setNumberOfPassesRequired(String numberOfPassesRequired) { + this.numberOfPassesRequired = numberOfPassesRequired; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getNumberOfPasses() { + return numberOfPasses; + } + + public void setNumberOfPasses(String numberOfPasses) { + this.numberOfPasses = numberOfPasses; + } + + public String getApprovedBy() { + return approvedBy; + } + + public void setApprovedBy(String approvedBy) { + this.approvedBy = approvedBy; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public String getPassUsageStartTime() { + return passUsageStartTime; + } + + public void setPassUsageStartTime(String passUsageStartTime) { + this.passUsageStartTime = passUsageStartTime; + } + + public String getPassUsageEndTime() { + return passUsageEndTime; + } + + public void setPassUsageEndTime(String passUsageEndTime) { + this.passUsageEndTime = passUsageEndTime; + } + + public String getProvinceId() { + return provinceId; + } + + public void setProvinceId(String provinceId) { + this.provinceId = provinceId; + } + + public String getProvinceName() { + return provinceName; + } + + public void setProvinceName(String provinceName) { + this.provinceName = provinceName; + } + + public String getCityId() { + return cityId; + } + + public void setCityId(String cityId) { + this.cityId = cityId; + } + + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName; + } + + public String getCountyId() { + return countyId; + } + + public void setCountyId(String countyId) { + this.countyId = countyId; + } + + public String getCountyName() { + return countyName; + } + + public void setCountyName(String countyName) { + this.countyName = countyName; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + +} diff --git a/app/src/main/java/com/dahe/examine/bean/ApplySendBean.java b/app/src/main/java/com/dahe/examine/bean/ApplySendBean.java new file mode 100644 index 0000000..12aa08f --- /dev/null +++ b/app/src/main/java/com/dahe/examine/bean/ApplySendBean.java @@ -0,0 +1,112 @@ +package com.dahe.examine.bean; + +import java.io.Serializable; + +/** + * @ClassName ApplySendBean + * @Author 用户 + * @Date 2022/1/15 15:55 + * @Description TODO + */ +public class ApplySendBean implements Serializable { + + private String typeId; + private String enterpriseName; + private String enterpriseContact; + private String enterpriseContactPhone; + private String nationalClassA; + private String vehiclesNumber; + private String numberOfPassesRequired; + private String provinceName; + private String cityName; + private String countyName; + private String sign; + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + + public String getTypeId() { + return typeId; + } + + public void setTypeId(String typeId) { + this.typeId = typeId; + } + + public String getEnterpriseName() { + return enterpriseName; + } + + public void setEnterpriseName(String enterpriseName) { + this.enterpriseName = enterpriseName; + } + + public String getEnterpriseContact() { + return enterpriseContact; + } + + public void setEnterpriseContact(String enterpriseContact) { + this.enterpriseContact = enterpriseContact; + } + + public String getEnterpriseContactPhone() { + return enterpriseContactPhone; + } + + public void setEnterpriseContactPhone(String enterpriseContactPhone) { + this.enterpriseContactPhone = enterpriseContactPhone; + } + + public String getNationalClassA() { + return nationalClassA; + } + + public void setNationalClassA(String nationalClassA) { + this.nationalClassA = nationalClassA; + } + + public String getVehiclesNumber() { + return vehiclesNumber; + } + + public void setVehiclesNumber(String vehiclesNumber) { + this.vehiclesNumber = vehiclesNumber; + } + + public String getNumberOfPassesRequired() { + return numberOfPassesRequired; + } + + public void setNumberOfPassesRequired(String numberOfPassesRequired) { + this.numberOfPassesRequired = numberOfPassesRequired; + } + + public String getProvinceName() { + return provinceName; + } + + public void setProvinceName(String provinceName) { + this.provinceName = provinceName; + } + + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName; + } + + public String getCountyName() { + return countyName; + } + + public void setCountyName(String countyName) { + this.countyName = countyName; + } +} diff --git a/app/src/main/java/com/dahe/examine/bean/BusInfoBean.java b/app/src/main/java/com/dahe/examine/bean/BusInfoBean.java new file mode 100644 index 0000000..c6c4618 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/bean/BusInfoBean.java @@ -0,0 +1,143 @@ +package com.dahe.examine.bean; + +import java.io.Serializable; + +/** + * @ClassName BusInfoBean + * @Author 用户 + * @Date 2022/1/14 15:06 + * @Description TODO + */ +public class BusInfoBean implements Serializable { + + private String phone; + private String code; + private String enterpriseName; + private String pwd; + private String nationalClassA;//国家A级 + private String businessType;//业务类型 + private String avatarUrl; + private String placeOfRegistration;//注册地址 + private String companyAddress;//公司地址 + private String plantAddress;//厂区地址 + private String contacts;//厂区地址 + private String contactsPhone;//厂区地址 + private ParamsDao params; + + + public String getContacts() { + return contacts; + } + + public void setContacts(String contacts) { + this.contacts = contacts; + } + + public String getContactsPhone() { + return contactsPhone; + } + + public void setContactsPhone(String contactsPhone) { + this.contactsPhone = contactsPhone; + } + + public ParamsDao getParams() { + return params; + } + + public void setParams(ParamsDao params) { + this.params = params; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getEnterpriseName() { + return enterpriseName; + } + + public void setEnterpriseName(String enterpriseName) { + this.enterpriseName = enterpriseName; + } + + public String getPwd() { + return pwd; + } + + public void setPwd(String pwd) { + this.pwd = pwd; + } + + public String getNationalClassA() { + return nationalClassA; + } + + public void setNationalClassA(String nationalClassA) { + this.nationalClassA = nationalClassA; + } + + public String getBusinessType() { + return businessType; + } + + public void setBusinessType(String businessType) { + this.businessType = businessType; + } + + public String getAvatarUrl() { + return avatarUrl; + } + + public void setAvatarUrl(String avatarUrl) { + this.avatarUrl = avatarUrl; + } + + public String getPlaceOfRegistration() { + return placeOfRegistration; + } + + public void setPlaceOfRegistration(String placeOfRegistration) { + this.placeOfRegistration = placeOfRegistration; + } + + public String getCompanyAddress() { + return companyAddress; + } + + public void setCompanyAddress(String companyAddress) { + this.companyAddress = companyAddress; + } + + public String getPlantAddress() { + return plantAddress; + } + + public void setPlantAddress(String plantAddress) { + this.plantAddress = plantAddress; + } + + public static class ParamsDao implements Serializable{ + private String code; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + } +} diff --git a/app/src/main/java/com/dahe/examine/bean/ChangePwdBean.java b/app/src/main/java/com/dahe/examine/bean/ChangePwdBean.java new file mode 100644 index 0000000..b172f67 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/bean/ChangePwdBean.java @@ -0,0 +1,32 @@ +package com.dahe.examine.bean; + +import java.io.Serializable; + +/** + * @ClassName ChangePwdBean + * @Author 用户 + * @Date 2022/1/18 9:43 + * @Description TODO + */ +public class ChangePwdBean implements Serializable { + + + private String password; + private String userId; + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } +} diff --git a/app/src/main/java/com/dahe/examine/bean/CheckCodeBean.java b/app/src/main/java/com/dahe/examine/bean/CheckCodeBean.java new file mode 100644 index 0000000..511a7c3 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/bean/CheckCodeBean.java @@ -0,0 +1,34 @@ +package com.dahe.examine.bean; + +import java.io.Serializable; + +public class CheckCodeBean implements Serializable { + + private String img; + private String expireTime; + private String uuid; + + public String getImage() { + return img; + } + + public void setImage(String image) { + this.img = image; + } + + public String getExpireTime() { + return expireTime; + } + + public void setExpireTime(String expireTime) { + this.expireTime = expireTime; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } +} diff --git a/app/src/main/java/com/dahe/examine/bean/CompanyBean.java b/app/src/main/java/com/dahe/examine/bean/CompanyBean.java new file mode 100644 index 0000000..6bd3b8b --- /dev/null +++ b/app/src/main/java/com/dahe/examine/bean/CompanyBean.java @@ -0,0 +1,96 @@ +package com.dahe.examine.bean; + +import com.contrarywind.interfaces.IPickerViewData; + +import java.io.Serializable; + +/** + * @ClassName CompanyBean + * @Author 用户 + * @Date 2022/1/15 9:05 + * @Description TODO + */ +public class CompanyBean implements Serializable , IPickerViewData { + private String searchValue; + private String createTime; + private String deptName; + private String phone; + private String parentId; + private String deptId; + private String signName; + private String sign; + + + public String getSignName() { + return signName; + } + + public void setSignName(String signName) { + this.signName = signName; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + + public CompanyBean(String signName) { + this.signName = signName; + } + + public String getSearchValue() { + return searchValue; + } + + public void setSearchValue(String searchValue) { + this.searchValue = searchValue; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + @Override + public String getPickerViewText() { + return signName; + } +} diff --git a/app/src/main/java/com/dahe/examine/bean/CompanyTypeBean.java b/app/src/main/java/com/dahe/examine/bean/CompanyTypeBean.java new file mode 100644 index 0000000..328020a --- /dev/null +++ b/app/src/main/java/com/dahe/examine/bean/CompanyTypeBean.java @@ -0,0 +1,55 @@ +package com.dahe.examine.bean; + +import com.contrarywind.interfaces.IPickerViewData; + +import java.io.Serializable; + +/** + * @ClassName CompanyBean + * @Author 用户 + * @Date 2022/1/15 9:05 + * @Description TODO + */ +public class CompanyTypeBean implements Serializable , IPickerViewData { + private String enterpriseTypeValue; + private String sign; + private String typeId; + private String enterpriseTypeName; + + public String getEnterpriseTypeValue() { + return enterpriseTypeValue; + } + + public void setEnterpriseTypeValue(String enterpriseTypeValue) { + this.enterpriseTypeValue = enterpriseTypeValue; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + + public String getTypeId() { + return typeId; + } + + public void setTypeId(String typeId) { + this.typeId = typeId; + } + + public String getEnterpriseTypeName() { + return enterpriseTypeName; + } + + public void setEnterpriseTypeName(String enterpriseTypeName) { + this.enterpriseTypeName = enterpriseTypeName; + } + + @Override + public String getPickerViewText() { + return enterpriseTypeName; + } +} diff --git a/app/src/main/java/com/dahe/examine/bean/CountBean.java b/app/src/main/java/com/dahe/examine/bean/CountBean.java new file mode 100644 index 0000000..33cfd78 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/bean/CountBean.java @@ -0,0 +1,159 @@ +package com.dahe.examine.bean; + +import java.io.Serializable; + +/** + * @ClassName CountBean + * @Author 用户 + * @Date 2022/1/17 17:36 + * @Description TODO + */ +public class CountBean implements Serializable { + private String requiredNum; + private String passesNum; + private String notUsed; + private String notUsedNumber; + private String numberOfPasses; + private String passNoNumber; + + private String passNoNumberSF; + private String passNoNumberMF; + private String notUsedNumberMF; + private String notUsedNumberSF; + private String numberOfPassesMF; + private String numberOfPassesSF; + + + private String requiredNumMF; + private String requiredNumSF; + private String passesNumMF; + private String passesNumSF; + + public String getRequiredNumMF() { + return requiredNumMF; + } + + public void setRequiredNumMF(String requiredNumMF) { + this.requiredNumMF = requiredNumMF; + } + + public String getRequiredNumSF() { + return requiredNumSF; + } + + public void setRequiredNumSF(String requiredNumSF) { + this.requiredNumSF = requiredNumSF; + } + + public String getPassesNumMF() { + return passesNumMF; + } + + public void setPassesNumMF(String passesNumMF) { + this.passesNumMF = passesNumMF; + } + + public String getPassesNumSF() { + return passesNumSF; + } + + public void setPassesNumSF(String passesNumSF) { + this.passesNumSF = passesNumSF; + } + + public String getNotUsedNumber() { + return notUsedNumber; + } + + public void setNotUsedNumber(String notUsedNumber) { + this.notUsedNumber = notUsedNumber; + } + + public String getPassNoNumberSF() { + return passNoNumberSF; + } + + public void setPassNoNumberSF(String passNoNumberSF) { + this.passNoNumberSF = passNoNumberSF; + } + + public String getPassNoNumberMF() { + return passNoNumberMF; + } + + public void setPassNoNumberMF(String passNoNumberMF) { + this.passNoNumberMF = passNoNumberMF; + } + + public String getNotUsedNumberMF() { + return notUsedNumberMF; + } + + public void setNotUsedNumberMF(String notUsedNumberMF) { + this.notUsedNumberMF = notUsedNumberMF; + } + + public String getNotUsedNumberSF() { + return notUsedNumberSF; + } + + public void setNotUsedNumberSF(String notUsedNumberSF) { + this.notUsedNumberSF = notUsedNumberSF; + } + + public String getNumberOfPassesMF() { + return numberOfPassesMF; + } + + public void setNumberOfPassesMF(String numberOfPassesMF) { + this.numberOfPassesMF = numberOfPassesMF; + } + + public String getNumberOfPassesSF() { + return numberOfPassesSF; + } + + public void setNumberOfPassesSF(String numberOfPassesSF) { + this.numberOfPassesSF = numberOfPassesSF; + } + + public String getPassNoNumber() { + return passNoNumber; + } + + public void setPassNoNumber(String passNoNumber) { + this.passNoNumber = passNoNumber; + } + + public String getNumberOfPasses() { + return numberOfPasses; + } + + public void setNumberOfPasses(String numberOfPasses) { + this.numberOfPasses = numberOfPasses; + } + + public String getNotUsed() { + return notUsed; + } + + public void setNotUsed(String notUsed) { + this.notUsed = notUsed; + } + + public String getRequiredNum() { + return requiredNum; + } + + public void setRequiredNum(String requiredNum) { + this.requiredNum = requiredNum; + } + + public String getPassesNum() { + return passesNum; + } + + public void setPassesNum(String passesNum) { + this.passesNum = passesNum; + } +} diff --git a/app/src/main/java/com/dahe/examine/bean/JsonBean.java b/app/src/main/java/com/dahe/examine/bean/JsonBean.java new file mode 100644 index 0000000..b7645fe --- /dev/null +++ b/app/src/main/java/com/dahe/examine/bean/JsonBean.java @@ -0,0 +1,76 @@ +package com.dahe.examine.bean; + + +import com.contrarywind.interfaces.IPickerViewData; + +import java.util.List; + +/** + * TODO + * + * @author: 小嵩 + * @date: 2017/3/16 15:36 + */ + +public class JsonBean implements IPickerViewData { + + + /** + * name : 省份 + * city : [{"name":"北京市","area":["东城区","西城区","崇文区","宣武区","朝阳区"]}] + */ + + private String name; + private List city; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getCityList() { + return city; + } + + public void setCityList(List city) { + this.city = city; + } + + // 实现 IPickerViewData 接口, + // 这个用来显示在PickerView上面的字符串, + // PickerView会通过IPickerViewData获取getPickerViewText方法显示出来。 + @Override + public String getPickerViewText() { + return this.name; + } + + + public static class CityBean { + /** + * name : 城市 + * area : ["东城区","西城区","崇文区","昌平区"] + */ + + private String name; + private List area; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getArea() { + return area; + } + + public void setArea(List area) { + this.area = area; + } + } +} diff --git a/app/src/main/java/com/dahe/examine/bean/LogBean.kt b/app/src/main/java/com/dahe/examine/bean/LogBean.kt new file mode 100644 index 0000000..1ac0433 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/bean/LogBean.kt @@ -0,0 +1,14 @@ +package com.dahe.examine.bean + +/** + * @ClassName LogBean + * @Author 用户 + * @Date 2022/1/17 15:18 + * @Description TODO + */ +data class LogBean( + var username: String = "", + var password: String = "", + var code: String = "", + var uuid: String = "", +) diff --git a/app/src/main/java/com/dahe/examine/bean/PassBean.java b/app/src/main/java/com/dahe/examine/bean/PassBean.java new file mode 100644 index 0000000..c5678cd --- /dev/null +++ b/app/src/main/java/com/dahe/examine/bean/PassBean.java @@ -0,0 +1,175 @@ +package com.dahe.examine.bean; + +import java.io.Serializable; + +/** + * @ClassName PassBean + * @Author 用户 + * @Date 2022/1/15 10:01 + * @Description TODO + */ +public class PassBean implements Serializable { + private String useStartTime; + private String useEndTime; + private String passNo; + private String vehicle; + private String transportTonnage; + private String itemType; + private String itemTypeName; + private String driverName; + private String driverPhone; + private String startPoint; + private String endPoint; + private String createTime; + private String startTime; + private String endTime; + private String remarks; + private int passNoNumber; + private int numberOfPasses; + private int numberOfPassesRequired; + + + public int getNumberOfPasses() { + return numberOfPasses; + } + + public void setNumberOfPasses(int numberOfPasses) { + this.numberOfPasses = numberOfPasses; + } + + public int getNumberOfPassesRequired() { + return numberOfPassesRequired; + } + + public void setNumberOfPassesRequired(int numberOfPassesRequired) { + this.numberOfPassesRequired = numberOfPassesRequired; + } + + public String getStartTime() { + return startTime; + } + + public void setStartTime(String startTime) { + this.startTime = startTime; + } + + public String getEndTime() { + return endTime; + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public int getPassNoNumber() { + return passNoNumber; + } + + public void setPassNoNumber(int passNoNumber) { + this.passNoNumber = passNoNumber; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getUseStartTime() { + return useStartTime; + } + + public void setUseStartTime(String useStartTime) { + this.useStartTime = useStartTime; + } + + public String getUseEndTime() { + return useEndTime; + } + + public void setUseEndTime(String useEndTime) { + this.useEndTime = useEndTime; + } + + public String getPassNo() { + return passNo; + } + + public void setPassNo(String passNo) { + this.passNo = passNo; + } + + public String getVehicle() { + return vehicle; + } + + public void setVehicle(String vehicle) { + this.vehicle = vehicle; + } + + public String getTransportTonnage() { + return transportTonnage; + } + + public void setTransportTonnage(String transportTonnage) { + this.transportTonnage = transportTonnage; + } + + public String getItemType() { + return itemType; + } + + public void setItemType(String itemType) { + this.itemType = itemType; + } + + public String getItemTypeName() { + return itemTypeName; + } + + public void setItemTypeName(String itemTypeName) { + this.itemTypeName = itemTypeName; + } + + public String getDriverName() { + return driverName; + } + + public void setDriverName(String driverName) { + this.driverName = driverName; + } + + public String getDriverPhone() { + return driverPhone; + } + + public void setDriverPhone(String driverPhone) { + this.driverPhone = driverPhone; + } + + public String getStartPoint() { + return startPoint; + } + + public void setStartPoint(String startPoint) { + this.startPoint = startPoint; + } + + public String getEndPoint() { + return endPoint; + } + + public void setEndPoint(String endPoint) { + this.endPoint = endPoint; + } +} diff --git a/app/src/main/java/com/dahe/examine/bean/TabBean.java b/app/src/main/java/com/dahe/examine/bean/TabBean.java new file mode 100644 index 0000000..3f1f35e --- /dev/null +++ b/app/src/main/java/com/dahe/examine/bean/TabBean.java @@ -0,0 +1,30 @@ +package com.dahe.examine.bean; + +import com.flyco.tablayout.listener.CustomTabEntity; + +public class TabBean implements CustomTabEntity { + public String title; + public int selectedIcon; + public int unSelectedIcon; + + public TabBean(String title, int selectedIcon, int unSelectedIcon) { + this.title = title; + this.selectedIcon = selectedIcon; + this.unSelectedIcon = unSelectedIcon; + } + + @Override + public String getTabTitle() { + return title; + } + + @Override + public int getTabSelectedIcon() { + return selectedIcon; + } + + @Override + public int getTabUnselectedIcon() { + return unSelectedIcon; + } +} diff --git a/app/src/main/java/com/dahe/examine/bean/UserBean.java b/app/src/main/java/com/dahe/examine/bean/UserBean.java new file mode 100644 index 0000000..8c330d2 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/bean/UserBean.java @@ -0,0 +1,159 @@ +package com.dahe.examine.bean; + +import java.io.Serializable; + +public class UserBean implements Serializable { + + + /** + * userInfo : {"searchValue":null,"createBy":null,"createTime":"2021-03-23 08:49:38","updateBy":null,"updateTime":"2021-04-17 09:34:43","remark":null,"params":{},"driverId":4,"driverName":"高汉生","openid":"123","driverStatus":0,"driverPhone":"15544857669","linkCarNum":6,"cardPicture1":"http://tms.dahehuodongbao.com:8082/profile/upload/2021-04-14/2803ed65-9f33-40bd-b602-c806e968cd9c.jpg","nationality":null,"unionid":null,"cardPicture2":"http://tms.dahehuodongbao.com:8082/profile/upload/2021-04-14/252bf359-b700-4147-8d40-708f1cb7d3fe.jpg","nickName":null,"cardStartDate":null,"sex":null,"cardNo":"411322199004234211","avatarUrl":null,"cardEndDate":"2023-09-25","address":"河南省郑州市","birth":null,"emergencyContact":"李四","pwd":"","emergencyContactPhone":"15864564659","freighterId":9,"drivingLicence":"411322199004234211","driverPicture":"http://tms.dahehuodongbao.com:8082/profile/upload/2021-03-29/a00afac2-1db2-42ee-b8d5-2b67c4606249.jpg","roadNvqPicture":"http://tms.dahehuodongbao.com:8082/profile/upload/2021-03-29/6117fd64-9944-42be-991d-3156fff6db3f.jpg","roadNvqStartDate":null,"roadNvqEndDate":"2021-03-31","drivingStartDate":null,"drivingEndDate":"2030-11-21","liabilityPicture":"http://tms.dahehuodongbao.com:8082/profile/upload/2021-03-29/cc0a4859-c651-45e6-88b8-018edf59bcc8.jpg","roadNvqNo":"467496461646464","drivingLicenceType":"C1","provinceId":3,"provinceName":"安徽","cityId":37,"cityName":"蚌埠","licenceIssuingAuthority":"北京市公安局公安交通管理局","countyId":412,"countyName":"郊区","drivingLicencePicture1":"http://tms.dahehuodongbao.com:8082/profile/upload/2021-04-14/41efd845-ea98-4045-8cbe-fc4904b2480d.jpg","drivingLicencePicture2":"http://tms.dahehuodongbao.com:8082/profile/upload/2021-04-14/cf5f7933-7f85-4d90-9222-27c85d960fd6.jpg","roadLongTerm":1} + * token : eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJkcml2ZXJfNCIsImV4cCI6MTYxOTUwNjE0MX0.QSi8cXQiejbC3q0jPwj9ATO4S9qoRONjyMZaeIA9LhM + */ + + private UserInfoBean userInfo; + private String token; + + + public UserInfoBean getUserInfo() { + return userInfo; + } + + public void setUserInfo(UserInfoBean userInfo) { + this.userInfo = userInfo; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + public static class UserInfoBean { + /** + * searchValue : null + * createBy : null + * createTime : 2021-03-23 08:49:38 + * updateBy : null + * updateTime : 2021-04-17 09:34:43 + * remark : null + * params : {} + * driverId : 4 + * driverName : 高汉生 + * openid : 123 + * driverStatus : 0 + * driverPhone : 15544857669 + * linkCarNum : 6 + * cardPicture1 : http://tms.dahehuodongbao.com:8082/profile/upload/2021-04-14/2803ed65-9f33-40bd-b602-c806e968cd9c.jpg + * nationality : null + * unionid : null + * cardPicture2 : http://tms.dahehuodongbao.com:8082/profile/upload/2021-04-14/252bf359-b700-4147-8d40-708f1cb7d3fe.jpg + * nickName : null + * cardStartDate : null + * sex : null + * cardNo : 411322199004234211 + * avatarUrl : null + * cardEndDate : 2023-09-25 + * address : 河南省郑州市 + * birth : null + * emergencyContact : 李四 + * pwd : + * emergencyContactPhone : 15864564659 + * freighterId : 9 + * drivingLicence : 411322199004234211 + * driverPicture : http://tms.dahehuodongbao.com:8082/profile/upload/2021-03-29/a00afac2-1db2-42ee-b8d5-2b67c4606249.jpg + * roadNvqPicture : http://tms.dahehuodongbao.com:8082/profile/upload/2021-03-29/6117fd64-9944-42be-991d-3156fff6db3f.jpg + * roadNvqStartDate : null + * roadNvqEndDate : 2021-03-31 + * drivingStartDate : null + * drivingEndDate : 2030-11-21 + * liabilityPicture : http://tms.dahehuodongbao.com:8082/profile/upload/2021-03-29/cc0a4859-c651-45e6-88b8-018edf59bcc8.jpg + * roadNvqNo : 467496461646464 + * drivingLicenceType : C1 + * provinceId : 3 + * provinceName : 安徽 + * cityId : 37 + * cityName : 蚌埠 + * licenceIssuingAuthority : 北京市公安局公安交通管理局 + * countyId : 412 + * countyName : 郊区 + * drivingLicencePicture1 : http://tms.dahehuodongbao.com:8082/profile/upload/2021-04-14/41efd845-ea98-4045-8cbe-fc4904b2480d.jpg + * drivingLicencePicture2 : http://tms.dahehuodongbao.com:8082/profile/upload/2021-04-14/cf5f7933-7f85-4d90-9222-27c85d960fd6.jpg + * roadLongTerm : 1 + */ + + private String enterpriseName; + private String name; + private String userId; + private String phone; + private String signName; + private String phonenumber; + private String userName; + private String sign; + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getSignName() { + return signName; + } + + public void setSignName(String signName) { + this.signName = signName; + } + + public String getPhonenumber() { + return phonenumber; + } + + public void setPhonenumber(String phonenumber) { + this.phonenumber = phonenumber; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + + public String getEnterpriseName() { + return enterpriseName; + } + + public void setEnterpriseName(String enterpriseName) { + this.enterpriseName = enterpriseName; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + } +} diff --git a/app/src/main/java/com/dahe/examine/bean/UserBean2.java b/app/src/main/java/com/dahe/examine/bean/UserBean2.java new file mode 100644 index 0000000..778b9b6 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/bean/UserBean2.java @@ -0,0 +1,42 @@ +package com.dahe.examine.bean; + +import java.io.Serializable; +import java.util.List; + +/** + * @ClassName UserBean2 + * @Author 用户 + * @Date 2022/1/18 10:37 + * @Description TODO + */ +public class UserBean2 implements Serializable { + + private List permissions; + private List roles; + private UserBean.UserInfoBean user; + + public List getPermissions() { + return permissions; + } + + public void setPermissions(List permissions) { + this.permissions = permissions; + } + + public List getRoles() { + return roles; + } + + public void setRoles(List roles) { + this.roles = roles; + } + + public UserBean.UserInfoBean getUser() { + return user; + } + + public void setUser(UserBean.UserInfoBean user) { + this.user = user; + } + +} diff --git a/app/src/main/java/com/dahe/examine/cuspop/SelectTimePopup.kt b/app/src/main/java/com/dahe/examine/cuspop/SelectTimePopup.kt new file mode 100644 index 0000000..556f8e0 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/cuspop/SelectTimePopup.kt @@ -0,0 +1,109 @@ +package com.dahe.dispatch.cuspop + +import android.content.Context +import android.graphics.Color +import android.text.TextUtils +import android.util.Log +import android.widget.TextView +import com.bigkoo.pickerview.builder.TimePickerBuilder +import com.dahe.mylibrary.utils.TimeUtil +import com.dahe.examine.R +import com.lxj.xpopup.core.BottomPopupView +import com.lxj.xpopup.util.XPopupUtils +import kotlinx.android.synthetic.main.pop_sel_time.view.* +import java.text.SimpleDateFormat +import java.util.* + +/** + * Description: 仿知乎底部评论弹窗 + * Create by dance, at 2018/12/25 + */ +class SelectTimePopup( + context: Context, +) : BottomPopupView(context) { + override fun getImplLayoutId() = R.layout.pop_sel_time + + override fun onCreate() { + super.onCreate() + + tvOk.setOnClickListener { + if (listener != null) { + val startTime = tvStartTime.text.toString() + val endTime = tvEndTime.text.toString() + listener!!.onItemClick(startTime, endTime) + + dismiss() + } + } + + tvStartTime.setOnClickListener { setBir(0, tvStartTime) } + tvEndTime.setOnClickListener { setBir(1, tvEndTime) } + tvCancel.setOnClickListener { dismiss() } + } + + //完全可见执行 + override fun onShow() { + super.onShow() + Log.e("tag", "知乎评论 onShow") + } + + //完全消失执行 + override fun onDismiss() { + Log.e("tag", "知乎评论 onDismiss") + } + + override fun getMaxHeight(): Int { + return (XPopupUtils.getScreenHeight(context) * .6f).toInt() + } + + private var listener: OnMyItemClickListener? = null + fun setOnMyItemClickListener(listener: OnMyItemClickListener?): SelectTimePopup { + this.listener = listener + return this + } + + interface OnMyItemClickListener { + fun onItemClick(startTime: String, endTime: String) + } + + + fun setBir(type: Int, view: TextView) { + val startDate = Calendar.getInstance() + val endtDate = Calendar.getInstance() + val currDate = Calendar.getInstance() + startDate[1990, 0] = 1 + endtDate[2100, 0] = 1 + + + if (!TextUtils.isEmpty(view.getText())) { + val date = TimeUtil.string2Date(view.getText().toString(), + SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())) + if (date != null) currDate.time = date + } + + + val pvTime = TimePickerBuilder( + context + ) { date, v -> //选中事件回调 +// TimeUtil.date2String(date,SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())) + val data = + TimeUtil.date2String(date, SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())) + view.text = data + }.setSubmitColor(Color.parseColor("#F1474B")) //确定按钮文字颜色 + .setCancelColor(Color.parseColor("#F1474B")) //取消按钮文字颜色 + .setTitleBgColor(Color.parseColor("#FFFFFF")) + .setType(booleanArrayOf(true, true, true, false, false, false)) + .setTitleText(if (0 == type) { + "开始时间" + } else { + "结束时间" + }) + .setDate(currDate) + .setRangDate(startDate, endtDate) + .isDialog(true) + .setBgColor(Color.parseColor("#F5F5F5")) + .build() + // pvTime.setDate(Calendar.getInstance());//注:根据需求来决定是否使用该方法(一般是精确到秒的情况),此项可以在弹出选择器的时候重新设置当前时间,避免在初始化之后由于时间已经设定,导致选中时间与当前时间不匹配的问题。 + pvTime.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/net/Api.java b/app/src/main/java/com/dahe/examine/net/Api.java new file mode 100644 index 0000000..e408519 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/net/Api.java @@ -0,0 +1,150 @@ +package com.dahe.examine.net; + + +import com.dahe.examine.bean.AddresBean; +import com.dahe.examine.bean.ChangePwdBean; +import com.dahe.examine.bean.CheckCodeBean; +import com.dahe.examine.bean.CountBean; +import com.dahe.examine.bean.LogBean; +import com.dahe.examine.bean.UserBean2; +import com.dahe.mylibrary.net.CommonResponseBean; +import com.dahe.mylibrary.net.PagerBean; +import com.dahe.examine.BuildConfig; +import com.dahe.examine.bean.ApplyBean; +import com.dahe.examine.bean.ApplySendBean; +import com.dahe.examine.bean.BusInfoBean; +import com.dahe.examine.bean.CompanyBean; +import com.dahe.examine.bean.CompanyTypeBean; +import com.dahe.examine.bean.PassBean; +import com.dahe.examine.bean.UserBean; + +import java.util.List; + +import io.reactivex.rxjava3.core.Observable; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.POST; +import retrofit2.http.PUT; +import retrofit2.http.Query; + + +/** + * Created by Administrator on 2018/8/8 0008. + */ + +public interface Api { + + // String BASE_URL = "https://tmstest.dahehuoyun.com/"; + String BASE_URL = BuildConfig.BASE_URL; + + + //获取版本 + String VERSION = BASE_URL + "app/version"; + + + + @POST(BASE_URL+"user/login") + Observable> log(@Query("phone") String phone,@Query("pwd") String pwd); + + @GET(BASE_URL+"app/captchaImage") + Observable> captchaImage(); + + + @POST(BASE_URL+"app/login") + Observable> log2(@Body LogBean logBean); + + @GET(BASE_URL+"app/getInfo") + Observable> getInfo(); + + + + @GET(BASE_URL+"app/apple/list") + Observable>> appleList(@Query("status") String status); + + + + @GET(BASE_URL+"app/apple/count") + Observable> count(); + + @GET(BASE_URL+"app/apple/history/count") + Observable> historyCount(); + + @GET(BASE_URL+"app/apple/history/list") + Observable>> historyList(); + + @POST(BASE_URL+"app/apple/edit") + Observable appleEdit(@Body ApplyBean bean); + + @GET(BASE_URL+"app/user") + Observable> appUser(@Query("userId") String userId); + + + + + + @GET(BASE_URL+"app/pass/use/list") + Observable>> useList(@Query("useDate") String useDate); + + @GET(BASE_URL+"app/pass/use/detail/list") + Observable>> detailList(@Query("userId") String userId,@Query("chargeType") String chargeType,@Query("useDate") String useDate); + + + + @GET(BASE_URL+"app/pass/use/count") + Observable> useCount(@Query("userId") String userId,@Query("useDate") String useDate); + + @GET(BASE_URL+"app/pass/use/not/list") + Observable>> notList(); + + + @PUT(BASE_URL+"app/resetPwd") + Observable changePwd(@Body ChangePwdBean bean); + + + + + + + + @POST(BASE_URL+"user/getSmsCode") + Observable getSmsCode(@Query("phone") String phone); + + @POST(BASE_URL+"user/register") + Observable register(@Body BusInfoBean bean); + + @POST(BASE_URL+"apply/list") + Observable>> applyList(@Query("updateStartTime") String updateStartTime, @Query("updateEndTime") String updateEndTime); + + + @POST(BASE_URL+"apply/approval/company/list") + Observable>> companyLst(); + + @POST(BASE_URL+"apply/enterprise/type/list") + Observable>> typeLst(@Query("sign") String sign); + + @POST(BASE_URL+"use/of/pass/add") + Observable addPass(@Body PassBean passBean); + + + @POST(BASE_URL+"use/of/pass/list") + Observable>> passList(); + + + @POST(BASE_URL+"use/of/pass/count") + Observable> passCount(); + + @POST(BASE_URL+"apply/count") + Observable> applyCount(); + + @POST(BASE_URL+"user/phone/edit") + Observable phoneEdit(@Query("phone") String phone,@Query("code") String code); + + @POST(BASE_URL+"user/resetPwd") + Observable resetPwd(@Query("phone") String phone,@Query("pwd") String pwd,@Query("code") String code); + + + @POST(BASE_URL+"apply/send") + Observable applySend(@Body ApplySendBean passBean); + +} + diff --git a/app/src/main/java/com/dahe/examine/net/BaseObserver.java b/app/src/main/java/com/dahe/examine/net/BaseObserver.java new file mode 100644 index 0000000..a0abab7 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/net/BaseObserver.java @@ -0,0 +1,60 @@ +package com.dahe.examine.net; + +import android.content.Context; + +import com.dahe.mylibrary.net.CommonResponseBean; + +import io.reactivex.rxjava3.annotations.NonNull; +import io.reactivex.rxjava3.core.Observer; +import io.reactivex.rxjava3.disposables.Disposable; + + +/** + * 自定义观察者 + */ + +public class BaseObserver implements Observer> { + private Context mContext; + private RxHttpCallBack mRxHttpCallBack; + private Disposable disposable; + + public BaseObserver(Context mContext, RxHttpCallBack mRxHttpCallBack) { + this.mContext = mContext; + this.mRxHttpCallBack = mRxHttpCallBack; + } + + /** + * 订阅成功 + * + * @param d + */ + @Override + public void onSubscribe(@NonNull Disposable d) { + this.disposable = d; + mRxHttpCallBack.onStart(); + } + + + @Override + public void onNext(CommonResponseBean tCommonResponseBean) { + if (200==tCommonResponseBean.getCode()) { + mRxHttpCallBack.onSuccess(tCommonResponseBean); + } else { + mRxHttpCallBack.onCodeError(mContext, tCommonResponseBean); + } + } + + @Override + public void onError(Throwable e) { + mRxHttpCallBack.onFailure(mContext, e); + if (disposable!=null&&disposable.isDisposed()){ + disposable.dispose(); + } + } + + @Override + public void onComplete() { + + } + +} diff --git a/app/src/main/java/com/dahe/examine/net/CreateJsonUtils.java b/app/src/main/java/com/dahe/examine/net/CreateJsonUtils.java new file mode 100644 index 0000000..c0c9351 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/net/CreateJsonUtils.java @@ -0,0 +1,161 @@ +package com.dahe.examine.net; + +import android.util.Log; + +import com.dahe.mylibrary.net.JsonUtils; +import com.dahe.mylibrary.utils.MD5Utils; +import com.dahe.mylibrary.utils.StringUtils; +import com.dahe.mylibrary.utils.TimeUtil; +import com.google.gson.Gson; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import okhttp3.MediaType; +import okhttp3.RequestBody; + +/** + * Created by Administrator on 2017/4/15 0015. + */ + +public class CreateJsonUtils { + public static CreateJsonUtils utils = null; + private static final String TAG = "GetJsonUtils"; + + public static CreateJsonUtils getInstance() { + if (null == utils) { + synchronized (CreateJsonUtils.class) { + if (null == utils) { + utils = new CreateJsonUtils(); + } + } + } + return utils; + } + + /** + * 得到请求体的json数据 + * + * @param key jsonObject的key + * @param value jsonObject的value 如果要请求jsonObject里面嵌套jsonObject的value只需要传map 否就传简单的数据类型 + * @return + */ + public String getRequest(String[] key, Object[] value) { + Map map = new HashMap<>(); + for (int i = 0; i < key.length; i++) { + if (value[i] instanceof Map) { + Map sonMap = new HashMap<>(); + Map sonDateMap = (Map) value[i]; + List keyList = getMapKey(sonDateMap); + for (int j = 0; j < keyList.size(); j++) { + sonMap.put(keyList.get(j), sonDateMap.get(keyList.get(j))); + } + map.put(key[i], sonMap); + } else if (value[i] instanceof List) { + map.put(key[i], value[i]); + } else if (value[i] instanceof String) { + map.put(key[i], value[i].toString()); + } else { + map.put(key[i], value[i]); + } + } + map.put("api_key", "xccdb-power-bank"); + map.put("sign", MD5Utils.md5(JsonUtils.getInstance().getGson().toJson(map))); + map.put("time", TimeUtil.getNowMills()); + Log.i(TAG, new Gson().toJson(map)); + return new Gson().toJson(map); + } + + /** + * 获取map里面的所有值 + * + * @param hashmp + * @return + */ + public List getMapKey(Map hashmp) { + List list = new ArrayList<>(); + Set set = hashmp.keySet(); + Iterator iter = set.iterator(); + while (iter.hasNext()) { + String key = (String) iter.next(); + list.add(key); + } + return list; + } + + public Map getPagerMap(int page, int count) { + Map map = new HashMap<>(); + map.put("page", page); + map.put("count", count); + return map; + } + + /** + * 无参数的请求 + * + * @return + */ + public Map createRequestBody() { + return createRequestBody(new String[]{}, new String[]{}); + } + + /** + * 生成请求的body + * + * @param key + * @param value + * @return + */ + public Map createRequestBody(String[] key, Object[] value) { + Map requestBodyMap = new HashMap<>(); + Map requestDataMap = new HashMap<>(); + String signStr = ""; + for (int i = 0; i < key.length; i++) { + requestDataMap.put(key[i], value[i]); + } + try { + signStr = (sign1(requestDataMap) + "&api_key=xccdb-power-bank").replaceFirst("&", ""); + Log.i(TAG, "createRequestBody: " + sign1(requestDataMap)); + } catch (JSONException e) { + e.printStackTrace(); + } + Log.i(TAG, "createRequestBody: " + signStr); + for (String keySet : requestDataMap.keySet()) { + requestBodyMap.put(keySet, RequestBody.create(MediaType.parse("multipart/form-data"), requestDataMap.get(keySet) + "")); + } + Log.i(TAG, "createRequestBody: " + MD5Utils.md5((signStr))); + requestBodyMap.put("sign", RequestBody.create(MediaType.parse("multipart/form-data"), + MD5Utils.md5((signStr)))); + requestBodyMap.put("time", RequestBody.create(MediaType.parse("multipart/form-data"), TimeUtil.getNowMills() / 1000 + "")); + return requestBodyMap; + } + + public String sign1(Map params) throws JSONException { + JSONObject header = new JSONObject(JsonUtils.getInstance().getGson().toJson(params)); +//获取header元素集合 + Iterator headerIt = header.keys(); + List list = new ArrayList(); +//把header元素集合迭代 出 "param=value"形式字符串放入list集合中 + while (headerIt.hasNext()) { + String param = headerIt.next().toString(); + String value = StringUtils.encode(header.getString(param)); + list.add(param + "=" + value); + } + Collections.sort(list); + String paramStr = ""; +//迭代list拼装签名sign + for (int i = 0; i < list.size(); i++) { + paramStr += "&" + list.get(i); + } + String signStr = paramStr; + return signStr; + } +} diff --git a/app/src/main/java/com/dahe/examine/net/DataManager.java b/app/src/main/java/com/dahe/examine/net/DataManager.java new file mode 100644 index 0000000..a9b9590 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/net/DataManager.java @@ -0,0 +1,60 @@ +package com.dahe.examine.net; + + +import com.dahe.mylibrary.CommonBaseLibrary; +import com.dahe.mylibrary.net.JsonInterceptor; + +import java.util.concurrent.TimeUnit; + +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableSource; +import io.reactivex.rxjava3.core.ObservableTransformer; +import io.reactivex.rxjava3.schedulers.Schedulers; +import okhttp3.OkHttpClient; + +/** + * Created by Administrator on 2018/8/8 0008. + */ + +public class DataManager { + private volatile static DataManager mInstance; + + public DataManager() { + + } + + public static ObservableTransformer setThread() { + return new ObservableTransformer() { + @Override + public ObservableSource apply(Observable upstream) { + return upstream.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()); + } + }; + } + + public static Api getInstance() { + if (null == mInstance) { + synchronized (DataManager.class) { + if (null == mInstance) { + mInstance = new DataManager(); + } + } + } + return api(); + } + + public static Api api() { + return CommonBaseLibrary.getRetrofit().newBuilder() + .client(new OkHttpClient.Builder() + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .addInterceptor(new JsonInterceptor()) + .addInterceptor(new RequestHeadInterceptor()) + .build()) +// .addNetworkInterceptor(new TokenInterceptor()) + .build().create(Api.class); + } + +} diff --git a/app/src/main/java/com/dahe/examine/net/RequestHeadInterceptor.java b/app/src/main/java/com/dahe/examine/net/RequestHeadInterceptor.java new file mode 100644 index 0000000..2cd6a81 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/net/RequestHeadInterceptor.java @@ -0,0 +1,40 @@ +package com.dahe.examine.net; + +import android.text.TextUtils; +import android.util.Log; + +import com.dahe.mylibrary.utils.AppUtils; +import com.dahe.mylibrary.utils.BaseUtils; +import com.dahe.examine.base.App; +import com.dahe.examine.utils.SPUtils; + +import java.io.IOException; + +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; + +/** + * 头部Interceptor + */ + +public class RequestHeadInterceptor implements Interceptor { + private static final String TAG = "RequestHeadInterceptor"; + + @Override + public Response intercept(Chain chain) throws IOException { + Request.Builder builder = chain.request().newBuilder(); + if (SPUtils.hasUserInfo(App.getApp())&&!TextUtils.isEmpty(SPUtils.getUserInfo(App.getApp()).getToken())) { +// builder.addHeader("Authorization", SPUtils.getUserInfo(App.getApp()).getToken()); + builder.addHeader("Authorization", "Bearer "+SPUtils.getUserInfo(App.getApp()).getToken()); + } + Request request = builder + .addHeader("versionCode", AppUtils.getAppVersionCode() + "") + .addHeader("versionValue", AppUtils.getAppVersionName() + "") + .addHeader("deviceType", "ANDROID") + .addHeader("language", BaseUtils.getLanguage(App.getApp())+"") + .build(); + Log.i(TAG, "intercept: " + request.headers()); + return chain.proceed(request); + } +} diff --git a/app/src/main/java/com/dahe/examine/net/RxHttpCallBack.java b/app/src/main/java/com/dahe/examine/net/RxHttpCallBack.java new file mode 100644 index 0000000..f996714 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/net/RxHttpCallBack.java @@ -0,0 +1,133 @@ +package com.dahe.examine.net; + +import android.accounts.NetworkErrorException; +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.Window; + +import com.dahe.dispatch.utils.UserUtils; +import com.dahe.mylibrary.net.CommonResponseBean; +import com.dahe.mylibrary.net.ResultException; +import com.dahe.mylibrary.utils.ToastUtils; +import com.dahe.examine.ui.account.LoginActivity; + +import java.net.ConnectException; +import java.net.SocketTimeoutException; +import java.net.UnknownHostException; +import java.util.concurrent.TimeoutException; + +import javax.net.ssl.SSLException; + +/** + * 统一的网络回调 + */ + +public abstract class RxHttpCallBack { + private ProgressDialog dialog; + + private void initDialog(Activity activity, String dialogMessage) { + dialog = new ProgressDialog(activity); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setCanceledOnTouchOutside(false); + dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); + dialog.setMessage(dialogMessage); + } + + public RxHttpCallBack(Activity activity, String dialogMessage) { + initDialog(activity, TextUtils.isEmpty(dialogMessage) ? "网络请求中......" : dialogMessage); + } + + public RxHttpCallBack(Activity activity) { + initDialog(activity, "网络请求中......"); + } + + public RxHttpCallBack() { + } + + /** + * 订阅成功 + */ + public void onStart() { + if (dialog != null && !dialog.isShowing()) { + dialog.show(); + } + } + + public void onStop(){ + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + } + + /** + * 返回成功 + * + * @param t + * @throws Exception + */ + public void onSuccess(CommonResponseBean t) { + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + } + + /** + * 返回成功了,但是code错误 + * + * @param t + * @throws Exception + */ + public void onCodeError(Context mContext, CommonResponseBean t) { + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + + } + if (t.getCode() == 401) { + UserUtils.Companion.getInstance().loginOut(mContext); + Intent intent = new Intent(mContext, LoginActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.startActivity(intent); + ToastUtils.showToast(mContext,"您的账号再异地登录,请重新登录"); + }else{ + ToastUtils.showToast(mContext,t.getMsg()); + } + +// if (t.getMessage().getMsg_code() == 100 && SPUtils.hasUserInfo(mContext)) { +// SPUtils.remove(mContext, SPUtils.USER_INFO_KEY); +// } else { +// ToastUtils.showToast(mContext, t.getMessage().getMsg_desc()); +// } + } + + /** + * 返回失败 + * + * @param e + * @throws Exception + */ + public void onFailure(Context mContext, Throwable e) { + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + if (e instanceof ConnectException + || e instanceof TimeoutException + || e instanceof SocketTimeoutException + || e instanceof SSLException + || e instanceof NetworkErrorException + || e instanceof UnknownHostException) { + ToastUtils.showToast(mContext, "请检查您的网络~"); + } else if (e instanceof ResultException) { + e.printStackTrace(); + //自定义的ResultException + //由于返回200,300返回格式不统一的问题,自定义GsonResponseBodyConverter凡是300的直接抛异常 +// System.out.println("---------errorCode------->"+((ResultException) e).getErrCode()); + }else if (e instanceof SSLException){ + ToastUtils.showToast(mContext, "网络连接终端,请检查您的网络~"); + }else{ + ToastUtils.showToast(mContext, e.getMessage()); + } + } +} diff --git a/app/src/main/java/com/dahe/examine/net/TokenInterceptor.java b/app/src/main/java/com/dahe/examine/net/TokenInterceptor.java new file mode 100644 index 0000000..8c3e7ff --- /dev/null +++ b/app/src/main/java/com/dahe/examine/net/TokenInterceptor.java @@ -0,0 +1,48 @@ +package com.dahe.examine.net; + +import org.json.JSONObject; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; +import okio.Buffer; +import okio.BufferedSource; + +public class TokenInterceptor implements Interceptor { + @Override + public Response intercept(Chain chain) throws IOException { + Request request = chain.request(); + Response response = chain.proceed(request); + + ResponseBody responseBody = response.body(); + if (responseBody != null) { + BufferedSource source = responseBody.source(); + source.request(Long.MAX_VALUE); // Buffer the entire body. + Buffer buffer = source.buffer(); + try { + String result = buffer.clone().readString(StandardCharsets.UTF_8); + JSONObject jsonObject = new JSONObject(result); + int code = jsonObject.getInt("code"); + if (code == -1) {//判断返回code + +// SPUtils.cleanUserInfo(App.getApp()); +// Intent intent = new Intent(App.getApp(), LoginActivity.class); +// intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); +// App.getApp().startActivity(intent); +// ToastUtils.showToast(App.getApp(), "您的账号再异地登录,请重新登录"); +// ToastUtils.showShort("身份过期,请重新登录"); + //跳转方式 + //1.使用MyApplication添加跳转 + //2.使用路由跳转 + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return response; + } +} diff --git a/app/src/main/java/com/dahe/examine/oss/OssConfigBean.java b/app/src/main/java/com/dahe/examine/oss/OssConfigBean.java new file mode 100644 index 0000000..5fda8ff --- /dev/null +++ b/app/src/main/java/com/dahe/examine/oss/OssConfigBean.java @@ -0,0 +1,24 @@ +package com.dahe.examine.oss; + +/** + * @ClassName OssConfigBean + * @Author 用户 + * @Date 2021/9/30 9:11 + * @Description TODO + */ +public class OssConfigBean { + + public static final String endpoint = "oss-cn-beijing.aliyuncs.com"; + public static final String region = "oss-cn-beijing"; + public static final String accessKeyId = "LTAI4G9uk9zAjuc6GZMB34Tt"; + public static final String accessKeySecret = "f4MTMbxCKC8JbSdxMdL5dVRG7m8bZo"; + public static final String bucket = "dh-tms"; + public static final String BUCKET_OBJECT = "tms/user-cert/"; + public static final String BUCKET_OBJECT_TEXT = "tms/tms-test/user-cert/"; + public static final String BUCKET_BASE_URL = "https://dh-tms.oss-cn-beijing.aliyuncs.com/"; + public static final String BUCKET_BASE_URL_UP = "https://dahehuodongbao.com/"; + public static final String ARN = "acs:ram::1864711654174879:role/aliyunactiontraildefaultrole"; + //callback 测试地址 + public static final String OSS_CALLBACK_URL = "http://oss-demo.aliyuncs.com:23450"; +// public static final String OSS_CALLBACK_URL = "http://tms.api.test.dahehuodongbao.com:8081/sts/getsts"; +} diff --git a/app/src/main/java/com/dahe/examine/oss/OssServiceUtil.java b/app/src/main/java/com/dahe/examine/oss/OssServiceUtil.java new file mode 100644 index 0000000..4621578 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/oss/OssServiceUtil.java @@ -0,0 +1,342 @@ +package com.dahe.examine.oss; + +import android.app.Activity; +import android.app.ProgressDialog; +import android.graphics.Bitmap; +import android.util.Log; +import android.view.Window; +import android.widget.ImageView; +import android.widget.ProgressBar; + +import androidx.core.widget.ContentLoadingProgressBar; + +import com.alibaba.sdk.android.oss.ClientConfiguration; +import com.alibaba.sdk.android.oss.ClientException; +import com.alibaba.sdk.android.oss.OSS; +import com.alibaba.sdk.android.oss.OSSClient; +import com.alibaba.sdk.android.oss.ServiceException; +import com.alibaba.sdk.android.oss.callback.OSSCompletedCallback; +import com.alibaba.sdk.android.oss.callback.OSSProgressCallback; +import com.alibaba.sdk.android.oss.common.auth.OSSAuthCredentialsProvider; +import com.alibaba.sdk.android.oss.common.auth.OSSCredentialProvider; +import com.alibaba.sdk.android.oss.internal.OSSAsyncTask; +import com.alibaba.sdk.android.oss.model.OSSRequest; +import com.alibaba.sdk.android.oss.model.PutObjectRequest; +import com.alibaba.sdk.android.oss.model.PutObjectResult; +import com.dahe.examine.base.App; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.functions.Consumer; + +/** + * @ClassName OssServiceUtil + * @Author 用户 + * @Date 2021/9/29 17:53 + * @Description TODO + */ +public class OssServiceUtil { + + private static OSS oss; + private static OSSCredentialProvider credentialProvider; + private static ClientConfiguration conf; + private String bucket; + private picResultCallback callback;//回调接口 + private String path = "tms/user-cert/"; + private ProgressDialog dialog; + + private OssServiceUtil() { + } + + private static volatile OssServiceUtil ossUtils; + + public static OssServiceUtil getInstance() { + if (ossUtils == null) { + synchronized (OssServiceUtil.class) { + if (ossUtils == null) { + ossUtils = new OssServiceUtil(); + } + } + } + return ossUtils; + } + + + + private void initDialog(Activity activity) { + dialog = new ProgressDialog(activity); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setCanceledOnTouchOutside(false); + dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); + dialog.setMessage("网络请求中......"); + } + + //初始化使用参数 + public void init(){ + bucket = "dh-tms"; + + String stsServer = "http://tms.api.test.dahehuodongbao.com:8081/oss/getToken"; + + + credentialProvider = new OSSAuthCredentialsProvider(stsServer); + +// credentialProvider = new OSSPlainTextAKSKCredentialProvider(OssConfigBean.accessKeyId,OssConfigBean.accessKeySecret); +// credentialProvider = new OSSCustomSignerCredentialProvider() { +// @Override +// public String signContent(String content) { +// System.out.println(content); +// return content; +// } +// }; + conf = new ClientConfiguration(); + conf.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒 + conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒 + conf.setMaxConcurrentRequest(5); // 最大并发请求书,默认5个 + conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次 + + oss = new OSSClient(App.mApplication, "oss-cn-beijing.aliyuncs.com", credentialProvider, conf); +// initDialog(activity); + } + + public void setResultCallBack(picResultCallback callback) { + this.callback = callback; + } + + /** + * 图片以路径的方式上传 + *

+ * // * @param 图片的上传地址(更后台要) + * // * @param 图片本地地址 + * // * @param 进度条 + */ + public void asyncPutImage(final String localFile, final ContentLoadingProgressBar mProgress) { +// if (object.equals("")) { +// return; +// } + + File file = new File(localFile); + if (!file.exists()) { + return; + } + String name = file.getName(); + // 构造上传请求 + PutObjectRequest put = new PutObjectRequest(OssConfigBean.bucket, OssConfigBean.BUCKET_OBJECT+name, localFile); + + put.setCRC64(OSSRequest.CRC64Config.YES); + String mCallbackAddress = OssConfigBean.OSS_CALLBACK_URL; +// if (mCallbackAddress != null) { +// // 传入对应的上传回调参数,这里默认使用OSS提供的公共测试回调服务器地址 +// put.setCallbackParam(new HashMap() { +// { +// put("callbackUrl", mCallbackAddress); +// //callbackBody可以自定义传入的信息 +// put("callbackBody", "filename=${object}"); +// } +// }); +// } + + //上传后回调通知 + // 异步上传时可以设置进度回调 + put.setProgressCallback(new OSSProgressCallback() { + @Override + public void onProgress(PutObjectRequest request, long currentSize, long totalSize) { + int progress = (int) (100 * currentSize / totalSize); + if (mProgress != null) { + mProgress.setProgress(progress); + } + if (dialog!=null){ + dialog.show(); + } + } + }); + + OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback() { + @Override + public void onSuccess(PutObjectRequest request, final PutObjectResult result) { + if (dialog!=null){ + dialog.dismiss(); + } + String serverCallbackReturnBody = result.getServerCallbackReturnBody(); + callback.getPicData(result, OssConfigBean.BUCKET_BASE_URL+ OssConfigBean.BUCKET_OBJECT+name); + } + + @Override + public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) { + if (dialog!=null){ + dialog.dismiss(); + } + String info = ""; + // 请求异常 + if (clientExcepion != null) { + // 本地异常如网络异常等 + clientExcepion.printStackTrace(); + info = clientExcepion.toString(); + } + if (serviceException != null) { + // 服务异常 + Log.e("ErrorCode", serviceException.getErrorCode()); + Log.e("RequestId", serviceException.getRequestId()); + Log.e("HostId", serviceException.getHostId()); + Log.e("RawMessage", serviceException.getRawMessage()); + info = serviceException.toString(); + } +// task.cancel(); + } + }); + } + + + /** + * 上传次数 + */ + int number; + /** + * 成功上传(本地文件名作为key,阿里云地址为value) + */ + List success = new ArrayList<>(); + /** + * 失败上传(返回失败文件的本地地址) + */ + List failure = new ArrayList<>(); + + /** + * 批量上传图片 + * @param localFiles + */ + public void asyncPutImages(final List localFiles,PicsResultCallback callback){ + //初始化 + number = 1; + success.clear(); + for (int i = 0; i < localFiles.size(); i++) { + File file = new File(localFiles.get(i)); + if (!file.exists()) { + return; + } + String name = file.getName(); + // 构造上传请求 + PutObjectRequest put = new PutObjectRequest(OssConfigBean.bucket, OssConfigBean.BUCKET_OBJECT+name, localFiles.get(i)); + + put.setCRC64(OSSRequest.CRC64Config.YES); + + oss.asyncPutObject(put, new OSSCompletedCallback() { + @Override + public void onSuccess(PutObjectRequest request, final PutObjectResult result) { + + String aliPath = OssConfigBean.BUCKET_BASE_URL+ OssConfigBean.BUCKET_OBJECT+name; + success.add(aliPath); + if (number == localFiles.size()) { + //返回 上传路径,以及失败的路径 + callback.onOssSuccess(success, failure); + } + number++; + } + + @Override + public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) { + number++; + String aliPath = OssConfigBean.BUCKET_BASE_URL+ OssConfigBean.BUCKET_OBJECT+name; + failure.add(aliPath); + if (number == localFiles.size()) { + callback.onOssSuccess(success, failure); + } + } + }); + } + + } + + /** + * 图片以bitmap的形式上传 + * + * @param object + * @param localFile + * @param mProgress + * @param img + * @param type + */ + public void asyncPutImage(String object, final Bitmap localFile, final ProgressBar mProgress, final ImageView img, String type) { + if (object.equals("")) { + Log.w("AsyncPutImage", "ObjectNull"); + return; + } + if (localFile == null) { + Log.w("AsyncPutImage", "bitmapNull"); + return; + } + + // 构造上传请求 + PutObjectRequest put = new PutObjectRequest(bucket, object, getBitmapByte(localFile)); + //上传后回调通知 + // 客户端在上传Object时可以指定OSS服务端在处理完上传请求后,通知您的业务服务器,在该服务器确认接收了该回调后将回调的结果返回给客户端。 + put.setCallbackParam(new HashMap() { + { + put("callbackUrl", path); + put("callbackBody", +//参数跟后台商议 + "filename=${object}&size=${size}&action=${x:action}}"); + } + }); + HashMap hashMap = new HashMap<>(); + hashMap.put("x:action", type); + put.setCallbackVars(hashMap); + OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback() { + @Override + public void onSuccess(PutObjectRequest request, final PutObjectResult result) { + + Observable.just(result).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer() { + @Override + public void accept(PutObjectResult putObjectResult) throws Throwable { + callback.getPicData(result, ""); + } + }); +// Observable.just(result).observeOn(AndroidSchedulers.mainThread()).subscribe(putObjectResult -> callback.getPicData(result, "")); + } + + @Override + public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) { + String info = ""; + // 请求异常 + if (clientExcepion != null) { + // 本地异常如网络异常等 + clientExcepion.printStackTrace(); + info = clientExcepion.toString(); + } + if (serviceException != null) { + // 服务异常 + Log.e("ErrorCode", serviceException.getErrorCode()); + Log.e("RequestId", serviceException.getRequestId()); + Log.e("HostId", serviceException.getHostId()); + Log.e("RawMessage", serviceException.getRawMessage()); + info = serviceException.toString(); + } + } + }); + } + + public byte[] getBitmapByte(Bitmap bitmap) { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); + try { + out.flush(); + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return out.toByteArray(); + } + + public interface picResultCallback { + void getPicData(PutObjectResult data, String oldPath); + } + + public interface PicsResultCallback { + void onOssSuccess(List success, List failure); + } +} diff --git a/app/src/main/java/com/dahe/examine/ui/HomeActivity.kt b/app/src/main/java/com/dahe/examine/ui/HomeActivity.kt new file mode 100644 index 0000000..633ed43 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/ui/HomeActivity.kt @@ -0,0 +1,162 @@ +package com.dahe.examine.ui + +import android.os.Bundle +import androidx.fragment.app.Fragment +import androidx.viewpager.widget.ViewPager +import com.dahe.mylibrary.base.BaseActivity +import com.dahe.examine.R +import com.dahe.examine.adapter.MyHomePagerAdapter +import com.dahe.examine.bean.TabBean +import com.dahe.examine.net.Api +import com.dahe.examine.ui.gone.GoneFragment +import com.dahe.examine.ui.home.HomeFragment +import com.dahe.examine.ui.mine.MineFragment +import com.dahe.mylibrary.utils.VersionUtils +import com.flyco.tablayout.listener.CustomTabEntity +import com.flyco.tablayout.listener.OnTabSelectListener +import kotlinx.android.synthetic.main.activity_home.* + +import java.util.* + +class HomeActivity : BaseActivity(), ViewPager.OnPageChangeListener, OnTabSelectListener { + + val home: String = "待审核" + val waybill: String = "已使用" + val mine: String = "我的" + + private val mNormalRes = mutableListOf( + R.drawable.tab_home_normal, + R.drawable.tab_waybill_normal, + R.drawable.tab_mine_normal + ) + + + private val mSelectRes = mutableListOf( + R.drawable.tab_home_press, + R.drawable.tab_waybill_press, + R.drawable.tab_mine_press + ) + private lateinit var mTitles: Array + private var mTabEntities = ArrayList() + private var mFragments = ArrayList() + + + override fun getLayout() = R.layout.activity_home + + override fun initView(savedInstanceState: Bundle?) { + setStatusBarCancelLightColor() + mFragments.add(HomeFragment()) + mFragments.add(GoneFragment()) + mFragments.add(MineFragment()) + mTitles = arrayOf(home, waybill, mine) + + for (i in mTitles.indices) { + mTabEntities.add(TabBean(mTitles[i], mSelectRes[i], mNormalRes[i])) + } + + + + home_tabLayout.setTabData(mTabEntities) + val intent = intent +// var intExtra = 0 +// if (intent != null) { +// intExtra = intent.getIntExtra(AppConfig.CURR_PAGE, 0) +// } + + home_tabLayout.setOnTabSelectListener(this) + home_NoScrollViewPager.setAdapter(MyHomePagerAdapter(this.supportFragmentManager, + mTitles, + mFragments)) + home_NoScrollViewPager.addOnPageChangeListener(this) + home_NoScrollViewPager.setOffscreenPageLimit(3) + + home_NoScrollViewPager.setCurrentItem(0) + home_tabLayout.setCurrentTab(0) + + checkVersion() + } + + override fun initDate() { +// val extras = intent.extras +// if (extras?.getBoolean(AppConfig.IS_MESSAGE, false) == true) { +// val msgType = extras.getString(AppConfig.MESSAGE_TYPE) +// if ("0" != msgType){ +// ActivityUtils.startActivity(this, WarnDetailActivity::class.java, extras) +// }else{ +// ActivityUtils.startActivity(this, OrderDetailActivity::class.java, extras) +// } +// +// } + } + + override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { + } + + override fun onPageSelected(position: Int) { + home_tabLayout.setCurrentTab(position) + + } + + override fun onPageScrollStateChanged(state: Int) { + } + + override fun onTabSelect(position: Int) { + +// if (SPUtils.hasUserInfo(App.getApp())) { + home_NoScrollViewPager.setCurrentItem(position) + } + + override fun onTabReselect(position: Int) { + } + + /** + * 版本检查 + */ + private fun checkVersion() { + VersionUtils.getInstance().checkVersion(this, Api.VERSION, false) + } + + + private var mBackKeyPressed = false + var isCheckVer = false + + /** + * 第四种方法 + */ + override fun onBackPressed() { + if (!mBackKeyPressed) { + showToast("再按一次退出程序") + mBackKeyPressed = true + Timer().schedule(object : TimerTask() { + override fun run() { + mBackKeyPressed = false + } + }, 2000) + } else { + isCheckVer = true + canCelToast() + moveTaskToBack(true) +// finish() + } + } + + override fun onRestart() { + super.onRestart() + if (isCheckVer) { + checkVersion() + isCheckVer = false + } + } +// override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { +// super.onActivityResult(requestCode, resultCode, data) +// if (resultCode == RESULT_OK){ +// val stringExtra = data?.getStringExtra(AppConfig.BEANS) +// if (null!=stringExtra){ +// val fromJson = +// JsonUtils.getInstance().fromJson(stringExtra, WayBillSearchBean::class.java) +// } +// } +// } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/ui/LauncherActivity.kt b/app/src/main/java/com/dahe/examine/ui/LauncherActivity.kt new file mode 100644 index 0000000..5ebfaab --- /dev/null +++ b/app/src/main/java/com/dahe/examine/ui/LauncherActivity.kt @@ -0,0 +1,88 @@ +package com.dahe.examine.ui + +import android.os.Bundle +import android.text.TextUtils +import android.view.WindowManager +import com.dahe.mylibrary.base.BaseActivity +import com.dahe.mylibrary.utils.ActivityUtils +import com.dahe.mylibrary.utils.StringUtils +import com.dahe.examine.R +import com.dahe.examine.bean.UserBean +import com.dahe.examine.ui.account.LoginActivity +import com.dahe.examine.utils.SPUtils +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.disposables.Disposable +import io.reactivex.rxjava3.schedulers.Schedulers +import kotlinx.android.synthetic.main.activity_launcher.* +import java.util.concurrent.TimeUnit + +class LauncherActivity : BaseActivity() { + + + override fun getLayout(): Int { + return R.layout.activity_launcher + } + + + override fun initView(savedInstanceState: Bundle?) { + setStatusBarCancelLightColor() + val extras = intent.extras + llCount.setOnClickListener { + mDisposable?.dispose() + //已登录,直接跳转首页 + val userInfo = SPUtils.getUserInfo(mContext) + + if (userInfo != null && StringUtils.isNotEmpty(userInfo.token)) { + ActivityUtils.startActivity(mContext, HomeActivity::class.java,intent.extras) + } else { + ActivityUtils.startActivity(this@LauncherActivity, LoginActivity::class.java) + } + window.setFlags( + WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); + finish() + } + val count = 3 + mDisposable = Observable.interval(0, 1, TimeUnit.SECONDS) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { aLong: Long -> + + tv_count.setText((count - aLong).toString()) + if (count - aLong == 0L) { + mDisposable?.dispose() + //已登录,直接跳转首页 + //已登录,直接跳转首页 + val userInfo: UserBean? = SPUtils.getUserInfo(mContext) + + if (userInfo != null && !TextUtils.isEmpty(userInfo.getToken())) { + ActivityUtils.startActivity(mContext, HomeActivity::class.java,intent.extras) + } else { + ActivityUtils.startActivity( + this@LauncherActivity, + LoginActivity::class.java + ) + + } +// window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) + window.setFlags( + WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); + + finish() + } + + } + } + + private var mDisposable: Disposable? = null + + override fun initDate() { + } + + override fun onDestroy() { + super.onDestroy() + mDisposable?.dispose() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/ui/account/LoginActivity.kt b/app/src/main/java/com/dahe/examine/ui/account/LoginActivity.kt new file mode 100644 index 0000000..5d529e8 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/ui/account/LoginActivity.kt @@ -0,0 +1,236 @@ +package com.dahe.examine.ui.account + +import android.Manifest +import android.graphics.drawable.BitmapDrawable +import android.os.Bundle +import android.text.TextUtils +import android.text.method.HideReturnsTransformationMethod +import android.text.method.PasswordTransformationMethod +import android.view.View +import com.dahe.examine.R +import com.dahe.examine.bean.CheckCodeBean +import com.dahe.examine.bean.LogBean +import com.dahe.examine.bean.UserBean +import com.dahe.examine.bean.UserBean2 +import com.dahe.examine.net.BaseObserver +import com.dahe.examine.net.DataManager +import com.dahe.examine.net.RxHttpCallBack +import com.dahe.examine.ui.HomeActivity +import com.dahe.examine.utils.AppActivityUtils +import com.dahe.examine.utils.SPUtils +import com.dahe.mylibrary.base.BaseActivity +import com.dahe.mylibrary.net.CommonResponseBean +import com.dahe.mylibrary.net.JsonUtils +import com.dahe.mylibrary.utils.ActivityUtils +import com.dahe.mylibrary.utils.Base64Utils +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.schedulers.Schedulers +import kotlinx.android.synthetic.main.activity_login.* +import pub.devrel.easypermissions.AppSettingsDialog +import pub.devrel.easypermissions.EasyPermissions +import java.util.* + +class LoginActivity : BaseActivity(), EasyPermissions.PermissionCallbacks, View.OnClickListener { + + + lateinit var codeBean: CheckCodeBean + + var perms = arrayOf( + Manifest.permission.CAMERA, + Manifest.permission.CALL_PHONE, + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.WRITE_EXTERNAL_STORAGE + ) + + override fun getLayout(): Int = R.layout.activity_login + + override fun initView(savedInstanceState: Bundle?) { +// setStatusBarCancelLightColor() + setStatusBarColor(R.color.white) + if (!EasyPermissions.hasPermissions(this, *perms)) { + EasyPermissions.requestPermissions(this@LoginActivity, "您尚有权限未开放,是否获取权限", 2, *perms) + } + + + btn_log.setOnClickListener(this) + tvForget.setOnClickListener(this) + tv_yhxy.setOnClickListener(this) + tv_yszc.setOnClickListener(this) + imgCode.setOnClickListener(this) + cb.setOnCheckedChangeListener { buttonView, isChecked -> + if (isChecked) { + et_pass.setTransformationMethod(PasswordTransformationMethod.getInstance()) + } else { + et_pass.setTransformationMethod(HideReturnsTransformationMethod.getInstance()) + } + et_pass.setSelection(et_pass.getText().toString().length) + } + } + + override fun initDate() { + getCode() + } + + override fun onClick(view: View) { + when (view.id) { + R.id.btn_log -> { + if (!EasyPermissions.hasPermissions(this, *perms)) { + EasyPermissions.requestPermissions( + this@LoginActivity, + "您尚有权限未开放,是否获取权限", + 2, + *perms + ) + } else { + logByPass() + } + + } +// R.id.tv_forget -> ActivityUtils.startActivity(mContext, ForgetPwdActivity::class.java) + R.id.tv_yhxy -> AppActivityUtils.openWebViewActivity(this, + "用户服务协议", + "http://tms.down.user.test.dahehuodongbao.com/user-agreement.html"); + R.id.tv_yszc -> AppActivityUtils.openWebViewActivity(this, "隐私政策", + "http://tms.down.user.test.dahehuodongbao.com/user-privacy.html") + + R.id.imgCode -> getCode() + + + } + } + + override fun onRequestPermissionsResult( + requestCode: Int, + permissions: Array, + grantResults: IntArray, + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + + // EasyPermissions handles the request result. + EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) + } + + private fun getCode() { + DataManager.getInstance().captchaImage() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(BaseObserver(mContext, object : RxHttpCallBack() { + override fun onSuccess(t: CommonResponseBean) { + super.onSuccess(t) + codeBean = t.getData() + imgCode.setBackground(BitmapDrawable(Base64Utils.asdf(t.getData() + .getImage()))) + imgCode.setText("") + } + })) + } + + + /** + * 密码登录 + */ + private fun logByPass() { + val s: String = et_phone.getText().toString().trim() + val s1: String = et_pass.getText().toString().trim() + if (TextUtils.isEmpty(s) || TextUtils.isEmpty(s1)) { + showToast("请输入账号密码") + return + } +// if (!PatternUtils.isPassword(s1)){ +// showToast("密码格式错误") +// return +// } + if (etCode.text.toString().isEmpty()) { + showToast("请输入验证码") + return + } +// if (!cb_read.isChecked()) { +// showToast("请勾选用户协议") +// return +// } + + if (!::codeBean.isInitialized){ + showToast("请获取验证码") + return + } + + val logBean = LogBean() + logBean.username = et_phone.getText().toString().trim() + logBean.password = et_pass.getText().toString().trim() + logBean.code = etCode.getText().toString().trim() + logBean.uuid = codeBean.uuid + + DataManager.getInstance().log2(logBean) + .takeWhile { + if (200!=it.code){ + runOnUiThread { + showToast(it.msg) + } + false + }else{ + true + } + } + .flatMap { + SPUtils.setUserInfo( + this@LoginActivity, + JsonUtils.getInstance().getGson().toJson(it.getData()) + ) + DataManager.getInstance().info + }.compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext,object :RxHttpCallBack(){ + override fun onSuccess(t: CommonResponseBean?) { + super.onSuccess(t) + val data = t?.data + + val userInfo = SPUtils.getUserInfo(mContext) + userInfo.setUserInfo(data?.user) + + SPUtils.setUserInfo( + this@LoginActivity, + JsonUtils.getInstance().getGson().toJson(userInfo) + ) + ActivityUtils.startActivity(this@LoginActivity, + HomeActivity::class.java) + finish() + } + })) + + +// Observable.zip(DataManager.getInstance() +// .log2(logBean), DataManager.getInstance().info, { item1, item2 -> +// item2.data.token = item1.data.token +// item2 +// +// }) +// .compose(DataManager.setThread()) +// .subscribe(BaseObserver(mContext, object : RxHttpCallBack() { +// override fun onSuccess(t: CommonResponseBean) { +// super.onSuccess(t) +// SPUtils.setUserInfo( +// this@LoginActivity, +// JsonUtils.getInstance().getGson().toJson(t.getData()) +// ) +// +//// val freighter = SPUtils.getUserInfo(this@LoginActivity).freighter +// +// ActivityUtils.startActivity(this@LoginActivity, +// HomeActivity::class.java) +// finish() +// } +// })) + + } + + + override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { + } + + override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { + if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) { + AppSettingsDialog.Builder(this).setTitle("获取权限") + .setRationale("如果没有请求的权限,此应用可能无法正常工作。 打开应用程序设置屏幕以修改应用程序权限").build().show() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/ui/account/activity/BusinessInfoActivity.kt b/app/src/main/java/com/dahe/examine/ui/account/activity/BusinessInfoActivity.kt new file mode 100644 index 0000000..329b453 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/ui/account/activity/BusinessInfoActivity.kt @@ -0,0 +1,90 @@ +package com.dahe.examine.ui.account.activity + +import android.os.Bundle +import android.view.View +import com.dahe.mylibrary.base.BaseActivity +import com.dahe.mylibrary.net.CommonResponseBean +import com.dahe.mylibrary.utils.ActivityUtils +import com.dahe.examine.R +import com.dahe.examine.base.AppConfig +import com.dahe.examine.bean.BusInfoBean +import com.dahe.examine.net.BaseObserver +import com.dahe.examine.net.DataManager +import com.dahe.examine.net.RxHttpCallBack +import com.dahe.examine.ui.account.LoginActivity +import kotlinx.android.synthetic.main.activity_business_info.* + +/** + * @ClassName BusinessInfoActivity + * @Author 用户 + * @Date 2022/1/14 14:58 + * @Description TODO + */ +class BusinessInfoActivity : BaseActivity(), View.OnClickListener { + override fun getLayout() = R.layout.activity_business_info + + override fun initView(savedInstanceState: Bundle?) { + setStatusBarColor(R.color.white) + btnGo.setOnClickListener(this) + } + + override fun initDate() { + } + + override fun onClick(view: View) { + super.onClick(view) + when(view.id){ + R.id.btnGo->go() + } + } + + fun go(){ + val qymc = etQymc.text.toString() + val ywlx = etYwlx.text.toString() + val etDz = etDz.text.toString() + + if (qymc.isNullOrEmpty()){ + showToast("请输入企业名称") + return + } + + if (ywlx.isNullOrEmpty()){ + showToast("请输入业务类型") + return + } + + if (etDz.isNullOrEmpty()){ + showToast("请输入注册地址") + return + } + + val extras = intent.extras + val bean : BusInfoBean= extras?.getSerializable(AppConfig.BEAN) as BusInfoBean + + val busInfoBean = BusInfoBean() + val paramsDao = BusInfoBean.ParamsDao() + paramsDao.code = bean.params.code + busInfoBean.phone = bean.phone + busInfoBean.params = paramsDao + busInfoBean.pwd = bean.pwd + busInfoBean.enterpriseName = qymc + busInfoBean.nationalClassA = etDj.text.toString() + busInfoBean.businessType = ywlx + busInfoBean.placeOfRegistration = etDz + busInfoBean.companyAddress = etGsdz.text.toString() + busInfoBean.plantAddress = etCqdz.text.toString() + busInfoBean.contacts = etFzr.text.toString() + busInfoBean.contactsPhone = etFzrPhone.text.toString() + + + + DataManager.getInstance().register(busInfoBean) + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext,object : RxHttpCallBack(){ + override fun onSuccess(t: CommonResponseBean?) { + super.onSuccess(t) + ActivityUtils.finishOtherActivities(LoginActivity::class.java) + } + })) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/ui/account/activity/RegisterActivity.kt b/app/src/main/java/com/dahe/examine/ui/account/activity/RegisterActivity.kt new file mode 100644 index 0000000..397100d --- /dev/null +++ b/app/src/main/java/com/dahe/examine/ui/account/activity/RegisterActivity.kt @@ -0,0 +1,175 @@ +package com.dahe.examine.ui.account.activity + +import android.os.Bundle +import android.text.TextUtils +import android.text.method.HideReturnsTransformationMethod +import android.text.method.PasswordTransformationMethod +import android.view.View +import com.dahe.mylibrary.base.BaseActivity +import com.dahe.mylibrary.net.CommonResponseBean +import com.dahe.mylibrary.utils.ActivityUtils +import com.dahe.mylibrary.utils.CountDownTimerUtils +import com.dahe.mylibrary.utils.PhoneFormatCheckUtils +import com.dahe.examine.R +import com.dahe.examine.base.AppConfig +import com.dahe.examine.bean.BusInfoBean +import com.dahe.examine.net.BaseObserver +import com.dahe.examine.net.DataManager +import com.dahe.examine.net.RxHttpCallBack +import com.dahe.examine.ui.HomeActivity +import com.dahe.examine.utils.AppActivityUtils +import kotlinx.android.synthetic.main.activity_login.* +import kotlinx.android.synthetic.main.activity_register.* +import kotlinx.android.synthetic.main.activity_register.btn_log +import kotlinx.android.synthetic.main.activity_register.cb +import kotlinx.android.synthetic.main.activity_register.etCode +import kotlinx.android.synthetic.main.activity_register.tv_yhxy +import kotlinx.android.synthetic.main.activity_register.tv_yszc +import java.util.* + +class RegisterActivity : BaseActivity(), View.OnClickListener { + + + override fun getLayout(): Int = R.layout.activity_register + + override fun initView(savedInstanceState: Bundle?) { +// setStatusBarCancelLightColor() + setStatusBarColor(R.color.white) + + + btn_log.setOnClickListener(this) + tv_yhxy.setOnClickListener(this) + tv_yszc.setOnClickListener(this) + tvCode.setOnClickListener(this) + cb.setOnCheckedChangeListener { buttonView, isChecked -> + if (isChecked) { + et_pass.setTransformationMethod(PasswordTransformationMethod.getInstance()) + } else { + et_pass.setTransformationMethod(HideReturnsTransformationMethod.getInstance()) + } + et_pass.setSelection(et_pass.getText().toString().length) + } + } + + override fun initDate() { +// getCode() + } + + override fun onClick(view: View) { + when (view.id) { + R.id.btn_log -> next() +// R.id.tv_forget -> ActivityUtils.startActivity(mContext, ForgetPwdActivity::class.java) + R.id.tv_yhxy -> AppActivityUtils.openWebViewActivity(this, + "用户服务协议", + "https://tms.dahehuoyun.com/profile/upload/static/serviceAgreement.html"); + R.id.tv_yszc -> AppActivityUtils.openWebViewActivity(this, "隐私政策", + "https://tms.dahehuoyun.com/profile/upload/static/privacyPolicy.html") + + + R.id.tvCode -> getCode() + + } + } + + + /** + * 密码登录 + */ + private fun logByPass() { + val s: String = et_phone.getText().toString().trim() + val s1: String = et_pass.getText().toString().trim() + if (TextUtils.isEmpty(s) || TextUtils.isEmpty(s1)) { + showToast("请输入账号密码") + return + } +// if (!PatternUtils.isPassword(s1)){ +// showToast("密码格式错误") +// return +// } +// if (et_yzm.text.toString().isEmpty()) { +// showToast("请输入验证码") +// return +// } +// if (!cb_read.isChecked()) { +// showToast("请勾选用户协议") +// return +// } + + ActivityUtils.startActivity(this@RegisterActivity, + HomeActivity::class.java) + finish() + +// DataManager.getInstance().log(et_pass.getText().toString().trim(), et_phone.getText().toString().trim()) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe( +// BaseObserver(mContext, +// object : RxHttpCallBack(this@LoginActivity) { +// override fun onSuccess(t: CommonResponseBean) { +// super.onSuccess(t) +//// val toJson = JsonUtils.getInstance().getGson().toJson(t.getData()) +// SPUtils.setUserInfo( +// this@LoginActivity, +// JsonUtils.getInstance().getGson().toJson(t.getData()) +// ) +// +//// val freighter = SPUtils.getUserInfo(this@LoginActivity).freighter +// +// ActivityUtils.startActivity(this@LoginActivity, +// HomeActivity::class.java) +// finish() +// } +// +// override fun onCodeError(mContext: Context?, t: CommonResponseBean) { +// super.onCodeError(mContext, t) +//// if (t.getCode() != -1) { +//// getCode() +//// } +// } +// }) +// ) + } + + + fun getCode() { + + var phone = etPhone.text.toString() + if (PhoneFormatCheckUtils.isPhoneLegal(phone)) { + DataManager.getInstance().getSmsCode(phone) + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext, object : RxHttpCallBack() { + override fun onSuccess(t: CommonResponseBean?) { + super.onSuccess(t) + val countDownTimerUtils = CountDownTimerUtils(tvCode, 60000, 1000) + countDownTimerUtils.start() + } + })) + } else { + showToast("请输入正确手机号") + } + + } + + fun next() { + val phone = etPhone.text.toString() + val code = etCode.text.toString() + val pwd = etPass.text.toString() + + if (phone.isNullOrEmpty() || code.isNullOrEmpty() || pwd.isNullOrEmpty()) { + showToast("请完善信息") + return + } + val busInfoBean = BusInfoBean() + busInfoBean.phone = phone + + val paramsDao = BusInfoBean.ParamsDao() + paramsDao.code = code + busInfoBean.params = paramsDao + + busInfoBean.pwd = pwd + val bundle = Bundle() + bundle.putSerializable(AppConfig.BEAN, busInfoBean) + ActivityUtils.startActivity(mContext, BusinessInfoActivity::class.java, bundle) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/ui/gone/GoneFragment.kt b/app/src/main/java/com/dahe/examine/ui/gone/GoneFragment.kt new file mode 100644 index 0000000..0d9baf5 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/ui/gone/GoneFragment.kt @@ -0,0 +1,188 @@ +package com.dahe.examine.ui.gone + +import android.graphics.Color +import android.os.Bundle +import android.text.TextUtils +import android.view.View +import android.widget.TextView +import androidx.core.widget.addTextChangedListener +import androidx.recyclerview.widget.LinearLayoutManager +import com.bigkoo.pickerview.builder.TimePickerBuilder +import com.dahe.dispatch.cuspop.SelectTimePopup +import com.dahe.examine.R +import com.dahe.examine.adapter.GoneAdapter +import com.dahe.examine.base.AppConfig +import com.dahe.examine.bean.ApplyBean +import com.dahe.examine.bean.CountBean +import com.dahe.examine.net.BaseObserver +import com.dahe.examine.net.DataManager +import com.dahe.examine.net.RxHttpCallBack +import com.dahe.examine.ui.gone.activity.NotReportedActivity +import com.dahe.examine.ui.gone.activity.UserDetailActivity +import com.dahe.mylibrary.base.BaseFragment +import com.dahe.mylibrary.callback.RefreshCallBack +import com.dahe.mylibrary.net.CommonResponseBean +import com.dahe.mylibrary.net.PagerBean +import com.dahe.mylibrary.utils.ActivityUtils +import com.dahe.mylibrary.utils.TimeUtil +import com.lxj.xpopup.XPopup +import kotlinx.android.synthetic.main.fragment_gone.* +import kotlinx.android.synthetic.main.fragment_home.recyclerView +import java.text.SimpleDateFormat +import java.util.* + + +class GoneFragment : BaseFragment(), RefreshCallBack, View.OnClickListener { + + var date: String = TimeUtil.getNowString(SimpleDateFormat("yyyy-MM-dd", + Locale.getDefault())) + + lateinit var applyAdapter: GoneAdapter + + override fun getContentViewLayoutID() = R.layout.fragment_gone + + override fun onFragmentVisibleChange(isVisible: Boolean) { + if (isVisible) { + initData() + } else { + } + } + + + override fun onFragmentFirstVisible() { + setTitleBar("已使用", true,"未报") { + ActivityUtils.startActivityForResult(requireActivity(), + NotReportedActivity::class.java, + 1) + } + + initRec() + initData() + tvSearch.setOnClickListener(this) + llClear.setOnClickListener(this) + + tvSearch.addTextChangedListener { + if (it.toString().length > 0) { + llClear.visibility = View.VISIBLE + } else { + llClear.visibility = View.GONE + } + } + } + + override fun onClick(v: View) { + when (v.id) { + R.id.tvSearch -> setBir(tvSearch) + R.id.llClear -> { + tvSearch.text = "" + date = TimeUtil.getNowString(SimpleDateFormat("yyyy-MM-dd", + Locale.getDefault())) + initData() + } + } + } + + override fun getRefreshDate(stat: Int, page: Int, count: Int) { + } + + fun initData() { + DataManager.getInstance().useList(date) + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext, object : RxHttpCallBack>() { + override fun onSuccess(t: CommonResponseBean>) { + super.onSuccess(t) + + applyAdapter.setList(t.data.rows) + } + })) + + getCount() + } + + fun getCount() { + DataManager.getInstance().useCount("",date) + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext, object : RxHttpCallBack() { + override fun onSuccess(t: CommonResponseBean?) { + super.onSuccess(t) + tvYf.text = t?.data?.numberOfPasses + tvYsy.text = t?.data?.passNoNumber + tvYsp.text = t?.data?.notUsedNumber + + tvMf1.text = t?.data?.numberOfPassesMF + tvMf2.text = t?.data?.passNoNumberMF + tvMf3.text = t?.data?.notUsedNumberMF + tvSf1.text = t?.data?.numberOfPassesSF + tvSf2.text = t?.data?.passNoNumberSF + tvSf3.text = t?.data?.notUsedNumberSF + } + })) + } + + fun search() { + XPopup.Builder(mContext) + .enableDrag(true) + .hasShadowBg(true) + .isDestroyOnDismiss(true) //对于只使用一次的弹窗,推荐设置这个 + .asCustom(SelectTimePopup(mContext).setOnMyItemClickListener(object : + SelectTimePopup.OnMyItemClickListener { + override fun onItemClick(startTime: String, endTime: String) { + } + })) + .show() + } + + fun initRec() { + recyclerView.layoutManager = LinearLayoutManager(mContext, + LinearLayoutManager.VERTICAL, false) + recyclerView.setHasFixedSize(true) + applyAdapter = GoneAdapter(-1) + recyclerView.adapter = applyAdapter + + applyAdapter.setOnItemClickListener { adapter, view, position -> + val bundle = Bundle() + bundle.putSerializable(AppConfig.BEAN, applyAdapter.data[position]) + bundle.putString(AppConfig.TIME,date) + ActivityUtils.startActivity(mContext, UserDetailActivity::class.java, bundle) + } + } + + fun setBir(view: TextView) { + val startDate = Calendar.getInstance() + val endtDate = Calendar.getInstance() + val currDate = Calendar.getInstance() + startDate[1990, 0] = 1 + endtDate[2100, 0] = 1 + + + if (!TextUtils.isEmpty(view.getText())) { + val date = TimeUtil.string2Date(view.getText().toString(), + SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())) + if (date != null) currDate.time = date + } + + + val pvTime = TimePickerBuilder( + context + ) { date, v -> //选中事件回调 +// TimeUtil.date2String(date,SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())) + val data = + TimeUtil.date2String(date, SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())) + view.text = data + GoneFragment@ this.date = data + initData() + }.setSubmitColor(Color.parseColor("#F1474B")) //确定按钮文字颜色 + .setCancelColor(Color.parseColor("#F1474B")) //取消按钮文字颜色 + .setTitleBgColor(Color.parseColor("#FFFFFF")) + .setType(booleanArrayOf(true, true, true, false, false, false)) + .setTitleText("选择时间") + .setDate(currDate) + .setRangDate(startDate, endtDate) + .setBgColor(Color.parseColor("#F5F5F5")) + .build() + // pvTime.setDate(Calendar.getInstance());//注:根据需求来决定是否使用该方法(一般是精确到秒的情况),此项可以在弹出选择器的时候重新设置当前时间,避免在初始化之后由于时间已经设定,导致选中时间与当前时间不匹配的问题。 + pvTime.show() + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/ui/gone/activity/AddGoActivity.kt b/app/src/main/java/com/dahe/examine/ui/gone/activity/AddGoActivity.kt new file mode 100644 index 0000000..9379044 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/ui/gone/activity/AddGoActivity.kt @@ -0,0 +1,249 @@ +package com.dahe.examine.ui.gone.activity + +import android.annotation.SuppressLint +import android.graphics.Color +import android.os.Bundle +import android.os.Handler +import android.os.Message +import android.text.TextUtils +import android.view.View +import android.widget.TextView +import android.widget.Toast +import com.bigkoo.pickerview.builder.OptionsPickerBuilder +import com.bigkoo.pickerview.builder.TimePickerBuilder +import com.bigkoo.pickerview.view.OptionsPickerView +import com.dahe.mylibrary.base.BaseActivity +import com.dahe.mylibrary.net.CommonResponseBean +import com.dahe.mylibrary.utils.TimeUtil +import com.dahe.examine.R +import com.dahe.examine.bean.JsonBean +import com.dahe.examine.bean.PassBean +import com.dahe.examine.net.BaseObserver +import com.dahe.examine.net.DataManager +import com.dahe.examine.net.RxHttpCallBack +import com.dahe.examine.utils.GetJsonDataUtil +import com.google.gson.Gson +import kotlinx.android.synthetic.main.activity_add_go.* +import org.json.JSONArray +import java.text.SimpleDateFormat +import java.util.* + +/** + * @ClassName ApplyActivity + * @Author 用户 + * @Date 2022/1/13 15:42 + * @Description TODO + */ +class AddGoActivity : BaseActivity(), View.OnClickListener { + override fun getLayout() = R.layout.activity_add_go + + override fun initView(savedInstanceState: Bundle?) { + setStatusBarCancelLightColor() + setTitleBar("申请") { finish() } + tvSTime.setOnClickListener(this) + tvETime.setOnClickListener(this) + tvSub.setOnClickListener(this) + tvStartTime.setOnClickListener(this) + tvEndTime.setOnClickListener(this) + } + + override fun initDate() { + } + + override fun onClick(view: View) { + super.onClick(view) + when (view.id) { +// R.id.tvSpdw -> spdw() + R.id.tvSub -> sub() + R.id.tvSTime -> setBir(0,tvSTime) + R.id.tvETime -> setBir(1,tvETime) + R.id.tvStartTime -> setBir(2,tvStartTime) + R.id.tvEndTime -> setBir(3,tvEndTime) + + } + } + + fun sub(){ + val passBean = PassBean() + passBean.passNo = tvTxbh.text.toString() + passBean.vehicle = etCarNum.text.toString() + passBean.driverName = etName.text.toString() + passBean.driverPhone = etPhone.text.toString() + passBean.itemTypeName = etWpzl.text.toString() + passBean.transportTonnage = etDs.text.toString() + passBean.startPoint = etQd.text.toString() + passBean.endPoint = etZd.text.toString() + passBean.useStartTime = tvSTime.text.toString() + passBean.useEndTime = tvETime.text.toString() + passBean.startTime = tvStartTime.text.toString() + passBean.endTime = tvEndTime.text.toString() + passBean.remarks = tvBz.text.toString() + DataManager.getInstance().addPass(passBean) + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext,object : RxHttpCallBack(){ + override fun onSuccess(t: CommonResponseBean?) { + super.onSuccess(t) + finish() + } + })) + } + + + fun setBir(type: Int, view: TextView) { + val startDate = Calendar.getInstance() + val endtDate = Calendar.getInstance() + val currDate = Calendar.getInstance() + startDate[1990, 0] = 1 + endtDate[2100, 0] = 1 + + + if (!TextUtils.isEmpty(view.getText())) { + val date = TimeUtil.string2Date(view.getText().toString(), + SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())) + if (date != null) currDate.time = date + } + + + val pvTime = TimePickerBuilder( + mContext + ) { date, v -> //选中事件回调 +// TimeUtil.date2String(date,SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())) + val data = + TimeUtil.date2String(date, SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault())) + view.text = data + }.setSubmitColor(Color.parseColor("#F1474B")) //确定按钮文字颜色 + .setCancelColor(Color.parseColor("#F1474B")) //取消按钮文字颜色 + .setTitleBgColor(Color.parseColor("#FFFFFF")) + .setType(booleanArrayOf(true, true, true, true, true, false)) + .setTitleText("选择时间") + .setDate(currDate) + .setRangDate(startDate, endtDate) + .setBgColor(Color.parseColor("#F5F5F5")) + .build() + // pvTime.setDate(Calendar.getInstance());//注:根据需求来决定是否使用该方法(一般是精确到秒的情况),此项可以在弹出选择器的时候重新设置当前时间,避免在初始化之后由于时间已经设定,导致选中时间与当前时间不匹配的问题。 + pvTime.show() + } + + + private var options1Items = ArrayList() + private val options2Items = ArrayList>() + private val options3Items = ArrayList>>() + private val MSG_LOAD_DATA = 0x0001 + private val MSG_LOAD_SUCCESS = 0x0002 + private val MSG_LOAD_FAILED = 0x0003 + private var thread: Thread? = null + private var isLoaded = false + + + private fun setProText() { + val pvOptions: OptionsPickerView<*> = OptionsPickerBuilder(this@AddGoActivity + ) { options1, options2, options3, v -> + //返回的分别是三个级别的选中位置 + val opt1tx = + if (options1Items.size > 0) options1Items.get(options1).getPickerViewText() else "" + val opt2tx = if (options2Items.size > 0 + && options2Items.get(options1).size > 0 + ) options2Items.get(options1).get(options2) else "" + val opt3tx = + if (options2Items.size > 0 && options3Items.get(options1).size > 0 && options3Items.get( + options1).get(options2).size > 0 + ) options3Items.get(options1).get(options2).get(options3) else "" + val tx = "$opt1tx-$opt2tx-$opt3tx" +// tvDz.text = tx + } + .setSubmitColor(Color.parseColor("#F1474B")) //确定按钮文字颜色 + .setCancelColor(Color.parseColor("#F1474B")) //取消按钮文字颜色 + .setTitleBgColor(Color.parseColor("#FFFFFF")) + .setBgColor(Color.parseColor("#F5F5F5")) + .setContentTextSize(20) + .build() + pvOptions.setPicker(options1Items as List?, + options2Items as List?, options3Items as List?) //三级选择器 + pvOptions.show() + } + + private fun initJsonData() { //解析数据 + /** + * 注意:assets 目录下的Json文件仅供参考,实际使用可自行替换文件 + * 关键逻辑在于循环体 + * + */ + val JsonData: String = + GetJsonDataUtil().getJson(this, "province.json") //获取assets目录下的json文件数据 + // String JsonData1 = new GetJsonDataUtil().getJson(this, "city.json");//获取assets目录下的json文件数据 + val jsonBean: ArrayList = parseData(JsonData) //用Gson 转成实体 + // ArrayList data = getData(JsonData1); + /** + * 添加省份数据 + * + * 注意:如果是添加的JavaBean实体,则实体类需要实现 IPickerViewData 接口, + * PickerView会通过getPickerViewText方法获取字符串显示出来。 + */ + options1Items = jsonBean + for (i in jsonBean.indices) { //遍历省份 + val cityList = ArrayList() //该省的城市列表(第二级) + val province_AreaList = ArrayList>() //该省的所有地区列表(第三极) + for (c in 0 until jsonBean[i].cityList.size) { //遍历该省份的所有城市 + val cityName = jsonBean[i].cityList[c].name + cityList.add(cityName) //添加城市 + val city_AreaList = ArrayList() //该城市的所有地区列表 + + //如果无地区数据,建议添加空字符串,防止数据为null 导致三个选项长度不匹配造成崩溃 + /*if (jsonBean.get(i).getCityList().get(c).getArea() == null + || jsonBean.get(i).getCityList().get(c).getArea().size() == 0) { + city_AreaList.add(""); + } else { + city_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea()); + }*/city_AreaList.addAll(jsonBean[i].cityList[c].area) + province_AreaList.add(city_AreaList) //添加该省所有地区数据 + } + /** + * 添加城市数据 + */ + options2Items.add(cityList) + /** + * 添加地区数据 + */ + options3Items.add(province_AreaList) + } + mHandler.sendEmptyMessage(MSG_LOAD_SUCCESS) + } + + fun parseData(result: String): ArrayList { //Gson 解析 + val detail = ArrayList() + try { + val data = JSONArray(result) + val gson = Gson() + for (i in 0 until data.length()) { + val entity = gson.fromJson(data.optJSONObject(i).toString(), JsonBean::class.java) + detail.add(entity) + } + } catch (e: Exception) { + e.printStackTrace() + mHandler.sendEmptyMessage(MSG_LOAD_FAILED) + } + return detail + } + + @SuppressLint("HandlerLeak") + private val mHandler: Handler = object : Handler() { + override fun handleMessage(msg: Message) { + when (msg.what) { + MSG_LOAD_DATA -> if (thread == null) { //如果已创建就不再重新创建子线程了 + thread = Thread { // 子线程中解析省市区数据 + initJsonData() + } + thread?.start() + } + MSG_LOAD_SUCCESS -> { + // Toast.makeText(MyInfoActivity.this, "Parse Succeed", Toast.LENGTH_SHORT).show(); + setProText() + isLoaded = true + } + MSG_LOAD_FAILED -> Toast.makeText(this@AddGoActivity, + "地区解析失败", + Toast.LENGTH_SHORT).show() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/ui/gone/activity/NotReportedActivity.kt b/app/src/main/java/com/dahe/examine/ui/gone/activity/NotReportedActivity.kt new file mode 100644 index 0000000..3dabbd0 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/ui/gone/activity/NotReportedActivity.kt @@ -0,0 +1,58 @@ +package com.dahe.examine.ui.gone.activity + +import android.os.Bundle +import androidx.recyclerview.widget.LinearLayoutManager +import com.dahe.examine.R +import com.dahe.examine.adapter.GoneAdapter +import com.dahe.examine.adapter.NotReportAdapter +import com.dahe.examine.adapter.UserDetailAdapter +import com.dahe.examine.bean.ApplyBean +import com.dahe.examine.net.BaseObserver +import com.dahe.examine.net.DataManager +import com.dahe.examine.net.RxHttpCallBack +import com.dahe.mylibrary.base.BaseActivity +import com.dahe.mylibrary.net.CommonResponseBean +import com.dahe.mylibrary.net.PagerBean +import kotlinx.android.synthetic.main.activity_not_report.* +import kotlinx.android.synthetic.main.fragment_home.* +import kotlinx.android.synthetic.main.fragment_home.recyclerView + +/** + * @ClassName UserDetailActivity + * @Author 用户 + * @Date 2022/1/17 10:02 + * @Description TODO + */ +class NotReportedActivity : BaseActivity() { + lateinit var applyAdapter : NotReportAdapter + + override fun getLayout() = R.layout.activity_not_report + + override fun initView(savedInstanceState: Bundle?) { + setStatusBarCancelLightColor() + setTitleBar("未报") { finish() } + initRec() + } + + override fun initDate() { + DataManager.getInstance().notList() + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext,object : RxHttpCallBack>(){ + override fun onSuccess(t: CommonResponseBean>?) { + super.onSuccess(t) + tvYf.text = t?.data?.size.toString() + applyAdapter.setList(t?.data) + } + })) + } + + fun initRec() { + recyclerView.layoutManager = LinearLayoutManager(mContext, + LinearLayoutManager.VERTICAL, false) + recyclerView.setHasFixedSize(true) + applyAdapter = NotReportAdapter(-1) + recyclerView.adapter = applyAdapter + + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/ui/gone/activity/UserDetailActivity.kt b/app/src/main/java/com/dahe/examine/ui/gone/activity/UserDetailActivity.kt new file mode 100644 index 0000000..61118df --- /dev/null +++ b/app/src/main/java/com/dahe/examine/ui/gone/activity/UserDetailActivity.kt @@ -0,0 +1,96 @@ +package com.dahe.examine.ui.gone.activity + +import android.os.Bundle +import androidx.recyclerview.widget.LinearLayoutManager +import com.dahe.examine.R +import com.dahe.examine.adapter.UserDetailAdapter +import com.dahe.examine.base.AppConfig +import com.dahe.examine.bean.ApplyBean +import com.dahe.examine.bean.CountBean +import com.dahe.examine.net.BaseObserver +import com.dahe.examine.net.DataManager +import com.dahe.examine.net.RxHttpCallBack +import com.dahe.mylibrary.base.BaseActivity +import com.dahe.mylibrary.net.CommonResponseBean +import com.dahe.mylibrary.net.PagerBean +import kotlinx.android.synthetic.main.activity_user_detail.* +import kotlinx.android.synthetic.main.activity_user_detail.tvMf1 +import kotlinx.android.synthetic.main.activity_user_detail.tvMf2 +import kotlinx.android.synthetic.main.activity_user_detail.tvMf3 +import kotlinx.android.synthetic.main.activity_user_detail.tvSf1 +import kotlinx.android.synthetic.main.activity_user_detail.tvSf2 +import kotlinx.android.synthetic.main.activity_user_detail.tvSf3 +import kotlinx.android.synthetic.main.activity_user_detail.tvYf +import kotlinx.android.synthetic.main.activity_user_detail.tvYsp +import kotlinx.android.synthetic.main.activity_user_detail.tvYsy +import kotlinx.android.synthetic.main.fragment_gone.* +import kotlinx.android.synthetic.main.fragment_home.recyclerView +import retrofit2.http.Url +import java.net.URL +import java.net.URLEncoder + +/** + * @ClassName UserDetailActivity + * @Author 用户 + * @Date 2022/1/17 10:02 + * @Description TODO + */ +class UserDetailActivity : BaseActivity() { + lateinit var applyAdapter : UserDetailAdapter + + override fun getLayout() = R.layout.activity_user_detail + + override fun initView(savedInstanceState: Bundle?) { + setStatusBarCancelLightColor() + setTitleBar("已使用详情") { finish() } + initRec() + } + + override fun initDate() { + val string = intent.extras?.getString(AppConfig.TIME) + var bean = intent.extras?.getSerializable(AppConfig.BEAN) as ApplyBean + tvTitle.text = bean.enterpriseName + + + DataManager.getInstance().detailList(bean.userId,bean.chargeType,string) + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext, object : RxHttpCallBack>() { + override fun onSuccess(t: CommonResponseBean>) { + super.onSuccess(t) + t.data.rows + applyAdapter.setList(t.data.rows) + } + })) + getCount(bean.userId,string) + } + + fun getCount(userId: String, string: String?) { + DataManager.getInstance().useCount(userId,string) + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext,object : RxHttpCallBack(){ + override fun onSuccess(t: CommonResponseBean?) { + super.onSuccess(t) + tvYf.text = t?.data?.numberOfPasses + tvYsy.text = t?.data?.passNoNumber + tvYsp.text = t?.data?.notUsedNumber + + tvMf1.text = t?.data?.numberOfPassesMF + tvMf2.text = t?.data?.passNoNumberMF + tvMf3.text = t?.data?.notUsedNumberMF + tvSf1.text = t?.data?.numberOfPassesSF + tvSf2.text = t?.data?.passNoNumberSF + tvSf3.text = t?.data?.notUsedNumberSF + } + })) + } + + fun initRec() { + recyclerView.layoutManager = LinearLayoutManager(mContext, + LinearLayoutManager.VERTICAL, false) + recyclerView.setHasFixedSize(true) + applyAdapter = UserDetailAdapter(-1) + recyclerView.adapter = applyAdapter + + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/ui/home/HomeFragment.kt b/app/src/main/java/com/dahe/examine/ui/home/HomeFragment.kt new file mode 100644 index 0000000..a372c64 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/ui/home/HomeFragment.kt @@ -0,0 +1,132 @@ +package com.dahe.examine.ui.home + +import android.os.Bundle +import android.view.View +import androidx.recyclerview.widget.LinearLayoutManager +import com.dahe.dispatch.cuspop.SelectTimePopup +import com.dahe.mylibrary.base.BaseFragment +import com.dahe.mylibrary.net.CommonResponseBean +import com.dahe.mylibrary.net.PagerBean +import com.dahe.mylibrary.utils.ActivityUtils +import com.dahe.examine.R +import com.dahe.examine.adapter.ApplyAdapter +import com.dahe.examine.base.AppConfig +import com.dahe.examine.bean.ApplyBean +import com.dahe.examine.bean.CountBean +import com.dahe.examine.bean.PassBean +import com.dahe.examine.net.BaseObserver +import com.dahe.examine.net.DataManager +import com.dahe.examine.net.RxHttpCallBack +import com.dahe.examine.ui.home.activity.ApplyActivity +import com.dahe.examine.ui.home.activity.ExamineDetailActivity +import com.dahe.examine.ui.home.activity.RecordActivity +import com.lxj.xpopup.XPopup +import kotlinx.android.synthetic.main.fragment_home.* +import java.util.* + +class HomeFragment : BaseFragment(), View.OnClickListener { + lateinit var applyAdapter: ApplyAdapter + var startTime: String = "" + var endTime: String = "" + + + override fun getContentViewLayoutID() = R.layout.fragment_home + + override fun onFragmentVisibleChange(isVisible: Boolean) { + if (isVisible) { + initData() + } else { + } + } + + + override fun onFragmentFirstVisible() { + setTitleBar("待审核", true,"审核记录") { + ActivityUtils.startActivityForResult(requireActivity(), RecordActivity::class.java, 1) + } + + + initRec() + initData() + } + + fun initData() { + DataManager.getInstance().appleList("0") + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext, object : RxHttpCallBack>() { + override fun onSuccess(t: CommonResponseBean>) { + super.onSuccess(t) + + applyAdapter.setList(t.data.rows) + } + })) + + getCount() + } + + fun getCount(){ + DataManager.getInstance().count() + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext,object : RxHttpCallBack(){ + override fun onSuccess(t: CommonResponseBean?) { + super.onSuccess(t) + tvYsq.text = t?.data?.requiredNum + tvMf1.text = t?.data?.requiredNumMF + tvSf1.text = t?.data?.requiredNumSF + } + })) + } + + + override fun onClick(v: View) { + when (v.id) { +// R.id.tvSearch -> search() + } + } + + fun search() { + XPopup.Builder(mContext) + .enableDrag(true) + .hasShadowBg(true) + .isDestroyOnDismiss(true) //对于只使用一次的弹窗,推荐设置这个 + .asCustom(SelectTimePopup(mContext).setOnMyItemClickListener(object : + SelectTimePopup.OnMyItemClickListener { + override fun onItemClick(startTime: String, endTime: String) { + this@HomeFragment.startTime = startTime + this@HomeFragment.endTime = endTime + initData() + } + })) + .show() + } + + + fun initRec() { + recyclerView.layoutManager = + LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false) + recyclerView.setHasFixedSize(true) + applyAdapter = ApplyAdapter(-1) + recyclerView.adapter = applyAdapter + + applyAdapter.addChildClickViewIds(R.id.tvSh) + applyAdapter.setOnItemChildClickListener { adapter, view, position -> + val applyBean = applyAdapter.data[position] + val bundle = Bundle() + bundle.putSerializable(AppConfig.BEAN,applyBean) + ActivityUtils.startActivity(mContext, ExamineDetailActivity::class.java,bundle) + } + + +// val mutableListOf = mutableListOf() +// mutableListOf.add(ApplyBean()) +// mutableListOf.add(ApplyBean()) +// mutableListOf.add(ApplyBean()) +// applyAdapter.setList(mutableListOf) + +// applyAdapter.setOnItemClickListener { adapter, view, position -> +// ActivityUtils.startActivity(mContext, ApplyDetailActivity::class.java) +// } + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/ui/home/activity/ApplyActivity.kt b/app/src/main/java/com/dahe/examine/ui/home/activity/ApplyActivity.kt new file mode 100644 index 0000000..1be3a55 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/ui/home/activity/ApplyActivity.kt @@ -0,0 +1,399 @@ +package com.dahe.examine.ui.home.activity + +import android.annotation.SuppressLint +import android.graphics.Color +import android.os.Bundle +import android.os.Handler +import android.os.Message +import android.view.View +import android.widget.Toast +import com.bigkoo.pickerview.builder.OptionsPickerBuilder +import com.bigkoo.pickerview.view.OptionsPickerView +import com.dahe.mylibrary.base.BaseActivity +import com.dahe.mylibrary.net.CommonResponseBean +import com.dahe.examine.R +import com.dahe.examine.bean.* +import com.dahe.examine.net.BaseObserver +import com.dahe.examine.net.DataManager +import com.dahe.examine.net.RxHttpCallBack +import com.dahe.examine.utils.GetJsonDataUtil +import com.google.gson.Gson +import kotlinx.android.synthetic.main.activity_apply.* +import org.json.JSONArray +import java.util.ArrayList + +/** + * @ClassName ApplyActivity + * @Author 用户 + * @Date 2022/1/13 15:42 + * @Description TODO + */ +class ApplyActivity : BaseActivity(), View.OnClickListener { + + lateinit var curCompanyBean: CompanyBean + lateinit var curCompanyType: CompanyTypeBean + lateinit var jb: String + lateinit var sheng: String + lateinit var shi: String + lateinit var xian: String + + + override fun getLayout() = R.layout.activity_apply + + override fun initView(savedInstanceState: Bundle?) { + setStatusBarCancelLightColor() + setTitleBar("申请") { finish() } + tvSpdw.setOnClickListener(this) + tvDz.setOnClickListener(this) + tvSub.setOnClickListener(this) + llQylx.setOnClickListener(this) + tvJb.setOnClickListener(this) + } + + override fun initDate() { + } + + override fun onClick(view: View) { + super.onClick(view) + when (view.id) { + R.id.tvSpdw -> spdw() + R.id.tvSub -> sub() + R.id.tvDz -> { + if (isLoaded) { + setProText() + } else { + mHandler.sendEmptyMessage(MSG_LOAD_DATA) + } + } + + R.id.llQylx -> qymc() + R.id.tvJb -> gjjb() + } + } + + + fun gjjb() { + val mutableListOf = mutableListOf() + val build = OptionsPickerBuilder(mContext + ) { options1, options2, options3, v -> //返回的分别是三个级别的选中位置 + jb = mutableListOf.get(options1).signName + tvJb.text = mutableListOf.get(options1).signName + } + .setTitleText("国家级别") + .setContentTextSize(20) //设置滚轮文字大小 + .setDividerColor(Color.LTGRAY) //设置分割线的颜色 + .setSelectOptions(0, 1) //默认选中项 + .setTitleColor(Color.BLACK) + .setSubmitColor(Color.parseColor("#F1474B")) //确定按钮文字颜色 + .setCancelColor(Color.parseColor("#F1474B")) //取消按钮文字颜色 + .setTitleBgColor(Color.parseColor("#FFFFFF")) + .setBgColor(Color.parseColor("#F5F5F5")) + .setTextColorCenter(Color.LTGRAY) + .isRestoreItem(true) //切换时是否还原,设置默认选中第一项。 + .isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。 + .setLabels("", "", "") +// .setOutSideColor(0x00000000) //设置外部遮罩颜色 + .setOptionsSelectChangeListener { options1, options2, options3 -> + val str = + "options1: $options1\noptions2: $options2\noptions3: $options3" +// Toast.makeText(this@MainActivity, str, Toast.LENGTH_SHORT).show() + } + .build() + mutableListOf.add(CompanyBean("否")) + mutableListOf.add(CompanyBean("A")) + mutableListOf.add(CompanyBean("AA")) + mutableListOf.add(CompanyBean("AAA")) + mutableListOf.add(CompanyBean("AAAA")) + + + + build.setPicker(mutableListOf) + + build.show() + } + + + fun spdw() { + + DataManager.getInstance().companyLst() + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext, object : RxHttpCallBack>(this) { + override fun onSuccess(t: CommonResponseBean>) { + super.onSuccess(t) + val data = t.data + + + val mutableListOf = mutableListOf() + val build = OptionsPickerBuilder(mContext + ) { options1, options2, options3, v -> //返回的分别是三个级别的选中位置 + curCompanyBean = mutableListOf.get(options1) + tvSpdw.text = mutableListOf.get(options1).signName + } + .setTitleText("审批单位") + .setContentTextSize(20) //设置滚轮文字大小 + .setDividerColor(Color.LTGRAY) //设置分割线的颜色 + .setSelectOptions(0, 1) //默认选中项 + .setTitleColor(Color.BLACK) + .setSubmitColor(Color.parseColor("#F1474B")) //确定按钮文字颜色 + .setCancelColor(Color.parseColor("#F1474B")) //取消按钮文字颜色 + .setTitleBgColor(Color.parseColor("#FFFFFF")) + .setBgColor(Color.parseColor("#F5F5F5")) + .setTextColorCenter(Color.LTGRAY) + .isRestoreItem(true) //切换时是否还原,设置默认选中第一项。 + .isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。 + .setLabels("", "", "") +// .setOutSideColor(0x00000000) //设置外部遮罩颜色 + .setOptionsSelectChangeListener { options1, options2, options3 -> + val str = + "options1: $options1\noptions2: $options2\noptions3: $options3" +// Toast.makeText(this@MainActivity, str, Toast.LENGTH_SHORT).show() + } + .build() + + data.forEach { + mutableListOf.add(it) + } + + + + build.setPicker(mutableListOf) + + build.show() + + } + })) + + + } + + fun qymc() { + if (!::curCompanyBean.isInitialized) { + showToast("请选择审批单位") + return + } + DataManager.getInstance().typeLst(curCompanyBean.sign) + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext, object : RxHttpCallBack>(this) { + override fun onSuccess(t: CommonResponseBean>) { + super.onSuccess(t) + val data = t.data + + + val mutableListOf = mutableListOf() + val build = OptionsPickerBuilder(mContext + ) { options1, options2, options3, v -> //返回的分别是三个级别的选中位置 + curCompanyType = mutableListOf.get(options1) + tvQylx.text = mutableListOf.get(options1).enterpriseTypeName + } + .setTitleText("审批单位") + .setContentTextSize(20) //设置滚轮文字大小 + .setDividerColor(Color.LTGRAY) //设置分割线的颜色 + .setSelectOptions(0, 1) //默认选中项 + .setTitleColor(Color.BLACK) + .setSubmitColor(Color.parseColor("#F1474B")) //确定按钮文字颜色 + .setCancelColor(Color.parseColor("#F1474B")) //取消按钮文字颜色 + .setTitleBgColor(Color.parseColor("#FFFFFF")) + .setBgColor(Color.parseColor("#F5F5F5")) + .setTextColorCenter(Color.LTGRAY) + .isRestoreItem(true) //切换时是否还原,设置默认选中第一项。 + .isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。 + .setLabels("", "", "") +// .setOutSideColor(0x00000000) //设置外部遮罩颜色 + .setOptionsSelectChangeListener { options1, options2, options3 -> + val str = + "options1: $options1\noptions2: $options2\noptions3: $options3" +// Toast.makeText(this@MainActivity, str, Toast.LENGTH_SHORT).show() + } + .build() + + data.forEach { + mutableListOf.add(it) + } + + + + build.setPicker(mutableListOf) + + build.show() + + } + })) + } + + fun sub() { + + if (!::curCompanyBean.isInitialized || !::curCompanyType.isInitialized || !::jb.isInitialized || + !::shi.isInitialized || etQymc.text.toString().isNullOrEmpty() || + etLxr.text.toString().isNullOrEmpty() || etPhone.text.toString().isNullOrEmpty() || + etCl.text.toString().isNullOrEmpty() || etTxz.text.toString().isNullOrEmpty() + ) { + showToast("请完善信息") + return + } + + val applySendBean = ApplySendBean() + applySendBean.sign = curCompanyBean.sign + applySendBean.enterpriseName = etQymc.text.toString() + applySendBean.typeId = curCompanyType.typeId + applySendBean.provinceName = sheng + applySendBean.cityName = shi + applySendBean.countyName = xian + applySendBean.nationalClassA = jb + applySendBean.enterpriseContact = etLxr.text.toString() + applySendBean.enterpriseContactPhone = etPhone.text.toString() + applySendBean.vehiclesNumber = etCl.text.toString() + applySendBean.numberOfPassesRequired = etTxz.text.toString() + + + DataManager.getInstance().applySend(applySendBean) + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext, object : RxHttpCallBack() { + override fun onSuccess(t: CommonResponseBean?) { + super.onSuccess(t) + finish() + } + })) + } + + + private var options1Items = ArrayList() + private val options2Items = ArrayList>() + private val options3Items = ArrayList>>() + private val MSG_LOAD_DATA = 0x0001 + private val MSG_LOAD_SUCCESS = 0x0002 + private val MSG_LOAD_FAILED = 0x0003 + private var thread: Thread? = null + private var isLoaded = false + + + private fun setProText() { + val pvOptions: OptionsPickerView<*> = OptionsPickerBuilder(this@ApplyActivity + ) { options1, options2, options3, v -> + //返回的分别是三个级别的选中位置 + val opt1tx = + if (options1Items.size > 0) options1Items.get(options1).getPickerViewText() else "" + val opt2tx = if (options2Items.size > 0 + && options2Items.get(options1).size > 0 + ) options2Items.get(options1).get(options2) else "" + val opt3tx = + if (options2Items.size > 0 && options3Items.get(options1).size > 0 && options3Items.get( + options1).get(options2).size > 0 + ) options3Items.get(options1).get(options2).get(options3) else "" + sheng = opt1tx + shi = opt2tx + xian = opt3tx + val tx = "$opt1tx-$opt2tx-$opt3tx" + tvDz.text = tx +// val userBean = UserBean() +// userBean.setAddress(tx) +// DataManager.getInstance().editObj(userBean) +// .subscribeOn(Schedulers.io()) +// .observeOn(AndroidSchedulers.mainThread()) +// .subscribe(BaseObserver(mContext, object : RxHttpCallBack() { +// fun onSuccess(t: CommonResponseBean?) { +// super.onSuccess(t) +// userInfo.setAddress(tx) +// SPUtils.setUserInfo(this@MyInfoActivity, +// JsonUtils.getInstance().getGson().toJson(userInfo)) +// } +// })) + + + // Toast.makeText(MyInfoActivity.this, tx, Toast.LENGTH_SHORT).show(); + } + .setSubmitColor(Color.parseColor("#F1474B")) //确定按钮文字颜色 + .setCancelColor(Color.parseColor("#F1474B")) //取消按钮文字颜色 + .setTitleBgColor(Color.parseColor("#FFFFFF")) + .setBgColor(Color.parseColor("#F5F5F5")) + .setContentTextSize(20) + .build() + pvOptions.setPicker(options1Items as List?, + options2Items as List?, options3Items as List?) //三级选择器 + pvOptions.show() + } + + private fun initJsonData() { //解析数据 + /** + * 注意:assets 目录下的Json文件仅供参考,实际使用可自行替换文件 + * 关键逻辑在于循环体 + * + */ + val JsonData: String = + GetJsonDataUtil().getJson(this, "province.json") //获取assets目录下的json文件数据 + // String JsonData1 = new GetJsonDataUtil().getJson(this, "city.json");//获取assets目录下的json文件数据 + val jsonBean: ArrayList = parseData(JsonData) //用Gson 转成实体 + // ArrayList data = getData(JsonData1); + /** + * 添加省份数据 + * + * 注意:如果是添加的JavaBean实体,则实体类需要实现 IPickerViewData 接口, + * PickerView会通过getPickerViewText方法获取字符串显示出来。 + */ + options1Items = jsonBean + for (i in jsonBean.indices) { //遍历省份 + val cityList = ArrayList() //该省的城市列表(第二级) + val province_AreaList = ArrayList>() //该省的所有地区列表(第三极) + for (c in 0 until jsonBean[i].cityList.size) { //遍历该省份的所有城市 + val cityName = jsonBean[i].cityList[c].name + cityList.add(cityName) //添加城市 + val city_AreaList = ArrayList() //该城市的所有地区列表 + + //如果无地区数据,建议添加空字符串,防止数据为null 导致三个选项长度不匹配造成崩溃 + /*if (jsonBean.get(i).getCityList().get(c).getArea() == null + || jsonBean.get(i).getCityList().get(c).getArea().size() == 0) { + city_AreaList.add(""); + } else { + city_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea()); + }*/city_AreaList.addAll(jsonBean[i].cityList[c].area) + province_AreaList.add(city_AreaList) //添加该省所有地区数据 + } + /** + * 添加城市数据 + */ + options2Items.add(cityList) + /** + * 添加地区数据 + */ + options3Items.add(province_AreaList) + } + mHandler.sendEmptyMessage(MSG_LOAD_SUCCESS) + } + + fun parseData(result: String): ArrayList { //Gson 解析 + val detail = ArrayList() + try { + val data = JSONArray(result) + val gson = Gson() + for (i in 0 until data.length()) { + val entity = gson.fromJson(data.optJSONObject(i).toString(), JsonBean::class.java) + detail.add(entity) + } + } catch (e: Exception) { + e.printStackTrace() + mHandler.sendEmptyMessage(MSG_LOAD_FAILED) + } + return detail + } + + @SuppressLint("HandlerLeak") + private val mHandler: Handler = object : Handler() { + override fun handleMessage(msg: Message) { + when (msg.what) { + MSG_LOAD_DATA -> if (thread == null) { //如果已创建就不再重新创建子线程了 + thread = Thread { // 子线程中解析省市区数据 + initJsonData() + } + thread?.start() + } + MSG_LOAD_SUCCESS -> { + // Toast.makeText(MyInfoActivity.this, "Parse Succeed", Toast.LENGTH_SHORT).show(); + setProText() + isLoaded = true + } + MSG_LOAD_FAILED -> Toast.makeText(this@ApplyActivity, + "地区解析失败", + Toast.LENGTH_SHORT).show() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/ui/home/activity/ApplyDetailActivity.kt b/app/src/main/java/com/dahe/examine/ui/home/activity/ApplyDetailActivity.kt new file mode 100644 index 0000000..8062dff --- /dev/null +++ b/app/src/main/java/com/dahe/examine/ui/home/activity/ApplyDetailActivity.kt @@ -0,0 +1,24 @@ +package com.dahe.examine.ui.home.activity + +import android.os.Bundle +import com.dahe.mylibrary.base.BaseActivity +import com.dahe.examine.R + +/** + * @ClassName ApplyDetailActivity + * @Author 用户 + * @Date 2022/1/15 9:51 + * @Description TODO + */ +class ApplyDetailActivity : BaseActivity() { + override fun getLayout() = R.layout.activity_apply_detail + + override fun initView(savedInstanceState: Bundle?) { + setStatusBarCancelLightColor() + setTitleBar("申请详情") { finish() } + } + + override fun initDate() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/ui/home/activity/ExamineDetailActivity.kt b/app/src/main/java/com/dahe/examine/ui/home/activity/ExamineDetailActivity.kt new file mode 100644 index 0000000..07b77d9 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/ui/home/activity/ExamineDetailActivity.kt @@ -0,0 +1,182 @@ +package com.dahe.examine.ui.home.activity + +import android.graphics.Color +import android.os.Bundle +import android.text.TextUtils +import android.view.View +import android.widget.TextView +import androidx.core.widget.addTextChangedListener +import com.bigkoo.pickerview.builder.TimePickerBuilder +import com.dahe.mylibrary.base.BaseActivity +import com.dahe.examine.R +import com.dahe.examine.base.AppConfig +import com.dahe.examine.bean.AddresBean +import com.dahe.examine.bean.ApplyBean +import com.dahe.examine.net.BaseObserver +import com.dahe.examine.net.DataManager +import com.dahe.examine.net.RxHttpCallBack +import com.dahe.mylibrary.net.CommonResponseBean +import com.dahe.mylibrary.utils.TimeUtil +import kotlinx.android.synthetic.main.activity_examine_detail.* +import kotlinx.android.synthetic.main.pop_sel_time.view.* +import java.text.SimpleDateFormat +import java.util.* + +/** + * @ClassName ApplyDetailActivity + * @Author 用户 + * @Date 2022/1/15 9:51 + * @Description TODO + */ +class ExamineDetailActivity : BaseActivity(), View.OnClickListener { + lateinit var bean : ApplyBean + override fun getLayout() = R.layout.activity_examine_detail + + override fun initView(savedInstanceState: Bundle?) { + setStatusBarCancelLightColor() + setTitleBar("审核") { finish() } + tvStartTime.setOnClickListener(this) + tvEndTime.setOnClickListener(this) + tvNo.setOnClickListener(this) + tvOk.setOnClickListener(this) + + + } + + override fun initDate() { + bean = intent.extras?.getSerializable(AppConfig.BEAN) as ApplyBean + if (null!=bean){ + tvTitle.text = bean.enterpriseName + tvDq.text = """地区: ${bean.cityName}""" + tvLx.text = """类型: ${bean.itemTypeName.let { it }?:""}""" + tvJb.text = """国家A级: ${bean.nationalClassA}""" + tvCls.text = bean.vehiclesNumber + tvXqs.text = bean.numberOfPassesRequired + tvFzr.text = """负责人: ${bean.enterpriseContact}""" + tvPhone.text = """电话: ${bean.enterpriseContactPhone}""" + + + DataManager.getInstance().appUser(bean.userId) + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext,object : RxHttpCallBack(){ + override fun onSuccess(t: CommonResponseBean) { + super.onSuccess(t) + val data = t.data + tvZcdz.text = data.placeOfRegistration + tvBgdz.text = data.companyAddress + tvCqdz.text = data.plantAddress + } + })) + } + + + } + + override fun onClick(view: View?) { + super.onClick(view) + when (view?.id) { + R.id.tvStartTime -> setBir(0, tvStartTime) + R.id.tvEndTime -> setBir(1, tvEndTime) + R.id.tvNo -> no() + R.id.tvOk -> ok() + } + } + + fun no(){ + + if (etNo.text.isNullOrEmpty()){ + showToast("请输入拒绝原因") + return + } + val applyBean = ApplyBean() + applyBean.infoId = bean.infoId + applyBean.numberOfPasses = "0" +// applyBean.passUsageStartTime = tvStartTime.text.toString() +// applyBean.passUsageEndTime = tvEndTime.text.toString() + applyBean.status = "2" + applyBean.remarks = etNo.text.toString() + DataManager.getInstance().appleEdit(applyBean) + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext,object : RxHttpCallBack(){ + override fun onSuccess(t: CommonResponseBean?) { + super.onSuccess(t) + showToast("拒绝成功") + finish() + } + })) + } + + fun ok(){ + val i = etCount.text.toString().toIntOrNull() + val xqs = tvXqs.text.toString().toInt() + if (i != null) { + if (i>xqs){ + showToast("审批数不能大于需求数") + return + } + }else{ + showToast("请填写审批数") + return + } + + if (tvStartTime.text.isNullOrEmpty()||tvEndTime.text.isNullOrEmpty()){ + showToast("请选择时间") + return + } + val applyBean = ApplyBean() + applyBean.infoId = bean.infoId + applyBean.numberOfPasses = etCount.text.toString() + applyBean.passUsageStartTime = tvStartTime.text.toString() + applyBean.passUsageEndTime = tvEndTime.text.toString() + applyBean.status = "1" + DataManager.getInstance().appleEdit(applyBean) + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext,object : RxHttpCallBack(){ + override fun onSuccess(t: CommonResponseBean?) { + super.onSuccess(t) + showToast("审核成功") + finish() + } + })) + } + + fun setBir(type: Int, view: TextView) { + val startDate = Calendar.getInstance() + val endtDate = Calendar.getInstance() + val currDate = Calendar.getInstance() + startDate[1990, 0] = 1 + endtDate[2100, 0] = 1 + + + if (!TextUtils.isEmpty(view.getText())) { + val date = TimeUtil.string2Date(view.getText().toString(), + SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())) + if (date != null) currDate.time = date + } + + + val pvTime = TimePickerBuilder( + mContext + ) { date, v -> //选中事件回调 +// TimeUtil.date2String(date,SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())) + val data = + TimeUtil.date2String(date, SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())) + view.text = data + }.setSubmitColor(Color.parseColor("#F1474B")) //确定按钮文字颜色 + .setCancelColor(Color.parseColor("#F1474B")) //取消按钮文字颜色 + .setTitleBgColor(Color.parseColor("#FFFFFF")) + .setType(booleanArrayOf(true, true, true, false, false, false)) + .setTitleText(if (0 == type) { + "开始时间" + } else { + "结束时间" + }) + .setDate(currDate) + .setRangDate(startDate, endtDate) + .isDialog(false) + .setBgColor(Color.parseColor("#F5F5F5")) + .build() + // pvTime.setDate(Calendar.getInstance());//注:根据需求来决定是否使用该方法(一般是精确到秒的情况),此项可以在弹出选择器的时候重新设置当前时间,避免在初始化之后由于时间已经设定,导致选中时间与当前时间不匹配的问题。 + pvTime.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/ui/home/activity/RecordActivity.kt b/app/src/main/java/com/dahe/examine/ui/home/activity/RecordActivity.kt new file mode 100644 index 0000000..d30c8fa --- /dev/null +++ b/app/src/main/java/com/dahe/examine/ui/home/activity/RecordActivity.kt @@ -0,0 +1,72 @@ +package com.dahe.examine.ui.home.activity + +import android.os.Bundle +import androidx.recyclerview.widget.LinearLayoutManager +import com.dahe.mylibrary.base.BaseActivity +import com.dahe.examine.R +import com.dahe.examine.adapter.ApplyAdapter +import com.dahe.examine.adapter.RecordAdapter +import com.dahe.examine.bean.ApplyBean +import com.dahe.examine.bean.CountBean +import com.dahe.examine.net.BaseObserver +import com.dahe.examine.net.DataManager +import com.dahe.examine.net.RxHttpCallBack +import com.dahe.mylibrary.net.CommonResponseBean +import com.dahe.mylibrary.net.PagerBean +import kotlinx.android.synthetic.main.activity_record.* + +/** + * @ClassName ApplyDetailActivity + * @Author 用户 + * @Date 2022/1/15 9:51 + * @Description TODO + */ +class RecordActivity : BaseActivity() { + + lateinit var applyAdapter : RecordAdapter + override fun getLayout() = R.layout.activity_record + + override fun initView(savedInstanceState: Bundle?) { + setStatusBarCancelLightColor() + setTitleBar("审核记录") { finish() } + initRec() + } + + override fun initDate() { + DataManager.getInstance().historyList() + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext,object : RxHttpCallBack>(){ + override fun onSuccess(t: CommonResponseBean>) { + super.onSuccess(t) + applyAdapter.setList(t.data.rows) + } + })) + getCount() + } + + fun getCount(){ + DataManager.getInstance().historyCount() + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext,object : RxHttpCallBack(){ + override fun onSuccess(t: CommonResponseBean?) { + super.onSuccess(t) + tvYsq.text = t?.data?.requiredNum + tvYsp.text = t?.data?.passesNum + + tvMf1.text = t?.data?.requiredNumMF + tvSf1.text = t?.data?.requiredNumSF + tvMf2.text = t?.data?.passesNumMF + TvSf2.text = t?.data?.passesNumSF + } + })) + } + + fun initRec() { + recyclerView.layoutManager = + LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false) + recyclerView.setHasFixedSize(true) + applyAdapter = RecordAdapter(-1) + recyclerView.adapter = applyAdapter + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/ui/mine/MineFragment.kt b/app/src/main/java/com/dahe/examine/ui/mine/MineFragment.kt new file mode 100644 index 0000000..36ff84b --- /dev/null +++ b/app/src/main/java/com/dahe/examine/ui/mine/MineFragment.kt @@ -0,0 +1,55 @@ +package com.dahe.examine.ui.mine + +import android.content.Intent +import android.view.View +import com.dahe.dispatch.utils.UserUtils +import com.dahe.mylibrary.base.BaseFragment +import com.dahe.mylibrary.utils.ActivityUtils +import com.dahe.examine.R +import com.dahe.examine.ui.account.LoginActivity +import com.dahe.examine.ui.mine.activity.ChangePhoneActivity +import com.dahe.examine.ui.mine.activity.ChangePwdActivity +import com.dahe.examine.utils.AppActivityUtils +import com.dahe.examine.utils.SPUtils +import kotlinx.android.synthetic.main.fragment_mine.* + +class MineFragment : BaseFragment(), View.OnClickListener { + override fun getContentViewLayoutID() = R.layout.fragment_mine + + override fun onFragmentVisibleChange(isVisible: Boolean) { + if (isVisible) { + } else { + } + } + + + override fun onFragmentFirstVisible() { + rlPass.setOnClickListener(this) + rlPhone.setOnClickListener(this) + btnOut.setOnClickListener(this) + + val userInfo = SPUtils.getUserInfo(mContext).userInfo + if (null==userInfo) + return + tvName.text = userInfo.signName + tvPhone.text = userInfo.userName + } + + override fun onClick(v: View) { + when (v.id) { + R.id.rlPass->ActivityUtils.startActivity(mContext,ChangePwdActivity::class.java) + R.id.rlPhone-> AppActivityUtils.openWebViewActivity(mContext, "隐私政策", + "http://tms.down.user.test.dahehuodongbao.com/user-privacy.html") +// R.id.rlPhone->ActivityUtils.startActivity(mContext,ChangePhoneActivity::class.java) + R.id.btnOut->logOut() + } + } + + fun logOut(){ + UserUtils.instance.loginOut(requireActivity()) + val intent = Intent(mContext, LoginActivity::class.java) + intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK + requireActivity().startActivity(intent) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/ui/mine/activity/ChangePhoneActivity.kt b/app/src/main/java/com/dahe/examine/ui/mine/activity/ChangePhoneActivity.kt new file mode 100644 index 0000000..d4a522d --- /dev/null +++ b/app/src/main/java/com/dahe/examine/ui/mine/activity/ChangePhoneActivity.kt @@ -0,0 +1,94 @@ +package com.dahe.examine.ui.mine.activity + +import android.content.Intent +import android.os.Bundle +import android.view.View +import com.dahe.dispatch.utils.UserUtils +import com.dahe.mylibrary.base.BaseActivity +import com.dahe.mylibrary.net.CommonResponseBean +import com.dahe.mylibrary.utils.CountDownTimerUtils +import com.dahe.mylibrary.utils.PhoneFormatCheckUtils +import com.dahe.examine.R +import com.dahe.examine.net.BaseObserver +import com.dahe.examine.net.DataManager +import com.dahe.examine.net.RxHttpCallBack +import com.dahe.examine.ui.account.LoginActivity +import com.dahe.examine.utils.SPUtils +import kotlinx.android.synthetic.main.activity_change_phone.* + +/** + * @ClassName ChangePwdActivity + * @Author 用户 + * @Date 2022/1/13 16:59 + * @Description TODO + */ +class ChangePhoneActivity : BaseActivity(), View.OnClickListener { + override fun getLayout() = R.layout.activity_change_phone + + override fun initView(savedInstanceState: Bundle?) { + setStatusBarCancelLightColor() + setTitleBar("修改手机号") { finish() } + val phone = SPUtils.getUserInfo(this).userInfo.phone + tvPhone.text = phone + + tvCode.setOnClickListener(this) + btn_log.setOnClickListener(this) + } + + override fun initDate() { + + } + + override fun onClick(view: View?) { + super.onClick(view) + when(view?.id){ + R.id.tvCode->getCode() + R.id.btn_log->sub() + } + } + + fun sub(){ + + val phone = etCode.text.toString() + val code = etPass.text.toString() + + if (phone.isNullOrEmpty()||code.isNullOrEmpty()){ + showToast("请完善信息") + return + } + + DataManager.getInstance().phoneEdit(phone,code) + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext,object :RxHttpCallBack(){ + override fun onSuccess(t: CommonResponseBean?) { + super.onSuccess(t) +// finish() + + UserUtils.instance.loginOut(this@ChangePhoneActivity) + val intent = Intent(mContext, LoginActivity::class.java) + intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK + startActivity(intent) +// ActivityUtils.finishToActivity(LoginActivity::class.java,true) + } + })) + } + + fun getCode() { + + var phone = etCode.text.toString() + if (PhoneFormatCheckUtils.isPhoneLegal(phone)) { + DataManager.getInstance().getSmsCode(phone) + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext, object : RxHttpCallBack() { + override fun onSuccess(t: CommonResponseBean?) { + super.onSuccess(t) + val countDownTimerUtils = CountDownTimerUtils(tvCode, 60000, 1000) + countDownTimerUtils.start() + } + })) + } else { + showToast("请输入正确手机号") + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/ui/mine/activity/ChangePwdActivity.kt b/app/src/main/java/com/dahe/examine/ui/mine/activity/ChangePwdActivity.kt new file mode 100644 index 0000000..a5d782a --- /dev/null +++ b/app/src/main/java/com/dahe/examine/ui/mine/activity/ChangePwdActivity.kt @@ -0,0 +1,97 @@ +package com.dahe.examine.ui.mine.activity + +import android.os.Bundle +import android.view.View +import com.dahe.mylibrary.base.BaseActivity +import com.dahe.mylibrary.net.CommonResponseBean +import com.dahe.mylibrary.utils.CountDownTimerUtils +import com.dahe.mylibrary.utils.PhoneFormatCheckUtils +import com.dahe.examine.R +import com.dahe.examine.bean.ChangePwdBean +import com.dahe.examine.net.BaseObserver +import com.dahe.examine.net.DataManager +import com.dahe.examine.net.RxHttpCallBack +import com.dahe.examine.utils.SPUtils +import kotlinx.android.synthetic.main.activity_change_pwd.* + +/** + * @ClassName ChangePwdActivity + * @Author 用户 + * @Date 2022/1/13 16:59 + * @Description TODO + */ +class ChangePwdActivity : BaseActivity(), View.OnClickListener { + override fun getLayout() = R.layout.activity_change_pwd + + override fun initView(savedInstanceState: Bundle?) { + setStatusBarCancelLightColor() + setTitleBar("修改密码") { finish() } + +// val phone = SPUtils.getUserInfo(this).userInfo.phone +// tvPhone.text = phone + + tvCode.setOnClickListener(this) + btn_log.setOnClickListener(this) + } + + override fun initDate() { + } + + override fun onClick(view: View?) { + super.onClick(view) + when(view?.id){ + R.id.tvCode->getCode() + R.id.btn_log->sub() + } + } + + fun sub(){ + +// val phone = tvPhone.text.toString() + val code = etPass.text.toString() + val pwd = etCode.text.toString() + + if (pwd.isNullOrEmpty()||code.isNullOrEmpty()){ + showToast("请完善信息") + return + } + if (code!=pwd){ + showToast("两次输入不一致") + return + } + + val userId = SPUtils.getUserInfo(mContext).userInfo.userId + + val changePwdBean = ChangePwdBean() + changePwdBean.password = code + changePwdBean.userId =userId + + DataManager.getInstance().changePwd(changePwdBean) + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext,object : RxHttpCallBack(){ + override fun onSuccess(t: CommonResponseBean?) { + super.onSuccess(t) + finish() + } + })) + } + + fun getCode() { + + var phone = etCode.text.toString() + if (PhoneFormatCheckUtils.isPhoneLegal(phone)) { + DataManager.getInstance().getSmsCode(phone) + .compose(DataManager.setThread()) + .subscribe(BaseObserver(mContext, object : RxHttpCallBack() { + override fun onSuccess(t: CommonResponseBean?) { + super.onSuccess(t) + val countDownTimerUtils = CountDownTimerUtils(tvCode, 60000, 1000) + countDownTimerUtils.start() + } + })) + } else { + showToast("请输入正确手机号") + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/utils/AppActivityUtils.java b/app/src/main/java/com/dahe/examine/utils/AppActivityUtils.java new file mode 100644 index 0000000..cd942a3 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/utils/AppActivityUtils.java @@ -0,0 +1,37 @@ +package com.dahe.examine.utils; + +import android.content.Context; +import android.os.Bundle; + +import com.dahe.mylibrary.utils.ActivityUtils; +import com.dahe.examine.web.WebActivity; + + +public class AppActivityUtils extends ActivityUtils { + + /** + * 跳转web页面 + * + * @param context + * @param title + * @param url + */ + public static void openWebViewActivity(Context context, String title, String url) { + openWebViewActivity(context, title, url, ""); + } + + /** + * 跳转web页面 + * + * @param context + * @param title + * @param url + */ + public static void openWebViewActivity(Context context, String title, String url, String description) { + Bundle bundle = new Bundle(); + bundle.putString("title", title); + bundle.putString("url", url); + bundle.putString("description", description); + startActivity(context, WebActivity.class, bundle); + } +} diff --git a/app/src/main/java/com/dahe/examine/utils/GetJsonDataUtil.java b/app/src/main/java/com/dahe/examine/utils/GetJsonDataUtil.java new file mode 100644 index 0000000..91de331 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/utils/GetJsonDataUtil.java @@ -0,0 +1,38 @@ +package com.dahe.examine.utils; + +import android.content.Context; +import android.content.res.AssetManager; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +/** + * <读取Json文件的工具类> + * + * @author: 小嵩 + * @date: 2017/3/16 16:22 + + */ + +public class GetJsonDataUtil { + + + public String getJson(Context context,String fileName) { + + StringBuilder stringBuilder = new StringBuilder(); + try { + AssetManager assetManager = context.getAssets(); + BufferedReader bf = new BufferedReader(new InputStreamReader( + assetManager.open(fileName))); + String line; + while ((line = bf.readLine()) != null) { + stringBuilder.append(line); + } + } catch (IOException e) { + e.printStackTrace(); + } + return stringBuilder.toString(); + } +} + diff --git a/app/src/main/java/com/dahe/examine/utils/SPUtils.java b/app/src/main/java/com/dahe/examine/utils/SPUtils.java new file mode 100644 index 0000000..eb9db8a --- /dev/null +++ b/app/src/main/java/com/dahe/examine/utils/SPUtils.java @@ -0,0 +1,114 @@ +package com.dahe.examine.utils; + +import android.content.Context; + +import com.dahe.mylibrary.net.JsonUtils; +import com.dahe.mylibrary.utils.BaseSPUtils; +import com.dahe.examine.bean.UserBean; + + +public class SPUtils extends BaseSPUtils { + + /** + * 存用户信息 + * + * @param context + * @param json + */ + public static void setUserInfo(Context context, String json) { + put(context, USER_INFO_KEY, json); + } + + /** + * 拿用户信息 + * + * @param context + */ + public static UserBean getUserInfo(Context context) { + return JsonUtils.getInstance().fromJson((String) get(context, USER_INFO_KEY, ""), UserBean.class); + } + + /** + * 存服务器类型 + * + * @param context + * @param isTestService + */ + public static void setNetServiceType(Context context, boolean isTestService) { + put(context, NET_SERVICE_TEST, isTestService); + } + + /** + * 拿服务器类型 + * + * @param context + */ + public static boolean geNetServiceType(Context context) { + return (boolean) get(context, NET_SERVICE_TEST, false); + } + + /** + * 存搜索数据 + * + * @param context + * @param json + */ + public static void setSearchCache(Context context, String json) { + put(context, SEARRH_CACHE, json); + } + + public static String getSearchCache(Context context) { + return JsonUtils.getInstance().fromJson((String) get(context, SEARRH_CACHE, ""), String.class); + } + + public static void removeSearchCache(Context context) { + remove(context, SEARRH_CACHE); + } + + /** + * 导航偏好设置 + */ + public static void setNaviPreferenceCache(Context context, String json) { + put(context, NAVI_PH_EDIT_CACHE, json); + } + + public static String getNaviPreferenceCache(Context context) { + return JsonUtils.getInstance().fromJson((String) get(context, NAVI_PH_EDIT_CACHE, ""), String.class); + } + + public static void removeNaviPreference(Context context) { + remove(context, NAVI_PH_EDIT_CACHE); + } + + //第一次登录 + public static boolean getIsFirstOpen(Context context){ + boolean b = (boolean) get(context, FIRST_OPEN, true); + return b; + + } + + public static void setIsFirstOpen(Context context, boolean json){ + put(context, FIRST_OPEN, json); + } + + + /** + * 设置隐私协议是否同意 + * + * @param value 是否同意 + */ + public static void setAgreePrivacyAgreement(Context context, boolean value) { + put(context, KEY_PRIVACY_AGREEMENT, value); + } + + /** + * 是否同意了隐私协议 + * + * @return true 已经同意;false 还没有同意 + */ + public static boolean hasAgreePrivacyAgreement(Context context) { + boolean b = (boolean) get(context, KEY_PRIVACY_AGREEMENT, false); + return b; + } + +} diff --git a/app/src/main/java/com/dahe/examine/utils/SelectPhotoUtils5.java b/app/src/main/java/com/dahe/examine/utils/SelectPhotoUtils5.java new file mode 100644 index 0000000..d603f83 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/utils/SelectPhotoUtils5.java @@ -0,0 +1,51 @@ +package com.dahe.examine.utils; + +import android.app.Activity; +import android.content.pm.ActivityInfo; + +import androidx.fragment.app.FragmentActivity; + +import com.dahe.mylibrary.R; +import com.dahe.mylibrary.adapter.GridImageAdapter; +import com.dahe.mylibrary.weight.GlideEngine; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.listener.OnResultCallbackListener; + +import java.util.ArrayList; + +public class SelectPhotoUtils5 { + + + + private Activity ctx; + private OnResultCallbackListener listener; + private GridImageAdapter mAdapter; + + private static class SingletonHolder { + private static final SelectPhotoUtils5 INSTANCE = new SelectPhotoUtils5(); + } + + private SelectPhotoUtils5() { + } + + public static final SelectPhotoUtils5 getInstance() { + return SingletonHolder.INSTANCE; + } + + public void showPic(FragmentActivity activity, String path){ + ArrayList localMedias = new ArrayList<>(); + LocalMedia localMedia1 = new LocalMedia(); + localMedia1.setPath(path); + localMedias.add(localMedia1); + PictureSelector.create(activity) + .themeStyle(R.style.picture_default_style) // xml设置主题 +// .setPictureStyle(mPictureParameterStyle)// 动态自定义相册主题 + //.setPictureWindowAnimationStyle(animationStyle)// 自定义页面启动动画 + .setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)// 设置相册Activity方向,不设置默认使用系统 + .isNotPreviewDownload(true)// 预览图片长按是否可以下载 + //.bindCustomPlayVideoCallback(new MyVideoSelectedPlayCallback(getContext()))// 自定义播放回调控制,用户可以使用自己的视频播放界面 + .imageEngine(GlideEngine.createGlideEngine())// 外部传入图片加载引擎,必传项 + .openExternalPreview(0, localMedias); + } +} diff --git a/app/src/main/java/com/dahe/examine/utils/SelectPhotoUtils6.java b/app/src/main/java/com/dahe/examine/utils/SelectPhotoUtils6.java new file mode 100644 index 0000000..1759365 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/utils/SelectPhotoUtils6.java @@ -0,0 +1,324 @@ +package com.dahe.examine.utils; + +import android.app.Activity; +import android.content.pm.ActivityInfo; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; + +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.dahe.mylibrary.R; +import com.dahe.mylibrary.adapter.GridImageAdapter; +import com.dahe.mylibrary.dialog.DialogPhotoSelect; +import com.dahe.mylibrary.utils.ToastUtils; +import com.dahe.mylibrary.weight.FullyGridLayoutManager; +import com.dahe.mylibrary.weight.GlideEngine; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.decoration.GridSpacingItemDecoration; +import com.luck.picture.lib.entity.LocalMedia; +import com.luck.picture.lib.listener.OnResultCallbackListener; +import com.luck.picture.lib.tools.ScreenUtils; + +import java.lang.ref.WeakReference; +import java.util.List; + +public class SelectPhotoUtils6 implements View.OnClickListener { + private Activity ctx; + private OnResultCallbackListener listener; + private GridImageAdapter mAdapter; + private Build build; + + private SelectPhotoUtils6(Build build, Activity ctx) { + this.build = build; + this.ctx = ctx; + this.listener = build.listener; + if (null == listener) { + ToastUtils.showToast(ctx, "请初始化回调listener"); + return; + } + if (build.isSingle) {//单选 + if (null == build.imageView) { + ToastUtils.showToast(ctx, "请初始化ImageView"); + return; + } + selectSimple(build.imageView); + } else {//多选 + if (null == build.recyclerView || !(build.recyclerView instanceof RecyclerView)) { + ToastUtils.showToast(ctx, "请初始化RecycleView"); + return; + } + selectMul(build.recyclerView); + + } + } + + + public static class Build { + private int maxSelect; + private boolean isSingle; + private boolean isOnlyShow; + private ImageView imageView; + private RecyclerView recyclerView; + private List pics; + private OnResultCallbackListener listener; + private String orderId; + + public Build maxSelect(int max) { + this.maxSelect = max; + return this; + } + + public Build isSingle(boolean isSingle) { + this.isSingle = isSingle; + return this; + } + + public Build isOnlyShow(boolean isOnlyShow) { + this.isOnlyShow = isOnlyShow; + return this; + } + + public Build imageview(ImageView imageView) { + this.imageView = imageView; + return this; + } + + public Build recycleview(RecyclerView recyclerView) { + this.recyclerView = recyclerView; + return this; + } + + public Build newPics(List pics) { + this.pics = pics; + return this; + } + + public Build resultListener(OnResultCallbackListener listener) { + this.listener = listener; + return this; + } + + public Build orderId(String orderId) { + this.orderId = orderId; + return this; + } + + public SelectPhotoUtils6 create(Activity ctx) { + return new SelectPhotoUtils6(this, ctx); + } + } + + public GridImageAdapter getmAdapter() { + return mAdapter; + } + + + public void selectSimple(ImageView imageView) { + imageView.setOnClickListener(this); + } + + + public void selectMul(RecyclerView recyclerView) { + FullyGridLayoutManager manager = new FullyGridLayoutManager(ctx, + 4, GridLayoutManager.VERTICAL, false); + + recyclerView.addItemDecoration(new GridSpacingItemDecoration(40, + ScreenUtils.dip2px(ctx, 8), true + )); + recyclerView.setLayoutManager(manager); + mAdapter = new GridImageAdapter(ctx, onAddPicClickListener); + mAdapter.setSelectMax(build.maxSelect); + mAdapter.setIsOnlyShow(build.isOnlyShow); + recyclerView.setAdapter(mAdapter); + + mAdapter.setOnItemClickListener((v, position) -> { + List selectList = mAdapter.getData(); + if (selectList.size() > 0) { + LocalMedia media = selectList.get(position); + String mimeType = media.getMimeType(); + int mediaType = PictureMimeType.getMimeType(mimeType); + switch (mediaType) { + case PictureConfig.TYPE_VIDEO: + // 预览视频 + PictureSelector.create(ctx) + .themeStyle(R.style.picture_default_style) +// .setPictureStyle(mPictureParameterStyle)// 动态自定义相册主题 + .externalPictureVideo(TextUtils.isEmpty(media.getAndroidQToPath()) ? media.getPath() : media.getAndroidQToPath()); + break; + case PictureConfig.TYPE_AUDIO: + // 预览音频 + PictureSelector.create(ctx) + .externalPictureAudio(PictureMimeType.isContent(media.getPath()) ? media.getAndroidQToPath() : media.getPath()); + break; + default: + // 预览图片 可自定长按保存路径 +// PictureWindowAnimationStyle animationStyle = new PictureWindowAnimationStyle(); +// animationStyle.activityPreviewEnterAnimation = R.anim.picture_anim_up_in; +// animationStyle.activityPreviewExitAnimation = R.anim.picture_anim_down_out; + PictureSelector.create(ctx) + .themeStyle(R.style.picture_default_style) // xml设置主题 +// .setPictureStyle(mPictureParameterStyle)// 动态自定义相册主题 + //.setPictureWindowAnimationStyle(animationStyle)// 自定义页面启动动画 + .setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)// 设置相册Activity方向,不设置默认使用系统 + .isNotPreviewDownload(true)// 预览图片长按是否可以下载 + //.bindCustomPlayVideoCallback(new MyVideoSelectedPlayCallback(getContext()))// 自定义播放回调控制,用户可以使用自己的视频播放界面 + .imageEngine(GlideEngine.createGlideEngine())// 外部传入图片加载引擎,必传项 + .openExternalPreview(position, selectList); + break; + } + } + }); + } + + + private final GridImageAdapter.onAddPicClickListener onAddPicClickListener = new GridImageAdapter.onAddPicClickListener() { + @Override + public void onAddPicClick() { + PictureSelector.create(ctx) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideEngine.createGlideEngine()) + .selectionMode(build.isSingle ? PictureConfig.SINGLE : PictureConfig.MULTIPLE)// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE + .maxSelectNum(build.maxSelect) + .isPreviewImage(true)// 是否可预览图片 true or fals + .isGif(false)// 是否显示gif图片 true or false + .isCamera(true)// 是否显示拍照按钮 true or false + .isEnableCrop(false)// 是否裁剪 true or false + .selectionData(mAdapter.getData())// 是否传入已选图片 + .isCompress(true)// 是否压缩 true or false + .circleDimmedLayer(false)// 是否圆形裁剪 true or false + .freeStyleCropEnabled(false)// 裁剪框是否可拖拽 true or false + .cutOutQuality(30)// 裁剪压缩质量 默认90 int + .minimumCompressSize(30)// 小于100kb的图片不压缩 + .showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false true or false + .showCropGrid(false)// 是否显示裁剪矩形网格 圆形裁剪时建议设为false true or false +// .rotateEnabled(true) // 裁剪是否可旋转图片 true or false + .scaleEnabled(false)// 裁剪是否可放大缩小图片 true or false + .forResult(new MyResultCallback(mAdapter)); + } + + @Override + public void onDelPicClick(int postion, LocalMedia localMedia) { +// DataManager.getInstance().delBill(build.orderId,localMedia.getId() + "") +// .compose(DataManager.setThread()) +// .subscribe(new BaseObserver(ctx, new RxHttpCallBack(ctx) { +// @Override +// public void onSuccess(CommonResponseBean t) { +// super.onSuccess(t); +//// list.remove(index); +// mAdapter.getData().remove(postion); +// mAdapter.notifyItemRemoved(postion); +// mAdapter.notifyItemRangeChanged(postion, mAdapter.getData().size()); +// } +// })); + } + }; + + /** + * 返回结果回调 + */ + private class MyResultCallback implements OnResultCallbackListener { + private WeakReference mAdapterWeakReference; + + public MyResultCallback(GridImageAdapter adapter) { + super(); + this.mAdapterWeakReference = new WeakReference<>(adapter); + } + + @Override + public void onResult(List result) { +// for (LocalMedia media : result) { +// Log.i(TAG, "是否压缩:" + media.isCompressed()); +// Log.i(TAG, "压缩:" + media.getCompressPath()); +// Log.i(TAG, "原图:" + media.getPath()); +// Log.i(TAG, "绝对路径:" + media.getRealPath()); +// Log.i(TAG, "是否裁剪:" + media.isCut()); +// Log.i(TAG, "裁剪:" + media.getCutPath()); +// Log.i(TAG, "是否开启原图:" + media.isOriginal()); +// Log.i(TAG, "原图路径:" + media.getOriginalPath()); +// Log.i(TAG, "Android Q 特有Path:" + media.getAndroidQToPath()); +// Log.i(TAG, "宽高: " + media.getWidth() + "x" + media.getHeight()); +// Log.i(TAG, "Size: " + media.getSize()); +// +// Log.i("MMM", "onResult: " + media.toString()); +// // TODO 可以通过PictureSelectorExternalUtils.getExifInterface();方法获取一些额外的资源信息,如旋转角度、经纬度等信息 +// } + listener.onResult(result); + if (mAdapterWeakReference.get() != null) { + mAdapterWeakReference.get().setList(result); + mAdapterWeakReference.get().notifyDataSetChanged(); + } + } + + @Override + public void onCancel() { +// Log.i(TAG, "PictureSelector Cancel"); + } + } + + + /** + * 相机拍照 + */ + private void doTakePhoto(Activity ctx) { + PictureSelector.create(ctx) + .openCamera(PictureMimeType.ofImage()) + .imageEngine(GlideEngine.createGlideEngine()) + .isEnableCrop(false)// 是否裁剪 true or false + .isCompress(true)// 是否压缩 true or false + .isGif(false)// 是否显示gif图片 true or false + .circleDimmedLayer(false)// 是否圆形裁剪 true or false + .freeStyleCropEnabled(false)// 裁剪框是否可拖拽 true or false + .cutOutQuality(30)// 裁剪压缩质量 默认90 int + .minimumCompressSize(30)// 小于100kb的图片不压缩 + .showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false true or false + .showCropGrid(false)// 是否显示裁剪矩形网格 圆形裁剪时建议设为false true or false + .rotateEnabled(false) // 裁剪是否可旋转图片 true or false + .scaleEnabled(false)// 裁剪是否可放大缩小图片 true or false + .forResult(listener); + } + + //从本地相册中选择 + private void doSelectPhoto(Activity ctx) { + PictureSelector.create(ctx) + .openGallery(PictureMimeType.ofImage()) + .imageEngine(GlideEngine.createGlideEngine()) + .selectionMode(PictureConfig.SINGLE)// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE + .isPreviewImage(true)// 是否可预览图片 true or fals + .isGif(false)// 是否显示gif图片 true or false + .isCamera(false)// 是否显示拍照按钮 true or false + .isEnableCrop(false)// 是否裁剪 true or false + .isCompress(true)// 是否压缩 true or false + .circleDimmedLayer(false)// 是否圆形裁剪 true or false + .freeStyleCropEnabled(false)// 裁剪框是否可拖拽 true or false + .cutOutQuality(30)// 裁剪压缩质量 默认90 int + .minimumCompressSize(30)// 小于100kb的图片不压缩 + .showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false true or false + .showCropGrid(false)// 是否显示裁剪矩形网格 圆形裁剪时建议设为false true or false +// .rotateEnabled(true) // 裁剪是否可旋转图片 true or false + .scaleEnabled(false)// 裁剪是否可放大缩小图片 true or false + .forResult(listener); +// .forResult(PictureConfig.CHOOSE_REQUEST); + } + + + @Override + public void onClick(View view) { + DialogPhotoSelect dialogPhotoSelect = new DialogPhotoSelect(ctx); + dialogPhotoSelect.show(); + dialogPhotoSelect.setOnSelectClickListener(new DialogPhotoSelect.onSelectClickListener() { + @Override + public void onTakePhoto() { + doTakePhoto(ctx); + } + + @Override + public void onSelectPhoto() { + doSelectPhoto(ctx); + } + }); + } +} diff --git a/app/src/main/java/com/dahe/examine/utils/UserUtils.kt b/app/src/main/java/com/dahe/examine/utils/UserUtils.kt new file mode 100644 index 0000000..ae4f177 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/utils/UserUtils.kt @@ -0,0 +1,27 @@ +package com.dahe.dispatch.utils + +import android.content.Context +import com.dahe.examine.utils.SPUtils +import com.umeng.message.PushAgent + +class UserUtils private constructor(){ + + companion object{ + val instance = Holder.holder + } + + object Holder { + val holder = UserUtils() + } + + fun loginOut(context : Context){ + if (null== SPUtils.getUserInfo(context)) + return + PushAgent.getInstance(context).deleteAlias(SPUtils.getUserInfo(context).userInfo.userId,"uid"){ b, s -> } + SPUtils.cleanUserInfo(context) +// val intent = Intent(context, LauncherActivity::class.java) +// intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK +// context.startActivity(intent) +// ToastUtils.showToast(context, "您的账号再异地登录,请重新登录") + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/web/WebActivity.java b/app/src/main/java/com/dahe/examine/web/WebActivity.java new file mode 100644 index 0000000..5f2ac21 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/web/WebActivity.java @@ -0,0 +1,146 @@ +package com.dahe.examine.web; + +import android.graphics.Bitmap; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.webkit.JavascriptInterface; +import android.webkit.WebResourceRequest; +import android.webkit.WebView; +import android.widget.FrameLayout; +import android.widget.TextView; + +import com.dahe.mylibrary.base.BaseActivity; +import com.dahe.examine.R; +import com.just.agentweb.AgentWeb; +import com.just.agentweb.AgentWebUIControllerImplBase; +import com.just.agentweb.WebChromeClient; +import com.just.agentweb.WebViewClient; + +/** + * 公用的webview + */ +public class WebActivity extends BaseActivity { + TextView mTextRight; + FrameLayout mWebViewLayout; + private AgentWeb mAgentWeb; + private String mTitle = ""; + private String mUrl = ""; + private String mDescription = ""; + private static final String TAG = "WebActivity"; + + @Override + protected int getLayout() { + return R.layout.activity_web; + } + + @Override + protected void initView(Bundle savedInstanceState) { + mTitle = getIntent().getExtras().getString("title"); + mUrl = getIntent().getExtras().getString("url"); + mDescription = getIntent().getExtras().getString("description"); + mTextRight = (TextView) findViewById(R.id.common_toolBar_text_right); + mWebViewLayout = (FrameLayout) findViewById(R.id.WebViewLayout); + } + + @Override + protected void initDate() { + setStatusBarColor(); + setTitleBar(mTitle, v -> { + if (!mAgentWeb.back()) finish(); + }); + mAgentWeb = AgentWeb.with(this) + .setAgentWebParent(mWebViewLayout, new FrameLayout.LayoutParams(-1, -1)) + .useDefaultIndicator() + .setWebViewClient(mWebViewClient) + .setWebChromeClient(mWebChromeClient) + .setSecurityType(AgentWeb.SecurityType.DEFAULT_CHECK) + .setAgentWebUIController(new AgentWebUIControllerImplBase()) + .createAgentWeb() + .ready() + .go(mUrl); + + + mAgentWeb.getJsInterfaceHolder().addJavaObject("phone", new AndroidInterfaceWeb()); + } + + + private WebChromeClient mWebChromeClient = new WebChromeClient() { + @Override + public void onProgressChanged(WebView view, int newProgress) { + super.onProgressChanged(view, newProgress); + } + + @Override + public void onReceivedTitle(WebView view, String title) { + super.onReceivedTitle(view, title); + setTitleBar(TextUtils.isEmpty(mTitle) ? + title : mTitle, new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!mAgentWeb.back()) finish(); + } + }); + } + }; + + private WebViewClient mWebViewClient = new WebViewClient() { + + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + super.onPageStarted(view, url, favicon); + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { + return super.shouldOverrideUrlLoading(view, request); + } + + + // @Override +// public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { +// //该方法在Build.VERSION_CODES.LOLLIPOP以后有效 +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { +// String url = request.getUrl().toString(); +// Log.i(TAG, "shouldOverrideUrlLoading: " + url); +// } +// return false; +// } + }; + +// @OnClick({R.id.common_toolBar_text_right, R.id.common_toolBar_image_right}) +// public void onClick(View view) { +// if (view.getId() == R.id.common_toolBar_text_right) { +// } else if (view.getId() == R.id.common_toolBar_image_right) { +// } +// } + + @Override + public void onPause() { + mAgentWeb.getWebLifeCycle().onPause(); + super.onPause(); + + } + + @Override + public void onResume() { + mAgentWeb.getWebLifeCycle().onResume(); + super.onResume(); + } + + @Override + public void onDestroy() { + mAgentWeb.getWebLifeCycle().onDestroy(); + super.onDestroy(); + } + + class AndroidInterfaceWeb { + @JavascriptInterface + public void gohome() { +// Intent intent = new Intent(mContext, HomeActivity.class); +// intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); +// mContext.startActivity(intent); + } + } +} diff --git a/app/src/main/java/com/dahe/examine/weight/NoScrollViewPager.java b/app/src/main/java/com/dahe/examine/weight/NoScrollViewPager.java new file mode 100644 index 0000000..08299c6 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/weight/NoScrollViewPager.java @@ -0,0 +1,83 @@ +package com.dahe.examine.weight; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.viewpager.widget.ViewPager; + +/** + * Created by Administrator on 2018/7/16 0016. + */ +public class NoScrollViewPager extends ViewPager { + private boolean isCanScroll; + + public NoScrollViewPager(Context context) { + super(context); + } + + public NoScrollViewPager(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + /** + * 去掉viewpage滑动动画 + * + * @param item + */ + @Override + public void setCurrentItem(int item) { + super.setCurrentItem(item, false); + } + + /** + * 1.dispatchTouchEvent一般情况不做处理 + * ,如果修改了默认的返回值,子孩子都无法收到事件 + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); // node_return true;不行 + } + + /** + * 是否拦截 + * 拦截:会走到自己的onTouchEvent方法里面来 + * 不拦截:事件传递给子孩子 + */ + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // node_return false;//可行,不拦截事件, + // node_return true;//不行,孩子无法处理事件 + //node_return super.onInterceptTouchEvent(ev);//不行,会有细微移动 + if (isCanScroll) { + return super.onInterceptTouchEvent(ev); + } else { + return false; + } + } + + /** + * 是否消费事件 + * 消费:事件就结束 + * 不消费:往父控件传 + */ + @Override + public boolean onTouchEvent(MotionEvent ev) { + //node_return false;// 可行,不消费,传给父控件 + //node_return true;// 可行,消费,拦截事件 + //super.onTouchEvent(ev); //不行, + //虽然onInterceptTouchEvent中拦截了, + //但是如果viewpage里面子控件不是viewgroup,还是会调用这个方法. + if (isCanScroll) { + return super.onTouchEvent(ev); + } else { + return true;// 可行,消费,拦截事件 + } + } + + public void setScroll(boolean isCanScroll) { + isCanScroll = isCanScroll; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dahe/examine/weight/ScaleTransitionPagerTitleView.java b/app/src/main/java/com/dahe/examine/weight/ScaleTransitionPagerTitleView.java new file mode 100644 index 0000000..79e0c91 --- /dev/null +++ b/app/src/main/java/com/dahe/examine/weight/ScaleTransitionPagerTitleView.java @@ -0,0 +1,40 @@ +package com.dahe.examine.weight; + +import android.content.Context; + +import net.lucode.hackware.magicindicator.buildins.commonnavigator.titles.ColorTransitionPagerTitleView; + +/** + * 带颜色渐变和缩放的指示器标题 + * 博客: http://hackware.lucode.net + * Created by hackware on 2016/6/26. + */ +public class ScaleTransitionPagerTitleView extends ColorTransitionPagerTitleView { + private float mMinScale = 0.75f; + + public ScaleTransitionPagerTitleView(Context context) { + super(context); + } + + @Override + public void onEnter(int index, int totalCount, float enterPercent, boolean leftToRight) { + super.onEnter(index, totalCount, enterPercent, leftToRight); // 实现颜色渐变 + setScaleX(mMinScale + (1.0f - mMinScale) * enterPercent); + setScaleY(mMinScale + (1.0f - mMinScale) * enterPercent); + } + + @Override + public void onLeave(int index, int totalCount, float leavePercent, boolean leftToRight) { + super.onLeave(index, totalCount, leavePercent, leftToRight); // 实现颜色渐变 + setScaleX(1.0f + (mMinScale - 1.0f) * leavePercent); + setScaleY(1.0f + (mMinScale - 1.0f) * leavePercent); + } + + public float getMinScale() { + return mMinScale; + } + + public void setMinScale(float minScale) { + mMinScale = minScale; + } +} diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-xhdpi/head_defaut.png b/app/src/main/res/drawable-xhdpi/head_defaut.png new file mode 100644 index 0000000..41ae40c Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/head_defaut.png differ diff --git a/app/src/main/res/drawable-xhdpi/pass.png b/app/src/main/res/drawable-xhdpi/pass.png new file mode 100644 index 0000000..0055fc2 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/pass.png differ diff --git a/app/src/main/res/drawable-xhdpi/pass_open.png b/app/src/main/res/drawable-xhdpi/pass_open.png new file mode 100644 index 0000000..9f55f7a Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/pass_open.png differ diff --git a/app/src/main/res/drawable-xhdpi/splash.jpg b/app/src/main/res/drawable-xhdpi/splash.jpg new file mode 100644 index 0000000..a65b616 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/splash.jpg differ diff --git a/app/src/main/res/drawable-xxhdpi/clear_search.png b/app/src/main/res/drawable-xxhdpi/clear_search.png new file mode 100644 index 0000000..54e2b07 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/clear_search.png differ diff --git a/app/src/main/res/drawable-xxhdpi/cq.png b/app/src/main/res/drawable-xxhdpi/cq.png new file mode 100644 index 0000000..fb75ff4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/cq.png differ diff --git a/app/src/main/res/drawable-xxhdpi/dj.png b/app/src/main/res/drawable-xxhdpi/dj.png new file mode 100644 index 0000000..cc5b087 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/dj.png differ diff --git a/app/src/main/res/drawable-xxhdpi/dz.png b/app/src/main/res/drawable-xxhdpi/dz.png new file mode 100644 index 0000000..fb9ccc0 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/dz.png differ diff --git a/app/src/main/res/drawable-xxhdpi/go.png b/app/src/main/res/drawable-xxhdpi/go.png new file mode 100644 index 0000000..4b0ac06 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/go.png differ diff --git a/app/src/main/res/drawable-xxhdpi/icon_bill.png b/app/src/main/res/drawable-xxhdpi/icon_bill.png new file mode 100644 index 0000000..01f7806 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/icon_bill.png differ diff --git a/app/src/main/res/drawable-xxhdpi/location.png b/app/src/main/res/drawable-xxhdpi/location.png new file mode 100644 index 0000000..097464a Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/location.png differ diff --git a/app/src/main/res/drawable-xxhdpi/message.png b/app/src/main/res/drawable-xxhdpi/message.png new file mode 100644 index 0000000..07bba60 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/message.png differ diff --git a/app/src/main/res/drawable-xxhdpi/no_pass.png b/app/src/main/res/drawable-xxhdpi/no_pass.png new file mode 100644 index 0000000..dddd597 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/no_pass.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ok_pass.png b/app/src/main/res/drawable-xxhdpi/ok_pass.png new file mode 100644 index 0000000..9eb7c88 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ok_pass.png differ diff --git a/app/src/main/res/drawable-xxhdpi/phone.png b/app/src/main/res/drawable-xxhdpi/phone.png new file mode 100644 index 0000000..f18e5f4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/phone.png differ diff --git a/app/src/main/res/drawable-xxhdpi/pwd.png b/app/src/main/res/drawable-xxhdpi/pwd.png new file mode 100644 index 0000000..c8f76c9 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/pwd.png differ diff --git a/app/src/main/res/drawable-xxhdpi/qy.png b/app/src/main/res/drawable-xxhdpi/qy.png new file mode 100644 index 0000000..c0d6e97 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/qy.png differ diff --git a/app/src/main/res/drawable-xxhdpi/qylx.png b/app/src/main/res/drawable-xxhdpi/qylx.png new file mode 100644 index 0000000..e4eeb39 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/qylx.png differ diff --git a/app/src/main/res/drawable-xxhdpi/read_nor.png b/app/src/main/res/drawable-xxhdpi/read_nor.png new file mode 100644 index 0000000..5091cff Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/read_nor.png differ diff --git a/app/src/main/res/drawable-xxhdpi/read_select.png b/app/src/main/res/drawable-xxhdpi/read_select.png new file mode 100644 index 0000000..b9b0be7 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/read_select.png differ diff --git a/app/src/main/res/drawable-xxhdpi/right_black.png b/app/src/main/res/drawable-xxhdpi/right_black.png new file mode 100644 index 0000000..389e99b Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/right_black.png differ diff --git a/app/src/main/res/drawable-xxhdpi/right_icon.png b/app/src/main/res/drawable-xxhdpi/right_icon.png new file mode 100644 index 0000000..b01793f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/right_icon.png differ diff --git a/app/src/main/res/drawable-xxhdpi/search1.png b/app/src/main/res/drawable-xxhdpi/search1.png new file mode 100644 index 0000000..aaf5e33 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/search1.png differ diff --git a/app/src/main/res/drawable-xxhdpi/tab_home_normal.png b/app/src/main/res/drawable-xxhdpi/tab_home_normal.png new file mode 100644 index 0000000..757440c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/tab_home_normal.png differ diff --git a/app/src/main/res/drawable-xxhdpi/tab_home_press.png b/app/src/main/res/drawable-xxhdpi/tab_home_press.png new file mode 100644 index 0000000..517f59e Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/tab_home_press.png differ diff --git a/app/src/main/res/drawable-xxhdpi/tab_mine_normal.png b/app/src/main/res/drawable-xxhdpi/tab_mine_normal.png new file mode 100644 index 0000000..5767926 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/tab_mine_normal.png differ diff --git a/app/src/main/res/drawable-xxhdpi/tab_mine_press.png b/app/src/main/res/drawable-xxhdpi/tab_mine_press.png new file mode 100644 index 0000000..95d1cec Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/tab_mine_press.png differ diff --git a/app/src/main/res/drawable-xxhdpi/tab_waybill_normal.png b/app/src/main/res/drawable-xxhdpi/tab_waybill_normal.png new file mode 100644 index 0000000..51a7500 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/tab_waybill_normal.png differ diff --git a/app/src/main/res/drawable-xxhdpi/tab_waybill_press.png b/app/src/main/res/drawable-xxhdpi/tab_waybill_press.png new file mode 100644 index 0000000..44793ba Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/tab_waybill_press.png differ diff --git a/app/src/main/res/drawable-xxhdpi/txz.png b/app/src/main/res/drawable-xxhdpi/txz.png new file mode 100644 index 0000000..9383b89 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/txz.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ysxy.png b/app/src/main/res/drawable-xxhdpi/ysxy.png new file mode 100644 index 0000000..ff60cc9 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ysxy.png differ diff --git a/app/src/main/res/drawable-xxhdpi/yzm.png b/app/src/main/res/drawable-xxhdpi/yzm.png new file mode 100644 index 0000000..d2d597c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/yzm.png differ diff --git a/app/src/main/res/drawable/bg_splash.xml b/app/src/main/res/drawable/bg_splash.xml new file mode 100644 index 0000000..846ff20 --- /dev/null +++ b/app/src/main/res/drawable/bg_splash.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/select_pass.xml b/app/src/main/res/drawable/select_pass.xml new file mode 100644 index 0000000..db9f1fc --- /dev/null +++ b/app/src/main/res/drawable/select_pass.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/select_read.xml b/app/src/main/res/drawable/select_read.xml new file mode 100644 index 0000000..db24025 --- /dev/null +++ b/app/src/main/res/drawable/select_read.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_blue_bg16.xml b/app/src/main/res/drawable/shape_blue_bg16.xml new file mode 100644 index 0000000..1450314 --- /dev/null +++ b/app/src/main/res/drawable/shape_blue_bg16.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_blue_bg6.xml b/app/src/main/res/drawable/shape_blue_bg6.xml new file mode 100644 index 0000000..e55fe35 --- /dev/null +++ b/app/src/main/res/drawable/shape_blue_bg6.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_blue_bg8.xml b/app/src/main/res/drawable/shape_blue_bg8.xml new file mode 100644 index 0000000..e89c705 --- /dev/null +++ b/app/src/main/res/drawable/shape_blue_bg8.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_btn_bg4.xml b/app/src/main/res/drawable/shape_btn_bg4.xml new file mode 100644 index 0000000..29f6fcb --- /dev/null +++ b/app/src/main/res/drawable/shape_btn_bg4.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_c_bg18.xml b/app/src/main/res/drawable/shape_c_bg18.xml new file mode 100644 index 0000000..b583a45 --- /dev/null +++ b/app/src/main/res/drawable/shape_c_bg18.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_code.xml b/app/src/main/res/drawable/shape_code.xml new file mode 100644 index 0000000..73579b5 --- /dev/null +++ b/app/src/main/res/drawable/shape_code.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_count_downbg.xml b/app/src/main/res/drawable/shape_count_downbg.xml new file mode 100644 index 0000000..670e2a9 --- /dev/null +++ b/app/src/main/res/drawable/shape_count_downbg.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_gray_bg11.xml b/app/src/main/res/drawable/shape_gray_bg11.xml new file mode 100644 index 0000000..204193b --- /dev/null +++ b/app/src/main/res/drawable/shape_gray_bg11.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_gray_bg25.xml b/app/src/main/res/drawable/shape_gray_bg25.xml new file mode 100644 index 0000000..571f2b5 --- /dev/null +++ b/app/src/main/res/drawable/shape_gray_bg25.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_gray_bg8.xml b/app/src/main/res/drawable/shape_gray_bg8.xml new file mode 100644 index 0000000..7a9a7e2 --- /dev/null +++ b/app/src/main/res/drawable/shape_gray_bg8.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_green_bg25.xml b/app/src/main/res/drawable/shape_green_bg25.xml new file mode 100644 index 0000000..41d3888 --- /dev/null +++ b/app/src/main/res/drawable/shape_green_bg25.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_mine_bg20.xml b/app/src/main/res/drawable/shape_mine_bg20.xml new file mode 100644 index 0000000..9cdff80 --- /dev/null +++ b/app/src/main/res/drawable/shape_mine_bg20.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_red_bg25.xml b/app/src/main/res/drawable/shape_red_bg25.xml new file mode 100644 index 0000000..37c3020 --- /dev/null +++ b/app/src/main/res/drawable/shape_red_bg25.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_w_b_bg8.xml b/app/src/main/res/drawable/shape_w_b_bg8.xml new file mode 100644 index 0000000..f9a339e --- /dev/null +++ b/app/src/main/res/drawable/shape_w_b_bg8.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_w_bg16.xml b/app/src/main/res/drawable/shape_w_bg16.xml new file mode 100644 index 0000000..5c5d286 --- /dev/null +++ b/app/src/main/res/drawable/shape_w_bg16.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_w_bg8.xml b/app/src/main/res/drawable/shape_w_bg8.xml new file mode 100644 index 0000000..83f266d --- /dev/null +++ b/app/src/main/res/drawable/shape_w_bg8.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_add_go.xml b/app/src/main/res/layout/activity_add_go.xml new file mode 100644 index 0000000..d5849ac --- /dev/null +++ b/app/src/main/res/layout/activity_add_go.xml @@ -0,0 +1,464 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_apply.xml b/app/src/main/res/layout/activity_apply.xml new file mode 100644 index 0000000..cdbb1d3 --- /dev/null +++ b/app/src/main/res/layout/activity_apply.xml @@ -0,0 +1,307 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_apply_detail.xml b/app/src/main/res/layout/activity_apply_detail.xml new file mode 100644 index 0000000..2b29433 --- /dev/null +++ b/app/src/main/res/layout/activity_apply_detail.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_business_info.xml b/app/src/main/res/layout/activity_business_info.xml new file mode 100644 index 0000000..7c576c9 --- /dev/null +++ b/app/src/main/res/layout/activity_business_info.xml @@ -0,0 +1,339 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_change_phone.xml b/app/src/main/res/layout/activity_change_phone.xml new file mode 100644 index 0000000..c2add79 --- /dev/null +++ b/app/src/main/res/layout/activity_change_phone.xml @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_change_pwd.xml b/app/src/main/res/layout/activity_change_pwd.xml new file mode 100644 index 0000000..6e8b6f6 --- /dev/null +++ b/app/src/main/res/layout/activity_change_pwd.xml @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_examine_detail.xml b/app/src/main/res/layout/activity_examine_detail.xml new file mode 100644 index 0000000..540c63d --- /dev/null +++ b/app/src/main/res/layout/activity_examine_detail.xml @@ -0,0 +1,411 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml new file mode 100644 index 0000000..fd076ba --- /dev/null +++ b/app/src/main/res/layout/activity_home.xml @@ -0,0 +1,29 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_launcher.xml b/app/src/main/res/layout/activity_launcher.xml new file mode 100644 index 0000000..ddfef4f --- /dev/null +++ b/app/src/main/res/layout/activity_launcher.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml new file mode 100644 index 0000000..1dd1f02 --- /dev/null +++ b/app/src/main/res/layout/activity_login.xml @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..4fc2444 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_not_report.xml b/app/src/main/res/layout/activity_not_report.xml new file mode 100644 index 0000000..7171408 --- /dev/null +++ b/app/src/main/res/layout/activity_not_report.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_record.xml b/app/src/main/res/layout/activity_record.xml new file mode 100644 index 0000000..955b5c8 --- /dev/null +++ b/app/src/main/res/layout/activity_record.xml @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_register.xml b/app/src/main/res/layout/activity_register.xml new file mode 100644 index 0000000..cf218ec --- /dev/null +++ b/app/src/main/res/layout/activity_register.xml @@ -0,0 +1,234 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_user_detail.xml b/app/src/main/res/layout/activity_user_detail.xml new file mode 100644 index 0000000..16b0538 --- /dev/null +++ b/app/src/main/res/layout/activity_user_detail.xml @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_web.xml b/app/src/main/res/layout/activity_web.xml new file mode 100644 index 0000000..42f47f0 --- /dev/null +++ b/app/src/main/res/layout/activity_web.xml @@ -0,0 +1,18 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_gone.xml b/app/src/main/res/layout/fragment_gone.xml new file mode 100644 index 0000000..b3b3e6a --- /dev/null +++ b/app/src/main/res/layout/fragment_gone.xml @@ -0,0 +1,289 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml new file mode 100644 index 0000000..7029a2b --- /dev/null +++ b/app/src/main/res/layout/fragment_home.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml new file mode 100644 index 0000000..5fae990 --- /dev/null +++ b/app/src/main/res/layout/fragment_mine.xml @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_apply.xml b/app/src/main/res/layout/item_apply.xml new file mode 100644 index 0000000..53ca565 --- /dev/null +++ b/app/src/main/res/layout/item_apply.xml @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_gone.xml b/app/src/main/res/layout/item_gone.xml new file mode 100644 index 0000000..124f531 --- /dev/null +++ b/app/src/main/res/layout/item_gone.xml @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_not_report.xml b/app/src/main/res/layout/item_not_report.xml new file mode 100644 index 0000000..b3074f6 --- /dev/null +++ b/app/src/main/res/layout/item_not_report.xml @@ -0,0 +1,37 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_record.xml b/app/src/main/res/layout/item_record.xml new file mode 100644 index 0000000..b31902d --- /dev/null +++ b/app/src/main/res/layout/item_record.xml @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_user.xml b/app/src/main/res/layout/item_user.xml new file mode 100644 index 0000000..fa30123 --- /dev/null +++ b/app/src/main/res/layout/item_user.xml @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/pop_sel_time.xml b/app/src/main/res/layout/pop_sel_time.xml new file mode 100644 index 0000000..226da7b --- /dev/null +++ b/app/src/main/res/layout/pop_sel_time.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/mylibrary/src/main/res/layout/empty_pic.xml b/mylibrary/src/main/res/layout/empty_pic.xml new file mode 100644 index 0000000..52b216b --- /dev/null +++ b/mylibrary/src/main/res/layout/empty_pic.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + diff --git a/mylibrary/src/main/res/layout/gv_filter_image.xml b/mylibrary/src/main/res/layout/gv_filter_image.xml new file mode 100644 index 0000000..3a5194e --- /dev/null +++ b/mylibrary/src/main/res/layout/gv_filter_image.xml @@ -0,0 +1,46 @@ + + + + + + + + + \ No newline at end of file diff --git a/mylibrary/src/main/res/layout/item_car_select.xml b/mylibrary/src/main/res/layout/item_car_select.xml new file mode 100644 index 0000000..414e97c --- /dev/null +++ b/mylibrary/src/main/res/layout/item_car_select.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mylibrary/src/main/res/layout/item_dic_select.xml b/mylibrary/src/main/res/layout/item_dic_select.xml new file mode 100644 index 0000000..9e94d4c --- /dev/null +++ b/mylibrary/src/main/res/layout/item_dic_select.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/mylibrary/src/main/res/layout/item_node_select.xml b/mylibrary/src/main/res/layout/item_node_select.xml new file mode 100644 index 0000000..396acb0 --- /dev/null +++ b/mylibrary/src/main/res/layout/item_node_select.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mylibrary/src/main/res/layout/item_select.xml b/mylibrary/src/main/res/layout/item_select.xml new file mode 100644 index 0000000..56a9f34 --- /dev/null +++ b/mylibrary/src/main/res/layout/item_select.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/mylibrary/src/main/res/layout/my_confim_popup_input.xml b/mylibrary/src/main/res/layout/my_confim_popup_input.xml new file mode 100644 index 0000000..db788f2 --- /dev/null +++ b/mylibrary/src/main/res/layout/my_confim_popup_input.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mylibrary/src/main/res/layout/my_confim_popup_tip.xml b/mylibrary/src/main/res/layout/my_confim_popup_tip.xml new file mode 100644 index 0000000..366f7cf --- /dev/null +++ b/mylibrary/src/main/res/layout/my_confim_popup_tip.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + diff --git a/mylibrary/src/main/res/layout/view_slide_bar.xml b/mylibrary/src/main/res/layout/view_slide_bar.xml new file mode 100644 index 0000000..80483e7 --- /dev/null +++ b/mylibrary/src/main/res/layout/view_slide_bar.xml @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mylibrary/src/main/res/values/attrs.xml b/mylibrary/src/main/res/values/attrs.xml new file mode 100644 index 0000000..6af9f09 --- /dev/null +++ b/mylibrary/src/main/res/values/attrs.xml @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mylibrary/src/main/res/values/colors.xml b/mylibrary/src/main/res/values/colors.xml new file mode 100644 index 0000000..2a87706 --- /dev/null +++ b/mylibrary/src/main/res/values/colors.xml @@ -0,0 +1,30 @@ + + + #28B950 + #28B950 + #D81B60 + + #FFFFFFFF + #333333 + #666666 + #FE0606 + #ff007aff + #3C6FC6 + #88888888 + + + + + #F5F5F5 + #000000 + #E6E6E6 + #F7F7F7 + #999999 + #f6f6f6 + #D5D9DB + + + + + + diff --git a/mylibrary/src/main/res/values/dimens.xml b/mylibrary/src/main/res/values/dimens.xml new file mode 100644 index 0000000..003e401 --- /dev/null +++ b/mylibrary/src/main/res/values/dimens.xml @@ -0,0 +1,26 @@ + + + 8sp + 9sp + 10sp + 11sp + 12sp + 13sp + 14sp + 15sp + 16sp + 17sp + 18sp + 19sp + 20sp + 21sp + 22sp + 23sp + 24sp + 26sp + 28sp + 30sp + 40sp + 56dp + 40dp + diff --git a/mylibrary/src/main/res/values/ids.xml b/mylibrary/src/main/res/values/ids.xml new file mode 100644 index 0000000..efaf17b --- /dev/null +++ b/mylibrary/src/main/res/values/ids.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/mylibrary/src/main/res/values/strings.xml b/mylibrary/src/main/res/values/strings.xml new file mode 100644 index 0000000..708d45e --- /dev/null +++ b/mylibrary/src/main/res/values/strings.xml @@ -0,0 +1,7 @@ + + CommonBaseLibrary + + 拍照 + 从相册中选择 + 取消 + diff --git a/mylibrary/src/main/res/values/styles.xml b/mylibrary/src/main/res/values/styles.xml new file mode 100644 index 0000000..6c47106 --- /dev/null +++ b/mylibrary/src/main/res/values/styles.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mylibrary/src/test/java/com/dahe/mylibrary/ExampleUnitTest.kt b/mylibrary/src/test/java/com/dahe/mylibrary/ExampleUnitTest.kt new file mode 100644 index 0000000..0e4dd1d --- /dev/null +++ b/mylibrary/src/test/java/com/dahe/mylibrary/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package com.dahe.mylibrary + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..1282297 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,3 @@ +rootProject.name = "Examine" +include ':app' +include ':mylibrary'