91 changed files with 13117 additions and 3977 deletions
@ -0,0 +1,955 @@
|
||||
[ |
||||
{ |
||||
"AchievementsId": 1, |
||||
"AchievementsName": "神木擎天接紫霄", |
||||
"AchievementsType": 1, |
||||
"IsProgress": true, |
||||
"Describe": "不死树等级达到{0}", |
||||
"RequirementTpye": 41, |
||||
"TargetType": [ |
||||
30 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 20000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 2, |
||||
"AchievementsName": "百榫连城筑铁壁", |
||||
"AchievementsType": 1, |
||||
"IsProgress": true, |
||||
"Describe": "累计加固建筑{0}次", |
||||
"RequirementTpye": 36, |
||||
"TargetType": [ |
||||
100 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 20000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 3, |
||||
"AchievementsName": "桃谷春秋历百转", |
||||
"AchievementsType": 1, |
||||
"IsProgress": true, |
||||
"Describe": "桃谷度过{0}天", |
||||
"RequirementTpye": 43, |
||||
"TargetType": [ |
||||
100 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 20000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 4, |
||||
"AchievementsName": "悬壶济世百草方", |
||||
"AchievementsType": 1, |
||||
"IsProgress": true, |
||||
"Describe": "累计使用药品{0}次", |
||||
"RequirementTpye": 35, |
||||
"TargetType": [ |
||||
100 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 20000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 5, |
||||
"AchievementsName": "晨耕暮织五十笺", |
||||
"AchievementsType": 1, |
||||
"IsProgress": true, |
||||
"Describe": "累计完成日常任务{0}个", |
||||
"RequirementTpye": 38, |
||||
"TargetType": [ |
||||
50 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 20000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 6, |
||||
"AchievementsName": "霓裳织就云霞色", |
||||
"AchievementsType": 1, |
||||
"IsProgress": true, |
||||
"Describe": "累计制作{0}件衣服", |
||||
"RequirementTpye": 40, |
||||
"TargetType": [ |
||||
200 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 20000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 7, |
||||
"AchievementsName": "八野嘉禾覆阡陌", |
||||
"AchievementsType": 1, |
||||
"IsProgress": true, |
||||
"Describe": "解锁{0}种农作物", |
||||
"RequirementTpye": 32, |
||||
"TargetType": [ |
||||
8 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 20000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 8, |
||||
"AchievementsName": "六千驿马络桃川", |
||||
"AchievementsType": 1, |
||||
"IsProgress": true, |
||||
"Describe": "{0}个村落声望值达到{3}", |
||||
"RequirementTpye": 12, |
||||
"TargetType": [ |
||||
1, |
||||
6000 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 20000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 9, |
||||
"AchievementsName": "雄关血铸镇妖门", |
||||
"AchievementsType": 1, |
||||
"IsProgress": false, |
||||
"Describe": "成功研究{7}最高级科技", |
||||
"RequirementTpye": 33, |
||||
"TargetType": [ |
||||
2310 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 20000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 10, |
||||
"AchievementsName": "金鸡栖梧鸣桃坞", |
||||
"AchievementsType": 1, |
||||
"IsProgress": true, |
||||
"Describe": "桃谷内同时存在鸡{0}只", |
||||
"RequirementTpye": 44, |
||||
"TargetType": [ |
||||
50 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 20000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 11, |
||||
"AchievementsName": "采薇人归暮云深", |
||||
"AchievementsType": 1, |
||||
"IsProgress": true, |
||||
"Describe": "累计采集谷外小资源{0}次", |
||||
"RequirementTpye": 37, |
||||
"TargetType": [ |
||||
500 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 20000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 12, |
||||
"AchievementsName": "比邻共饮桃花酿", |
||||
"AchievementsType": 1, |
||||
"IsProgress": false, |
||||
"Describe": "邀请一个邻居", |
||||
"RequirementTpye": 17, |
||||
"TargetType": [ |
||||
0 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 20000, |
||||
"RewareId2": 7207, |
||||
"RewardNumber2": 1, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 13, |
||||
"AchievementsName": "二十炊烟绕新柳", |
||||
"AchievementsType": 1, |
||||
"IsProgress": false, |
||||
"Describe": "规模达到{0}", |
||||
"RequirementTpye": 1, |
||||
"TargetType": [ |
||||
20 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 20000, |
||||
"RewareId2": 7211, |
||||
"RewardNumber2": 1, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 2001, |
||||
"AchievementsName": "桃谷春秋贮万粟", |
||||
"AchievementsType": 2, |
||||
"IsProgress": false, |
||||
"Describe": "桃谷基础食物达到{0}", |
||||
"RequirementTpye": 42, |
||||
"TargetType": [ |
||||
100000 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 40000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 2002, |
||||
"AchievementsName": "玄甲夜戍五十更", |
||||
"AchievementsType": 2, |
||||
"IsProgress": true, |
||||
"Describe": "攻城战累计胜利{0}次", |
||||
"RequirementTpye": 8, |
||||
"TargetType": [ |
||||
50 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 40000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 2003, |
||||
"AchievementsName": "踏遍千山寻仙踪", |
||||
"AchievementsType": 2, |
||||
"IsProgress": true, |
||||
"Describe": "累计完成探索{0}次", |
||||
"RequirementTpye": 10, |
||||
"TargetType": [ |
||||
100 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 40000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 2004, |
||||
"AchievementsName": "百器流光缀桃源", |
||||
"AchievementsType": 2, |
||||
"IsProgress": true, |
||||
"Describe": "解锁{0}个建筑皮肤", |
||||
"RequirementTpye": 14, |
||||
"TargetType": [ |
||||
5 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 40000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 2005, |
||||
"AchievementsName": "四海皆闻桃源名", |
||||
"AchievementsType": 2, |
||||
"IsProgress": true, |
||||
"Describe": "{0}个村落声望值达到{3}", |
||||
"RequirementTpye": 12, |
||||
"TargetType": [ |
||||
4, |
||||
6000 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 40000, |
||||
"RewareId2": 140000, |
||||
"RewardNumber2": 1, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 2006, |
||||
"AchievementsName": "百家灯火续长明", |
||||
"AchievementsType": 2, |
||||
"IsProgress": true, |
||||
"Describe": "族谱中记录的村民数量累计{0}个", |
||||
"RequirementTpye": 22, |
||||
"TargetType": [ |
||||
200 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 40000, |
||||
"RewareId2": 140001, |
||||
"RewardNumber2": 1, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 2007, |
||||
"AchievementsName": "初砺魂石现锋芒", |
||||
"AchievementsType": 2, |
||||
"IsProgress": true, |
||||
"Describe": "{0}个勇士的体魂达到{3}级", |
||||
"RequirementTpye": 9, |
||||
"TargetType": [ |
||||
1, |
||||
10 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 40000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 2008, |
||||
"AchievementsName": "千里鹅毛寄桃源", |
||||
"AchievementsType": 2, |
||||
"IsProgress": true, |
||||
"Describe": "累计收到村落赠送的礼物{0}份", |
||||
"RequirementTpye": 34, |
||||
"TargetType": [ |
||||
50 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 40000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 2009, |
||||
"AchievementsName": "千券化作炊烟去", |
||||
"AchievementsType": 2, |
||||
"IsProgress": true, |
||||
"Describe": "累计消耗{1}{0}个", |
||||
"RequirementTpye": 39, |
||||
"TargetType": [ |
||||
701, |
||||
4000 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 40000, |
||||
"RewareId2": 140007, |
||||
"RewardNumber2": 1, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 2010, |
||||
"AchievementsName": "百战黄沙砺剑鸣", |
||||
"AchievementsType": 2, |
||||
"IsProgress": true, |
||||
"Describe": "累计进行{0}次兽潮挑战", |
||||
"RequirementTpye": 16, |
||||
"TargetType": [ |
||||
100 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 40000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 3001, |
||||
"AchievementsName": "金瓜垂垂满秋架", |
||||
"AchievementsType": 3, |
||||
"IsProgress": true, |
||||
"Describe": "累计获得{0}个{1}", |
||||
"RequirementTpye": 7, |
||||
"TargetType": [ |
||||
855, |
||||
1000 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 60000, |
||||
"RewareId2": 7208, |
||||
"RewardNumber2": 1, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 3002, |
||||
"AchievementsName": "水芝累累覆霜圃", |
||||
"AchievementsType": 3, |
||||
"IsProgress": true, |
||||
"Describe": "累计获得{0}个{1}", |
||||
"RequirementTpye": 7, |
||||
"TargetType": [ |
||||
856, |
||||
1000 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 60000, |
||||
"RewareId2": 7207, |
||||
"RewardNumber2": 1, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 3003, |
||||
"AchievementsName": "千禽过隙录桃簿", |
||||
"AchievementsType": 3, |
||||
"IsProgress": true, |
||||
"Describe": "累计获得{0}只{1}", |
||||
"RequirementTpye": 7, |
||||
"TargetType": [ |
||||
8001, |
||||
1000 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 60000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 3004, |
||||
"AchievementsName": "万粟流转太平策", |
||||
"AchievementsType": 3, |
||||
"IsProgress": true, |
||||
"Describe": "累计制作{0}份菜品", |
||||
"RequirementTpye": 11, |
||||
"TargetType": [ |
||||
10000 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 60000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 3005, |
||||
"AchievementsName": "一竿钓尽武陵春", |
||||
"AchievementsType": 3, |
||||
"IsProgress": true, |
||||
"Describe": "累计获得{0}条{1}", |
||||
"RequirementTpye": 7, |
||||
"TargetType": [ |
||||
131, |
||||
500 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 60000, |
||||
"RewareId2": 140002, |
||||
"RewardNumber2": 1, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 3006, |
||||
"AchievementsName": "千蟹横行入瓮来", |
||||
"AchievementsType": 3, |
||||
"IsProgress": true, |
||||
"Describe": "累计获得{0}只{1}", |
||||
"RequirementTpye": 7, |
||||
"TargetType": [ |
||||
113, |
||||
1000 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 60000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 3007, |
||||
"AchievementsName": "渔溪慈航渡五十", |
||||
"AchievementsType": 3, |
||||
"IsProgress": true, |
||||
"Describe": "累计在{2}捐赠{0}次", |
||||
"RequirementTpye": 27, |
||||
"TargetType": [ |
||||
3002, |
||||
50 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 60000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 3008, |
||||
"AchievementsName": "赤丘燃灯明千帐", |
||||
"AchievementsType": 3, |
||||
"IsProgress": true, |
||||
"Describe": "累计在{2}捐赠{0}次", |
||||
"RequirementTpye": 27, |
||||
"TargetType": [ |
||||
3003, |
||||
50 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 60000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 3009, |
||||
"AchievementsName": "太姥织云庇万椽", |
||||
"AchievementsType": 3, |
||||
"IsProgress": true, |
||||
"Describe": "累计在{2}捐赠{0}次", |
||||
"RequirementTpye": 27, |
||||
"TargetType": [ |
||||
3004, |
||||
50 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 60000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 3010, |
||||
"AchievementsName": "广纳流民筑新庐", |
||||
"AchievementsType": 3, |
||||
"IsProgress": true, |
||||
"Describe": "累计接纳{0}位难民", |
||||
"RequirementTpye": 21, |
||||
"TargetType": [ |
||||
100 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 60000, |
||||
"RewareId2": 7320, |
||||
"RewardNumber2": 1, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 4001, |
||||
"AchievementsName": "人生七十古来稀", |
||||
"AchievementsType": 4, |
||||
"IsProgress": true, |
||||
"Describe": "累计{0}个村民寿命达到{3}岁", |
||||
"RequirementTpye": 2, |
||||
"TargetType": [ |
||||
20, |
||||
70 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 80000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 4002, |
||||
"AchievementsName": "三魂淬火铸金身", |
||||
"AchievementsType": 4, |
||||
"IsProgress": true, |
||||
"Describe": "{0}个勇士的体魂达到{3}级", |
||||
"RequirementTpye": 9, |
||||
"TargetType": [ |
||||
3, |
||||
15 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 80000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 4003, |
||||
"AchievementsName": "万贯春风扫落英", |
||||
"AchievementsType": 4, |
||||
"IsProgress": true, |
||||
"Describe": "累计获得{0}个铜钱", |
||||
"RequirementTpye": 7, |
||||
"TargetType": [ |
||||
210000, |
||||
100000000 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 80000, |
||||
"RewareId2": 140005, |
||||
"RewardNumber2": 1, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 4004, |
||||
"AchievementsName": "百匠授业承星火", |
||||
"AchievementsType": 4, |
||||
"IsProgress": true, |
||||
"Describe": "累计有{0}个村民通过学习获得技能", |
||||
"RequirementTpye": 26, |
||||
"TargetType": [ |
||||
100 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 80000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 4005, |
||||
"AchievementsName": "半百檐铃缀桃源", |
||||
"AchievementsType": 4, |
||||
"IsProgress": true, |
||||
"Describe": "解锁{0}种装饰品", |
||||
"RequirementTpye": 13, |
||||
"TargetType": [ |
||||
50 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 80000, |
||||
"RewareId2": 140004, |
||||
"RewardNumber2": 1, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 4006, |
||||
"AchievementsName": "檐角流光驻春秋", |
||||
"AchievementsType": 4, |
||||
"IsProgress": true, |
||||
"Describe": "拥有{0}个建筑每日耐久度+1", |
||||
"RequirementTpye": 15, |
||||
"TargetType": [ |
||||
3 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 80000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 4007, |
||||
"AchievementsName": "比翼楼前拾遗羽", |
||||
"AchievementsType": 4, |
||||
"IsProgress": true, |
||||
"Describe": "在比翼楼中触发羽毛掉落事件{0}次", |
||||
"RequirementTpye": 19, |
||||
"TargetType": [ |
||||
99 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 80000, |
||||
"RewareId2": 140003, |
||||
"RewardNumber2": 1, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 4008, |
||||
"AchievementsName": "夜市点石成金手", |
||||
"AchievementsType": 4, |
||||
"IsProgress": true, |
||||
"Describe": "累计在{5}处获得{0}个铜钱", |
||||
"RequirementTpye": 20, |
||||
"TargetType": [ |
||||
1070, |
||||
10000000 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 80000, |
||||
"RewareId2": 140006, |
||||
"RewardNumber2": 1, |
||||
"RewareId3": 100001, |
||||
"RewardNumber3": 1, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 4009, |
||||
"AchievementsName": "千金散作桃花雨", |
||||
"AchievementsType": 4, |
||||
"IsProgress": true, |
||||
"Describe": "累计在{5}处花费{0}个铜钱", |
||||
"RequirementTpye": 28, |
||||
"TargetType": [ |
||||
1068, |
||||
10000000 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 80000, |
||||
"RewareId2": 100000, |
||||
"RewardNumber2": 1, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 5001, |
||||
"AchievementsName": "鹤寿盈门映桃源", |
||||
"AchievementsType": 5, |
||||
"IsProgress": true, |
||||
"Describe": "累计{0}个村民寿命达到{3}岁", |
||||
"RequirementTpye": 2, |
||||
"TargetType": [ |
||||
50, |
||||
70 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 100000, |
||||
"RewareId2": 100002, |
||||
"RewardNumber2": 1, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 5002, |
||||
"AchievementsName": "万象玄功映星辰", |
||||
"AchievementsType": 5, |
||||
"IsProgress": true, |
||||
"Describe": "累计{0}个村民拥有{4}技能", |
||||
"RequirementTpye": 25, |
||||
"TargetType": [ |
||||
100, |
||||
15 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 100000, |
||||
"RewareId2": 0, |
||||
"RewardNumber2": 0, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 5003, |
||||
"AchievementsName": "一脉世居桃花源", |
||||
"AchievementsType": 5, |
||||
"IsProgress": true, |
||||
"Describe": "累计{0}个村民姓氏相同", |
||||
"RequirementTpye": 24, |
||||
"TargetType": [ |
||||
50 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 100000, |
||||
"RewareId2": 7227, |
||||
"RewardNumber2": 1, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 5004, |
||||
"AchievementsName": "担岳踏浪撼地鸣", |
||||
"AchievementsType": 5, |
||||
"IsProgress": true, |
||||
"Describe": "累计{0}个村民劳力达到{3}", |
||||
"RequirementTpye": 3, |
||||
"TargetType": [ |
||||
1, |
||||
70 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 100000, |
||||
"RewareId2": 220000, |
||||
"RewardNumber2": 100, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 5005, |
||||
"AchievementsName": "观天织雾解玄机", |
||||
"AchievementsType": 5, |
||||
"IsProgress": true, |
||||
"Describe": "累计{0}个村民智力达到{3}", |
||||
"RequirementTpye": 4, |
||||
"TargetType": [ |
||||
1, |
||||
70 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 100000, |
||||
"RewareId2": 220000, |
||||
"RewardNumber2": 100, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 5006, |
||||
"AchievementsName": "八旬仙人隐桃谷", |
||||
"AchievementsType": 5, |
||||
"IsProgress": true, |
||||
"Describe": "累计{0}个村民年龄达到{3}", |
||||
"RequirementTpye": 5, |
||||
"TargetType": [ |
||||
1, |
||||
80 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 100000, |
||||
"RewareId2": 220000, |
||||
"RewardNumber2": 100, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
}, |
||||
{ |
||||
"AchievementsId": 5008, |
||||
"AchievementsName": "千姓共织桃源梦", |
||||
"AchievementsType": 5, |
||||
"IsProgress": true, |
||||
"Describe": "桃谷中出现过{0}个姓氏", |
||||
"RequirementTpye": 45, |
||||
"TargetType": [ |
||||
300 |
||||
], |
||||
"RewareId1": 210000, |
||||
"RewardNumber1": 100000, |
||||
"RewareId2": 140009, |
||||
"RewardNumber2": 1, |
||||
"RewareId3": 0, |
||||
"RewardNumber3": 0, |
||||
"RewareId4": 0, |
||||
"RewardNumber4": 0 |
||||
} |
||||
] |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,8 @@
|
||||
[ |
||||
{ |
||||
"Id": 1, |
||||
"GemId": 1204, |
||||
"ItemId": 1205, |
||||
"Num": 50 |
||||
} |
||||
] |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,124 @@
|
||||
<template> |
||||
<div> |
||||
<el-dialog :title="isNew ? '新增服务器推荐' : '修改服务器推荐'" v-model="isShowDialog" width="769px"> |
||||
<el-form label-width="90px" label-position="right"> |
||||
<el-form-item label="是否推荐" prop="recommend"> |
||||
<el-select v-model="queryParams.recommend" class="m-2" placeholder="选择推荐"> |
||||
<el-option label="推荐" :value="1" /> |
||||
<el-option label="不推荐" :value="0" /> |
||||
</el-select> |
||||
</el-form-item> |
||||
<el-form-item label="服务器" prop="servers"> |
||||
<el-select v-model="serverSwitch" class="m-2" @change="changeServer" placeholder="选择服务器" size="large" style="width: 80px"> |
||||
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" /> |
||||
</el-select> |
||||
<el-select v-model="queryParams.servers" multiple collapse-tags clearable class="m-2" placeholder="选择服务器" size="large"> |
||||
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" /> |
||||
</el-select> |
||||
</el-form-item> |
||||
</el-form> |
||||
<template #footer> |
||||
<span class="dialog-footer"> |
||||
<el-button @click="onCancel" size="default">取 消</el-button> |
||||
<el-button size="default" type="primary" class="ml10" @click="addItem"> |
||||
<el-icon> |
||||
<ele-EditPen /> |
||||
</el-icon> |
||||
<div v-if="isNew">新增</div> |
||||
<div v-else>修改</div> |
||||
</el-button> |
||||
</span> |
||||
</template> |
||||
</el-dialog> |
||||
</div> |
||||
</template> |
||||
|
||||
<script lang="ts"> |
||||
import { reactive, toRefs, defineComponent } from 'vue'; |
||||
import { ElLoading } from 'element-plus'; |
||||
import { gameAddLoginUrl } from '/@/api/game'; |
||||
import { ServerCategorize, serverList } from '/@/utils/game'; |
||||
import { gSwitchServer } from '/@/utils/utils'; |
||||
|
||||
interface TableDataState { |
||||
isShowDialog: boolean; |
||||
isNew: boolean; |
||||
queryParams: object; |
||||
servers: object[]; |
||||
serverSwitch: number; |
||||
serverCategorize: object[]; |
||||
} |
||||
|
||||
export default defineComponent({ |
||||
name: 'systemEditRecommendData', |
||||
setup(prop, { emit }) { |
||||
const state = reactive<TableDataState>({ |
||||
isShowDialog: false, |
||||
isNew: false, |
||||
queryParams: { recommend: 0, servers: [] }, |
||||
servers: [], |
||||
serverCategorize: ServerCategorize, |
||||
serverSwitch: 0, |
||||
}); |
||||
const switchServer = () => { |
||||
return gSwitchServer(state.serverSwitch, state.servers); |
||||
}; |
||||
// 打开弹窗 |
||||
const openDialog = (row: any | null) => { |
||||
state.isShowDialog = true; |
||||
console.log('openDialog: >>>>>>>>>>>', row); |
||||
serverList().then((res) => { |
||||
state.servers = res; |
||||
}); |
||||
}; |
||||
|
||||
// 关闭弹窗 |
||||
const closeDialog = () => { |
||||
state.isShowDialog = false; |
||||
}; |
||||
// 取消 |
||||
const onCancel = () => { |
||||
closeDialog(); |
||||
}; |
||||
// 新增 |
||||
const addItem = () => { |
||||
const loading = ElLoading.service({ |
||||
lock: true, |
||||
text: 'Loading', |
||||
background: 'rgba(0, 0, 0, 0.7)', |
||||
}); |
||||
|
||||
for (let i in state.queryParams.servers) { |
||||
updateItem(state.queryParams.servers[i]); |
||||
} |
||||
|
||||
loading.close(); |
||||
closeDialog(); |
||||
}; |
||||
const updateItem = (server: number) => { |
||||
gameAddLoginUrl({ recommend: state.queryParams.recommend, id: server }) |
||||
.then((res) => { |
||||
console.log(res); |
||||
emit('countList'); |
||||
}) |
||||
.finally(function () {}); |
||||
}; |
||||
const changeServer = () => { |
||||
let servers = gSwitchServer(state.serverSwitch, state.servers); |
||||
state.queryParams.servers = []; |
||||
for (let i in servers) { |
||||
state.queryParams.servers.push(servers[i].id); |
||||
} |
||||
}; |
||||
return { |
||||
changeServer, |
||||
switchServer, |
||||
openDialog, |
||||
closeDialog, |
||||
onCancel, |
||||
addItem, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
}); |
||||
</script> |
@ -0,0 +1,125 @@
|
||||
<template> |
||||
<div> |
||||
<el-dialog :title="isNew ? '新增服务器状态' : '修改服务器状态'" v-model="isShowDialog" width="769px"> |
||||
<el-form label-width="90px" label-position="right"> |
||||
<el-form-item label="服务器状态" prop="state"> |
||||
<el-select v-model="queryParams.state" class="m-2" placeholder="选择服务器状态"> |
||||
<el-option label="正常" :value="1" /> |
||||
<el-option label="维护" :value="2" /> |
||||
<el-option label="白名单" :value="3" /> |
||||
</el-select> |
||||
</el-form-item> |
||||
<el-form-item label="服务器" prop="servers"> |
||||
<el-select v-model="serverSwitch" class="m-2" @change="changeServer" placeholder="选择服务器" size="large" style="width: 80px"> |
||||
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" /> |
||||
</el-select> |
||||
<el-select v-model="queryParams.servers" multiple collapse-tags clearable class="m-2" placeholder="选择服务器" size="large"> |
||||
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" /> |
||||
</el-select> |
||||
</el-form-item> |
||||
</el-form> |
||||
<template #footer> |
||||
<span class="dialog-footer"> |
||||
<el-button @click="onCancel" size="default">取 消</el-button> |
||||
<el-button size="default" type="primary" class="ml10" @click="addItem"> |
||||
<el-icon> |
||||
<ele-EditPen /> |
||||
</el-icon> |
||||
<div v-if="isNew">新增</div> |
||||
<div v-else>修改</div> |
||||
</el-button> |
||||
</span> |
||||
</template> |
||||
</el-dialog> |
||||
</div> |
||||
</template> |
||||
|
||||
<script lang="ts"> |
||||
import { reactive, toRefs, defineComponent } from 'vue'; |
||||
import { ElLoading } from 'element-plus'; |
||||
import { gameAddLoginUrl } from '/@/api/game'; |
||||
import { ServerCategorize, serverList } from '/@/utils/game'; |
||||
import { gSwitchServer } from '/@/utils/utils'; |
||||
|
||||
interface TableDataState { |
||||
isShowDialog: boolean; |
||||
isNew: boolean; |
||||
queryParams: object; |
||||
servers: object[]; |
||||
serverSwitch: number; |
||||
serverCategorize: object[]; |
||||
} |
||||
|
||||
export default defineComponent({ |
||||
name: 'systemEditRecommendData', |
||||
setup(prop, { emit }) { |
||||
const state = reactive<TableDataState>({ |
||||
isShowDialog: false, |
||||
isNew: false, |
||||
queryParams: { state: 1, servers: [] }, |
||||
servers: [], |
||||
serverCategorize: ServerCategorize, |
||||
serverSwitch: 0, |
||||
}); |
||||
const switchServer = () => { |
||||
return gSwitchServer(state.serverSwitch, state.servers); |
||||
}; |
||||
// 打开弹窗 |
||||
const openDialog = () => { |
||||
state.isShowDialog = true; |
||||
serverList().then((res) => { |
||||
state.servers = res; |
||||
console.log('openDialog: >>>>>>>>>>>', res); |
||||
}); |
||||
}; |
||||
|
||||
// 关闭弹窗 |
||||
const closeDialog = () => { |
||||
state.isShowDialog = false; |
||||
}; |
||||
// 取消 |
||||
const onCancel = () => { |
||||
closeDialog(); |
||||
}; |
||||
// 新增 |
||||
const addItem = () => { |
||||
const loading = ElLoading.service({ |
||||
lock: true, |
||||
text: 'Loading', |
||||
background: 'rgba(0, 0, 0, 0.7)', |
||||
}); |
||||
|
||||
for (let i in state.queryParams.servers) { |
||||
updateItem(state.queryParams.servers[i]); |
||||
} |
||||
|
||||
loading.close(); |
||||
closeDialog(); |
||||
}; |
||||
const updateItem = (server: number) => { |
||||
gameAddLoginUrl({ state: state.queryParams.state, id: server }) |
||||
.then((res) => { |
||||
console.log(res); |
||||
emit('countList'); |
||||
}) |
||||
.finally(function () {}); |
||||
}; |
||||
const changeServer = () => { |
||||
let servers = gSwitchServer(state.serverSwitch, state.servers); |
||||
state.queryParams.servers = []; |
||||
for (let i in servers) { |
||||
state.queryParams.servers.push(servers[i].id); |
||||
} |
||||
}; |
||||
return { |
||||
changeServer, |
||||
switchServer, |
||||
openDialog, |
||||
closeDialog, |
||||
onCancel, |
||||
addItem, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
}); |
||||
</script> |
@ -1,173 +1,205 @@
|
||||
<template> |
||||
<div> |
||||
<!-- <el-card shadow="hover" header="">--> |
||||
<!-- <div class="mb15">--> |
||||
<el-form class="flex-warp" label-position="right"> |
||||
<el-form-item> |
||||
<!-- <el-button type="success" class="ml10" @click="onOpenAddDic">--> |
||||
<!-- <el-icon>--> |
||||
<!-- <ele-FolderAdd/>--> |
||||
<!-- </el-icon>--> |
||||
<!-- 新增参数--> |
||||
<!-- </el-button>--> |
||||
<el-button type="success" class="ml10" @click="reloadServer"> |
||||
<el-icon> |
||||
<ele-FolderAdd/> |
||||
</el-icon> |
||||
重载配置 |
||||
</el-button> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button type="success" class="ml10" @click="countList"> |
||||
刷新列表 |
||||
</el-button> |
||||
</el-form-item> |
||||
<el-table :data="tableData.data" style="width: 100%" stripe border> |
||||
<el-table-column prop="id" label="ID" width="60"> |
||||
<template #default="scope"> |
||||
{{scope.row.id}} |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="remark" label="服务器名称" width="180"/> |
||||
<el-table-column prop="name" label="服务器名称" width="180"/> |
||||
<el-table-column prop="host" label="服务器地址" width="240"/> |
||||
<el-table-column prop="port" label="服务器端口" width="80"/> |
||||
<el-table-column prop="state" label="服务器状态" width="100"> |
||||
<template #default="scope"> |
||||
<div v-if="scope.row.state===1">正常</div> |
||||
<div v-else-if="scope.row.state===2">维护</div> |
||||
<div v-else-if="scope.row.state===3">白名单</div> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="recommend" label="推荐" width="100"> |
||||
<template #default="scope"> |
||||
<div v-if="scope.row.recommend===1">推荐</div> |
||||
<div v-else-if="scope.row.recommend===0">不推荐</div> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="difficulty" label="难度" width="100"> |
||||
<template #default="scope"> |
||||
<div v-if="scope.row.difficulty===1">普通</div> |
||||
<div v-else-if="scope.row.difficulty===2">困难</div> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column> |
||||
<template #default="scope"> |
||||
<el-button size="small" type="success" @click="onOpenEditDic(scope.row)">修改</el-button> |
||||
<!-- <el-button size="small" type="danger" @click="delLoginUrl(scope.row.id)">删除</el-button>--> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
<el-row justify="space-evenly"> |
||||
<el-pagination :hide-on-single-page="true" v-model:page-size="tableData.params.pageSize" :pager-count="5" |
||||
v-model:current-page="tableData.params.pageNum" layout="total, prev, pager, next" :total="tableData.total" |
||||
@current-change="handleCurrentChange"/> |
||||
</el-row> |
||||
</el-form> |
||||
|
||||
<EditConfig ref="editDicRef" @countList="countList"/> |
||||
</div> |
||||
<div> |
||||
<el-form class="flex-warp" label-position="right"> |
||||
<el-form-item> |
||||
<el-button type="success" class="ml10" @click="reloadServer"> |
||||
<el-icon> |
||||
<ele-FolderAdd /> |
||||
</el-icon> |
||||
重载配置 |
||||
</el-button> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button type="success" class="ml10" @click="countList"> 刷新列表</el-button> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button type="success" class="ml10" @click="onOpenRecommendDic">批量修改推荐</el-button> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button type="success" class="ml10" @click="onOpenStateDic">批量修改服务器状态</el-button> |
||||
</el-form-item> |
||||
<el-table :data="tableData.data" style="width: 100%" stripe border> |
||||
<el-table-column prop="id" label="ID" width="65"> |
||||
<template #default="scope"> |
||||
{{ scope.row.id }} |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="remark" label="服务器名称" width="180" /> |
||||
<el-table-column prop="name" label="服务器名称" width="180" /> |
||||
<el-table-column prop="host" label="服务器地址" width="240" /> |
||||
<el-table-column prop="port" label="服务器端口" width="80" /> |
||||
<el-table-column prop="state" label="服务器状态" width="100"> |
||||
<template #default="scope"> |
||||
<div v-if="scope.row.state === 1">正常</div> |
||||
<div v-else-if="scope.row.state === 2">维护</div> |
||||
<div v-else-if="scope.row.state === 3">白名单</div> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="recommend" label="推荐" width="100"> |
||||
<template #default="scope"> |
||||
<div v-if="scope.row.recommend === 1">推荐</div> |
||||
<div v-else-if="scope.row.recommend === 0">不推荐</div> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="difficulty" label="难度" width="100"> |
||||
<template #default="scope"> |
||||
<div v-if="scope.row.difficulty === 1">普通</div> |
||||
<div v-else-if="scope.row.difficulty === 2">困难</div> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column> |
||||
<template #default="scope"> |
||||
<el-button size="small" type="success" @click="onOpenEditDic(scope.row)">修改</el-button> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
<el-row justify="space-evenly"> |
||||
<el-pagination |
||||
:hide-on-single-page="true" |
||||
v-model:page-size="tableData.params.pageSize" |
||||
:pager-count="5" |
||||
v-model:current-page="tableData.params.pageNum" |
||||
layout="total, prev, pager, next" |
||||
:total="tableData.total" |
||||
@current-change="handleCurrentChange" |
||||
/> |
||||
</el-row> |
||||
</el-form> |
||||
<EditConfig ref="editDicRef" @countList="countList" /> |
||||
<EditRecommend ref="editRecommendRef" @countList="countList" /> |
||||
<EditState ref="editStateRef" @countList="countList" /> |
||||
</div> |
||||
</template> |
||||
|
||||
<script lang="ts"> |
||||
import {toRefs, reactive, onMounted, defineComponent, ref} from 'vue'; |
||||
import EditConfig from '/@/views/gameLoginUrl/list/component/editConfig.vue'; |
||||
import {gameGetLoginUrl, gameDelLoginUrl, gameReloadServer} from "/@/api/game"; |
||||
import {PLATFORM} from "/@/api/common/consts"; |
||||
import { toRefs, reactive, onMounted, defineComponent, ref } from 'vue'; |
||||
import EditConfig from '/@/views/gameLoginUrl/list/component/editConfig.vue'; |
||||
import EditRecommend from '/@/views/gameLoginUrl/list/component/editRecommend.vue'; |
||||
import EditState from '/@/views/gameLoginUrl/list/component/editState.vue'; |
||||
import { gameGetLoginUrl, gameDelLoginUrl, gameReloadServer } from '/@/api/game'; |
||||
import { PLATFORM } from '/@/api/common/consts'; |
||||
import { serverList } from '/@/utils/game'; |
||||
|
||||
// 定义接口来定义对象的类型 |
||||
interface TableData{ |
||||
id: number; |
||||
ip: string; |
||||
} |
||||
// 定义接口来定义对象的类型 |
||||
interface TableData { |
||||
id: number; |
||||
remark: string; |
||||
name: string; |
||||
host: string; |
||||
port: number; |
||||
state: number; |
||||
recommend: number; |
||||
difficulty: number; |
||||
} |
||||
|
||||
interface TableDataState{ |
||||
tableData: { |
||||
data: Array<TableData>; |
||||
total: number; |
||||
params: { |
||||
pageNum: number; |
||||
pageSize: number; |
||||
}; |
||||
}; |
||||
platform: Array<{label: string, value: string}> |
||||
} |
||||
interface TableDataState { |
||||
tableData: { |
||||
data: Array<TableData>; |
||||
total: number; |
||||
params: { |
||||
pageNum: number; |
||||
pageSize: number; |
||||
}; |
||||
}; |
||||
platform: Array<{ label: string; value: string }>; |
||||
} |
||||
|
||||
export default defineComponent({ |
||||
name: 'apiV1GameLoginUrlList', |
||||
components: {EditConfig}, |
||||
setup(){ |
||||
const editDicRef = ref(); |
||||
const state = reactive<TableDataState>({ |
||||
platform: PLATFORM, |
||||
tableData: { |
||||
data: [], |
||||
total: 0, |
||||
params: { |
||||
pageNum: 1, |
||||
pageSize: 10, |
||||
}, |
||||
}, |
||||
}); |
||||
// 打开新增字典弹窗 |
||||
const onOpenAddDic = () => { |
||||
editDicRef.value.openDialog(); |
||||
}; |
||||
// 打开修改字典弹窗 |
||||
const onOpenEditDic = (row: TableData) => { |
||||
editDicRef.value.openDialog(row); |
||||
}; |
||||
const countList = () => { |
||||
gameGetLoginUrl(state.tableData.params).then(res => { |
||||
console.log("countList:", res); |
||||
state.tableData.total = res.data.total || 1; |
||||
state.tableData.data = res.data.loginUrlList ?? []; |
||||
console.log("countList:", state.tableData); |
||||
}) |
||||
}; |
||||
export default defineComponent({ |
||||
name: 'apiV1ServerList', |
||||
components: { EditConfig, EditRecommend , EditState }, |
||||
setup() { |
||||
const editDicRef = ref(); |
||||
const editRecommendRef = ref(); |
||||
const editStateRef = ref(); |
||||
const state = reactive<TableDataState>({ |
||||
platform: PLATFORM, |
||||
tableData: { |
||||
data: [], |
||||
total: 0, |
||||
params: { |
||||
pageNum: 1, |
||||
pageSize: 10, |
||||
}, |
||||
}, |
||||
}); |
||||
// 打开新增字典弹窗 |
||||
const onOpenAddDic = () => { |
||||
editDicRef.value.openDialog(); |
||||
}; |
||||
// 打开修改字典弹窗 |
||||
const onOpenEditDic = (row: TableData) => { |
||||
editDicRef.value.openDialog(row); |
||||
}; |
||||
// 打开新增字典弹窗 |
||||
const onOpenRecommendDic = () => { |
||||
editRecommendRef.value.openDialog(); |
||||
}; |
||||
// 打开新增字典弹窗 |
||||
const onOpenStateDic = () => { |
||||
editStateRef.value.openDialog(); |
||||
}; |
||||
const countList = () => { |
||||
gameGetLoginUrl(state.tableData.params).then((res) => { |
||||
console.log('countList:', res); |
||||
state.tableData.total = res.data.total || 1; |
||||
state.tableData.data = res.data.loginUrlList ?? []; |
||||
console.log('countList:', state.tableData); |
||||
}); |
||||
}; |
||||
|
||||
const delLoginUrl = (id: number) => { |
||||
gameDelLoginUrl({id: id}).then(res => { |
||||
countList() |
||||
}) |
||||
}; |
||||
const delLoginUrl = (id: number) => { |
||||
gameDelLoginUrl({ id: id }).then((res) => { |
||||
countList(); |
||||
}); |
||||
}; |
||||
|
||||
const reloadServer = () => { |
||||
gameReloadServer({}).then(res => { |
||||
}) |
||||
}; |
||||
const handleCurrentChange = (val: number) => { |
||||
state.tableData.params.pageNum = val; |
||||
countList(); |
||||
}; |
||||
onMounted(() => { |
||||
countList(); |
||||
}); |
||||
return { |
||||
editDicRef, |
||||
handleCurrentChange, |
||||
countList, |
||||
onOpenAddDic, |
||||
onOpenEditDic, |
||||
delLoginUrl, |
||||
reloadServer, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
}); |
||||
const reloadServer = () => { |
||||
gameReloadServer({}).then((res) => {}); |
||||
}; |
||||
const handleCurrentChange = (val: number) => { |
||||
state.tableData.params.pageNum = val; |
||||
countList(); |
||||
}; |
||||
onMounted(() => { |
||||
countList(); |
||||
serverList().then((res) => { |
||||
state.servers = res; |
||||
}); |
||||
}); |
||||
// const handleSelectionChange = (val: TableData[]) => { |
||||
// console.log("handleSelectionChange: ", val); |
||||
// // multipleSelection.value = val; |
||||
// }; |
||||
return { |
||||
editDicRef, |
||||
editRecommendRef, |
||||
editStateRef, |
||||
// handleSelectionChange, |
||||
handleCurrentChange, |
||||
countList, |
||||
onOpenAddDic, |
||||
onOpenEditDic, |
||||
onOpenRecommendDic, |
||||
onOpenStateDic, |
||||
delLoginUrl, |
||||
reloadServer, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
}); |
||||
</script> |
||||
<style scoped lang="scss"> |
||||
.el-form-item { |
||||
display: -moz-flex; |
||||
vertical-align: middle; |
||||
margin-right: 32px; |
||||
} |
||||
.el-form-item { |
||||
display: -moz-flex; |
||||
vertical-align: middle; |
||||
margin-right: 32px; |
||||
} |
||||
|
||||
::v-deep .el-table--striped .el-table__body tr.el-table__row--striped td { |
||||
background: #ffffd5; |
||||
} |
||||
::v-deep .el-table--striped .el-table__body tr.el-table__row--striped td { |
||||
background: #ffffd5; |
||||
} |
||||
|
||||
::v-deep .el-table .el-table--enable-row-hover .el-table__body tr:hover > td { |
||||
background: inherit; |
||||
} |
||||
</style> |
||||
::v-deep .el-table .el-table--enable-row-hover .el-table__body tr:hover > td { |
||||
background: inherit; |
||||
} |
||||
</style> |
||||
|
@ -0,0 +1,209 @@
|
||||
<template> |
||||
<div class="game-order-container"> |
||||
<el-card shadow="hover"> |
||||
<div class="game-order-search mb15"> |
||||
<el-form> |
||||
<el-form-item label="订单Id" prop="channel"> |
||||
<el-input size="default" v-model="tableData.param.order" placeholder="请输入订单Id" class="w-50 m-2" clearable /> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button size="default" type="primary" class="ml10" @click="orderList"> |
||||
<el-icon> |
||||
<ele-Search /> |
||||
</el-icon> |
||||
查询 |
||||
</el-button> |
||||
</el-form-item> |
||||
</el-form> |
||||
</div> |
||||
<el-table :data="tableData.data" style="width: 100%" border> |
||||
<el-table-column prop="tradeNo" label="订单id" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="unitId" label="id" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="amount" label="金额(元)" show-overflow-tooltip width="120"></el-table-column> |
||||
<el-table-column prop="createTime" label="充值时间" show-overflow-tooltip width="180"></el-table-column> |
||||
<el-table-column prop="remark" label="状态" show-overflow-tooltip width="120"> |
||||
<template #default="scope"> |
||||
<div v-if="scope.row.remark == ''" style="color: #e60000">充值失败</div> |
||||
<div v-else-if="scope.row.remark == 'SUCCESS'">充值成功</div> |
||||
<div v-else>{{ scope.row.remark }}</div> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="user" label="操作人员" show-overflow-tooltip width="120"></el-table-column> |
||||
<el-table-column prop="channel" label="渠道" show-overflow-tooltip width="120"> |
||||
<template #default="scope"> |
||||
<span>{{ channels.find((r) => r.value == scope.row.channel)?.label }}</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="server" label="区服" show-overflow-tooltip width="120"> |
||||
<template #default="scope"> |
||||
<span>{{ servers.find((r) => r.id == scope.row.server).name }}</span> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
<el-row justify="space-evenly"> |
||||
<el-pagination |
||||
:hide-on-single-page="true" |
||||
v-model:page-size="tableData.param.pageSize" |
||||
v-model:current-page="tableData.param.pageNum" |
||||
:pager-count="5" |
||||
@current-change="orderList" |
||||
layout="total, prev, pager, next" |
||||
:total="tableData.total" |
||||
/> |
||||
</el-row> |
||||
</el-card> |
||||
</div> |
||||
</template> |
||||
|
||||
<script lang="ts"> |
||||
import { toRefs, reactive, onMounted, defineComponent } from 'vue'; |
||||
import { gameRechargeChangeStateDelete, gmOrderList } from '/@/api/game'; |
||||
import { allChannelList, ServerCategorize, serverList, ServerList } from '/@/utils/game'; |
||||
import RechargeConfigCategory from '/@/api/config/RechargeConfigCategory.json'; |
||||
import { ElMessage, ElMessageBox } from 'element-plus/es'; |
||||
import { gSwitchServer, guid } from '/@/utils/utils'; |
||||
import jwt from 'jsonwebtoken'; |
||||
|
||||
// 定义接口来定义对象的类型 |
||||
interface TableData { |
||||
id: string; |
||||
CreateTime: string; |
||||
CfgId: number; |
||||
Rmb: number; |
||||
SilverPiece: number; |
||||
Identity: string; |
||||
timeStr: string; |
||||
uid: string; |
||||
RealName: string; |
||||
StringId: string; |
||||
} |
||||
|
||||
interface TableDataState { |
||||
serverSwitch: number; |
||||
serverCategorize: object; |
||||
tableData: { |
||||
data: Array<TableData>; |
||||
total: number; |
||||
param: { |
||||
order: string; |
||||
}; |
||||
}; |
||||
servers: object; |
||||
channels: object; |
||||
rechargeInfo: object[]; |
||||
} |
||||
|
||||
export default defineComponent({ |
||||
name: 'apiV1GameOrderTransactionId', |
||||
setup() { |
||||
// const {proxy} = getCurrentInstance() as any; |
||||
|
||||
const state = reactive<TableDataState>({ |
||||
serverSwitch: 0, |
||||
serverCategorize: ServerCategorize, |
||||
tableData: { |
||||
data: [], |
||||
total: 0, |
||||
param: { |
||||
order: '', |
||||
}, |
||||
}, |
||||
servers: ServerList, |
||||
channels: [], |
||||
rechargeInfo: RechargeConfigCategory, |
||||
}); |
||||
|
||||
const orderList = () => { |
||||
// gmOrderList(state.tableData.param).then((res) => { |
||||
// console.log(res); |
||||
// state.tableData.total = Number(res.data.total) || 0; |
||||
// state.tableData.data = res.data.list || []; |
||||
// }); |
||||
let time = Math.floor(Date.now() / 1000); |
||||
let payload = { |
||||
iss: 'b8b82821-922e-4b43-a3cf-d293020a70d1', |
||||
iat: time - 10, |
||||
exp: time + 3590, |
||||
aud: 'appstoreconnect-v1', |
||||
nonce: guid(), |
||||
// "bid": "com.Avatar.PeachColony" |
||||
bid: 'com.XiamenAvatar.PeachValley', |
||||
}; |
||||
|
||||
let key_data = |
||||
`-----BEGIN PRIVATE KEY----- |
||||
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQg2XqPEHgWj2cUnO2GoPfIeEcAc0tJsTehvNNNBTGf4KigCgYIKoZIzj0DAQehRANCAAT6IdBMPYuNAQYuZsYi3EkflniotI/KJa6ELt1ednywlOpuwgNOn2WXONmDzzVVMJqQjD/6FSJ4jH7fRtP+Eci6 |
||||
-----END PRIVATE KEY-----`; |
||||
let signture = jwt.sign(payload, key_data, {algorithm: "ES256",keyid: "J4RAWQBLHF"}); |
||||
|
||||
getTransactionId(signture); |
||||
}; |
||||
const getTransactionId = function (data) { |
||||
console.log("header: %j", data); |
||||
let config = { |
||||
method: "GET", |
||||
// url: "https://api.storekit.itunes.apple.com/inApps/v1/history/" + order7, |
||||
url: "https://api.storekit.itunes.apple.com/inApps/v1/lookup/" + state.tableData.param.order, |
||||
headers: {Authorization: "Bearer " + data,"Content-Type": "application/json"} |
||||
}; |
||||
console.log("config: %j", config); |
||||
axios.request(config).then(function (response) { |
||||
console.log("res", response.data.signedTransactions[0]); |
||||
let decode = jwt.decode(response.data.signedTransactions[0]); |
||||
console.log("decode", decode); |
||||
}).catch(function (error) { |
||||
console.log("error", error); |
||||
// logger.error(" getTransactionId bug >> catch err: %j ", throw error); |
||||
}); |
||||
}; |
||||
// 页面加载时 |
||||
onMounted(() => { |
||||
serverList().then((res) => { |
||||
state.servers = res; |
||||
}); |
||||
allChannelList().then((res) => { |
||||
state.channels = res; |
||||
}); |
||||
}); |
||||
|
||||
const switchServer = () => { |
||||
return gSwitchServer(state.serverSwitch, state.servers); |
||||
}; |
||||
const changeState = (order: string, state: number, remark: string) => { |
||||
if (state != 3 && state != 2) { |
||||
return; |
||||
} |
||||
if (state == 3) { |
||||
let mess = '是否确认订单失效?,点击确认后本条订单失效。'; |
||||
ElMessageBox.confirm(mess).then(() => { |
||||
gameRechargeChangeStateDelete({ order: order, state: state }).then((res) => { |
||||
if (res.data.data == 1) { |
||||
ElMessage.success('发送成功'); |
||||
} |
||||
orderList(); |
||||
}); |
||||
}); |
||||
} else if (state == 2) { |
||||
ElMessageBox.prompt('请输入修改成功理由', '提示', { |
||||
confirmButtonText: '确认', |
||||
cancelButtonText: '取消', |
||||
inputErrorMessage: 'Invalid http request', |
||||
}).then(({ value }) => { |
||||
gameRechargeChangeStateDelete({ order: order, state: state, remark: remark + ', ' + value }).then((res) => { |
||||
if (res.data.data == 1) { |
||||
ElMessage.success('发送成功'); |
||||
} |
||||
orderList(); |
||||
}); |
||||
}); |
||||
} |
||||
}; |
||||
return { |
||||
switchServer, |
||||
orderList, |
||||
changeState, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
}); |
||||
</script> |
@ -1,304 +1,331 @@
|
||||
<template> |
||||
<div class="game-statistics-container"> |
||||
<el-card shadow="hover"> |
||||
<div class="system-user-search mb15"> |
||||
<el-form :inline="true"> |
||||
<el-form-item label="渠道" prop="channel"> |
||||
<el-select v-model="tableData.param.channel" class="m-2" placeholder="选择渠道"> |
||||
<el-option v-for="item in channels" :key="item.value" :label="item.label" :value="item.value"/> |
||||
</el-select> |
||||
</el-form-item> |
||||
<el-form-item label="选择区服" prop="server"> |
||||
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> |
||||
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/> |
||||
</el-select> |
||||
<el-select v-model="tableData.param.server" class="m-2" placeholder="选择区服" |
||||
:disabled="tableData.param.channel===''" filterable> |
||||
<el-option v-for="item in switchServer()" :key="item.id+''" :label="item.name" :value="item.id+''"/> |
||||
</el-select> |
||||
</el-form-item> |
||||
<el-form-item label="起始日期" prop="startTime"> |
||||
<el-date-picker type="datetime" size="large" v-model="tableData.param.startTime" |
||||
format="YYYY/MM/DD HH:mm:ss" value-format="x"/> |
||||
</el-form-item> |
||||
<el-form-item label="截止日期" prop="endTime"> |
||||
<el-date-picker type="datetime" size="large" v-model="tableData.param.endTime" |
||||
format="YYYY/MM/DD HH:mm:ss" value-format="x"/> |
||||
</el-form-item> |
||||
<!-- <el-form-item label="单笔充值额度">--> |
||||
<!-- <el-input size="default" v-model="tableData.param.rechargeTotal" @change="checkRecharge"--> |
||||
<!-- placeholder="请输单笔充值额度"--> |
||||
<!-- class="input-with-select">--> |
||||
<!-- <template #prepend>--> |
||||
<!-- <el-select v-model="tableData.param.compareType1" class="m-2" placeholder=""--> |
||||
<!-- size="default" style="width: 60px">--> |
||||
<!-- <el-option v-for="item in tableData.compareType" :key="item.value"--> |
||||
<!-- :label="item.label" :value="item.value"/>--> |
||||
<!-- </el-select>--> |
||||
<!-- </template>--> |
||||
<!-- </el-input>--> |
||||
<!-- </el-form-item>--> |
||||
<el-form-item label="充值总额"> |
||||
<el-input size="default" v-model="tableData.param.rechargeMin" @change="checkRecharge" |
||||
placeholder="请输入充值总额" |
||||
class="input-with-select"> |
||||
<template #prepend> |
||||
<el-select v-model="tableData.param.compareType" class="m-2" placeholder="" |
||||
size="default" style="width: 60px"> |
||||
<el-option v-for="item in tableData.compareType" :key="item.value" |
||||
:label="item.label" :value="item.value"/> |
||||
</el-select> |
||||
</template> |
||||
</el-input> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button size="default" type="primary" class="ml10" @click="getRemain"> |
||||
<el-icon> |
||||
<ele-Search/> |
||||
</el-icon> |
||||
查询 |
||||
</el-button> |
||||
</el-form-item> |
||||
</el-form> |
||||
</div> |
||||
<el-table :data="tableData.data" border> |
||||
<el-table-column prop="one" label="渠道名称" width="200"> |
||||
<template #default="scope"> |
||||
<span>{{ |
||||
channels.find(i => i.value == scope.row.channel) ? channels.find(i => i.value == scope.row.channel).label : scope.row.channel |
||||
}}</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="two" label="充值" width="200"> |
||||
<template #default="scope"> |
||||
<!-- <div v-if="scope.row.rechargeTotal">--> |
||||
<span>{{ (scope.row.rechargeTotal / 100).toFixed(2) }}</span> |
||||
<!-- </div>--> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="three" label="总注册用户" width="200"> |
||||
<template #default="scope"> |
||||
<!-- <div v-if="scope.row.accountTotal">--> |
||||
<span>{{ scope.row.accountTotal }}</span> |
||||
<!-- </div>--> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="four" label="充值玩家数量" width="200"> |
||||
<template #default="scope"> |
||||
<!-- <div v-if="scope.row.rechargeAccountTotal">--> |
||||
<span>{{ scope.row.rechargeAccountTotal }}</span> |
||||
<!-- </div>--> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="five" label="付费率" width="140"> |
||||
<template #default="scope"> |
||||
<span>{{ scope.row.accountPer }}</span>% |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="six" label="ARPU" width="200"> |
||||
<template #default="scope"> |
||||
<!-- <div v-if="scope.row.rechargePer">--> |
||||
<span>{{ (scope.row.rechargePer / 100).toFixed(2) }}</span> |
||||
<!-- </div>--> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="seven" label="ARPPU" width="200"> |
||||
<template #default="scope"> |
||||
<!-- <div v-if="scope.row.rechargeAccountPer">--> |
||||
<span>{{ (scope.row.rechargeAccountPer / 100).toFixed(2) }}</span> |
||||
<!-- </div>--> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
</el-card> |
||||
</div> |
||||
<div class="game-statistics-container"> |
||||
<el-card shadow="hover"> |
||||
<div class="system-user-search mb15"> |
||||
<el-form :inline="true"> |
||||
<el-form-item label="渠道" prop="channel"> |
||||
<el-select v-model="tableData.param.channel" class="m-2" placeholder="选择渠道"> |
||||
<el-option v-for="item in channels" :key="item.value" :label="item.label" :value="item.value" /> |
||||
</el-select> |
||||
</el-form-item> |
||||
<el-form-item label="选择区服" prop="server"> |
||||
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> |
||||
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" /> |
||||
</el-select> |
||||
<el-select v-model="tableData.param.server" class="m-2" placeholder="选择区服" :disabled="tableData.param.channel === ''" filterable> |
||||
<el-option v-for="item in switchServer()" :key="item.id + ''" :label="item.name" :value="item.id + ''" /> |
||||
</el-select> |
||||
</el-form-item> |
||||
<el-form-item label="起始日期" prop="startTime"> |
||||
<el-date-picker type="datetime" size="large" v-model="tableData.param.startTime" format="YYYY/MM/DD HH:mm:ss" value-format="x" /> |
||||
</el-form-item> |
||||
<el-form-item label="截止日期" prop="endTime"> |
||||
<el-date-picker type="datetime" size="large" v-model="tableData.param.endTime" format="YYYY/MM/DD HH:mm:ss" value-format="x" /> |
||||
</el-form-item> |
||||
<!-- <el-form-item label="单笔充值额度">--> |
||||
<!-- <el-input size="default" v-model="tableData.param.rechargeTotal" @change="checkRecharge"--> |
||||
<!-- placeholder="请输单笔充值额度"--> |
||||
<!-- class="input-with-select">--> |
||||
<!-- <template #prepend>--> |
||||
<!-- <el-select v-model="tableData.param.compareType1" class="m-2" placeholder=""--> |
||||
<!-- size="default" style="width: 60px">--> |
||||
<!-- <el-option v-for="item in tableData.compareType" :key="item.value"--> |
||||
<!-- :label="item.label" :value="item.value"/>--> |
||||
<!-- </el-select>--> |
||||
<!-- </template>--> |
||||
<!-- </el-input>--> |
||||
<!-- </el-form-item>--> |
||||
<el-form-item label="充值总额"> |
||||
<el-input |
||||
size="default" |
||||
v-model="tableData.param.rechargeMin" |
||||
@change="checkRecharge" |
||||
placeholder="请输入充值总额" |
||||
class="input-with-select" |
||||
> |
||||
<template #prepend> |
||||
<el-select v-model="tableData.param.compareType" class="m-2" placeholder="" size="default" style="width: 60px"> |
||||
<el-option v-for="item in tableData.compareType" :key="item.value" :label="item.label" :value="item.value" /> |
||||
</el-select> |
||||
</template> |
||||
</el-input> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button size="default" type="primary" class="ml10" @click="getRemain"> |
||||
<el-icon> |
||||
<ele-Search /> |
||||
</el-icon> |
||||
查询 |
||||
</el-button> |
||||
</el-form-item> |
||||
</el-form> |
||||
</div> |
||||
<el-table :data="tableData.data" border> |
||||
<el-table-column prop="one" label="渠道名称" width="200"> |
||||
<template #default="scope"> |
||||
<span>{{ |
||||
channels.find((i) => i.value == scope.row.channel) ? channels.find((i) => i.value == scope.row.channel).label : scope.row.channel |
||||
}}</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="two" label="充值" width="200"> |
||||
<template #default="scope"> |
||||
<el-popover effect="light" trigger="hover" placement="top" width="auto"> |
||||
<template #default> |
||||
<div>支付宝: {{ scope.row.ali || 0 }}</div> |
||||
<div>微信: {{ scope.row.wChat || 0 }}</div> |
||||
</template> |
||||
<template #reference> |
||||
<span>{{ (scope.row.rechargeTotal / 100).toFixed(2) }}</span> |
||||
</template> |
||||
</el-popover> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="three" label="总注册用户" width="200"> |
||||
<template #default="scope"> |
||||
<span>{{ scope.row.accountTotal }}</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="four" label="充值玩家数量" width="200"> |
||||
<template #default="scope"> |
||||
<span>{{ scope.row.rechargeAccountTotal }}</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="five" label="付费率" width="140"> |
||||
<template #default="scope"> |
||||
<span>{{ scope.row.accountPer }}</span |
||||
>% |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="six" label="ARPU" width="200"> |
||||
<template #default="scope"> |
||||
<span>{{ (scope.row.rechargePer / 100).toFixed(2) }}</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="seven" label="ARPPU" width="200"> |
||||
<template #default="scope"> |
||||
<span>{{ (scope.row.rechargeAccountPer / 100).toFixed(2) }}</span> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
</el-card> |
||||
</div> |
||||
</template> |
||||
|
||||
<script lang="ts"> |
||||
import {toRefs, reactive, onMounted, defineComponent,} from 'vue'; |
||||
import {orderLog} from "/@/api/game/index"; |
||||
import {allChannelList, CompareType, allServerList, ServerCategorize} from "/@/utils/game"; |
||||
import {gSwitchServer} from "/@/utils/utils"; |
||||
import { toRefs, reactive, onMounted, defineComponent } from 'vue'; |
||||
import { orderLog, orderLogPlatform } from '/@/api/game/index'; |
||||
import { allChannelList, CompareType, allServerList, ServerCategorize } from '/@/utils/game'; |
||||
import { gSwitchServer } from '/@/utils/utils'; |
||||
|
||||
// 定义接口来定义对象的类型 |
||||
interface TableData { |
||||
labelName: string |
||||
one: number |
||||
two: number |
||||
three: number |
||||
four: number |
||||
five: number |
||||
six: number |
||||
seven: number |
||||
fifteen: number |
||||
thirty: number |
||||
labelName: string; |
||||
one: number; |
||||
two: number; |
||||
three: number; |
||||
four: number; |
||||
five: number; |
||||
six: number; |
||||
seven: number; |
||||
fifteen: number; |
||||
thirty: number; |
||||
} |
||||
|
||||
interface TableDataState { |
||||
serverSwitch: number; |
||||
tableData: { |
||||
data: Array<TableData>; |
||||
registerNum: number; |
||||
param: { |
||||
channel: string; |
||||
server: number; |
||||
rechargeMin: number; |
||||
rechargeTotal: number; |
||||
startTime: number; |
||||
endTime: number; |
||||
compareType: number; |
||||
compareType1: number; |
||||
}; |
||||
total: number; |
||||
compareType: object; |
||||
}; |
||||
servers: object; |
||||
channels: object[]; |
||||
dateNames: object; |
||||
serverCategorize: object; |
||||
serverSwitch: number; |
||||
tableData: { |
||||
data: Array<TableData>; |
||||
registerNum: number; |
||||
param: { |
||||
channel: string; |
||||
server: number; |
||||
rechargeMin: number; |
||||
rechargeTotal: number; |
||||
startTime: number; |
||||
endTime: number; |
||||
compareType: number; |
||||
compareType1: number; |
||||
}; |
||||
total: number; |
||||
compareType: object; |
||||
}; |
||||
servers: object; |
||||
channels: object[]; |
||||
dateNames: object; |
||||
serverCategorize: object; |
||||
} |
||||
|
||||
export default defineComponent({ |
||||
name: 'apiV1SystemRoleList', |
||||
setup() { |
||||
const state = reactive<TableDataState>({ |
||||
serverSwitch: 0, |
||||
tableData: { |
||||
data: [], |
||||
param: { |
||||
channel: "", |
||||
server: "", |
||||
startTime: "", |
||||
endTime: "", |
||||
rechargeMin: 0, |
||||
rechargeTotal: 1, |
||||
compareType: 5, |
||||
compareType1: 5, |
||||
}, |
||||
compareType: CompareType |
||||
}, |
||||
servers: [], |
||||
channels: [], |
||||
dateNames: { |
||||
1: "one", |
||||
2: "two", |
||||
3: "three", |
||||
4: "four", |
||||
5: "five", |
||||
6: "six", |
||||
7: "seven", |
||||
15: "fifteen", |
||||
30: "thirty" |
||||
}, |
||||
serverCategorize: ServerCategorize, |
||||
}); |
||||
name: 'apiV1SystemRoleList', |
||||
setup() { |
||||
const state = reactive<TableDataState>({ |
||||
serverSwitch: 0, |
||||
tableData: { |
||||
data: [], |
||||
param: { |
||||
channel: '', |
||||
server: '', |
||||
startTime: '', |
||||
endTime: '', |
||||
rechargeMin: 0, |
||||
rechargeTotal: 1, |
||||
compareType: 5, |
||||
compareType1: 5, |
||||
}, |
||||
compareType: CompareType, |
||||
}, |
||||
servers: [], |
||||
channels: [], |
||||
dateNames: { |
||||
1: 'one', |
||||
2: 'two', |
||||
3: 'three', |
||||
4: 'four', |
||||
5: 'five', |
||||
6: 'six', |
||||
7: 'seven', |
||||
15: 'fifteen', |
||||
30: 'thirty', |
||||
}, |
||||
serverCategorize: ServerCategorize, |
||||
}); |
||||
|
||||
const getRemain = () => { |
||||
var defaultData = {channel: 0, rechargeTotal: 0, rechargeAccountTotal: 0, accountTotal: 0}; |
||||
state.tableData.data = [defaultData]; |
||||
var rechargeMin = state.tableData.param.rechargeMin |
||||
if (rechargeMin > 0) { |
||||
rechargeMin = rechargeMin * 100; |
||||
} |
||||
var rechargeTotal = state.tableData.param.rechargeTotal |
||||
if (rechargeTotal > 0) { |
||||
rechargeTotal = rechargeTotal * 100; |
||||
} |
||||
orderLog({ |
||||
channel: state.tableData.param.channel, |
||||
server: state.tableData.param.server, |
||||
rechargeMin: rechargeMin, |
||||
rechargeTotal: rechargeTotal, |
||||
startTime: state.tableData.param.startTime, |
||||
endTime: state.tableData.param.endTime, |
||||
compareType: state.tableData.param.compareType, |
||||
compareType1: state.tableData.param.compareType1, |
||||
}).then(res => { |
||||
state.tableData.total = 0; |
||||
console.log("keepAccount:", res); |
||||
const amountTotal = res.data && res.data.amountTotal || []; |
||||
const rechargeAccountTotal = res.data && res.data.rechargeAccountTotal || []; |
||||
const accountTotal = res.data && res.data.accountTotal || []; |
||||
amountTotal.map((item: any) => { |
||||
if (!state.channels.find(r => r.value == item.channel)) { |
||||
return |
||||
} |
||||
const getRemain = () => { |
||||
var defaultData = { channel: 0, rechargeTotal: 0, rechargeAccountTotal: 0, accountTotal: 0 }; |
||||
state.tableData.data = [defaultData]; |
||||
var rechargeMin = state.tableData.param.rechargeMin; |
||||
if (rechargeMin > 0) { |
||||
rechargeMin = rechargeMin * 100; |
||||
} |
||||
var rechargeTotal = state.tableData.param.rechargeTotal; |
||||
if (rechargeTotal > 0) { |
||||
rechargeTotal = rechargeTotal * 100; |
||||
} |
||||
orderLog({ |
||||
channel: state.tableData.param.channel, |
||||
server: state.tableData.param.server, |
||||
rechargeMin: rechargeMin, |
||||
rechargeTotal: rechargeTotal, |
||||
startTime: state.tableData.param.startTime, |
||||
endTime: state.tableData.param.endTime, |
||||
compareType: state.tableData.param.compareType, |
||||
compareType1: state.tableData.param.compareType1, |
||||
}).then((res) => { |
||||
state.tableData.total = 0; |
||||
console.log('keepAccount:', res); |
||||
const amountTotal = (res.data && res.data.amountTotal) || []; |
||||
const rechargeAccountTotal = (res.data && res.data.rechargeAccountTotal) || []; |
||||
const accountTotal = (res.data && res.data.accountTotal) || []; |
||||
amountTotal.map((item: any) => { |
||||
if (!state.channels.find((r) => r.value == item.channel)) { |
||||
return; |
||||
} |
||||
|
||||
let channelData = state.tableData.data.find(r => r.channel === item.channel); |
||||
if (!channelData) { |
||||
channelData = {channel: item.channel}; |
||||
state.tableData.data.push(channelData); |
||||
} |
||||
let channelData = state.tableData.data.find((r) => r.channel === item.channel); |
||||
if (!channelData) { |
||||
channelData = { channel: item.channel }; |
||||
state.tableData.data.push(channelData); |
||||
} |
||||
|
||||
channelData.rechargeTotal = item.totalAmount; |
||||
defaultData.rechargeTotal += Number(item.totalAmount); |
||||
}); |
||||
rechargeAccountTotal.map((item: any) => { |
||||
if (!state.channels.find(r => r.value == item.channel)) { |
||||
return |
||||
} |
||||
let channelData = state.tableData.data.find(r => r.channel === item.channel); |
||||
if (!channelData) { |
||||
channelData = {channel: item.channel}; |
||||
state.tableData.data.push(channelData); |
||||
} |
||||
channelData.rechargeTotal = item.totalAmount; |
||||
defaultData.rechargeTotal += Number(item.totalAmount); |
||||
}); |
||||
rechargeAccountTotal.map((item: any) => { |
||||
if (!state.channels.find((r) => r.value == item.channel)) { |
||||
return; |
||||
} |
||||
let channelData = state.tableData.data.find((r) => r.channel === item.channel); |
||||
if (!channelData) { |
||||
channelData = { channel: item.channel }; |
||||
state.tableData.data.push(channelData); |
||||
} |
||||
|
||||
channelData.rechargeAccountTotal = item.totalAccount; |
||||
defaultData.rechargeAccountTotal += Number(item.totalAccount); |
||||
}); |
||||
accountTotal.map((item: any) => { |
||||
if (!state.channels.find(r => r.value == item.channel)) { |
||||
return |
||||
} |
||||
let channelData = state.tableData.data.find(r => r.channel === item.channel); |
||||
if (!channelData) { |
||||
channelData = {channel: item.channel}; |
||||
state.tableData.data.push(channelData); |
||||
} |
||||
channelData.rechargeAccountTotal = item.totalAccount; |
||||
defaultData.rechargeAccountTotal += Number(item.totalAccount); |
||||
}); |
||||
accountTotal.map((item: any) => { |
||||
if (!state.channels.find((r) => r.value == item.channel)) { |
||||
return; |
||||
} |
||||
let channelData = state.tableData.data.find((r) => r.channel === item.channel); |
||||
if (!channelData) { |
||||
channelData = { channel: item.channel }; |
||||
state.tableData.data.push(channelData); |
||||
} |
||||
|
||||
channelData.accountTotal = item.totalAccount; |
||||
defaultData.accountTotal += Number(item.totalAccount); |
||||
}); |
||||
state.tableData.data.map((item: any) => { |
||||
if (!item.rechargeAccountTotal) { |
||||
item.rechargeAccountTotal = 0 |
||||
} |
||||
if (!item.accountTotal) { |
||||
item.accountTotal = 0 |
||||
} |
||||
if (!item.rechargeTotal) { |
||||
item.rechargeTotal = 0 |
||||
} |
||||
item.accountPer = Math.floor(item.rechargeAccountTotal / (item.accountTotal || 1) * 100); |
||||
item.rechargePer = item.rechargeTotal / (item.accountTotal || 1); |
||||
item.rechargeAccountPer = item.rechargeTotal / (item.rechargeAccountTotal || 1); |
||||
channelData.accountTotal = item.totalAccount; |
||||
defaultData.accountTotal += Number(item.totalAccount); |
||||
}); |
||||
state.tableData.data.map((item: any) => { |
||||
if (!item.rechargeAccountTotal) { |
||||
item.rechargeAccountTotal = 0; |
||||
} |
||||
if (!item.accountTotal) { |
||||
item.accountTotal = 0; |
||||
} |
||||
if (!item.rechargeTotal) { |
||||
item.rechargeTotal = 0; |
||||
} |
||||
item.accountPer = Math.floor((item.rechargeAccountTotal / (item.accountTotal || 1)) * 100); |
||||
item.rechargePer = item.rechargeTotal / (item.accountTotal || 1); |
||||
item.rechargeAccountPer = item.rechargeTotal / (item.rechargeAccountTotal || 1); |
||||
}); |
||||
console.log(' state.tableData.data:', state.tableData.data); |
||||
}); |
||||
orderLogPlatform({ |
||||
channel: state.tableData.param.channel, |
||||
server: state.tableData.param.server, |
||||
rechargeMin: rechargeMin, |
||||
rechargeTotal: rechargeTotal, |
||||
startTime: state.tableData.param.startTime, |
||||
endTime: state.tableData.param.endTime, |
||||
compareType: state.tableData.param.compareType, |
||||
compareType1: state.tableData.param.compareType1, |
||||
}).then((res) => { |
||||
console.log('orderLogPlatform: ', res); |
||||
const amountTotal = (res.data && res.data.amountTotal) || []; |
||||
amountTotal.map((item: any) => { |
||||
if (!state.channels.find((r) => r.value == item.channel)) { |
||||
return; |
||||
} |
||||
|
||||
}); |
||||
console.log(" state.tableData.data:", state.tableData.data); |
||||
}) |
||||
}; |
||||
const checkRecharge = (value: any) => { |
||||
console.log("checkRecharge", value) |
||||
}; |
||||
onMounted(function () { |
||||
allServerList().then(res => { |
||||
state.servers = res; |
||||
}); |
||||
allChannelList().then(res => { |
||||
state.channels = res; |
||||
// console.log("allChannelList", res) |
||||
}); |
||||
}); |
||||
let channelData = state.tableData.data.find((r) => r.channel === item.channel); |
||||
if (!channelData) { |
||||
channelData = { channel: item.channel }; |
||||
state.tableData.data.push(channelData); |
||||
} |
||||
if (item.platform == 1) { |
||||
channelData.ali = (item.totalAmount / 100).toFixed(2); |
||||
} |
||||
if (item.platform == 3) { |
||||
channelData.wChat = (item.totalAmount / 100).toFixed(2); |
||||
} |
||||
}); |
||||
}); |
||||
}; |
||||
const checkRecharge = (value: any) => { |
||||
console.log('checkRecharge', value); |
||||
}; |
||||
onMounted(function () { |
||||
allServerList().then((res) => { |
||||
state.servers = res; |
||||
}); |
||||
allChannelList().then((res) => { |
||||
state.channels = res; |
||||
// console.log("allChannelList", res) |
||||
}); |
||||
}); |
||||
|
||||
const switchServer = () => { |
||||
return gSwitchServer(state.serverSwitch, state.servers) |
||||
}; |
||||
return { |
||||
switchServer, |
||||
getRemain, |
||||
checkRecharge, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
const switchServer = () => { |
||||
return gSwitchServer(state.serverSwitch, state.servers); |
||||
}; |
||||
return { |
||||
switchServer, |
||||
getRemain, |
||||
checkRecharge, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
}); |
||||
</script> |
||||
|
@ -0,0 +1,62 @@
|
||||
<template> |
||||
<div class="system-edit-post-container"> |
||||
<el-form ref="formRef" size="default" label-width="80px"> |
||||
<el-card shadow="hover" header=""> |
||||
<el-form-item> |
||||
<el-button size="default" type="primary" class="ml10" @click="onReset"> |
||||
<el-icon> |
||||
<ele-RefreshRight /> |
||||
</el-icon> |
||||
重置充值档位记录 |
||||
</el-button> |
||||
</el-form-item> |
||||
</el-card> |
||||
</el-form> |
||||
</div> |
||||
</template> |
||||
<script lang="ts"> |
||||
import { defineComponent, reactive, ref, toRefs } from 'vue'; |
||||
import { resetOrderSign } from '/@/api/game'; |
||||
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'; |
||||
|
||||
interface TableDataState {} |
||||
|
||||
export default defineComponent({ |
||||
name: 'apiV1GameResetSign', |
||||
setup: function () { |
||||
const formRef = ref<HTMLElement | null>(null); |
||||
const menuRef = ref(); |
||||
const state = reactive<TableDataState>({}); |
||||
const onReset = () => { |
||||
const loading = ElLoading.service({ |
||||
lock: true, |
||||
text: 'Loading', |
||||
background: 'rgba(0, 0, 0, 0.7)', |
||||
}); |
||||
ElMessageBox.confirm(`此操作将删除:玩家充值档位记录,是否继续?`, '提示', { |
||||
confirmButtonText: '确认', |
||||
cancelButtonText: '取消', |
||||
type: 'warning', |
||||
}) |
||||
.then(() => { |
||||
resetOrderSign() |
||||
.then(() => { |
||||
ElMessage.success('删除成功'); |
||||
}) |
||||
.finally(() => { |
||||
loading.close(); |
||||
}); |
||||
}) |
||||
.catch(() => { |
||||
loading.close(); |
||||
}); |
||||
}; |
||||
return { |
||||
onReset, |
||||
menuRef, |
||||
formRef, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
}); |
||||
</script> |
@ -1,165 +1,187 @@
|
||||
<template> |
||||
<div class="game-account-container"> |
||||
<el-card shadow="hover"> |
||||
<div class="game-account-search mb15"> |
||||
<el-form :inline="true"> |
||||
<el-form-item label="服务器"> |
||||
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> |
||||
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/> |
||||
</el-select> |
||||
<el-select v-model="queryParams.serverId" class="m-2" placeholder="选择服务器" filterable> |
||||
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id"/> |
||||
</el-select> |
||||
</el-form-item> |
||||
<el-form-item label="账号"> |
||||
<el-input size="default" v-model="queryParams.account" placeholder="请输入账号" class="w-50 m-2" clearable/> |
||||
</el-form-item> |
||||
<el-form-item label="id"> |
||||
<el-input size="default" v-model="queryParams.id" placeholder="请输入uid" class="w-50 m-2" clearable/> |
||||
</el-form-item> |
||||
<el-form-item label="uid"> |
||||
<el-input size="default" v-model="queryParams.uid" placeholder="请输入uid" class="w-50 m-2" clearable/> |
||||
</el-form-item> |
||||
<el-form-item label="身份证:"> |
||||
<el-input size="default" v-model="queryParams.ident" placeholder="身份证" class="w-50 m-2" clearable/> |
||||
</el-form-item> |
||||
<el-form-item label="名字:"> |
||||
<el-input size="default" v-model="queryParams.name" placeholder="名字" class="w-50 m-2" clearable/> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button size="default" type="primary" class="ml10" @click="accountList"> |
||||
<el-icon> |
||||
<ele-Search/> |
||||
</el-icon> |
||||
查询 |
||||
</el-button> |
||||
</el-form-item> |
||||
</el-form> |
||||
</div> |
||||
<el-table :data="tableData.data" style="width: 100%" stripe> |
||||
<el-table-column type="index" label="id" width="60"/> |
||||
<el-table-column prop="AccountName" label="账号" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="uid" label="uid" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="StringId" label="id" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="AccountType" label="账号类型" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="RealName" label="名字" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="Identity" label="身份证" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="CreateTime" label="创建时间" show-overflow-tooltip></el-table-column> |
||||
</el-table> |
||||
<el-row justify="space-evenly"> |
||||
<el-pagination :hide-on-single-page="true" :total="tableData.total" v-model:page-size="queryParams.pageSize" |
||||
v-model:current-page="queryParams.pageNum" @current-change="accountList"/> |
||||
</el-row> |
||||
</el-card> |
||||
</div> |
||||
<div class="game-account-container"> |
||||
<el-card shadow="hover"> |
||||
<div class="game-account-search mb15"> |
||||
<el-form :inline="true"> |
||||
<el-form-item label="服务器"> |
||||
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> |
||||
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" /> |
||||
</el-select> |
||||
<el-select v-model="queryParams.serverId" class="m-2" placeholder="选择服务器" filterable> |
||||
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" /> |
||||
</el-select> |
||||
</el-form-item> |
||||
<el-form-item label="账号"> |
||||
<el-input size="default" v-model="queryParams.account" placeholder="请输入账号" class="w-50 m-2" clearable /> |
||||
</el-form-item> |
||||
<el-form-item label="id"> |
||||
<el-input size="default" v-model="queryParams.id" placeholder="请输入uid" class="w-50 m-2" clearable /> |
||||
</el-form-item> |
||||
<el-form-item label="uid"> |
||||
<el-input size="default" v-model="queryParams.uid" placeholder="请输入uid" class="w-50 m-2" clearable /> |
||||
</el-form-item> |
||||
<el-form-item label="身份证:"> |
||||
<el-input size="default" v-model="queryParams.ident" placeholder="身份证" class="w-50 m-2" clearable /> |
||||
</el-form-item> |
||||
<el-form-item label="名字:"> |
||||
<el-input size="default" v-model="queryParams.name" placeholder="名字" class="w-50 m-2" clearable /> |
||||
</el-form-item> |
||||
<el-form-item label="账号状态"> |
||||
<el-select v-model="queryParams.gmState" class="m-2" placeholder="选择状态" size="large"> |
||||
<el-option label="" value="" /> |
||||
<el-option v-for="item in tableData.accountType" :key="item.value" :label="item.label" :value="item.value" /> |
||||
</el-select> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button size="default" type="primary" class="ml10" @click="accountList"> |
||||
<el-icon> |
||||
<ele-Search /> |
||||
</el-icon> |
||||
查询 |
||||
</el-button> |
||||
</el-form-item> |
||||
</el-form> |
||||
</div> |
||||
<el-table :data="tableData.data" style="width: 100%" stripe> |
||||
<el-table-column type="index" label="id" width="60" /> |
||||
<el-table-column prop="AccountName" label="账号" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="uid" label="uid" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="StringId" label="id" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="AccountType" label="账号类型" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="RealName" label="名字" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="Identity" label="身份证" show-overflow-tooltip></el-table-column> |
||||
<el-table-column prop="CreateTime" label="创建时间" show-overflow-tooltip></el-table-column> |
||||
</el-table> |
||||
<el-row justify="space-evenly"> |
||||
<el-pagination |
||||
:hide-on-single-page="true" |
||||
:total="tableData.total" |
||||
v-model:page-size="queryParams.pageSize" |
||||
v-model:current-page="queryParams.pageNum" |
||||
@current-change="accountList" |
||||
/> |
||||
</el-row> |
||||
</el-card> |
||||
</div> |
||||
</template> |
||||
|
||||
<script lang="ts"> |
||||
import {toRefs, reactive, onMounted, defineComponent} from 'vue'; |
||||
import {gameAccountList} from "/@/api/game"; |
||||
import {ElMessage} from "element-plus"; |
||||
import {ServerCategorize, serverList} from "/@/utils/game"; |
||||
import {gSwitchServer} from "/@/utils/utils"; |
||||
import { toRefs, reactive, onMounted, defineComponent } from 'vue'; |
||||
import { gameAccountList } from '/@/api/game'; |
||||
import { ElMessage } from 'element-plus'; |
||||
import { ServerCategorize, serverList } from '/@/utils/game'; |
||||
import { gSwitchServer } from '/@/utils/utils'; |
||||
import { AccountType } from '/@/api/common/consts'; |
||||
|
||||
// 定义接口来定义对象的类型 |
||||
interface TableData { |
||||
uid: number; |
||||
name: string; |
||||
region: number; |
||||
totalTime: number; |
||||
rechargeTotal: number; |
||||
CreateTime: string; |
||||
AccountType: string; |
||||
uid: number; |
||||
name: string; |
||||
region: number; |
||||
totalTime: number; |
||||
rechargeTotal: number; |
||||
CreateTime: string; |
||||
AccountType: string; |
||||
} |
||||
|
||||
interface TableDataState { |
||||
serverSwitch: number; |
||||
queryParams: { |
||||
account: string, |
||||
serverId: number, |
||||
id: string, |
||||
pageSize: number, |
||||
pageNum: number, |
||||
}; |
||||
tableData: { |
||||
data: Array<TableData>; |
||||
total: 0, |
||||
accountType: Array<{ label: string, value: number }> |
||||
}; |
||||
servers: object[] |
||||
serverCategorize: object[] |
||||
serverSwitch: number; |
||||
queryParams: { |
||||
account: string; |
||||
serverId: number; |
||||
id: string; |
||||
uid: string; |
||||
ident: string; |
||||
name: string; |
||||
gmState: string; |
||||
pageSize: number; |
||||
pageNum: number; |
||||
}; |
||||
tableData: { |
||||
data: Array<TableData>; |
||||
total: 0; |
||||
accountType: Array<{ label: string; value: number }>; |
||||
}; |
||||
servers: object[]; |
||||
gmStates: object; |
||||
serverCategorize: object[]; |
||||
} |
||||
|
||||
export default defineComponent({ |
||||
name: 'apiV1GameRoleAccount', |
||||
setup() { |
||||
const state = reactive<TableDataState>({ |
||||
serverSwitch: 0, |
||||
queryParams: { |
||||
account: "", |
||||
serverId: "", |
||||
id: "", |
||||
pageSize: 10, |
||||
pageNum: 1, |
||||
}, |
||||
tableData: { |
||||
data: [], |
||||
total: 0, |
||||
accountType: [{label: "正常", value: 0}, {label: "黑名单", value: 1}, {label: "GM", value: 2}] |
||||
}, |
||||
servers: [], |
||||
serverCategorize: ServerCategorize, |
||||
}); |
||||
name: 'apiV1GameRoleAccount', |
||||
setup() { |
||||
const state = reactive<TableDataState>({ |
||||
serverSwitch: 0, |
||||
queryParams: { |
||||
account: '', |
||||
serverId: '', |
||||
id: '', |
||||
uid: '', |
||||
ident: '', |
||||
name: '', |
||||
gmState: '', |
||||
pageSize: 10, |
||||
pageNum: 1, |
||||
}, |
||||
tableData: { |
||||
data: [], |
||||
total: 0, |
||||
accountType: AccountType, |
||||
}, |
||||
servers: [], |
||||
serverCategorize: ServerCategorize, |
||||
}); |
||||
|
||||
const accountList = () => { |
||||
console.log(state.queryParams); |
||||
gameAccountList(state.queryParams).then(res => { |
||||
if (!res.data.list || res.data.list.length == 0) { |
||||
ElMessage.error('未查询到用户信息!'); |
||||
return; |
||||
} |
||||
console.log(res); |
||||
const list = res.data.list ?? []; |
||||
state.tableData.total = res.data.total; |
||||
list.map((item: TableData) => { |
||||
item.AccountType = state.tableData.accountType.find(r => r.value == item.AccountType).label; |
||||
item.CreateTime = new Date(item.CreateTime).toLocaleString(); |
||||
}); |
||||
state.tableData.data = list; |
||||
}) |
||||
}; |
||||
// 页面加载时 |
||||
onMounted(() => { |
||||
serverList().then(res => { |
||||
state.servers = res; |
||||
state.queryParams.serverId = res[0].id; |
||||
}); |
||||
}); |
||||
const accountList = () => { |
||||
state.tableData.data = []; |
||||
console.log(state.queryParams); |
||||
gameAccountList(state.queryParams).then((res) => { |
||||
if (!res.data.list || res.data.list.length == 0) { |
||||
ElMessage.error('未查询到用户信息!'); |
||||
return; |
||||
} |
||||
console.log(res); |
||||
const list = res.data.list ?? []; |
||||
state.tableData.total = res.data.total; |
||||
list.map((item: TableData) => { |
||||
item.AccountType = state.tableData.accountType.find((r) => r.value == item.AccountType).label; |
||||
item.CreateTime = new Date(item.CreateTime).toLocaleString(); |
||||
}); |
||||
state.tableData.data = list; |
||||
}); |
||||
}; |
||||
// 页面加载时 |
||||
onMounted(() => { |
||||
serverList().then((res) => { |
||||
state.servers = res; |
||||
state.queryParams.serverId = res[0].id; |
||||
}); |
||||
}); |
||||
|
||||
const switchServer = () => { |
||||
return gSwitchServer(state.serverSwitch, state.servers) |
||||
}; |
||||
const switchServer = () => { |
||||
return gSwitchServer(state.serverSwitch, state.servers); |
||||
}; |
||||
|
||||
return { |
||||
switchServer, |
||||
accountList, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
return { |
||||
switchServer, |
||||
accountList, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
}); |
||||
</script> |
||||
<style scoped lang="scss"> |
||||
.el-form-item { |
||||
display: -moz-flex; |
||||
vertical-align: middle; |
||||
margin-right: 32px; |
||||
display: -moz-flex; |
||||
vertical-align: middle; |
||||
margin-right: 32px; |
||||
} |
||||
|
||||
::v-deep .el-table--striped .el-table__body tr.el-table__row--striped td { |
||||
background: #ffffd5; |
||||
background: #ffffd5; |
||||
} |
||||
|
||||
::v-deep .el-table .el-table--enable-row-hover .el-table__body tr:hover > td { |
||||
background: inherit; |
||||
background: inherit; |
||||
} |
||||
</style> |
||||
|
@ -1,93 +1,115 @@
|
||||
<template> |
||||
<div class="game-account-container"> |
||||
<el-card shadow="hover"> |
||||
<div class="game-account-search mb15"> |
||||
<el-form :inline="true"> |
||||
<el-form-item label="账号"> |
||||
<el-input size="default" v-model="queryParams.account" placeholder="请输入账号" class="w-50 m-2" |
||||
clearable/> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button size="default" type="primary" class="ml10" @click="deleteAccount"> |
||||
<el-icon> |
||||
<ele-Search/> |
||||
</el-icon> |
||||
删除账号 |
||||
</el-button> |
||||
</el-form-item> |
||||
</el-form> |
||||
</div> |
||||
|
||||
</el-card> |
||||
</div> |
||||
<div class="game-account-container"> |
||||
<el-card shadow="hover"> |
||||
<div class="game-account-search mb15"> |
||||
<el-form :inline="true"> |
||||
<el-form-item label="账号"> |
||||
<el-input size="default" v-model="queryParams.account" placeholder="请输入账号" class="w-50 m-2" clearable /> |
||||
</el-form-item> |
||||
<!-- <el-form-item label="账号服务器"> |
||||
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> |
||||
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" /> |
||||
</el-select> |
||||
<el-select v-model="queryParams.serverId" class="m-2" placeholder="选择服务器" filterable> |
||||
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" /> |
||||
</el-select> |
||||
</el-form-item>--> |
||||
<el-form-item> |
||||
<el-button size="default" type="primary" class="ml10" @click="deleteAccount"> |
||||
<el-icon> |
||||
<ele-Search /> |
||||
</el-icon> |
||||
删除后台游戏账号所有数据 |
||||
</el-button> |
||||
</el-form-item> |
||||
</el-form> |
||||
</div> |
||||
</el-card> |
||||
</div> |
||||
</template> |
||||
|
||||
<script lang="ts"> |
||||
import {toRefs, reactive, onMounted, defineComponent} from 'vue'; |
||||
import {gameDeleteAccount} from "/@/api/game"; |
||||
import {ElMessage, ElMessageBox} from "element-plus"; |
||||
import { toRefs, reactive, onMounted, defineComponent } from 'vue'; |
||||
import { gameDeleteAccount } from '/@/api/game'; |
||||
import { ElMessage, ElMessageBox } from 'element-plus'; |
||||
import { AllServerList, ServerCategorize, serverList } from '/@/utils/game'; |
||||
import { gSwitchServer } from '/@/utils/utils'; |
||||
|
||||
interface TableDataState { |
||||
queryParams: { |
||||
account: string; |
||||
password: string; |
||||
}; |
||||
queryParams: { |
||||
account: string; |
||||
password: string; |
||||
}; |
||||
serverCategorize: object; |
||||
serverSwitch: number; |
||||
servers: object[]; |
||||
} |
||||
|
||||
export default defineComponent({ |
||||
name: 'apiV1GameRoleDeleteAccount', |
||||
setup() { |
||||
const state = reactive<TableDataState>({ |
||||
queryParams: { |
||||
password: "", |
||||
account: "", |
||||
}, |
||||
}); |
||||
name: 'apiV1GameRoleDeleteAccount', |
||||
setup() { |
||||
const state = reactive<TableDataState>({ |
||||
queryParams: { |
||||
password: '', |
||||
account: '', |
||||
}, |
||||
servers: [], |
||||
serverCategorize: ServerCategorize, |
||||
serverSwitch: 0, |
||||
}); |
||||
|
||||
const deleteAccount = () => { |
||||
console.log(state.queryParams) |
||||
ElMessageBox.prompt(`确认删除账号${state.queryParams.account},请输入密码`, '提示', { |
||||
confirmButtonText: '确认', |
||||
cancelButtonText: '取消', |
||||
// inputPattern: |
||||
// /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/, |
||||
inputErrorMessage: 'Invalid password', |
||||
}).then(({value}) => { |
||||
if(value == 0){ |
||||
return |
||||
} |
||||
state.queryParams.password = value; |
||||
gameDeleteAccount(state.queryParams).then(res => { |
||||
console.log(res) |
||||
if (res.data.data === 1) { |
||||
ElMessage.success("操作成功") |
||||
} |
||||
}) |
||||
}); |
||||
const deleteAccount = () => { |
||||
console.log(state.queryParams); |
||||
ElMessageBox.prompt(`确认删除账号${state.queryParams.account},请输入密码`, '提示', { |
||||
confirmButtonText: '确认', |
||||
cancelButtonText: '取消', |
||||
// inputPattern: |
||||
// /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/, |
||||
inputErrorMessage: 'Invalid password', |
||||
}).then(({ value }) => { |
||||
if (value == 0) { |
||||
return; |
||||
} |
||||
state.queryParams.password = value; |
||||
gameDeleteAccount(state.queryParams).then((res) => { |
||||
console.log(res); |
||||
if (res.data.data === 1) { |
||||
ElMessage.success('操作成功'); |
||||
} |
||||
}); |
||||
}); |
||||
}; |
||||
// 页面加载时 |
||||
onMounted(() => { |
||||
serverList().then((res) => { |
||||
state.servers = res; |
||||
// state.queryParams.serverId = res[0].id; |
||||
}); |
||||
}); |
||||
|
||||
}; |
||||
// 页面加载时 |
||||
onMounted(() => { |
||||
}); |
||||
return { |
||||
deleteAccount, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
const switchServer = () => { |
||||
return gSwitchServer(state.serverSwitch, state.servers); |
||||
}; |
||||
return { |
||||
switchServer, |
||||
deleteAccount, |
||||
...toRefs(state), |
||||
}; |
||||
}, |
||||
}); |
||||
</script> |
||||
<style scoped lang="scss"> |
||||
.el-form-item { |
||||
display: -moz-flex; |
||||
vertical-align: middle; |
||||
margin-right: 32px; |
||||
display: -moz-flex; |
||||
vertical-align: middle; |
||||
margin-right: 32px; |
||||
} |
||||
|
||||
::v-deep .el-table--striped .el-table__body tr.el-table__row--striped td { |
||||
background: #ffffd5; |
||||
background: #ffffd5; |
||||
} |
||||
|
||||
::v-deep .el-table .el-table--enable-row-hover .el-table__body tr:hover > td { |
||||
background: inherit; |
||||
background: inherit; |
||||
} |
||||
</style> |
||||
|
Loading…
Reference in new issue