first commit

This commit is contained in:
hero920103 committed 2025-08-06 17:17:48 +08:00
commit dc5fba137c
453 files changed
+85995

No files matched your search

+6
View File
@@ -0,0 +1,6 @@
export default[{value:11e4,label:"北京",pid:1e5,children:[{value:110100,label:"北京市",pid:11e4,children:[{value:110101,label:"东城区",pid:110100},{value:110102,label:"西城区",pid:110100},{value:110105,label:"朝阳区",pid:110100},{value:110106,label:"丰台区",pid:110100},{value:110107,label:"石景山区",pid:110100},{value:110108,label:"海淀区",pid:110100},{value:110109,label:"门头沟区",pid:110100},{value:110111,label:"房山区",pid:110100},{value:110112,label:"通州区",pid:110100},{value:110113,label:"顺义区",pid:110100},{value:110114,label:"昌平区",pid:110100},{value:110115,label:"大兴区",pid:110100},{value:110116,label:"怀柔区",pid:110100},{value:110117,label:"平谷区",pid:110100},{value:110118,label:"密云区",pid:110100},{value:110119,label:"延庆区",pid:110100},{value:110120,label:"中关村科技园区",pid:110100}]}]},{value:12e4,label:"天津",pid:1e5,children:[{value:120100,label:"天津市",pid:12e4,children:[{value:120101,label:"和平区",pid:120100},{value:120102,label:"河东区",pid:120100},{value:120103,label:"河西区",pid:120100},{value:120104,label:"南开区",pid:120100},{value:120105,label:"河北区",pid:120100},{value:120106,label:"红桥区",pid:120100},{value:120110,label:"东丽区",pid:120100},{value:120111,label:"西青区",pid:120100},{value:120112,label:"津南区",pid:120100},{value:120113,label:"北辰区",pid:120100},{value:120114,label:"武清区",pid:120100},{value:120115,label:"宝坻区",pid:120100},{value:120116,label:"滨海新区",pid:120100},{value:120117,label:"宁河区",pid:120100},{value:120118,label:"静海区",pid:120100},{value:120119,label:"蓟州区",pid:120100},{value:120120,label:"滨海高新区",pid:120100}]}]},{value:13e4,label:"河北省",pid:1e5,children:[{value:130100,label:"石家庄市",pid:13e4,children:[{value:130102,label:"长安区",pid:130100},{value:130104,label:"桥西区",pid:130100},{value:130105,label:"新华区",pid:130100},{value:130107,label:"井陉矿区",pid:130100},{value:130108,label:"裕华区",pid:130100},{value:130109,label:"藁城区",pid:130100},{value:130110,label:"鹿泉区",pid:130100},{value:130111,label:"栾城区",pid:130100},{value:130121,label:"井陉县",pid:130100},{value:130123,label:"正定县",pid:130100},{value:130125,label:"行唐县",pid:130100},{value:130126,label:"灵寿县",pid:130100},{value:130127,label:"高邑县",pid:130100},{value:130128,label:"深泽县",pid:130100},{value:130129,label:"赞皇县",pid:130100},{value:130130,label:"无极县",pid:130100},{value:130131,label:"平山县",pid:130100},{value:130132,label:"元氏县",pid:130100},{value:130133,label:"赵县",pid:130100},{value:130181,label:"辛集市",pid:130100},{value:130183,label:"晋州市",pid:130100},{value:130184,label:"新乐市",pid:130100},{value:130185,label:"高新区",pid:130100},{value:130186,label:"经济开发区",pid:130100},{value:130187,label:"循环化工园区",pid:130100}]},{value:130200,label:"唐山市",pid:13e4,children:[{value:130202,label:"路南区",pid:130200},{value:130203,label:"路北区",pid:130200},{value:130204,label:"古冶区",pid:130200},{value:130205,label:"开平区",pid:130200},{value:130207,label:"丰南区",pid:130200},{value:130208,label:"丰润区",pid:130200},{value:130209,label:"曹妃甸区",pid:130200},{value:130224,label:"滦南县",pid:130200},{value:130225,label:"乐亭县",pid:130200},{value:130227,label:"迁西县",pid:130200},{value:130229,label:"玉田县",pid:130200},{value:130281,label:"遵化市",pid:130200},{value:130283,label:"迁安市",pid:130200},{value:130284,label:"滦州市",pid:130200},{value:130291,label:"高新区",pid:130200},{value:130292,label:"芦台开发区",pid:130200},{value:130293,label:"海港经济开发区",pid:130200},{value:130294,label:"汉沽管理区",pid:130200}]},{value:130300,label:"秦皇岛市",pid:13e4,children:[{value:130302,label:"海港区",pid:130300},{value:130303,label:"山海关区",pid:130300},{value:130304,label:"北戴河区",pid:130300},{value:130306,label:"抚宁区",pid:130300},{value:130321,label:"青龙满族自治县",pid:130300},{value:130322,label:"昌黎县",pid:130300},{value:130324,label:"卢龙县",pid:130300},{value:130371,label:"经济技术开发区",pid:130300},{value:130372,label:"北戴河新区",pid:130300}]},{value:130400,label:"邯郸市",pid:13e4,children:[{value:130402,label:"邯山区",pid:130400},{value:130403,label:"丛台区",pid:130400},{value:130404,label:"复兴区",pid:130400},{value:130406,label:"峰峰矿区",pid:130400},{value:130407,label:"肥乡区",pid:130400},{value:130408,label:"永年区",pid:130400},{value:130423,label:"临漳县",pid:130400},{value:130424,label:"成安县",pid:130400},{value:130425,label:"大名县",pid:130400},{value:130426,label:"涉县",pid:130400},{value:130427,label:"磁县",pid:130400},{value:130430,label:"邱县",pid:130400},{value:130431,label:"鸡泽县",pid:130400},{value:130432,label:"广平县",pid:130400},{value:130433,label:"Line truncated
pid:231e3},{value:231085,label:"穆棱市",pid:231e3},{value:231086,label:"东宁市",pid:231e3}]},{value:231100,label:"黑河市",pid:23e4,children:[{value:231102,label:"爱辉区",pid:231100},{value:231121,label:"嫩江县",pid:231100},{value:231123,label:"逊克县",pid:231100},{value:231124,label:"孙吴县",pid:231100},{value:231181,label:"北安市",pid:231100},{value:231182,label:"五大连池市",pid:231100}]},{value:231200,label:"绥化市",pid:23e4,children:[{value:231202,label:"北林区",pid:231200},{value:231221,label:"望奎县",pid:231200},{value:231222,label:"兰西县",pid:231200},{value:231223,label:"青冈县",pid:231200},{value:231224,label:"庆安县",pid:231200},{value:231225,label:"明水县",pid:231200},{value:231226,label:"绥棱县",pid:231200},{value:231281,label:"安达市",pid:231200},{value:231282,label:"肇东市",pid:231200},{value:231283,label:"海伦市",pid:231200}]},{value:232700,label:"大兴安岭地区",pid:23e4,children:[{value:232701,label:"漠河市",pid:232700},{value:232721,label:"呼玛县",pid:232700},{value:232722,label:"塔河县",pid:232700},{value:232761,label:"加格达奇区",pid:232700},{value:232762,label:"松岭区",pid:232700},{value:232763,label:"新林区",pid:232700},{value:232764,label:"呼中区",pid:232700}]}]},{value:31e4,label:"上海",pid:1e5,children:[{value:310100,label:"上海市",pid:31e4,children:[{value:310101,label:"黄浦区",pid:310100},{value:310104,label:"徐汇区",pid:310100},{value:310105,label:"长宁区",pid:310100},{value:310106,label:"静安区",pid:310100},{value:310107,label:"普陀区",pid:310100},{value:310109,label:"虹口区",pid:310100},{value:310110,label:"杨浦区",pid:310100},{value:310112,label:"闵行区",pid:310100},{value:310113,label:"宝山区",pid:310100},{value:310114,label:"嘉定区",pid:310100},{value:310115,label:"浦东新区",pid:310100},{value:310116,label:"金山区",pid:310100},{value:310117,label:"松江区",pid:310100},{value:310118,label:"青浦区",pid:310100},{value:310120,label:"奉贤区",pid:310100},{value:310151,label:"崇明区",pid:310100},{value:310231,label:"张江高新区",pid:310100},{value:310232,label:"紫竹高新区",pid:310100},{value:310233,label:"漕河泾开发区",pid:310100}]}]},{value:32e4,label:"江苏省",pid:1e5,children:[{value:320100,label:"南京市",pid:32e4,children:[{value:320102,label:"玄武区",pid:320100},{value:320104,label:"秦淮区",pid:320100},{value:320105,label:"建邺区",pid:320100},{value:320106,label:"鼓楼区",pid:320100},{value:320111,label:"浦口区",pid:320100},{value:320113,label:"栖霞区",pid:320100},{value:320114,label:"雨花台区",pid:320100},{value:320115,label:"江宁区",pid:320100},{value:320116,label:"六合区",pid:320100},{value:320117,label:"溧水区",pid:320100},{value:320118,label:"高淳区",pid:320100},{value:320119,label:"江北新区",pid:320100},{value:320120,label:"高新区",pid:320100}]},{value:320200,label:"无锡市",pid:32e4,children:[{value:320205,label:"锡山区",pid:320200},{value:320206,label:"惠山区",pid:320200},{value:320211,label:"滨湖区",pid:320200},{value:320213,label:"梁溪区",pid:320200},{value:320214,label:"新吴区",pid:320200},{value:320281,label:"江阴市",pid:320200},{value:320282,label:"宜兴市",pid:320200}]},{value:320300,label:"徐州市",pid:32e4,children:[{value:320302,label:"鼓楼区",pid:320300},{value:320303,label:"云龙区",pid:320300},{value:320305,label:"贾汪区",pid:320300},{value:320311,label:"泉山区",pid:320300},{value:320312,label:"铜山区",pid:320300},{value:320321,label:"丰县",pid:320300},{value:320322,label:"沛县",pid:320300},{value:320324,label:"睢宁县",pid:320300},{value:320381,label:"新沂市",pid:320300},{value:320382,label:"邳州市",pid:320300},{value:320383,label:"经济技术开发区",pid:320300},{value:320384,label:"高新区",pid:320300},{value:320385,label:"软件园",pid:320300}]},{value:320400,label:"常州市",pid:32e4,children:[{value:320402,label:"天宁区",pid:320400},{value:320404,label:"钟楼区",pid:320400},{value:320411,label:"新北区",pid:320400},{value:320412,label:"武进区",pid:320400},{value:320413,label:"金坛区",pid:320400},{value:320481,label:"溧阳市",pid:320400},{value:320482,label:"高新区",pid:320400}]},{value:320500,label:"苏州市",pid:32e4,children:[{value:320505,label:"虎丘区",pid:320500},{value:320506,label:"吴中区",pid:320500},{value:320507,label:"相城区",pid:320500},{value:320508,label:"姑苏区",pid:320500},{value:320509,label:"吴江区",pid:320500},{value:320581,label:"常熟市",pid:320500},{value:320582,label:"张家港市",pid:320500},{value:320583,label:"昆山市",pid:320500},{value:320585,label:"太仓市",pid:320500},{value:320586,label:"苏州新区",pid:320500},{value:320587,label:"工业园区",pid:320500},{value:320588,label:"高新区",pid:320500}]},{value:320600,label:"南通市",pid:32e4,children:[{value:320602,label:"崇川区",pid:320600},{value:320611,label:"港闸Line truncated
value:371724,label:"巨野县",pid:371700},{value:371725,label:"郓城县",pid:371700},{value:371726,label:"鄄城县",pid:371700},{value:371728,label:"东明县",pid:371700},{value:371772,label:"高新开发区",pid:371700}]}]},{value:41e4,label:"河南省",pid:1e5,children:[{value:410100,label:"郑州市",pid:41e4,children:[{value:410102,label:"中原区",pid:410100},{value:410103,label:"二七区",pid:410100},{value:410104,label:"管城回族区",pid:410100},{value:410105,label:"金水区",pid:410100},{value:410106,label:"上街区",pid:410100},{value:410108,label:"惠济区",pid:410100},{value:410122,label:"中牟县",pid:410100},{value:410181,label:"巩义市",pid:410100},{value:410182,label:"荥阳市",pid:410100},{value:410183,label:"新密市",pid:410100},{value:410184,label:"新郑市",pid:410100},{value:410185,label:"登封市",pid:410100},{value:410186,label:"郑东新区",pid:410100},{value:410187,label:"郑汴新区",pid:410100},{value:410188,label:"高新开发区",pid:410100},{value:410189,label:"经济开发区",pid:410100},{value:410190,label:"航空港区",pid:410100}]},{value:410200,label:"开封市",pid:41e4,children:[{value:410202,label:"龙亭区",pid:410200},{value:410203,label:"顺河回族区",pid:410200},{value:410204,label:"鼓楼区",pid:410200},{value:410205,label:"禹王台区",pid:410200},{value:410212,label:"祥符区",pid:410200},{value:410221,label:"杞县",pid:410200},{value:410222,label:"通许县",pid:410200},{value:410223,label:"尉氏县",pid:410200},{value:410225,label:"兰考县",pid:410200},{value:410226,label:"经济技术开发区",pid:410200}]},{value:410300,label:"洛阳市",pid:41e4,children:[{value:410302,label:"老城区",pid:410300},{value:410303,label:"西工区",pid:410300},{value:410304,label:"瀍河回族区",pid:410300},{value:410305,label:"涧西区",pid:410300},{value:410306,label:"吉利区",pid:410300},{value:410311,label:"洛龙区",pid:410300},{value:410322,label:"孟津县",pid:410300},{value:410323,label:"新安县",pid:410300},{value:410324,label:"栾川县",pid:410300},{value:410325,label:"嵩县",pid:410300},{value:410326,label:"汝阳县",pid:410300},{value:410327,label:"宜阳县",pid:410300},{value:410328,label:"洛宁县",pid:410300},{value:410329,label:"伊川县",pid:410300},{value:410381,label:"偃师市",pid:410300},{value:410382,label:"洛阳新区",pid:410300},{value:410383,label:"高新区",pid:410300}]},{value:410400,label:"平顶山市",pid:41e4,children:[{value:410402,label:"新华区",pid:410400},{value:410403,label:"卫东区",pid:410400},{value:410404,label:"石龙区",pid:410400},{value:410411,label:"湛河区",pid:410400},{value:410421,label:"宝丰县",pid:410400},{value:410422,label:"叶县",pid:410400},{value:410423,label:"鲁山县",pid:410400},{value:410425,label:"郏县",pid:410400},{value:410481,label:"舞钢市",pid:410400},{value:410482,label:"汝州市",pid:410400},{value:410483,label:"高新区",pid:410400},{value:410484,label:"新城区",pid:410400}]},{value:410500,label:"安阳市",pid:41e4,children:[{value:410502,label:"文峰区",pid:410500},{value:410503,label:"北关区",pid:410500},{value:410505,label:"殷都区",pid:410500},{value:410506,label:"龙安区",pid:410500},{value:410522,label:"安阳县",pid:410500},{value:410523,label:"汤阴县",pid:410500},{value:410526,label:"滑县",pid:410500},{value:410527,label:"内黄县",pid:410500},{value:410581,label:"林州市",pid:410500},{value:410582,label:"安阳新区",pid:410500}]},{value:410600,label:"鹤壁市",pid:41e4,children:[{value:410602,label:"鹤山区",pid:410600},{value:410603,label:"山城区",pid:410600},{value:410611,label:"淇滨区",pid:410600},{value:410621,label:"浚县",pid:410600},{value:410622,label:"淇县",pid:410600}]},{value:410700,label:"新乡市",pid:41e4,children:[{value:410702,label:"红旗区",pid:410700},{value:410703,label:"卫滨区",pid:410700},{value:410704,label:"凤泉区",pid:410700},{value:410711,label:"牧野区",pid:410700},{value:410721,label:"新乡县",pid:410700},{value:410724,label:"获嘉县",pid:410700},{value:410725,label:"原阳县",pid:410700},{value:410726,label:"延津县",pid:410700},{value:410727,label:"封丘县",pid:410700},{value:410728,label:"长垣县",pid:410700},{value:410781,label:"卫辉市",pid:410700},{value:410782,label:"辉县市",pid:410700}]},{value:410800,label:"焦作市",pid:41e4,children:[{value:410802,label:"解放区",pid:410800},{value:410803,label:"中站区",pid:410800},{value:410804,label:"马村区",pid:410800},{value:410811,label:"山阳区",pid:410800},{value:410821,label:"修武县",pid:410800},{value:410822,label:"博爱县",pid:410800},{value:410823,label:"武陟县",pid:410800},{value:410825,label:"温县",pid:410800},{value:410882,label:"沁阳市",pid:410800},{value:410883,label:"孟州市",pid:410800}]},{value:410900,label:"濮阳市",pid:41e4,children:[{value:410902,label:"华龙区",pid:410900},{value:410922,label:"清丰县",pid:410900},{value:410923,label:"南乐Line truncated
pid:450400},{value:450422,label:"藤县",pid:450400},{value:450423,label:"蒙山县",pid:450400},{value:450481,label:"岑溪市",pid:450400}]},{value:450500,label:"北海市",pid:45e4,children:[{value:450502,label:"海城区",pid:450500},{value:450503,label:"银海区",pid:450500},{value:450512,label:"铁山港区",pid:450500},{value:450521,label:"合浦县",pid:450500}]},{value:450600,label:"防城港市",pid:45e4,children:[{value:450602,label:"港口区",pid:450600},{value:450603,label:"防城区",pid:450600},{value:450621,label:"上思县",pid:450600},{value:450681,label:"东兴市",pid:450600}]},{value:450700,label:"钦州市",pid:45e4,children:[{value:450702,label:"钦南区",pid:450700},{value:450703,label:"钦北区",pid:450700},{value:450721,label:"灵山县",pid:450700},{value:450722,label:"浦北县",pid:450700}]},{value:450800,label:"贵港市",pid:45e4,children:[{value:450802,label:"港北区",pid:450800},{value:450803,label:"港南区",pid:450800},{value:450804,label:"覃塘区",pid:450800},{value:450821,label:"平南县",pid:450800},{value:450881,label:"桂平市",pid:450800}]},{value:450900,label:"玉林市",pid:45e4,children:[{value:450902,label:"玉州区",pid:450900},{value:450903,label:"福绵区",pid:450900},{value:450921,label:"容县",pid:450900},{value:450922,label:"陆川县",pid:450900},{value:450923,label:"博白县",pid:450900},{value:450924,label:"兴业县",pid:450900},{value:450981,label:"北流市",pid:450900},{value:450982,label:"玉东新区",pid:450900},{value:450983,label:"高新区",pid:450900}]},{value:451e3,label:"百色市",pid:45e4,children:[{value:451002,label:"右江区",pid:451e3},{value:451021,label:"田阳县",pid:451e3},{value:451022,label:"田东县",pid:451e3},{value:451023,label:"平果县",pid:451e3},{value:451024,label:"德保县",pid:451e3},{value:451026,label:"那坡县",pid:451e3},{value:451027,label:"凌云县",pid:451e3},{value:451028,label:"乐业县",pid:451e3},{value:451029,label:"田林县",pid:451e3},{value:451030,label:"西林县",pid:451e3},{value:451031,label:"隆林各族自治县",pid:451e3},{value:451081,label:"靖西市",pid:451e3}]},{value:451100,label:"贺州市",pid:45e4,children:[{value:451102,label:"八步区",pid:451100},{value:451103,label:"平桂区",pid:451100},{value:451121,label:"昭平县",pid:451100},{value:451122,label:"钟山县",pid:451100},{value:451123,label:"富川瑶族自治县",pid:451100}]},{value:451200,label:"河池市",pid:45e4,children:[{value:451202,label:"金城江区",pid:451200},{value:451203,label:"宜州区",pid:451200},{value:451221,label:"南丹县",pid:451200},{value:451222,label:"天峨县",pid:451200},{value:451223,label:"凤山县",pid:451200},{value:451224,label:"东兰县",pid:451200},{value:451225,label:"罗城仫佬族自治县",pid:451200},{value:451226,label:"环江毛南族自治县",pid:451200},{value:451227,label:"巴马瑶族自治县",pid:451200},{value:451228,label:"都安瑶族自治县",pid:451200},{value:451229,label:"大化瑶族自治县",pid:451200}]},{value:451300,label:"来宾市",pid:45e4,children:[{value:451302,label:"兴宾区",pid:451300},{value:451321,label:"忻城县",pid:451300},{value:451322,label:"象州县",pid:451300},{value:451323,label:"武宣县",pid:451300},{value:451324,label:"金秀瑶族自治县",pid:451300},{value:451381,label:"合山市",pid:451300}]},{value:451400,label:"崇左市",pid:45e4,children:[{value:451402,label:"江州区",pid:451400},{value:451421,label:"扶绥县",pid:451400},{value:451422,label:"宁明县",pid:451400},{value:451423,label:"龙州县",pid:451400},{value:451424,label:"大新县",pid:451400},{value:451425,label:"天等县",pid:451400},{value:451481,label:"凭祥市",pid:451400}]}]},{value:46e4,label:"海南省",pid:1e5,children:[{value:460100,label:"海口市",pid:46e4,children:[{value:460105,label:"秀英区",pid:460100},{value:460106,label:"龙华区",pid:460100},{value:460107,label:"琼山区",pid:460100},{value:460108,label:"美兰区",pid:460100},{value:460109,label:"江东新区",pid:460100}]},{value:460200,label:"三亚市",pid:46e4,children:[{value:460202,label:"海棠区",pid:460200},{value:460203,label:"吉阳区",pid:460200},{value:460204,label:"天涯区",pid:460200},{value:460205,label:"崖州区",pid:460200}]},{value:460300,label:"三沙市",pid:46e4,children:[{value:460321,label:"西沙群岛",pid:460300},{value:460322,label:"南沙群岛",pid:460300},{value:460323,label:"中沙群岛",pid:460300}]},{value:460400,label:"儋州市",pid:46e4,children:[{value:460401,label:"洋浦经济开发区",pid:460400},{value:460402,label:"那大镇",pid:460400},{value:460403,label:"南丰镇",pid:460400},{value:460404,label:"雅星镇",pid:460400},{value:460405,label:"和庆镇",pid:460400},{value:460406,label:"大成镇",pid:460400},{value:460407,label:"新州镇",pid:460400},{value:460408,label:"光村镇",pid:460400},{value:460409,label:"东成镇",pid:460400},{value:460410,label:"中和镇",pid:460400},{value:460411,label:"峨蔓Line truncated
pid:532300},{value:532329,label:"武定县",pid:532300},{value:532331,label:"禄丰县",pid:532300}]},{value:532500,label:"红河哈尼族彝族自治州",pid:53e4,children:[{value:532501,label:"个旧市",pid:532500},{value:532502,label:"开远市",pid:532500},{value:532503,label:"蒙自市",pid:532500},{value:532504,label:"弥勒市",pid:532500},{value:532523,label:"屏边苗族自治县",pid:532500},{value:532524,label:"建水县",pid:532500},{value:532525,label:"石屏县",pid:532500},{value:532527,label:"泸西县",pid:532500},{value:532528,label:"元阳县",pid:532500},{value:532529,label:"红河县",pid:532500},{value:532530,label:"金平苗族瑶族傣族自治县",pid:532500},{value:532531,label:"绿春县",pid:532500},{value:532532,label:"河口瑶族自治县",pid:532500}]},{value:532600,label:"文山壮族苗族自治州",pid:53e4,children:[{value:532601,label:"文山市",pid:532600},{value:532622,label:"砚山县",pid:532600},{value:532623,label:"西畴县",pid:532600},{value:532624,label:"麻栗坡县",pid:532600},{value:532625,label:"马关县",pid:532600},{value:532626,label:"丘北县",pid:532600},{value:532627,label:"广南县",pid:532600},{value:532628,label:"富宁县",pid:532600}]},{value:532800,label:"西双版纳傣族自治州",pid:53e4,children:[{value:532801,label:"景洪市",pid:532800},{value:532822,label:"勐海县",pid:532800},{value:532823,label:"勐腊县",pid:532800}]},{value:532900,label:"大理白族自治州",pid:53e4,children:[{value:532901,label:"大理市",pid:532900},{value:532922,label:"漾濞彝族自治县",pid:532900},{value:532923,label:"祥云县",pid:532900},{value:532924,label:"宾川县",pid:532900},{value:532925,label:"弥渡县",pid:532900},{value:532926,label:"南涧彝族自治县",pid:532900},{value:532927,label:"巍山彝族回族自治县",pid:532900},{value:532928,label:"永平县",pid:532900},{value:532929,label:"云龙县",pid:532900},{value:532930,label:"洱源县",pid:532900},{value:532931,label:"剑川县",pid:532900},{value:532932,label:"鹤庆县",pid:532900}]},{value:533100,label:"德宏傣族景颇族自治州",pid:53e4,children:[{value:533102,label:"瑞丽市",pid:533100},{value:533103,label:"芒市",pid:533100},{value:533122,label:"梁河县",pid:533100},{value:533123,label:"盈江县",pid:533100},{value:533124,label:"陇川县",pid:533100}]},{value:533300,label:"怒江傈僳族自治州",pid:53e4,children:[{value:533301,label:"泸水市",pid:533300},{value:533323,label:"福贡县",pid:533300},{value:533324,label:"贡山独龙族怒族自治县",pid:533300},{value:533325,label:"兰坪白族普米族自治县",pid:533300}]},{value:533400,label:"迪庆藏族自治州",pid:53e4,children:[{value:533401,label:"香格里拉市",pid:533400},{value:533422,label:"德钦县",pid:533400},{value:533423,label:"维西傈僳族自治县",pid:533400}]}]},{value:54e4,label:"西藏自治区",pid:1e5,children:[{value:540100,label:"拉萨市",pid:54e4,children:[{value:540102,label:"城关区",pid:540100},{value:540103,label:"堆龙德庆区",pid:540100},{value:540104,label:"达孜区",pid:540100},{value:540121,label:"林周县",pid:540100},{value:540122,label:"当雄县",pid:540100},{value:540123,label:"尼木县",pid:540100},{value:540124,label:"曲水县",pid:540100},{value:540127,label:"墨竹工卡县",pid:540100},{value:540171,label:"格尔木藏青工业园区",pid:540100},{value:540173,label:"西藏文化旅游创意园区",pid:540100},{value:540174,label:"达孜工业园区",pid:540100}]},{value:540200,label:"日喀则市",pid:54e4,children:[{value:540202,label:"桑珠孜区",pid:540200},{value:540221,label:"南木林县",pid:540200},{value:540222,label:"江孜县",pid:540200},{value:540223,label:"定日县",pid:540200},{value:540224,label:"萨迦县",pid:540200},{value:540225,label:"拉孜县",pid:540200},{value:540226,label:"昂仁县",pid:540200},{value:540227,label:"谢通门县",pid:540200},{value:540228,label:"白朗县",pid:540200},{value:540229,label:"仁布县",pid:540200},{value:540230,label:"康马县",pid:540200},{value:540231,label:"定结县",pid:540200},{value:540232,label:"仲巴县",pid:540200},{value:540233,label:"亚东县",pid:540200},{value:540234,label:"吉隆县",pid:540200},{value:540235,label:"聂拉木县",pid:540200},{value:540236,label:"萨嘎县",pid:540200},{value:540237,label:"岗巴县",pid:540200}]},{value:540300,label:"昌都市",pid:54e4,children:[{value:540302,label:"卡若区",pid:540300},{value:540321,label:"江达县",pid:540300},{value:540322,label:"贡觉县",pid:540300},{value:540323,label:"类乌齐县",pid:540300},{value:540324,label:"丁青县",pid:540300},{value:540325,label:"察雅县",pid:540300},{value:540326,label:"八宿县",pid:540300},{value:540327,label:"左贡县",pid:540300},{value:540328,label:"芒康县",pid:540300},{value:540329,label:"洛隆县",pid:540300},{value:540330,label:"边坝县",pid:540300}]},{value:540400,label:"林芝市",pid:54e4,children:[{value:540402,label:"巴宜区",pid:5404Line truncated
},{value:712302,label:"中坜市",pid:712300},{value:712303,label:"平镇市",pid:712300},{value:712304,label:"八德市",pid:712300},{value:712305,label:"杨梅市",pid:712300},{value:712306,label:"芦竹市",pid:712300},{value:712321,label:"大溪镇",pid:712300},{value:712324,label:"大园乡",pid:712300},{value:712325,label:"龟山乡",pid:712300},{value:712327,label:"龙潭乡",pid:712300},{value:712329,label:"新屋乡",pid:712300},{value:712330,label:"观音乡",pid:712300},{value:712331,label:"复兴乡",pid:712300}]},{value:712400,label:"新竹县",pid:71e4,children:[{value:712401,label:"竹北市",pid:712400},{value:712421,label:"竹东镇",pid:712400},{value:712422,label:"新埔镇",pid:712400},{value:712423,label:"关西镇",pid:712400},{value:712424,label:"湖口乡",pid:712400},{value:712425,label:"新丰乡",pid:712400},{value:712426,label:"芎林乡",pid:712400},{value:712427,label:"横山乡",pid:712400},{value:712428,label:"北埔乡",pid:712400},{value:712429,label:"宝山乡",pid:712400},{value:712430,label:"峨眉乡",pid:712400},{value:712431,label:"尖石乡",pid:712400},{value:712432,label:"五峰乡",pid:712400}]},{value:712500,label:"苗栗县",pid:71e4,children:[{value:712501,label:"苗栗市",pid:712500},{value:712521,label:"苑里镇",pid:712500},{value:712522,label:"通霄镇",pid:712500},{value:712523,label:"竹南镇",pid:712500},{value:712524,label:"头份市",pid:712500},{value:712525,label:"后龙镇",pid:712500},{value:712526,label:"卓兰镇",pid:712500},{value:712527,label:"大湖乡",pid:712500},{value:712528,label:"公馆乡",pid:712500},{value:712529,label:"铜锣乡",pid:712500},{value:712530,label:"南庄乡",pid:712500},{value:712531,label:"头屋乡",pid:712500},{value:712532,label:"三义乡",pid:712500},{value:712533,label:"西湖乡",pid:712500},{value:712534,label:"造桥乡",pid:712500},{value:712535,label:"三湾乡",pid:712500},{value:712536,label:"狮潭乡",pid:712500},{value:712537,label:"泰安乡",pid:712500}]},{value:712700,label:"彰化县",pid:71e4,children:[{value:712701,label:"彰化市",pid:712700},{value:712721,label:"鹿港镇",pid:712700},{value:712722,label:"和美镇",pid:712700},{value:712723,label:"线西乡",pid:712700},{value:712724,label:"伸港乡",pid:712700},{value:712725,label:"福兴乡",pid:712700},{value:712726,label:"秀水乡",pid:712700},{value:712727,label:"花坛乡",pid:712700},{value:712728,label:"芬园乡",pid:712700},{value:712729,label:"员林市",pid:712700},{value:712730,label:"溪湖镇",pid:712700},{value:712731,label:"田中镇",pid:712700},{value:712732,label:"大村乡",pid:712700},{value:712733,label:"埔盐乡",pid:712700},{value:712734,label:"埔心乡",pid:712700},{value:712735,label:"永靖乡",pid:712700},{value:712736,label:"社头乡",pid:712700},{value:712737,label:"二水乡",pid:712700},{value:712738,label:"北斗镇",pid:712700},{value:712739,label:"二林镇",pid:712700},{value:712740,label:"田尾乡",pid:712700},{value:712741,label:"埤头乡",pid:712700},{value:712742,label:"芳苑乡",pid:712700},{value:712743,label:"大城乡",pid:712700},{value:712744,label:"竹塘乡",pid:712700},{value:712745,label:"溪州乡",pid:712700}]},{value:712800,label:"南投县",pid:71e4,children:[{value:712801,label:"南投市",pid:712800},{value:712821,label:"埔里镇",pid:712800},{value:712822,label:"草屯镇",pid:712800},{value:712823,label:"竹山镇",pid:712800},{value:712824,label:"集集镇",pid:712800},{value:712825,label:"名间乡",pid:712800},{value:712826,label:"鹿谷乡",pid:712800},{value:712827,label:"中寮乡",pid:712800},{value:712828,label:"鱼池乡",pid:712800},{value:712829,label:"国姓乡",pid:712800},{value:712830,label:"水里乡",pid:712800},{value:712831,label:"信义乡",pid:712800},{value:712832,label:"仁爱乡",pid:712800}]},{value:712900,label:"云林县",pid:71e4,children:[{value:712901,label:"斗六市",pid:712900},{value:712921,label:"斗南镇",pid:712900},{value:712922,label:"虎尾镇",pid:712900},{value:712923,label:"西螺镇",pid:712900},{value:712924,label:"土库镇",pid:712900},{value:712925,label:"北港镇",pid:712900},{value:712926,label:"古坑乡",pid:712900},{value:712927,label:"大埤乡",pid:712900},{value:712928,label:"莿桐乡",pid:712900},{value:712929,label:"林内乡",pid:712900},{value:712930,label:"二仑乡",pid:712900},{value:712931,label:"仑背乡",pid:712900},{value:712932,label:"麦寮乡",pid:712900},{value:712933,label:"东势乡",pid:712900},{value:712934,label:"褒忠乡",pid:712900},{value:712935,label:"台西乡",pid:712900},{value:712936,label:"元长乡",pid:712900},{value:712937,label:"四湖乡",pid:712900},{value:712938,label:"口湖乡",pid:712900},{value:712939,label:"水林乡",pid:712900}]},{value:713e3,label:"嘉义县",pid:71e4,children:[{value:713001,label:"太保市",pid:713e3},{value:713002,label:"朴子市",pid:713e3},{value:713023,label:"布袋镇",pid:713e3},{value:713024,label:"大林镇",pid:713e3},{value:713025,label:Line truncated
+41
View File
@@ -0,0 +1,41 @@
const Cache = {
//设置缓存(expire为缓存时效)
set(key, value, expire) {
let data = {
expire: expire ? (this.time() + expire) : "",
value
}
if (typeof data === 'object')
data = JSON.stringify(data);
try {
uni.setStorageSync(key, data)
} catch (e) {
return false;
}
},
get(key) {
try {
let data = uni.getStorageSync(key)
const {value, expire} = JSON.parse(data)
if(expire && expire < this.time()) {
uni.removeStorageSync(key)
return false;
}else {
return value
}
} catch (e) {
return false;
}
},
//获取当前时间
time() {
return Math.round(new Date() / 1000);
},
remove(key) {
if(key) uni.removeStorageSync(key)
}
}
export default Cache;
+104
View File
@@ -0,0 +1,104 @@
import {
silentLogin
} from '@/api/app';
import {
isWeixinClient,
currentPage,
trottle,
tabbarList
} from './tools'
import store from '@/store'
import Cache from './cache'
import {
BACK_URL
} from '@/config/cachekey'
import wechath5 from './wechath5'
import {
inputInviteCode
} from '@/api/user'
// 获取登录凭证(code)
export function getWxCode() {
return new Promise((resolve, reject) => {
uni.login({
success(res) {
resolve(res.code);
},
fail(res) {
reject(res);
}
});
});
}
//小程序获取用户信息
export function getUserProfile() {
return new Promise((resolve, reject) => {
uni.getUserProfile({
desc: '获取用户信息,完善用户资料 ',
success: (res) => {
resolve(res);
},
fail(res) {}
})
})
}
export const wxMnpLogin = trottle(_wxMnpLogin, 1000)
//小程序静默授权
async function _wxMnpLogin() {
const code = await getWxCode()
const {code:loginCode, data: loginData} = await silentLogin({
code
})
const {
options,
onLoad,
onShow,
route
} = currentPage()
if(loginCode != 1) return
if (loginData.token && !loginData.is_new_user) {
store.commit('LOGIN', loginData)
onLoad && onLoad(options)
onShow && onShow()
const inviteCode = Cache.get("INVITE_CODE")
if (inviteCode) {
Cache.remove("INVITE_CODE")
inputInviteCode({
code: inviteCode
})
}
} else {
const loginRoute = '/pages/login/login'
if (!tabbarList.includes(route)) {
if(loginRoute.includes(route)) return
uni.navigateTo({
url: loginRoute
})
}
}
}
export const toLogin = trottle(_toLogin, 1000)
// 去登录
function _toLogin() {
uni.navigateTo({
url: '/pages/login/login'
});
//#ifdef H5
const pathLogin = 'pages/login/login'
let path = currentPage().route
if (path != pathLogin) {
uni.navigateTo({
url: '/pages/login/login'
})
}
// #endif
}
+110
View File
@@ -0,0 +1,110 @@
// +----------------------------------------------------------------------
// | likeshop开源商城系统
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | gitee下载:https://gitee.com/likeshop_gitee
// | github下载:https://github.com/likeshop-github
// | 访问官网:https://www.likeshop.cn
// | 访问社区:https://home.likeshop.cn
// | 访问手册:http://doc.likeshop.cn
// | 微信公众号:likeshop技术社区
// | likeshop系列产品在gitee、github等公开渠道开源版本可免费商用,未经许可不能去除前后端官方版权标识
// | likeshop系列产品收费版本务必购买商业授权,购买去版权授权后,方可去除前后端官方版权标识
// | 禁止对系统程序代码以任何目的,任何形式的再发布
// | likeshop团队版权所有并拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeshop.cn.team
// +----------------------------------------------------------------------
import wechath5 from './wechath5'
import {
currentPage,
isWeixinClient
} from './tools'
export function wxpay(opt) {
//#ifdef H5
if(isWeixinClient()) {
return wechath5.wxPay(opt)
}else {
console.log(opt)
location.href=opt
}
// #endif
//#ifndef H5
return new Promise((resolve, reject) => {
// #ifdef MP-WEIXIN
const params = {
timeStamp: opt.timeStamp,
// 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
nonceStr: opt.nonceStr,
// 支付签名随机串,不长于 32 位
package: opt.package,
// 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
signType: opt.signType,
// 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
paySign: opt.paySign,
}
// #endif
// #ifdef APP-PLUS
const params = {
orderInfo: opt
}
// #endif
console.log(params)
uni.requestPayment({
provider: 'wxpay',
...params,
success: res => {
resolve('success');
},
cancel: res => {
resolve('fail');
},
fail: res => {
resolve('fail');
}
});
});
// #endif
}
export function alipay(opt) {
//#ifdef H5
const div = document.createElement('div')
console.log(opt)
/* 此处form就是后台返回接收到的数据 */
div.innerHTML = opt
document.body.appendChild(div)
document.forms[0].submit()
return
// #endif
// #ifdef APP-PLUS
return new Promise((resolve, reject) => {
const params = {
orderInfo: opt
}
console.log(params)
uni.requestPayment({
provider: 'alipay',
...params,
success: res => {
resolve('success');
},
cancel: res => {
console.log(res)
resolve('fail');
},
fail: res => {
console.log(res)
resolve('fail');
}
});
})
// #endif
}
+348
View File
@@ -0,0 +1,348 @@
/**
* 本模块封装了Android、iOS的应用权限判断、打开应用权限设置界面、以及位置系统服务是否开启
*/
var isIos
// #ifdef APP-PLUS
isIos = (plus.os.name == "iOS")
// #endif
// 判断推送权限是否开启
function judgeIosPermissionPush() {
var result = 0;
var UIApplication = plus.ios.import("UIApplication");
var app = UIApplication.sharedApplication();
var enabledTypes = 0;
if (app.currentUserNotificationSettings) {
var settings = app.currentUserNotificationSettings();
enabledTypes = settings.plusGetAttribute("types");
if (enabledTypes == 0) {
console.log("推送权限没有开启");
} else {
result = 1;
console.log("已经开启推送功能!")
}
plus.ios.deleteObject(settings);
} else {
enabledTypes = app.enabledRemoteNotificationTypes();
if (enabledTypes == 0) {
console.log("推送权限没有开启!");
} else {
result = 1;
console.log("已经开启推送功能!")
}
console.log("enabledTypes2:" + enabledTypes);
}
plus.ios.deleteObject(app);
plus.ios.deleteObject(UIApplication);
return result;
}
// 判断定位权限是否开启
function judgeIosPermissionLocation() {
var result = 0;
var cllocationManger = plus.ios.import("CLLocationManager");
var status = cllocationManger.authorizationStatus();
result = (status != 2) ? 1 : 0;
console.log("定位权限开启:" + result);
// 以下代码判断了手机设备的定位是否关闭,推荐另行使用方法 checkSystemEnableLocation
/* var enable = cllocationManger.locationServicesEnabled();
var status = cllocationManger.authorizationStatus();
console.log("enable:" + enable);
console.log("status:" + status);
if (enable && status != 2) {
result = true;
console.log("手机定位服务已开启且已授予定位权限");
} else {
console.log("手机系统的定位没有打开或未给予定位权限");
} */
plus.ios.deleteObject(cllocationManger);
return {
result: result,
permissionName: "定位"
};
}
// 判断麦克风权限是否开启
function judgeIosPermissionRecord() {
var result = 0;
var avaudiosession = plus.ios.import("AVAudioSession");
var avaudio = avaudiosession.sharedInstance();
var permissionStatus = avaudio.recordPermission();
console.log("permissionStatus:" + permissionStatus);
if (permissionStatus == 1684369017 || permissionStatus == 1970168948) {
console.log("麦克风权限没有开启");
} else {
result = 1;
console.log("麦克风权限已经开启");
}
plus.ios.deleteObject(avaudiosession);
return {
result: result,
permissionName: "麦克风"
};
}
// 判断相机权限是否开启
function judgeIosPermissionCamera() {
var result = 0;
var AVCaptureDevice = plus.ios.import("AVCaptureDevice");
var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide');
console.log("authStatus:" + authStatus);
if (authStatus == 3) {
result = 1;
console.log("相机权限已经开启");
} else {
console.log("相机权限没有开启");
}
plus.ios.deleteObject(AVCaptureDevice);
return {
result: result,
permissionName: "相机"
};
}
// 判断相册权限是否开启
function judgeIosPermissionPhotoLibrary() {
var result = 0;
var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");
var authStatus = PHPhotoLibrary.authorizationStatus();
console.log("authStatus:" + authStatus);
if (authStatus == 3) {
result = 1;
console.log("相册权限已经开启");
} else {
console.log("相册权限没有开启");
}
plus.ios.deleteObject(PHPhotoLibrary);
return {
result: result,
permissionName: "相册"
};
}
// 判断通讯录权限是否开启
function judgeIosPermissionContact() {
var result = 0;
var CNContactStore = plus.ios.import("CNContactStore");
var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);
if (cnAuthStatus == 3) {
result = 1;
console.log("通讯录权限已经开启");
} else {
console.log("通讯录权限没有开启");
}
plus.ios.deleteObject(CNContactStore);
return {
result: result,
permissionName: "通讯录"
};
}
// 判断日历权限是否开启
function judgeIosPermissionCalendar() {
var result = 0;
var EKEventStore = plus.ios.import("EKEventStore");
var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0);
if (ekAuthStatus == 3) {
result = 1;
console.log("日历权限已经开启");
} else {
console.log("日历权限没有开启");
}
plus.ios.deleteObject(EKEventStore);
return {
result: result,
permissionName: "日历"
};
}
// 判断备忘录权限是否开启
function judgeIosPermissionMemo() {
var result = 0;
var EKEventStore = plus.ios.import("EKEventStore");
var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1);
if (ekAuthStatus == 3) {
result = 1;
console.log("备忘录权限已经开启");
} else {
console.log("备忘录权限没有开启");
}
plus.ios.deleteObject(EKEventStore);
return {
result: result,
permissionName: "备忘录"
};
}
// Android权限查询
function requestAndroidPermission(permissionID, permissionName) {
return new Promise((resolve, reject) => {
plus.android.requestPermissions(
[permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装
function (resultObj) {
var result = 0;
for (var i = 0; i < resultObj.granted.length; i++) {
var grantedPermission = resultObj.granted[i];
console.log('已获取的权限:' + grantedPermission);
result = 1
}
for (var i = 0; i < resultObj.deniedPresent.length; i++) {
var deniedPresentPermission = resultObj.deniedPresent[i];
console.log('拒绝本次申请的权限:' + deniedPresentPermission);
result = 0
}
for (var i = 0; i < resultObj.deniedAlways.length; i++) {
var deniedAlwaysPermission = resultObj.deniedAlways[i];
console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);
result = -1
}
resolve({
result: result,
permissionName: permissionName
});
// 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限
// if (result != 1) {
// gotoAppPermissionSetting()
// }
},
function (error) {
console.log('申请权限错误:' + error.code + " = " + error.message);
resolve({
code: error.code,
message: error.message
});
}
);
});
}
// 使用一个方法,根据参数判断权限
function judgePermission(permissionID, callback) {
function handle(res) {
callback && callback(res.result);
if (res.result === -1 || res.result === 0) {
uni.showModal({
title: "提示",
content: "您未授权" + res.permissionName + "权限,是否去应用设置里授权?",
confirmText: "确认",
cancelText: "取消",
success: (data) => {
if (data.confirm) {
gotoAppPermissionSetting();
}
}
});
}
}
if (permissionID == "location") { // 位置
if (isIos) {
handle(judgeIosPermissionLocation());
} else {
requestAndroidPermission("android.permission.ACCESS_FINE_LOCATION", "位置").then(handle);
}
} else if (permissionID == "camera") { // 摄像头
if (isIos) {
handle(judgeIosPermissionCamera());
} else {
requestAndroidPermission("android.permission.CAMERA", "摄像头").then(handle);
}
} else if (permissionID == "photoLibrary") { // 相册
if (isIos) {
handle(judgeIosPermissionPhotoLibrary());
} else {
requestAndroidPermission("android.permission.READ_EXTERNAL_STORAGE", "相册读取").then(handle);
}
} else if (permissionID == "record") { // 麦克风
if (isIos) {
handle(judgeIosPermissionRecord());
} else {
requestAndroidPermission("android.permission.RECORD_AUDIO", "麦克风").then(handle);
}
} else if (permissionID == "push") { // 推送
if (isIos) {
handle(judgeIosPermissionPush());
} else {
handle(1);
}
} else if (permissionID == "contact") { // 通讯录
if (isIos) {
handle(judgeIosPermissionContact());
} else {
requestAndroidPermission("android.permission.READ_CONTACTS", "通讯录读取").then(handle);
}
} else if (permissionID == "calendar") { // 日历
if (isIos) {
handle(judgeIosPermissionCalendar());
} else {
requestAndroidPermission("android.permission.READ_CALENDAR", "日历读取").then(handle);
}
} else if (permissionID == "memo") { // 备忘录
if (isIos) {
handle(judgeIosPermissionMemo());
} else {
handle(1);
}
} else if (permissionID == "call_phone") { // 拨打电话
if (isIos) {
handle(1);
} else {
requestAndroidPermission("android.permission.CALL_PHONE", "拨打电话").then(handle);
}
}
}
// 跳转到**应用**的权限页面
function gotoAppPermissionSetting() {
if (isIos) {
var UIApplication = plus.ios.import("UIApplication");
var application2 = UIApplication.sharedApplication();
var NSURL2 = plus.ios.import("NSURL");
// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");
var setting2 = NSURL2.URLWithString("app-settings:");
application2.openURL(setting2);
plus.ios.deleteObject(setting2);
plus.ios.deleteObject(NSURL2);
plus.ios.deleteObject(application2);
} else {
// console.log(plus.device.vendor);
var Intent = plus.android.importClass("android.content.Intent");
var Settings = plus.android.importClass("android.provider.Settings");
var Uri = plus.android.importClass("android.net.Uri");
var mainActivity = plus.android.runtimeMainActivity();
var intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
intent.setData(uri);
mainActivity.startActivity(intent);
}
}
// 检查系统的设备服务是否开启
// var checkSystemEnableLocation = async function () {
function checkSystemEnableLocation() {
if (isIos) {
var result = false;
var cllocationManger = plus.ios.import("CLLocationManager");
var result = cllocationManger.locationServicesEnabled();
console.log("系统定位开启:" + result);
plus.ios.deleteObject(cllocationManger);
return result;
} else {
var context = plus.android.importClass("android.content.Context");
var locationManager = plus.android.importClass("android.location.LocationManager");
var main = plus.android.runtimeMainActivity();
var mainSvr = main.getSystemService(context.LOCATION_SERVICE);
var result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER);
console.log("系统定位开启:" + result);
return result
}
}
module.exports = {
judgePermission: judgePermission,
requestAndroidPermission: requestAndroidPermission,
checkSystemEnableLocation: checkSystemEnableLocation,
gotoAppPermissionSetting: gotoAppPermissionSetting
}
+87
View File
@@ -0,0 +1,87 @@
import axios from "../js_sdk/xtshadow-axios/axios.min";
import store from "../store";
import { paramsToStr, currentPage, tabbarList, acountList } from "./tools";
import Cache from "./cache";
import { TOKEN, BACK_URL } from "../config/cachekey";
import { baseURL } from "../config/app";
import { getWxCode, toLogin, wxMnpLogin } from "./login";
let index = 0;
function checkParams(params) {
if (typeof params != "object") return params;
for (let key in params) {
const value = params[key];
if (value === null || value === undefined || value === "") {
delete params[key];
}
}
return params;
}
const service = axios.create({
baseURL: `${baseURL}/api/`,
timeout: 10000,
header: {
"content-type": "application/json",
},
});
// request拦截器
service.interceptors.request.use(
(config) => {
config.data = checkParams(config.data);
config.params = checkParams(config.params);
if (config.method == "GET") {
config.url += paramsToStr(config.params);
}
config.header.token = config.header.token || Cache.get(TOKEN);
return config;
},
(error) => {
// Do something with request error
console.log(error); // for debug
Promise.reject(error);
}
);
// response 拦截器
service.interceptors.response.use(
async (response) => {
if (response.data) {
const { code, show, msg } = response.data;
const { route, options } = currentPage();
if (code == 0 && show && msg) {
uni.showToast({
title: msg,
icon: "none",
});
} else if (code == -1) {
store.commit("LOGOUT");
//#ifdef MP-WEIXIN
wxMnpLogin();
// #endif
//#ifdef H5 || APP-PLUS
if (route && !tabbarList.includes(route)) {
toLogin();
}
// #endif
//#ifdef H5
if (!acountList.includes(route)) {
Cache.set(BACK_URL, `/${route}${paramsToStr(options)}`);
}
// #endif
}
}
return Promise.resolve(response.data);
},
(error) => {
// tryHideFullScreenLoading()
console.log(error);
console.log("err" + error); // for debug
return Promise.reject(error);
}
);
export default service;
+405
View File
@@ -0,0 +1,405 @@
import { loadingType } from "./type";
import { baseURL } from "@/config/app.js";
import store from "@/store";
//所在环境
let client = null;
// #ifdef MP-WEIXIN
client = 1;
// #endif
// #ifdef H5
client = isWeixinClient() ? 2 : 6;
// #endif
// #ifdef APP-PLUS
client = 3;
uni.getSystemInfo({
success: (res) => {
client = res.platform == "ios" ? 3 : 4;
},
fail: (res) => {
client = 3;
},
});
// #endif
export { client };
//节流
export const trottle = (func, time = 1000, context) => {
let previous = new Date(0).getTime();
return function (...args) {
let now = new Date().getTime();
if (now - previous > time) {
func.apply(context, args);
previous = now;
}
};
};
//判断是否为微信环境
export function isWeixinClient() {
var ua = navigator.userAgent.toLowerCase();
if (ua.match(/MicroMessenger/i) == "micromessenger") {
//这是微信环境
return true;
} else {
//这是非微信环境
return false;
}
}
//判断是否为安卓环境
export function isAndroid() {
let u = navigator.userAgent;
return u.indexOf("Android") > -1 || u.indexOf("Adr") > -1;
}
//获取url后的参数 以对象返回
export function strToParams(str) {
var newparams = {};
for (let item of str.split("&")) {
newparams[item.split("=")[0]] = item.split("=")[1];
}
return newparams;
}
//重写encodeURL函数
export function urlencode(str) {
str = (str + "").toString();
return encodeURIComponent(str)
.replace(/!/g, "%21")
.replace(/'/g, "%27")
.replace(/\(/g, "%28")
.replace(/\)/g, "%29")
.replace(/\*/g, "%2A")
.replace(/%20/g, "+");
}
//一维数组截取为二维数组
export function arraySlice(data, array = [], optNum = 10) {
data = JSON.parse(JSON.stringify(data));
if (data.length <= optNum) {
data.length > 0 && array.push(data);
return array;
}
array.push(data.splice(0, optNum));
return arraySlice(data, array, optNum);
}
//对象参数转为以?&拼接的字符
export function paramsToStr(params) {
let p = "";
if (typeof params == "object") {
p = "?";
for (let props in params) {
p += `${props}=${params[props]}&`;
}
p = p.slice(0, -1);
}
return p;
}
//分页加载
export async function loadingFun(fun, page, dataList = [], status, params) {
// 拷贝对象
dataList = Object.assign([], dataList);
if (status == loadingType.FINISHED) return false;
const { code, data } = await fun({
page_no: page,
...params,
});
uni.stopPullDownRefresh();
if (code == 1) {
if (page == 1) dataList = [];
let { list, more } = data;
dataList.push(...list);
page = ++page;
if (!more) {
status = loadingType.FINISHED;
}
if (dataList.length <= 0) {
status = loadingType.EMPTY;
}
} else {
status = loadingType.ERROR;
}
return {
page,
dataList,
status,
};
}
// 获取wxml元素
export function getRect(selector, all, context) {
return new Promise(function (resolve) {
let qurey = uni.createSelectorQuery();
if (context) {
qurey = uni.createSelectorQuery().in(context);
}
qurey[all ? "selectAll" : "select"](selector)
.boundingClientRect(function (rect) {
if (all && Array.isArray(rect) && rect.length) {
resolve(rect);
}
if (!all && rect) {
resolve(rect);
}
})
.exec();
});
}
// 轻提示
export function toast(info = {}, navigateOpt) {
let title = info.title || "";
let icon = info.icon || "none";
let endtime = info.endtime || 2000;
if (title)
uni.showToast({
title: title,
icon: icon,
duration: endtime,
});
if (navigateOpt != undefined) {
if (typeof navigateOpt == "object") {
let tab = navigateOpt.tab || 1,
url = navigateOpt.url || "";
switch (tab) {
case 1:
//跳转至 table
setTimeout(function () {
uni.switchTab({
url: url,
});
}, endtime);
break;
case 2:
//跳转至非table页面
setTimeout(function () {
uni.navigateTo({
url: url,
});
}, endtime);
break;
case 3:
//返回上页面
setTimeout(function () {
uni.navigateBack({
delta: parseInt(url),
});
}, endtime);
break;
case 4:
//关闭当前所有页面跳转至非table页面
setTimeout(function () {
uni.reLaunch({
url: url,
});
}, endtime);
break;
case 5:
//关闭当前页面跳转至非table页面
setTimeout(function () {
uni.redirectTo({
url: url,
});
}, endtime);
break;
}
} else if (typeof navigateOpt == "function") {
setTimeout(function () {
navigateOpt && navigateOpt();
}, endtime);
}
}
}
//菜单跳转
export function menuJump(item) {
const { is_tab, link, link_type } = item;
switch (link_type) {
case 1:
// 本地跳转
if (is_tab) {
uni.switchTab({
url: link,
});
return;
}
uni.navigateTo({
url: link,
});
break;
case 2:
// webview
uni.navigateTo({
url: "/pages/webview/webview?url=" + link,
});
break;
case 3: // tabbar
}
}
export function uploadFile(path) {
return new Promise((resolve, reject) => {
uni.uploadFile({
url: `${baseURL}/api/file/formimage`,
filePath: path,
name: "file",
header: {
token: store.getters.token,
},
fileType: "image",
cloudPath: "",
success: (res) => {
console.log("uploadFile res ==> ", res);
let data = JSON.parse(res.data);
if (data.code == 1) {
resolve(data.data);
} else {
reject();
}
},
fail: (err) => {
console.log(err);
reject();
},
});
});
}
//当前页面
export function currentPage() {
let pages = getCurrentPages();
let currentPage = pages[pages.length - 1];
return currentPage || {};
}
// H5复制方法
export function copy(str) {
// #ifdef H5
let aux = document.createElement("input");
aux.setAttribute("value", str);
document.body.appendChild(aux);
aux.select();
document.execCommand("copy");
document.body.removeChild(aux);
uni.showToast({
title: "复制成功",
});
// #endif
// #ifndef H5
uni.setClipboardData({
data: str.toString(),
});
// #endif
}
export function setTabbar() {
const config = store.getters.appConfig;
uni.setTabBarStyle({
color: config.navigation_setting.ust_color,
selectedColor: config.navigation_setting.st_color,
});
// #ifdef APP-PLUS
config.navigation_menu.forEach((item, index) => {
uni.downloadFile({
url: item.un_selected_icon,
success: (res) => {
uni.setTabBarItem({
index,
iconPath: res.tempFilePath,
});
},
});
uni.downloadFile({
url: item.un_selected_icon,
success: (res) => {
uni.setTabBarItem({
index,
iconPath: res.tempFilePath,
});
},
});
uni.downloadFile({
url: item.selected_icon,
success: (res) => {
uni.setTabBarItem({
index,
selectedIconPath: res.tempFilePath,
});
},
});
});
// #endif
// #ifndef APP-PLUS
config.navigation_menu.forEach((item, index) => {
uni.setTabBarItem({
index,
text: item.name,
iconPath: item.un_selected_icon,
selectedIconPath: item.selected_icon,
fail(res) {
console.log(res);
},
success(res) {
// console.log(res)
},
});
});
// #endif
// #ifndef MP
uni.showTabBar();
// #endif
}
// tabbar页面路径
export const tabbarList = [
"pages/shop_cart/shop_cart",
"pages/user/user",
"pages/index/index",
"pages/sort/sort",
];
// 登录注册相关
export const acountList = [
"pages/login/login",
"pages/forget_pwd/forget_pwd",
"pages/register/register",
];
/**
* @description 获取当前微信小程序基础库版本号
*/
export function getBaseLibraryVersion() {
const { SDKVersion } = wx.getSystemInfoSync();
return SDKVersion;
}
/**
* @description 用于比较当前微信基础库版本与目标基础库版本
* 示例用法:比较小程序基础库版本是否大于等于 2.12.0 compareWeChatVersion("2.12.0")
* return 1 =>当前版本大于目标版本 return -1 =>当前版本小于目标版本 return 0 =>当前版本等于目标版本
* @param {string} targetVersion 目标微信版本号
*
*/
export function compareWeChatVersion(targetVersion) {
const currentVersion = getBaseLibraryVersion();
if (currentVersion === targetVersion) {
return 0; // 当前版本与目标版本相同
} else if (currentVersion > targetVersion) {
return 1; // 当前版本大于目标版本
} else {
return -1; // 当前版本小于目标版本
}
}
+114
View File
@@ -0,0 +1,114 @@
//分页状态
export const loadingType = {
LOADING: 'loading',
FINISHED: 'finished',
ERROR: 'error',
EMPTY: 'empty'
};
// 收藏状态
export const CollectType = {
COLLECTION: 1,
CANCEL_COLLECTION: 0
}
//支付方式
export const payWay = {
WECHAT: 1,
ALIPAY: 2,
BALANCE:3
}
export const orderType = {
ALL: 'all',
//全部
PAY: 'pay',
//待付款
DELIVERY: 'delivery',
//待收货
FINISH: 'finish',
//待收货
CLOSE: 'close' //待收货
};
// 售后状态
export const AfterSaleType = {
// 售后申请
NORMAL: 'normal',
// 处理中
HANDLING: 'apply',
// 已处理
FINISH: 'finish'
}
// 售后退款操作
export const refundOptType = {
// 仅退款
ONLY_REFUND: 0,
// 退货退款
REFUNDS: 1
}
// 短信发送
export const SMSType = {
// 注册
REGISTER: 'ZCYZ',
// 找回密码
FINDPWD: 'ZHMM',
// 登陆
LOGIN: 'YZMDL',
// 更换手机号
CHANGE_MOBILE: 'BGSJHM',
// 绑定手机号
BIND: 'BDSJHM'
}
// 分销订单状态
export const userOrderPromoteOrder = {
ALL: 0,
WAIT_RETURN: 1,
HANDLED: 2,
INVALED: 3
}
// 排序类型
export const SortType = {
NONE: '',
ASC: 'asc',
DESC: 'desc'
}
// 粉丝类型
export const FansType = {
ALL: 'all',
FIRST: 'first',
SECOND: 'second'
}
export const groupType = {
ALL: -1,
PROGESS: 0,
SUCCESS: 1,
FAIL: 2
};
export const bargainType = {
ALL: -1,
BARGINNING: 0,
SUCCESS: 1,
FAIL: 2
}
export const withdrawType = {
// 账户余额
ACCOUNT: 1,
// 微信零钱
WECHAT: 2,
// 微信收款码
PAY_WECHAT: 3,
// 支付宝收款码
PAY_ALIPAY: 4,
BANK: 5
}
+159
View File
@@ -0,0 +1,159 @@
// #ifdef H5
import weixin from "@/js_sdk/jweixin-module";
import {
isAndroid
} from "./tools"
import {
getJsconfig,
getCodeUrl,
wechatLogin
} from '@/api/app'
import store from '../store'
import Cache from './cache'
import {inputInviteCode} from "@/api/user"
class Wechath5 {
//获取微信配置url
signLink() {
if (typeof window.entryUrl === 'undefined' || window.entryUrl === '') {
window.entryUrl = location.href.split('#')[0]
}
return isAndroid() ? location.href.split('#')[0] : window.entryUrl;
}
//微信sdk配置
config() {
return new Promise((resolve) => {
getJsconfig().then(res => {
if (res.code == 1) {
let config = res.data.config
weixin.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: config.appId, // 必填,公众号的唯一标识
timestamp: config.timestamp, // 必填,生成签名的时间戳
nonceStr: config.nonceStr, // 必填,生成签名的随机串
signature: config.signature, // 必填,签名
jsApiList: config.jsApiList // 必填,需要使用的JS接口列表
});
resolve()
}
})
})
}
//获取微信登录url
getWxUrl() {
getCodeUrl().then(res => {
if (res.code == 1) {
location.href = res.data.url
}
})
}
//微信授权
authLogin(code) {
return new Promise((resolve, reject) => {
wechatLogin({
code
})
.then(res => {
if(res.code == 1) {
store.commit("LOGIN", {
token: res.data.token
});
resolve(res.data);
}
})
});
}
//微信分享
share(option) {
weixin.ready(() => {
const {
shareTitle,
shareLink,
shareImage,
shareDesc
} = option
weixin.updateTimelineShareData({
title: shareTitle, // 分享标题
link: shareLink, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: shareImage, // 分享图标
success: function(res) {
// 设置成功
}
});
// 发送给好友
weixin.updateAppMessageShareData({
title: shareTitle, // 分享标题
link: shareLink, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: shareImage, // 分享图标
desc: shareDesc,
success: function(res) {
// 设置成功
}
});
// 发送到tx微博
weixin.onMenuShareWeibo({
title: shareTitle, // 分享标题
link: shareLink, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: shareImage, // 分享图标
desc: shareDesc,
success: function(res) {
// 设置成功
}
})
})
}
wxPay(opt) {
return new Promise((reslove, reject) => {
weixin.ready(() => {
weixin.chooseWXPay({
timestamp: opt.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
nonceStr: opt.nonceStr, // 支付签名随机串,不长于 32 位
package: opt.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
signType: opt.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
paySign: opt.paySign, // 支付签名
success: (res) => {
reslove('success')
},
cancel: (res) => {
reslove('fail')
},
fail: (res) => {
reslove('fail')
},
});
});
})
}
getWxAddress() {
return new Promise((reslove, reject) => {
weixin.ready(() => {
weixin.openAddress({
success: (res) => {
reslove(res)
},
})
})
})
}
scanQRCode() {
return new Promise((reslove, reject) => {
weixin.ready(() => {
weixin.scanQRCode({
needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
success: function(res) {
reslove(res.resultStr)
}
});
})
})
}
}
export default new Wechath5()
// #endif