gm自动返利活动

master
duhui 2022-10-25 16:26:21 +08:00
parent f13d8f1404
commit 6533b95e8a
19 changed files with 587 additions and 636 deletions

View File

@ -1,9 +1,9 @@
package com.jmfy.controller;
import com.jmfy.dao.AutoRechargeBackActivityDao;
import com.jmfy.dao.ActivityDao;
import com.jmfy.dao.ServerInfoDao;
import com.jmfy.model.AutoRechargeBackActivity;
import com.jmfy.model.AutoRechargeBackMission;
import com.jmfy.model.ARBActivity;
import com.jmfy.model.ARBMission;
import com.jmfy.model.ServerInfo;
import com.jmfy.model.vo.ARBActivityTypeEnum;
import com.jmfy.model.vo.ARBActivityTypeVo;
@ -20,8 +20,6 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author hj
@ -30,13 +28,13 @@ import java.util.stream.Collectors;
* @Version 1.0
*/
@Controller
public class AutoRechargeBackActivityController {
private static final Logger LOGGER = LoggerFactory.getLogger(AutoRechargeBackActivityController.class);
public class ActivityController {
private static final Logger LOGGER = LoggerFactory.getLogger(ActivityController.class);
@Resource
private ServerInfoDao serverInfoDao;
@Resource
private AutoRechargeBackActivityDao activityDao;
private ActivityDao activityDao;
/**
*
@ -47,7 +45,7 @@ public class AutoRechargeBackActivityController {
@RequestMapping(value = "/findARBActivityInfos", method = {RequestMethod.POST, RequestMethod.GET})
public String findARBActivityInfos(ModelMap map, HttpServletRequest request) throws Exception {
String serverId = request.getParameter("serverId");
List<AutoRechargeBackActivity> allActivityList = new ArrayList<>();
List<ARBActivity> allActivityList = new ArrayList<>();
// 没有serverId获取全部活动信息
if (StringUtil.isEmpty(serverId)){
allActivityList = activityDao.findAllActivityList();
@ -56,14 +54,14 @@ public class AutoRechargeBackActivityController {
else {
String[] serverIds = serverId.split(",");
for (String id : serverIds) {
allActivityList.addAll(activityDao.findServerActivityList(Integer.parseInt(id)));
allActivityList.addAll(activityDao.findServerActivityList(id));
}
}
List<ServerInfo> serverInfos = serverInfoDao.getAllServerInfo();
map.addAttribute("serverInfos", serverInfos);
map.addAttribute("allActivityList", allActivityList);
return "autoRechargeBackActivityInfos";
return "ARBActivitys";
}
/**
@ -72,18 +70,18 @@ public class AutoRechargeBackActivityController {
* @return
* @throws Exception
*/
@RequestMapping(value = "/cutUpdateARBActivity", method = {RequestMethod.POST, RequestMethod.GET})
public String cutUpdateARBActivity(ModelMap map, HttpServletRequest request) throws Exception {
@RequestMapping(value = "/jumpUpdateARBActivity", method = {RequestMethod.POST, RequestMethod.GET})
public String jumpUpdateARBActivity(ModelMap map, HttpServletRequest request) throws Exception {
String activityId = request.getParameter("activityId");
if (!StringUtil.isEmpty(activityId)){
AutoRechargeBackActivity oneActivity = activityDao.findOneActivity(Integer.parseInt(activityId));
ARBActivity oneActivity = activityDao.findOneActivity(activityId);
map.addAttribute("activity", oneActivity);
}
List<ARBActivityTypeVo> typeList = new ArrayList<>(ARBActivityTypeEnum.getVoMap().values());
map.addAttribute("typeList", typeList);
List<ServerInfo> serverInfos = serverInfoDao.getAllServerInfo();
map.addAttribute("serverInfos", serverInfos);
return "updateAutoRechargeBackActivity";
return "updateARBActivity";
}
/**
@ -94,8 +92,8 @@ public class AutoRechargeBackActivityController {
*/
@PostMapping(value = "/updateARBActivity")
public @ResponseBody int
updateARBActivity(@RequestBody AutoRechargeBackActivity activity) throws Exception {
activityDao.insertAndUpdateActivity(activity);
updateARBActivity(@RequestBody ARBActivity activity) throws Exception {
activityDao.uporsetActivity(activity);
return 1;
}
@ -109,7 +107,7 @@ public class AutoRechargeBackActivityController {
public @ResponseBody int
removeARBActivity(HttpServletRequest request) throws Exception {
String activityId = request.getParameter("activityId");
activityDao.deleteActivity(Integer.parseInt(activityId));
activityDao.deleteActivity(activityId);
return 1;
}
@ -119,24 +117,47 @@ public class AutoRechargeBackActivityController {
* @return
* @throws Exception
*/
@RequestMapping(value = "/findARBActivityMissionInfos", method = {RequestMethod.POST, RequestMethod.GET})
public String findARBActivityMissionInfos(ModelMap map, HttpServletRequest request) throws Exception {
@RequestMapping(value = "/findARBMissions", method = {RequestMethod.POST, RequestMethod.GET})
public String findARBMissions(ModelMap map, HttpServletRequest request) throws Exception {
String activityId = request.getParameter("activityId");
List<AutoRechargeBackMission> missions = activityDao.findActivityMission(Integer.parseInt(activityId));
List<ARBMission> missions = activityDao.findActivityMissionList(activityId);
map.addAttribute("missions", missions);
return "autoRechargeBackActivityMissionInfos";
map.addAttribute("activityId", activityId);
return "ARBMissions";
}
/**
*
* @param mission
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value = "/updateARBackActivityMission", method = {RequestMethod.POST, RequestMethod.GET})
@RequestMapping(value = "/addARBMission", method = {RequestMethod.POST, RequestMethod.GET})
public @ResponseBody int
updateARBackActivityMission(@RequestBody AutoRechargeBackMission mission) throws Exception {
activityDao.insertAndUpdateActivityMission(mission);
addARBMission(HttpServletRequest request) throws Exception {
ARBMission mission = new ARBMission();
String title = request.getParameter("title");
String rechargeValue = request.getParameter("rechargeValue");
String propId = request.getParameter("propId");
String propNum = request.getParameter("propNum");
String activityId = request.getParameter("activityId");
// id
mission.setTitle(title);
mission.setRechargeValue(Integer.parseInt(rechargeValue));
// reward
String[] ids = propId.split(",");
String[] nums = propNum.split(",");
int[][] reward = new int[ids.length][2];
for (int i = 0; i < ids.length; i++) {
reward[i][0] = Integer.parseInt(ids[i]);
reward[i][1] = Integer.parseInt(nums[i]);
}
mission.setReward(reward);
// activity
ARBActivity oneActivity = activityDao.findOneActivity(activityId);
mission.setActivity(oneActivity);
activityDao.addMission(mission);
return 1;
}
@ -146,11 +167,11 @@ public class AutoRechargeBackActivityController {
* @return
* @throws Exception
*/
@RequestMapping(value = "/removeARBackActivityMission", method = {RequestMethod.POST, RequestMethod.GET})
@RequestMapping(value = "/removeARBMission", method = {RequestMethod.POST, RequestMethod.GET})
public @ResponseBody int
removeARBackActivityMission(HttpServletRequest request) throws Exception {
removeARBMission(HttpServletRequest request) throws Exception {
String missionId = request.getParameter("missionId");
activityDao.deleteActivityMission(Integer.parseInt(missionId));
activityDao.deleteMission(missionId);
return 1;
}
@ -160,16 +181,18 @@ public class AutoRechargeBackActivityController {
* @return
* @throws Exception
*/
@RequestMapping(value = "/cutUpdateARBMission", method = {RequestMethod.POST, RequestMethod.GET})
public String cutUpdateARBMission(ModelMap map, HttpServletRequest request) throws Exception {
@RequestMapping(value = "/jumpAddARBMission", method = {RequestMethod.POST, RequestMethod.GET})
public String jumpAddARBMission(ModelMap map, HttpServletRequest request) throws Exception {
String missionId = request.getParameter("missionId");
if (!StringUtil.isEmpty(missionId)){
AutoRechargeBackMission mission = activityDao.findOneActivityMission(Integer.parseInt(missionId));
ARBMission mission = activityDao.findOneMission(missionId);
map.addAttribute("mission", mission);
}
ArrayList<SItemConfig> itemList = new ArrayList<>(FileCacheUtils.itemMap.values());
map.addAttribute("itemList",itemList);
return "updateAutoRechargeBackMission";
String activityId = request.getParameter("activityId");
map.addAttribute("activityId", activityId);
return "addARBMission";
}
}

View File

@ -76,20 +76,6 @@ public class FindFlowController {
itemFlowVo.setCount(String.valueOf(moneyFlow.getItemNum()));
itemFlowVoList.add(itemFlowVo);
}
// List<ItemFlow> itemFlowList = itemDao.findItemFlowInfo(serverId,startTime,endTime,userId);
// for (ItemFlow itemFlow:itemFlowList){
// ItemFlowVo itemFlowVo = new ItemFlowVo();
// itemFlowVo.setUserId(itemFlow.getUid());
// itemFlowVo.setServerId(itemFlow.getServerId());
// itemFlowVo.setTime(itemFlow.getTime());
// itemFlowVo.setUserLevel(itemFlow.getLevel());
// itemFlowVo.setItemName(getItemName(Integer.parseInt(itemFlow.getiGoodsId()),Integer.parseInt(itemFlow.getiGoodsType())));
// itemFlowVo.setReason(getReason(itemFlow.getReason()));
// itemFlowVo.setAfterMoney(itemFlow.getAfterCount());
// itemFlowVo.setAddOrReduce(itemFlow.getAddOrReduce());
// itemFlowVo.setCount(itemFlow.getCount());
// itemFlowVoList.add(itemFlowVo);
// }
map.put("itemFlowVoList", itemFlowVoList);
map.put("itemNameMap",FileCacheUtils.itemNameMap);
return "itemFlow";

View File

@ -1,7 +1,8 @@
package com.jmfy.dao;
import com.jmfy.model.AutoRechargeBackActivity;
import com.jmfy.model.AutoRechargeBackMission;
import com.jmfy.model.ARBActivity;
import com.jmfy.model.ARBActivity;
import com.jmfy.model.ARBMission;
import java.util.List;
@ -11,14 +12,14 @@ import java.util.List;
* @Description:
* @Version 1.0
*/
public interface AutoRechargeBackActivityDao {
public interface ActivityDao {
/**
*
* @return
* @throws Exception
*/
List<AutoRechargeBackActivity> findAllActivityList() throws Exception;
List<ARBActivity> findAllActivityList() throws Exception;
/**
*
@ -26,28 +27,28 @@ public interface AutoRechargeBackActivityDao {
* @return
* @throws Exception
*/
List<AutoRechargeBackActivity> findServerActivityList(int serverId) throws Exception;
List<ARBActivity> findServerActivityList(String serverId) throws Exception;
/**
*
* @return
* @throws Exception
*/
AutoRechargeBackActivity findOneActivity(int activityId) throws Exception;
ARBActivity findOneActivity(String activityId) throws Exception;
/**
*
* @return
* @throws Exception
*/
void insertAndUpdateActivity(AutoRechargeBackActivity activity) throws Exception;
void uporsetActivity(ARBActivity activity) throws Exception;
/**
*
* @return
* @throws Exception
*/
void deleteActivity(int activityId) throws Exception;
void deleteActivity(String activityId) throws Exception;
/**
*
@ -55,7 +56,7 @@ public interface AutoRechargeBackActivityDao {
* @return
* @throws Exception
*/
List<AutoRechargeBackMission> findActivityMission(int activityId) throws Exception;
List<ARBMission> findActivityMissionList(String activityId) throws Exception;
/**
*
@ -63,19 +64,19 @@ public interface AutoRechargeBackActivityDao {
* @return
* @throws Exception
*/
AutoRechargeBackMission findOneActivityMission(int missionId) throws Exception;
ARBMission findOneMission(String missionId) throws Exception;
/**
*
* @return
* @throws Exception
*/
void insertAndUpdateActivityMission(AutoRechargeBackMission mission) throws Exception;
void addMission(ARBMission mission) throws Exception;
/**
*
* @return
* @throws Exception
*/
void deleteActivityMission(int missionId) throws Exception;
void deleteMission(String missionId) throws Exception;
}

View File

@ -0,0 +1,123 @@
package com.jmfy.dao.impl;
import com.jmfy.dao.ActivityDao;
import com.jmfy.model.ARBActivity;
import com.jmfy.model.ARBMission;
import com.jmfy.model.Constant;
import com.jmfy.utils.Connect;
import com.jmfy.utils.StringUtil;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* @Author hj
* @Date 2021/5/20 10:48
* @Description:
* @Version 1.0
*/
@Component
public class ActivityDaoImpl implements ActivityDao {
@Resource
private Connect connect;
@Override
public List<ARBActivity> findAllActivityList() throws Exception {
MongoTemplate mongoTemplate = connect.getMongoTemplete(Constant.dbName);
List<ARBActivity> all = mongoTemplate.findAll(ARBActivity.class);
if (all == null){
return new ArrayList<>();
}
return all;
}
@Override
public List<ARBActivity> findServerActivityList(String serverId) throws Exception {
List<ARBActivity> resultList = new ArrayList<>();
for (ARBActivity activity : findAllActivityList()) {
if (activity.getServerIds().contains(serverId)){
resultList.add(activity);
}
}
return resultList;
}
@Override
public ARBActivity findOneActivity(String activityId) throws Exception {
MongoTemplate mongoTemplate = connect.getMongoTemplete(Constant.dbName);
Query query = new Query(Criteria.where("id").is(activityId));
return mongoTemplate.findOne(query,ARBActivity.class);
}
@Override
public void uporsetActivity(ARBActivity activity) throws Exception {
MongoTemplate mongoTemplate = connect.getMongoTemplete(Constant.dbName);
// 添加
ARBActivity oneActivity = findOneActivity(activity.getId());
if (oneActivity == null){
mongoTemplate.insert(activity);
return;
}
// 修改
Update update = new Update();
if (!StringUtil.isEmpty(activity.getName())){
update.set("name",activity.getName());
}
if (!StringUtil.isEmpty(activity.getDescription())){
update.set("description",activity.getDescription());
}
if (!StringUtil.isEmpty(activity.getStartTime())){
update.set("startTime",activity.getStartTime());
}
if (!StringUtil.isEmpty(activity.getEndTime())){
update.set("endTime",activity.getEndTime());
}
if (activity.getServerIds() != null && !activity.getServerIds().isEmpty()){
update.set("serverIds",activity.getServerIds());
}
Query query = new Query(Criteria.where("id").is(activity.getId()));
mongoTemplate.updateMulti(query, update, ARBActivity.class);
}
@Override
public void deleteActivity(String activityId) throws Exception {
MongoTemplate mongoTemplate = connect.getMongoTemplete(Constant.dbName);
Query query = new Query(Criteria.where("id").is(activityId));
mongoTemplate.remove(query, ARBActivity.class);
}
@Override
public List<ARBMission> findActivityMissionList(String activityId) throws Exception {
MongoTemplate mongoTemplate = connect.getMongoTemplete(Constant.dbName);
Query query = new Query(Criteria.where("activity.$id").is(new ObjectId(activityId)));
return mongoTemplate.find(query, ARBMission.class);
}
@Override
public ARBMission findOneMission(String missionId) throws Exception {
MongoTemplate mongoTemplate = connect.getMongoTemplete(Constant.dbName);
Query query = new Query(Criteria.where("id").is(missionId));
return mongoTemplate.findOne(query, ARBMission.class);
}
@Override
public void addMission(ARBMission mission) throws Exception {
MongoTemplate mongoTemplate = connect.getMongoTemplete(Constant.dbName);
mongoTemplate.insert(mission);
}
@Override
public void deleteMission(String missionId) throws Exception {
MongoTemplate mongoTemplate = connect.getMongoTemplete(Constant.dbName);
Query query = new Query(Criteria.where("id").is(missionId));
mongoTemplate.remove(query, ARBMission.class);
}
}

View File

@ -1,153 +0,0 @@
package com.jmfy.dao.impl;
import com.jmfy.dao.AutoRechargeBackActivityDao;
import com.jmfy.model.AutoRechargeBackActivity;
import com.jmfy.model.AutoRechargeBackMission;
import com.jmfy.model.Constant;
import com.jmfy.utils.Connect;
import com.jmfy.utils.SeqUtils;
import com.jmfy.utils.StringUtil;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* @Author hj
* @Date 2021/5/20 10:48
* @Description:
* @Version 1.0
*/
@Component
public class AutoRechargeBackActivityDaoImpl implements AutoRechargeBackActivityDao {
@Resource
private Connect connect;
@Resource
private SeqUtils seqUtils;
@Override
public List<AutoRechargeBackActivity> findAllActivityList() throws Exception {
MongoTemplate mongoTemplate = connect.getMongoTemplete(Constant.dbName);
List<AutoRechargeBackActivity> all = mongoTemplate.findAll(AutoRechargeBackActivity.class);
if (all == null){
return new ArrayList<>();
}
return all;
}
@Override
public List<AutoRechargeBackActivity> findServerActivityList(int serverId) throws Exception {
List<AutoRechargeBackActivity> resultList = new ArrayList<>();
for (AutoRechargeBackActivity activity : findAllActivityList()) {
if (activity.getServerIds().contains(serverId)){
resultList.add(activity);
}
}
return resultList;
}
@Override
public AutoRechargeBackActivity findOneActivity(int activityId) throws Exception {
MongoTemplate mongoTemplate = connect.getMongoTemplete(Constant.dbName);
Query query = new Query(Criteria.where("id").is(activityId));
return mongoTemplate.findOne(query,AutoRechargeBackActivity.class);
}
@Override
public void insertAndUpdateActivity(AutoRechargeBackActivity activity) throws Exception {
MongoTemplate mongoTemplate = connect.getMongoTemplete(Constant.dbName);
// 添加
AutoRechargeBackActivity oneActivity = findOneActivity(activity.getId());
if (oneActivity == null){
int activityId = seqUtils.getSequence("auto_recharge_back_activity_id");
activity.setId(activityId);
mongoTemplate.insert(activity);
return;
}
// 修改
Update update = new Update();
if (!StringUtil.isEmpty(activity.getName())){
update.setOnInsert("name",activity.getName());
}
if (!StringUtil.isEmpty(activity.getDescription())){
update.setOnInsert("description",activity.getDescription());
}
if (!StringUtil.isEmpty(activity.getStartTime())){
update.setOnInsert("startTime",activity.getStartTime());
}
if (!StringUtil.isEmpty(activity.getEndTime())){
update.setOnInsert("endTime",activity.getEndTime());
}
if (activity.getServerIds() != null && !activity.getServerIds().isEmpty()){
update.set("serverIds",activity.getServerIds());
}
Query query = new Query(Criteria.where("id").is(activity.getId()));
mongoTemplate.updateMulti(query, update, AutoRechargeBackActivity.class);
}
@Override
public void deleteActivity(int activityId) throws Exception {
MongoTemplate mongoTemplate = connect.getMongoTemplete(Constant.dbName);
Query query = new Query(Criteria.where("id").is(activityId));
mongoTemplate.remove(query, AutoRechargeBackActivity.class);
}
@Override
public List<AutoRechargeBackMission> findActivityMission(int activityId) throws Exception {
MongoTemplate mongoTemplate = connect.getMongoTemplete(Constant.dbName);
Query query = new Query(Criteria.where("AutoRechargeBackActivity.id").is(activityId));
return mongoTemplate.find(query, AutoRechargeBackMission.class);
}
@Override
public AutoRechargeBackMission findOneActivityMission(int missionId) throws Exception {
MongoTemplate mongoTemplate = connect.getMongoTemplete(Constant.dbName);
Query query = new Query(Criteria.where("id").is(missionId));
return mongoTemplate.findOne(query, AutoRechargeBackMission.class);
}
@Override
public void insertAndUpdateActivityMission(AutoRechargeBackMission mission) throws Exception {
MongoTemplate mongoTemplate = connect.getMongoTemplete(Constant.dbName);
// 添加
AutoRechargeBackMission oneMission = findOneActivityMission(mission.getId());
if (oneMission == null){
// id
int missionId = seqUtils.getSequence("auto_recharge_back_mission_id");
mission.setId(missionId);
// activity
AutoRechargeBackActivity oneActivity = findOneActivity(mission.getActivityId());
mission.setActivity(oneActivity);
mongoTemplate.insert(mission);
return;
}
// 修改
Update update = new Update();
if (!StringUtil.isEmpty(mission.getTitle())){
update.setOnInsert("title",mission.getTitle());
}
if (mission.getRechargeValue() >= 0){
update.setOnInsert("rechargeValue",mission.getRechargeValue());
}
if (mission.getItems() != null && mission.getItems().length > 0){
update.setOnInsert("items",mission.getItems());
}
Query query = new Query(Criteria.where("id").is(mission.getId()));
mongoTemplate.updateMulti(query, update, AutoRechargeBackMission.class);
}
@Override
public void deleteActivityMission(int missionId) throws Exception {
MongoTemplate mongoTemplate = connect.getMongoTemplete(Constant.dbName);
Query query = new Query(Criteria.where("id").is(missionId));
mongoTemplate.remove(query, AutoRechargeBackMission.class);
}
}

View File

@ -34,8 +34,7 @@ public class ItemDaoImpl implements ItemDao {
query.addCriteria(Criteria.where("uid").is(param.getUserId()));
query.addCriteria(Criteria.where("time").lte(String.valueOf(endTime)).gte(String.valueOf(startTime)));
query.limit(10000);
List<CItemInfo> cItemInfos = mongoTemplate.find(query, CItemInfo.class,"itemLog");
return cItemInfos;
return mongoTemplate.find(query, CItemInfo.class,"itemLog");
}
}

View File

@ -5,6 +5,7 @@ import com.jmfy.model.vo.ARBActivityTypeVo;
import com.jmfy.redisProperties.RedisUserKey;
import com.jmfy.utils.DateUtil;
import com.jmfy.utils.RedisUtil;
import com.jmfy.utils.StringUtil;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@ -20,10 +21,10 @@ import java.util.stream.Collectors;
* @Description:
* @Version 1.0
*/
@Document(collection = "c_auto_recharge_back_activity")
public class AutoRechargeBackActivity {
@Document(collection = "c_arb_activity")
public class ARBActivity {
@Id
private int id;
private String id;
/**
*
*/
@ -47,27 +48,29 @@ public class AutoRechargeBackActivity {
/**
*
*/
private Set<Integer> serverIds = new HashSet<>();
private Set<String> serverIds = new HashSet<>();
public AutoRechargeBackActivity() {
public ARBActivity() {
}
public AutoRechargeBackActivity(int id, String name, String description, int type, String startTime, String endTime, String severStr) {
this.id = id;
public ARBActivity(String id, String name, String description, int type, String startTime, String endTime, String severStr) {
if (!StringUtil.isEmpty(id)){
this.id = id;
}
this.name = name;
this.description = description;
this.type = type;
this.startTime = startTime;
this.endTime = endTime;
String[] split = severStr.split(",");
this.serverIds = Arrays.stream(split).mapToInt(Integer::valueOf).boxed().collect(Collectors.toSet());
this.serverIds = Arrays.stream(split).collect(Collectors.toSet());
}
public int getId() {
public String getId() {
return id;
}
public void setId(int id) {
public void setId(String id) {
this.id = id;
}
@ -132,19 +135,19 @@ public class AutoRechargeBackActivity {
this.endTime = endTime;
}
public Set<Integer> getServerIds() {
public Set<String> getServerIds() {
return serverIds;
}
public void setServerIds(Set<Integer> serverIds) {
public void setServerIds(Set<String> serverIds) {
this.serverIds = serverIds;
}
public String getServerNames(){
Map<String, ServerInfo> infoMap = RedisUtil.getInstence().getMap(RedisUserKey.SERVER_INFO, ServerInfo.class, -1);
StringBuilder builder = new StringBuilder();
for (Integer serverId : serverIds) {
ServerInfo info = infoMap.get(String.valueOf(serverId));
for (String serverId : serverIds) {
ServerInfo info = infoMap.get(serverId);
if (info != null){
builder.append(info.getName()).append("|");
}

View File

@ -12,10 +12,10 @@ import org.springframework.data.mongodb.core.mapping.Document;
* @Description:
* @Version 1.0
*/
@Document(collection = "c_auto_recharge_back_mission")
public class AutoRechargeBackMission {
@Document(collection = "c_arb_mission")
public class ARBMission {
@Id
private int id;
private String id;
/**
*
*/
@ -27,25 +27,19 @@ public class AutoRechargeBackMission {
/**
*
*/
private int[][] items;
/**
* id
*/
@Transient
private int activityId;
private int[][] reward;
/**
*
*/
@DBRef
private AutoRechargeBackActivity activity;
private ARBActivity activity;
public int getId() {
public String getId() {
return id;
}
public void setId(int id) {
public void setId(String id) {
this.id = id;
}
@ -65,31 +59,23 @@ public class AutoRechargeBackMission {
this.rechargeValue = rechargeValue;
}
public int[][] getItems() {
return items;
public int[][] getReward() {
return reward;
}
public String getItemDescription() {
return JsonUtil.showReward(items);
public String getRewardDescription() {
return JsonUtil.showReward(reward);
}
public void setItems(int[][] items) {
this.items = items;
public void setReward(int[][] reward) {
this.reward = reward;
}
public AutoRechargeBackActivity getActivity() {
public ARBActivity getActivity() {
return activity;
}
public void setActivity(AutoRechargeBackActivity activity) {
public void setActivity(ARBActivity activity) {
this.activity = activity;
}
public int getActivityId() {
return activityId;
}
public void setActivityId(int activityId) {
this.activityId = activityId;
}
}

View File

@ -39,18 +39,16 @@ public enum PowersEnum {
* GM400-499
*/
GM_MANAGER(400,"GM管理",400,1,""),
SINGLE_MAIL(401,"单人,多人邮件",400,1,"toMailPage?type=1"),
ALL_SERVER_MAIL(402,"全服邮件",400,1,"toMailPage?type=2"),
SEND_GM(401,"发送GM",400,1,"toMailPage?type=4"),
SEND_HORSE_RACE_LAMP(403,"发送跑马灯",400,1,"toMailPage?type=3"),
SEND_NOTICE(404,"发送公告",400,1,"sendSysNotice"),
SEND_GM(405,"发送GM",400,1,"toMailPage?type=4"),
NOTICE_INFO(406,"公告信息",400,1,"noticeInfos"),
ADD_WHITELIST_ACCOUNT(407,"添加白名单账号",400,1,"/html/add_white_list.html"),
DELETE_WHITELIST(408,"删除白名单",400,1,"getAllWhites"),
ADD_WHITELIST_ACCOUNT_HERO(409,"添加白名单账号英雄",400,0,"addHeroPage"),
GUILD_LIST_MANAGER(410,"公会列表管理",400,1,"initGuildList"),
GUILD_OPERATE_PERMISSIONS(411,"权限: 操作公会",400,1,""),
USER_INFO_QUERY1(412,"角色神将查询",400,0,"toGetHeroInfoPage"),
SEND_MAILS(413,"发送txt里的邮件",400,0,"toSendMailInfoPage"),
/**
@ -83,9 +81,11 @@ public enum PowersEnum {
/**
* 901-999
*/
MAIL_AUDIT(900,"邮件审核",900,1,""),
SYSTEM_MAIL_AUDIT(901,"系统邮件审核",900,1,"getMailListToCheck?type=1"),
SINGLE_MAIL_AUDIT(902,"个人邮件审核",900,1,"getMailListToCheck?type=2"),
MAIL_MANAGER(900,"邮件管理",900,1,""),
SINGLE_MAIL(901,"个人邮件",900,1,"toMailPage?type=1"),
ALL_SERVER_MAIL(902,"全服邮件",900,1,"toMailPage?type=2"),
SINGLE_MAIL_AUDIT(910,"个人邮件审核",900,1,"getMailListToCheck?type=2"),
SYSTEM_MAIL_AUDIT(911,"系统邮件审核",900,1,"getMailListToCheck?type=1"),
MAIL_AUDIT_JURISDICTION(903,"权限: 邮件审核权限",900,0,""),
/**
* 1000-1099
@ -130,7 +130,7 @@ public enum PowersEnum {
ADD_GAME_AGREEMENT_PERMISSIONS(1409,"权限: 操作游戏协议(增,删,改)",1400,0,""),
UPDATE_CHANNEL_PERMISSIONS(1410,"权限: 修改渠道",1400,0,""),
// 自动返利活动
AUTO_RECHARGE_BACK_ACTIVITY_SHOW(1411,"自动返利活动查询",1400,1,"findARBActivityInfos"),
AUTO_RECHARGE_BACK_ACTIVITY_SHOW(1411,"自动返利活动",1400,1,"findARBActivityInfos"),
/**
*
*/

File diff suppressed because one or more lines are too long

View File

@ -45,31 +45,31 @@
<table class="table table-border table-bordered table-bg table-hover table-sort table-responsive">
<thead>
<tr class="text-c">
<th width="50">活动id</th>
<th width="200">活动名称</th>
<th width="200">活动描述</th>
<th width="100">活动id</th>
<th width="100">活动名称</th>
<th width="260">活动描述</th>
<th width="200">活动时间</th>
<th width="100">活动类型</th>
<th width="60">活动类型</th>
<th width="200">生效区服</th>
<th width="150">操作</th>
</tr>
</thead>
<tbody>
<tr th:each="obj:${allActivityList}">
<td th:text="${obj.getId()}" th:id="${obj.getId()}" style="text-align: center;"></td>
<tr th:each="obj:${allActivityList}" th:id="${obj.getId()}">
<td th:text="${obj.getId()}" style="text-align: center;"></td>
<td th:text="${obj.getName()}" style="text-align: center;"></td>
<td th:text="${obj.getDescription()}" style="text-align: center;"></td>
<th th:switch="${obj.getTimeType()}" style="text-align: center;">
<span th:case="0" th:text="${obj.getStartTime() + '-' + obj.getEndTime()}" ></span>
<span th:case="0" th:text="${obj.getStartTime() + '' + obj.getEndTime()}" ></span>
<span th:case="1" th:text="常驻" ></span>
</th>
<td th:text="${obj.getTypeDescription()}" style="text-align: center;"></td>
<td th:text="${obj.getServerNames()}" style="text-align: center;"></td>
<td style="text-align: center;">
<button type="button" th:id="${obj.getId()}" class="btn btn-success radius" onclick="return cutActivityMissionInfo(this)">
<button type="button" th:id="${obj.getId()}" class="btn btn-success radius" onclick="return jumpActivityMissionInfo(this)">
档位
</button>
<button type="button" th:id="${obj.getId()}" class="btn btn-primary radius" onclick="return cutUpdateActivity(this)">
<button type="button" th:id="${obj.getId()}" class="btn btn-primary radius" onclick="return jumpUpdateActivity(this)">
修改
</button>
<button type="button" th:id="${obj.getId()}" th:name="${obj.getName()}" class="btn btn-danger radius" onclick="return deleteActivity(this)">
@ -151,7 +151,7 @@
* @param obj
*/
function cutAddARBActivity() {
window.location.href = "/cutUpdateARBActivity?activityId=0";
window.location.href = "/jumpUpdateARBActivity?activityId=0";
}
/**
@ -168,18 +168,18 @@
* 切换到档位信息页面
* @param obj
*/
function cutActivityMissionInfo(obj) {
function jumpActivityMissionInfo(obj) {
var activityId = $(obj).attr("id");
window.location.href = "/findARBActivityMissionInfos?activityId="+activityId;
window.location.href = "/findARBMissions?activityId="+activityId;
}
/**
* 跳转更新活动界面
* @param obj
*/
function cutUpdateActivity(obj) {
function jumpUpdateActivity(obj) {
var activityId = $(obj).attr("id");
window.location.href = "/cutUpdateARBActivity?activityId="+activityId;
window.location.href = "/jumpUpdateARBActivity?activityId="+activityId;
}
/**
@ -200,7 +200,7 @@
success: function (data) {
if (data === 1) {
alert("操作成功");
document.getElementById(activityId).style.display="";
document.getElementById(activityId).style.display="none";
}else {
alert("操作失败");
}

View File

@ -33,19 +33,23 @@
</nav>
<div class="mt-20" style="text-align: left;margin-left: 24px;">
<!-- 新增按钮 -->
<a class="btn btn-primary radius" href="cutUpdateARBMission"><i class="Hui-iconfont">&#xe600;</i> 添加档位</a>
<button class="btn btn-primary radius" th:id="${activityId}" type="button" onclick="jumpAddARBMission(this)">
<i class="Hui-iconfont">&#xe600;</i> 添加档位
</button>
<!-- <a class="btn btn-primary radius" th:id="${activityId}" onclick="return jumpAddARBMission(this)"><i class="Hui-iconfont">&#xe600;</i> 添加档位</a>-->
</div>
<div class="page-container" style="text-align: center">
<div class="text-c">
<div class="mt-20">
<input th:id="activityId" th:value="${activityId}" type="hidden" />
<table class="table table-border table-bordered table-bg table-hover table-sort table-responsive">
<thead>
<tr class="text-c">
<th width="100">档位id</th>
<th width="150">档位标题</th>
<th width="200">充值金额条件值</th>
<th width="200">奖励</th>
<th width="200">操作</th>
<th width="100">档位标题</th>
<th width="50">充值金额条件值</th>
<th width="300">奖励</th>
<th width="60">操作</th>
</tr>
</thead>
<tbody>
@ -53,11 +57,8 @@
<td th:text="${obj.getId()}" style="text-align: center;"></td>
<td th:text="${obj.getTitle()}" style="text-align: center;"></td>
<td th:text="${obj.getRechargeValue()}" style="text-align: center;"></td>
<td th:text="${obj.getItemDescription()}" style="text-align: center;"></td>
<td th:text="${obj.getRewardDescription()}" style="text-align: center;"></td>
<td style="text-align: center;">
<button type="button" th:id="${obj.getId()}" class="btn btn-primary radius" onclick="return cutUpdateMission(this)">
修改
</button>
<button type="button" th:id="${obj.getId()}" th:name="${obj.getTitle()}" class="btn btn-danger radius" onclick="return deleteMission(this)">
删除
</button>
@ -92,27 +93,10 @@
{"orderable": false, "aTargets": [1, 2]}// 不参与排序的列
]
});
/**
* 跳转更新活动界面
* @param obj
*/
function cutUpdateMission(obj) {
var missionId = $(obj).attr("id");
$.ajax({
type: "POST",
data: {
"missionId": missionId
},
url: "/cutUpdateARBMission",
success: function (data) {
if (data === 1) {
alert("操作成功");
}else {
alert("操作失败");
}
}
})
function jumpAddARBMission(obj) {
let activityId = $(obj).attr("id");
window.location.href = "/jumpAddARBMission?activityId="+activityId;
}
/**
@ -120,20 +104,20 @@
* @param obj
*/
function deleteMission(obj) {
var missionId = $(obj).attr("id");
var name = $(obj).attr("name");
var msg = "请确认是否要删除档位:{"+name+"},\n\n请确认";
let missionId = $(obj).attr("id");
let name = $(obj).attr("name");
let msg = "请确认是否要删除档位:{"+name+"},\n\n请确认";
if (confirm(msg) === true) {
$.ajax({
type: "POST",
data: {
"missionId": missionId
},
url: "/removeARBackActivityMission",
url: "/removeARBMission",
success: function (data) {
if (data === 1) {
alert("操作成功");
$('#'+missionId).css('display','table-row');
document.getElementById(missionId).style.display="none";
}else {
alert("操作失败");
}

View File

@ -20,6 +20,8 @@
<link rel="stylesheet" type="text/css" href="../static/lib/Hui-iconfont/1.0.8/iconfont.css"/>
<link rel="stylesheet" type="text/css" href="../static/h-ui.admin/skin/default/skin.css" id="skin"/>
<link rel="stylesheet" type="text/css" href="../static/h-ui.admin/css/style.css"/>
<!-- 引入layui.css -->
<link rel="stylesheet" href="https://www.layuicdn.com/layui-v2.5.6/css/layui.css">
<!--[if IE 6]>
<script type="text/javascript" src="../static/lib/DD_belatedPNG_0.0.8a-min.js"></script>
<script>DD_belatedPNG.fix('*');</script>
@ -52,7 +54,7 @@
<span class="c-red">*</span>档位标题:
</label>
<div class="formControls col-xs-8 col-sm-9">
<input type="text" name="title" placeholder="" value="" class="input-text"/>
<input type="text" th:id="title" placeholder="" value="" class="input-text"/>
</div>
</div>
<div class="row cl">
@ -60,7 +62,7 @@
<span class="c-red">*</span>充值金额:
</label>
<div class="formControls col-xs-8 col-sm-9">
<input type="number" name="value" placeholder="" value="" class="input-text"/>
<input type="number" th:id="rechargeValue" placeholder="" value="" class="input-text"/>
</div>
</div>
<div class="row cl">
@ -72,15 +74,15 @@
<thead>
<tr>
<th style="width: 50px;">序号</th>
<th>道具id</th>
<th>道具数量</th>
<th style="width: 100px;">操作</th>
<th>道具id</th>
<th>道具数量</th>
<th style="width: 150px;">操作</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="3">
<span>在这里添加奖励道具</span>
<span>在这里添加道具</span>
</td>
<td colspan="1">
<div class="layui-btn-group">
@ -96,7 +98,8 @@
</div>
<div class="row cl">
<div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-2">
<button onClick="return sendSysMail();" class="btn btn-primary radius" type="button">
<input th:id="activityId" th:value="${activityId}" type="hidden" />
<button onClick="return upsertMission();" class="btn btn-primary radius" type="button">
<i class="Hui-iconfont">&#xe632;</i> 确认
</button>
</div>
@ -119,9 +122,11 @@
<!--多选框-->
<script src="../static/xmSelect/js/xm-select.js"></script>
<!-- 引入layui.js -->
<script scr="https://www.layuicdn.com/layui-v2.5.6/layui.js"></script>
<script th:inline="javascript">
$(function () {
$('.skin-minimal input').iCheck({
checkboxClass: 'icheckbox-blue',
@ -134,14 +139,13 @@
});
var index = 1;
$('.add').on('click', function(){
var element = $([
'<tr>',
'<td>'+ index +'</td>',
'<td class="c_itemId"></td>',
'<td class="c_itemNum">',
'<input type="number" name="itemNum" class="input_bg"/>',
'<td class="prop" name="propn" style="width: 450px"></td>',
'<td>',
'<input type="number" name="count" style="height: 38px;line-height: 38px;" class="input-text"/>',
'</td>',
'<td class="handler">',
'<button type="button" class="layui-btn layui-btn-danger del">删除</button>',
@ -149,23 +153,25 @@
'</tr>',
].join(''))
var c_itemId = element.find('.c_itemId')[0];
xmSelect.render({
el: c_itemId,
radio: true,
clickClose: true,
var prop = element.find('.prop')[0];
var props = xmSelect.render({
el: prop,
template({name, value}){
return name + '<span style="position: absolute; right: 10px; color: #8799a3">'+value+'</span>'
},
theme: { color: '#e54d42' },
filterable: true,
radio: true,
clickClose: true,
tips: '选择道具', // 让默认值不是“请选择”,而是“选择校区”
height:'260px',
theme: { color: '#0081ff' },
model: { label: { type: 'text' } },
prop: {
name: 'name',
value: 'id',
},
data: function () {
var infos = [[${itemList}]];
return infos;
return [[${itemList}]];
},
})
@ -178,29 +184,67 @@
$('#form-create tbody').append(element)
});
function sendSysMail() {
function getItem() {
let result = new Array();
var ids = xmSelect.batch(null, 'getValue', 'value');
let nums = new Array();
$("input[name='count']").each(function(){
nums.push($(this).val());
});
if (ids.length != nums.length){
alert("道具参数错误,请删除道具重新添加");
return result;
}
for (let i = 0; i < ids.length; i++) {
let info = new Array();
info.push(ids[i]);
info.push(nums[i]);
result.push(info);
}
return result;
}
function upsertMission() {
// ID
let activityId = document.getElementById("activityId").value;
// 标题
let title = document.getElementById("title").value;
// 充值条件
let rechargeValue = document.getElementById("rechargeValue").value;
if (title == "" || rechargeValue <= 0){
alert("参数不能为空!")
return false;
}
// 奖励道具id
var ids = xmSelect.batch(null, 'getValue', 'value');
// 奖励数量
let nums = new Array();
$("input[name='count']").each(function(){
nums.push($(this).val());
});
if (ids.length != nums.length){
alert("道具参数错误,请删除道具重新添加");
return result;
}
$.ajax({
type: "POST",
data:
JSON.stringify({
"serverId": serverId,
"mailTitle": mailTitle,
"mailContent": mailContent
})
,
url: "/sendSysMailWithBack",
dataType: "json",
contentType: 'application/json',
data: {
"title": title,
"rechargeValue": rechargeValue,
"propId": ids.toString(),
"propNum": nums.toString(),
"activityId": activityId,
},
url: "/addARBMission",
success: function (data) {
if (data == 0) {
layer.msg('发送全服邮件成功!', {icon: 6, time: 1000});
}
if (data == 1) {
layer.msg('发送全服邮件失败!', {icon: 6, time: 1000});
}
if (data === 2) {
layer.msg('发送邮件失败 道具不能为空!', {icon: 6, time: 1000});
layer.msg('成功!', {icon: 6, time: 1000});
}
}
}

View File

@ -4,7 +4,8 @@
<meta charset="utf-8"/>
<meta name="renderer" content="webkit|ie-comp|ie-stand"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
<meta name="viewport"
content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
<meta http-equiv="Cache-Control" content="no-siteapp"/>
<script type="text/javascript" src="lib/html5shiv.js"></script>
<script type="text/javascript" src="lib/respond.min.js"></script>
@ -33,7 +34,7 @@
<div class="text-c">
<!--<input type="text" placeholder="物品名称" name="itemName" value="" class="input-text" style="width:120px">-->
<select name="itemId" style="width: 150px" th:id="itemId"><!--下拉列表-->
<option value="0" selected = "selected">0.所有</option>
<option value="0" selected="selected">0.所有</option>
<option th:each="item:${itemNameMap}" th:value="${item.key}" th:text="${item.key}+.+${item.value}"></option>
</select>
<span class="btn-upload form-group">
@ -51,123 +52,124 @@
</button>
</div>
<div class="text-c">
<div class="mt-20">
<table class="table table-border table-bordered table-bg table-hover table-sort table-responsive" id="aa">
<thead>
<tr class="text-c">
<th width="200">用户id</th>
<th width="200">服务器ID</th>
<th width="200">时间</th>
<th width="200">用户等级</th>
<th width="200">道具名称</th>
<th width="200">道具数量</th>
<th width="200">动作后的物品存量</th>
<th width="200">物品操作原因</th>
<th width="200">增加0减少1</th>
</tr>
</thead>
<tbody>
<tr th:each="obj:${itemFlowVoList}">
<td th:text="${obj.userId}" style="text-align: center;"></td>
<td th:text="${obj.serverId}" style="text-align: center;"></td>
<td th:text="${obj.time}" style="text-align: center;"></td>
<td th:text="${obj.userLevel}" style="text-align: center;"></td>
<td th:text="${obj.itemName}" style="text-align: center;"></td>
<td th:text="${obj.count}" style="text-align: center;"></td>
<td th:text="${obj.afterMoney}" style="text-align: center;"></td>
<td th:text="${obj.reason}" style="text-align: center;"></td>
<td th:text="${obj.addOrReduce}" style="text-align: center;"></td>
</tr>
</tbody>
</table>
</div>
<!--_footer 作为公共模版分离出去-->
<script type="text/javascript" src="lib/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="lib/layer/2.4/layer.js"></script>
<script type="text/javascript" src="h-ui/js/H-ui.min.js"></script>
<script type="text/javascript" src="h-ui.admin/js/H-ui.admin.js"></script> <!--/_footer 作为公共模版分离出去-->
<div class="mt-20">
<table class="table table-border table-bordered table-bg table-hover table-sort table-responsive" id="aa">
<thead>
<tr class="text-c">
<th width="200">用户id</th>
<th width="200">服务器ID</th>
<th width="200">时间</th>
<th width="200">用户等级</th>
<th width="200">道具名称</th>
<th width="200">道具数量</th>
<th width="200">动作后的物品存量</th>
<th width="200">物品操作原因</th>
<th width="200">增加0减少1</th>
</tr>
</thead>
<tbody>
<tr th:each="obj:${itemFlowVoList}">
<td th:text="${obj.userId}" style="text-align: center;"></td>
<td th:text="${obj.serverId}" style="text-align: center;"></td>
<td th:text="${obj.time}" style="text-align: center;"></td>
<td th:text="${obj.userLevel}" style="text-align: center;"></td>
<td th:text="${obj.itemName}" style="text-align: center;"></td>
<td th:text="${obj.count}" style="text-align: center;"></td>
<td th:text="${obj.afterMoney}" style="text-align: center;"></td>
<td th:text="${obj.reason}" style="text-align: center;"></td>
<td th:text="${obj.addOrReduce}" style="text-align: center;"></td>
</tr>
</tbody>
</table>
</div>
<!--_footer 作为公共模版分离出去-->
<script type="text/javascript" src="lib/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="lib/layer/2.4/layer.js"></script>
<script type="text/javascript" src="h-ui/js/H-ui.min.js"></script>
<script type="text/javascript" src="h-ui.admin/js/H-ui.admin.js"></script> <!--/_footer 作为公共模版分离出去-->
<!--请在下方写此页面业务相关的脚本-->
<script type="text/javascript" src="lib/My97DatePicker/4.8/WdatePicker.js"></script>
<!--<script type="text/javascript" src="lib/datatables/1.10.0/jquery.dataTables.min.js"></script>-->
<script type="text/javascript" src="lib/laypage/1.2/laypage.js"></script>
<script type="text/javascript">
$('.table-sort').dataTable({
"aaSorting": [[ 1, "desc" ]],//默认第几个排序
"bStateSave": true,//状态保存x异步 request请求
"pading":false,
"aoColumnDefs": [
//{"bVisible": false, "aTargets": [ 3 ]} //控制列的隐藏显示
{"orderable":false,"aTargets":[0,8]}// 不参与排序的列
]
});
function tableToExcel() {
var titles = $("#aa").find("tr:first th"); //获得表头td数组
var json = $("#aa").find("tr:not(:first)").map(function (i, e) {
var getDisplay = e.style.display;
if (getDisplay !== "none"){
return "{" + $(e).children("td").map(function (j, el) {
var name = $(titles[j]).html();
return name + ":'" + $(el).html() +"'";
}).get().join(",") + "}";
}
}).get().join(",");
// var aa =JSON.stringify(json); //将JSON对象转化为JSON字符
// alert(aa);
// var obj = JSON.parse(cc); //由JSON字符串转换为JSON对象
// alert(obj);
// const jsonData = JSON.stringify(json.responseObject);
var jsonData = eval("["+json+"]");
var aa = JSON.stringify(jsonData);
var jsonData = JSON.parse(aa);//转换为json对象
// var jsonData = JSON.stringify(aa);
// alert(jsonData);
// var jsonData =JSON.parse(bb);
// alert(jsonData);
// alert(jsonData)
// var jsonData = [{用户id:'30006627',服务器ID:'10212',时间:'2019-04-11 00:02:51',用户等级:'100',道具名称:'0',道具数量:'0',动作后的物品存量:'4',物品操作原因:'213',增加:'0'}]
// alert(jsonData);
// var bb =JSON.stringify(jsonData); //将JSON对象转化为JSON字符
// alert(bb);
// alert(json);
let str = "用户id,服务器ID,时间,用户等级,道具名称,道具数量,动作后的物品存量,物品操作原因,增加:0/减少:1\n";
for (let i = 0; i < jsonData.length; i++) {
var parse = jsonData[i];
// var bb =JSON.stringify(jsonData[i])
// alert(bb);
// var parse = JSON.parse(bb);
// alert(parse);
for (let item in parse) {
str += `${parse[item] + '\t'},`;
}
str += '\n';
}
let uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str);
let link = document.createElement("a")
link.href = uri;
link.download = "itemFlow.csv";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
<!--请在下方写此页面业务相关的脚本-->
<script type="text/javascript" src="lib/My97DatePicker/4.8/WdatePicker.js"></script>
<!--<script type="text/javascript" src="lib/datatables/1.10.0/jquery.dataTables.min.js"></script>-->
<script type="text/javascript" src="lib/laypage/1.2/laypage.js"></script>
<script type="text/javascript">
$('.table-sort').dataTable({
"aaSorting": [[1, "desc"]],//默认第几个排序
"bStateSave": true,//状态保存x异步 request请求
"pading": false,
"aoColumnDefs": [
//{"bVisible": false, "aTargets": [ 3 ]} //控制列的隐藏显示
{"orderable": false, "aTargets": [0, 8]}// 不参与排序的列
]
});
function onSearch(){
var itemName = $("#itemId").find("option:selected").text();
var type = document.getElementById("type").value;
setTimeout(function(){
var storeId = document.getElementById('aa');
var rowsLength = storeId.rows.length;
for(var i=1;i<rowsLength;i++){
var itemText = storeId.rows[i].cells[4].innerHTML;
var typeText = storeId.rows[i].cells[8].innerHTML;
if((itemName === "0.所有" || itemText === itemName ) && typeText === type){
storeId.rows[i].style.display='';//显示行操作,
}else{
storeId.rows[i].style.display='none';//隐藏行操作
function tableToExcel() {
var titles = $("#aa").find("tr:first th"); //获得表头td数组
var json = $("#aa").find("tr:not(:first)").map(function (i, e) {
var getDisplay = e.style.display;
if (getDisplay !== "none") {
return "{" + $(e).children("td").map(function (j, el) {
var name = $(titles[j]).html();
return name + ":'" + $(el).html() + "'";
}).get().join(",") + "}";
}
}).get().join(",");
// var aa =JSON.stringify(json); //将JSON对象转化为JSON字符
// alert(aa);
// var obj = JSON.parse(cc); //由JSON字符串转换为JSON对象
// alert(obj);
// const jsonData = JSON.stringify(json.responseObject);
var jsonData = eval("[" + json + "]");
var aa = JSON.stringify(jsonData);
var jsonData = JSON.parse(aa);//转换为json对象
// var jsonData = JSON.stringify(aa);
// alert(jsonData);
// var jsonData =JSON.parse(bb);
// alert(jsonData);
// alert(jsonData)
// var jsonData = [{用户id:'30006627',服务器ID:'10212',时间:'2019-04-11 00:02:51',用户等级:'100',道具名称:'0',道具数量:'0',动作后的物品存量:'4',物品操作原因:'213',增加:'0'}]
// alert(jsonData);
// var bb =JSON.stringify(jsonData); //将JSON对象转化为JSON字符
// alert(bb);
// alert(json);
let str = "用户id,服务器ID,时间,用户等级,道具名称,道具数量,动作后的物品存量,物品操作原因,增加:0/减少:1\n";
for (let i = 0; i < jsonData.length; i++) {
var parse = jsonData[i];
// var bb =JSON.stringify(jsonData[i])
// alert(bb);
// var parse = JSON.parse(bb);
// alert(parse);
for (let item in parse) {
str += `${parse[item] + '\t'},`;
}
str += '\n';
}
let uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str);
let link = document.createElement("a");
link.href = uri;
link.download = "itemFlow.csv";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
},20);//20为延时时间
}
</script>
function onSearch() {
var itemName = $("#itemId").find("option:selected").text();
var type = document.getElementById("type").value;
setTimeout(function () {
var storeId = document.getElementById('aa');
var rowsLength = storeId.rows.length;
for (var i = 1; i < rowsLength; i++) {
var itemText = storeId.rows[i].cells[4].innerHTML;
var typeText = storeId.rows[i].cells[8].innerHTML;
if ((itemName === "0.所有" || itemText === itemName) && typeText === type) {
storeId.rows[i].style.display = '';//显示行操作,
} else {
storeId.rows[i].style.display = 'none';//隐藏行操作
}
}
}, 20);//20为延时时间
}
</script>
</body>
</html>

View File

@ -48,10 +48,8 @@
区服id</label>
<div class="formControls col-xs-8 col-sm-9">
<select name="serverId" class="input-text" id="serverId"><!--下拉列表-->
<option th:each="server:${serverInfos}" th:value="${server.server_id}"
th:text="${server.server_id}+'-'+${server.name}"></option>
<option th:each="server:${serverInfos}" th:value="${server.server_id}" th:text="${server.server_id}+'-'+${server.name}"></option>
</select>
<span class="SERVERID"></span>
</div>
</div>
<div class="row cl">
@ -62,7 +60,6 @@
<input type="text" name="userId" id="in_user" value="" placeholder="" class="input-text" />
<button type="button" style="padding: 1px 3px 1px 3px;margin-top: 5px;" onclick="uploads();">上传</button>
<input type="file" id="tables" class="form-control" style="margin-top: 5px;" accept=".xls,.xlsx" />
<span class="USERID"></span>
</div>
</div>
<div class="row cl">
@ -73,13 +70,12 @@
<div>
中文<input type="text" name="mailTitle1" id="mailTitle1" placeholder="" value="" class="input-text"/>
</div>
<div>
英文<input type="text" name="mailTitle2" placeholder="" value="" class="input-text"/>
</div>
<div>
越南文<input type="text" name="mailTitle3" placeholder="" value="" class="input-text"/>
</div>
<span class="MAILTITLE"></span>
<!-- <div>-->
<!-- 英文<input type="text" name="mailTitle2" placeholder="" value="" class="input-text"/>-->
<!-- </div>-->
<!-- <div>-->
<!-- 越南文<input type="text" name="mailTitle3" placeholder="" value="" class="input-text"/>-->
<!-- </div>-->
</div>
</div>
<div class="row cl">
@ -88,9 +84,8 @@
邮件正文:</label>
<div class="formControls col-xs-8 col-sm-9">
中文<textarea rows="5" cols="150" wrap="soft" name="mailContent1" style="width:100%;border:solid 1px #ddd"></textarea>
英文<textarea rows="5" cols="150" wrap="soft" name="mailContent2" style="width:100%;border:solid 1px #ddd"></textarea>
越南文<textarea rows="5" cols="150" wrap="soft" name="mailContent3" style="width:100%;border:solid 1px #ddd"></textarea>
<span class="MAILCONTENT"></span>
<!-- 英文<textarea rows="5" cols="150" wrap="soft" name="mailContent2" style="width:100%;border:solid 1px #ddd"></textarea>-->
<!-- 越南文<textarea rows="5" cols="150" wrap="soft" name="mailContent3" style="width:100%;border:solid 1px #ddd"></textarea>-->
</div>
</div>
<div class="row cl">
@ -100,7 +95,7 @@
<div class="formControls col-xs-8 col-sm-9" onclick="itemShow()">
<select name="isAttach" class="input-text" id="isAttach">
<option value="1" selected = "selected" ></option>
<option value="0" ></option>
<option value="0" ></option>
</select>
</div>
</div>
@ -121,14 +116,13 @@
<div th:style="${i} ne 1?'display:none':''" th:id="item_+(${i})">
物品id:
<select name="itemId" style="width: 150px" th:id="itemId_+(${i})"><!--下拉列表-->
<option value="0" selected = "selected">0.无物品</option>
<option value="0" selected = "selected">0.无物品</option>
<option th:each="item:${itemNameMap}" th:value="${item.key}" th:text="${item.key}+.+${item.value}"></option>
</select>
<!--<input type="text" name="itemIds[]" id="itemId_1" style="width: 150px" />-->
物品数量:<input type="text" name="itemNum" th:id="itemNum_+(${i})" class="input_bg" />
<a href="#" th:if="${i} ne 1" class="removeclass">×</a>
<a href="#" th:if="${i} eq 1" id="AddMoreFileBox" class="btn btn-info">+</a>
<span class="REWARD"></span>
</div>
</div>
</div>
@ -140,7 +134,6 @@
奖励发放时间:</label>
<div class="formControls col-xs-8 col-sm-9">
<input type="text" onfocus="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:ss',minDate:'#F{$dp.$D(\'SendTime\')}' })" id="SendTime" class="input-text Wdate" style="width:180px;" name="sendTime">
<span class="SENDTIME"></span>
</div>
</div>
<div class="row cl">
@ -150,7 +143,6 @@
<input type="radio" style="margin-left: 30px;" name="effectTime" value="0"> <span>永久</span>
<input type="radio" style="margin-left: 30px;" name="effectTime" value="TheCustom"> <span>自定义</span>
<input type="text" style="display: none;width: 360px;line-height: 32px; margin-top: 13px;border: 1px solid #c6c6c6;" id="effectTime_input" placeholder=" 单位0永久" value="" />
<span class="EFFECTTIME"></span>
</div>
</div>
<!-- <div class="row cl">-->
@ -251,26 +243,24 @@
function uploads() {
//获取文件信息
var fileObj = document.getElementById("tables").files[0];
let fileObj = document.getElementById("tables").files[0];
// 文件名字
var fileName = fileObj.name;
let fileName = fileObj.name;
if (fileName === '') {
erroCode = $('.USERID');
erroCode.html('<span style="color: red; ">文件不存在请选择excel文件</span>');
alert("文件不存在请选择excel文件");
return false;
}
// 文件是否是excel格式
var fileType = (fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length)).toLowerCase();
let fileType = (fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length)).toLowerCase();
if (fileType !== 'xls' && fileType !== 'xlsx') {
erroCode = $('.USERID');
erroCode.html('<span style="color: red; ">文件格式不正确请选择excel文件</span>');
alert("文件格式不正确请选择excel文件");
return false;
}
// 包装成formdata类型
var data = new FormData();
let data = new FormData();
data.append("file",fileObj);
var url = "/uploadUserList";
let url = "/uploadUserList";
$.ajax({
url : url,
data : data,
@ -289,41 +279,25 @@
function sendSysMail() {
//特殊字符验证
var reg = new RegExp("[|#]",'g');
var mailTitle1 = $("input[name='mailTitle1']").val();
var mailTitle2 = $("input[name='mailTitle2']").val();
var mailTitle3 = $("input[name='mailTitle3']").val();
var mailContent1 = $("textarea[name='mailContent1']").val();
var mailContent2 = $("textarea[name='mailContent2']").val();
var mailContent3 = $("textarea[name='mailContent3']").val();
if (reg.test(mailTitle1) || reg.test(mailTitle2) || reg.test(mailTitle3)){
alert("邮件标题不能含有特殊字符");
let reg = new RegExp("[|#]",'g');
let mailTitle = $("input[name='mailTitle1']").val();
let mailContent = $("textarea[name='mailContent1']").val();
if (reg.test(mailTitle) || reg.test(mailContent)){
alert("邮件标题或内容包含有特殊字符!!");
return false;
}
if (reg.test(mailContent1) || reg.test(mailContent2) || reg.test(mailContent3)){
alert("邮件正文不能有特殊字符");
return false;
}
var mailTitle = mailTitle1+"|"+mailTitle2+"|"+mailTitle3;
var mailContent = mailContent1+"|"+mailContent2+"|"+mailContent3;
var erroCode = $('.SERVERID');
var serverId = $("#serverId").val();
// var attach = $("input[name='attach']").val();
var isAttach = document.getElementById("isAttach").value;
var userId = $("input[name='userId']").val();
var sendTime = $("input[name='sendTime']").val();
var effectTime = $("input[name='effectTime']:checked").val();
let serverId = $("#serverId").val();
let isAttach = document.getElementById("isAttach").value;
let userId = $("input[name='userId']").val();
let sendTime = $("input[name='sendTime']").val();
let effectTime = $("input[name='effectTime']:checked").val();
if (effectTime === "TheCustom"){
var seconds = document.getElementById("effectTime_input").value;
let seconds = document.getElementById("effectTime_input").value;
effectTime = seconds*24*60*60;
}
var version = new Date().getTime() / 1000;
var itemIds = [];
var itemNums =[];
let version = new Date().getTime() / 1000;
let itemIds = [];
let itemNums =[];
if (isAttach === "1") {
$("select[name='itemId']").each(function () {
if($(this).val()!=='0'){
@ -337,27 +311,24 @@
});
}
if(itemNums.length!==itemIds.length){
erroCode.html('<span style="color: red; ">物品id或物品数量不匹配</span>');
alert("物品id或物品数量不匹配");
return false;
}
if (serverId === '' || serverId == null) {
erroCode.html('<span style="color: red; ">服务器id不能为空!</span>');
alert("服务器id不能为空");
return false;
}
if (mailTitle === '' || mailTitle == null) {
erroCode = $('.MAILTITLE');
erroCode.html('<span style="color: red; ">邮件标题不能为空!</span>');
alert("邮件标题不能为空");
return false;
}
if (mailContent === '' || mailContent == null) {
erroCode = $('.MAILCONTENT');
erroCode.html('<span style="color: red; ">邮件内容不能为空!</span>');
alert("邮件内容不能为空");
return false;
}
if(isAttach === "1"){
if (itemIds.length<1) {
erroCode = $('.ATTACH');
erroCode.html('<span style="color: red; ">附件不能为空!</span>');
alert("附件不能为空");
return false;
}
}
@ -366,8 +337,7 @@
return false;
}
if (effectTime === "" || effectTime < 0){
erroCode = $('.EFFECTTIME');
erroCode.html('<span style="color: red; ">有效时间不能为空或小于0!</span>');
alert("有效时间不能为空或小于0");
return false;
}
$.ajax({

View File

@ -72,12 +72,12 @@
<div>
中文<input type="text" name="mailTitle1" placeholder="" value="" class="input-text"/>
</div>
<div>
英文<input type="text" name="mailTitle2" placeholder="" value="" class="input-text"/>
</div>
<div>
越南文<input type="text" name="mailTitle3" placeholder="" value="" class="input-text"/>
</div>
<!-- <div>-->
<!-- 英文<input type="text" name="mailTitle2" placeholder="" value="" class="input-text"/>-->
<!-- </div>-->
<!-- <div>-->
<!-- 越南文<input type="text" name="mailTitle3" placeholder="" value="" class="input-text"/>-->
<!-- </div>-->
<span class="MAILTITLE"></span>
</div>
</div>
@ -87,8 +87,8 @@
邮件正文:</label>
<div class="formControls col-xs-8 col-sm-9">
中文<textarea rows="5" cols="150" wrap="soft" name="mailContent1" style="width:100%;border:solid 1px #ddd"></textarea>
英文<textarea rows="5" cols="150" wrap="soft" name="mailContent2" style="width:100%;border:solid 1px #ddd"></textarea>
越南文<textarea rows="5" cols="150" wrap="soft" name="mailContent3" style="width:100%;border:solid 1px #ddd"></textarea>
<!-- 英文<textarea rows="5" cols="150" wrap="soft" name="mailContent2" style="width:100%;border:solid 1px #ddd"></textarea>-->
<!-- 越南文<textarea rows="5" cols="150" wrap="soft" name="mailContent3" style="width:100%;border:solid 1px #ddd"></textarea>-->
<span class="MAILCONTENT"></span>
</div>
</div>
@ -113,14 +113,12 @@
物品id:
<select name="itemId" style="width: 150px" th:id="itemId_+(${i})"><!--下拉列表-->
<option value="0" selected="selected">0.无物品</option>
<option th:each="item:${itemNameMap}" th:value="${item.key}"
th:text="${item.key}+.+${item.value}"></option>
<option th:each="item:${itemNameMap}" th:value="${item.key}" th:text="${item.key}+.+${item.value}"></option>
</select>
<!--<input type="text" name="itemIds[]" id="itemId_1" style="width: 150px" />-->
物品数量:<input type="text" name="itemNum" th:id="itemNum_+(${i})" class="input_bg"/>
<a href="#" th:if="${i} ne 1" class="removeclass">×</a>
<a href="#" th:if="${i} eq 1" id="AddMoreFileBox" class="btn btn-info">+</a>
<span class="REWARD"></span>
</div>
</div>
</div>
@ -134,7 +132,6 @@
<input type="text"
onfocus="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:ss',minDate:'#F{$dp.$D(\'SendTime\')}' })"
id="SendTime" class="input-text Wdate" style="width:180px;" name="sendTime">
<span class="SENDTIME"></span>
</div>
</div>
<div class="row cl">
@ -145,7 +142,6 @@
<input type="text"
onfocus="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:ss',minDate:'#F{$dp.$D(\'PlayerRTime\')}' })"
id="PlayerRTime" class="input-text Wdate" style="width:180px;" name="playerRTime">
<span class="PLAYERRTIME"></span>
</div>
</div>
<div class="row cl">
@ -276,41 +272,27 @@
});
function sendSysMail() {
let mailTitle = $("input[name='mailTitle1']").val();
let mailContent = $("textarea[name='mailContent1']").val();
//特殊字符验证
var reg = new RegExp("[|#]",'g');
var mailTitle1 = $("input[name='mailTitle1']").val();
var mailTitle2 = $("input[name='mailTitle2']").val();
var mailTitle3 = $("input[name='mailTitle3']").val();
var mailContent1 = $("textarea[name='mailContent1']").val();
var mailContent2 = $("textarea[name='mailContent2']").val();
var mailContent3 = $("textarea[name='mailContent3']").val();
if (reg.test(mailTitle1) || reg.test(mailTitle2) || reg.test(mailTitle3)){
alert("邮件标题不能含有特殊字符");
return false;
}
if (reg.test(mailContent1) || reg.test(mailContent2) || reg.test(mailContent3)){
alert("邮件正文不能有特殊字符");
let reg = new RegExp("[|#]",'g');
if (reg.test(mailTitle) || reg.test(mailContent)){
alert("邮件标题或内容包含特殊字符");
return false;
}
var mailTitle = mailTitle1+"|"+mailTitle2+"|"+mailTitle3;
var mailContent = mailContent1+"|"+mailContent2+"|"+mailContent3;
var serverId = $("#serverId").val().toString();
var isAttach = document.getElementById("isAttach").value;
var sendTime = $("input[name='sendTime']").val();
var playerRTime = $("#PlayerRTime").val();
var effectTime = $("input[name='effectTime']:checked").val();
let serverId = $("#serverId").val().toString();
let isAttach = document.getElementById("isAttach").value;
let sendTime = $("input[name='sendTime']").val();
let playerRTime = $("#PlayerRTime").val();
let effectTime = $("input[name='effectTime']:checked").val();
if (effectTime === "TheCustom"){
var seconds = document.getElementById("effectTime_input").value;
let seconds = document.getElementById("effectTime_input").value;
effectTime = seconds*24*60*60;
}
var version = new Date().getTime() / 1000;
var itemIds = [];
var itemNums =[];
let version = new Date().getTime() / 1000;
let itemIds = [];
let itemNums =[];
if (isAttach === "1") {
$("select[name='itemId']").each(function () {
if($(this).val()!=='0'){
@ -385,7 +367,7 @@
if (data == 1) {
layer.msg('发送全服邮件失败!', {icon: 6, time: 1000});
}
if (data === 2) {
if (data == 2) {
layer.msg('发送邮件失败 道具不能为空!', {icon: 6, time: 1000});
}
}

View File

@ -265,6 +265,9 @@
function upsertActivity() {
// ID
let activityId = document.getElementById("activityId").value;
if (activityId == ""){
activityId = null;
}
// 标题
let name = document.getElementById("name").value;
// 描述
@ -286,6 +289,13 @@
endTime = document.getElementById("endTime").value.replace("T"," ")+":00";
}
let DateStart = new Date(startTime);
let DateEnd = new Date(endTime);
if (DateEnd <= DateStart) {
alert("结束时间必须大于开始时间.");
return false;
}
$.ajax({
type: "POST",
data:

View File

@ -25,65 +25,27 @@
<div class="page-container">
<h1 class="f-20 text-success">太初行管理后台</h1>
</div>
<div style="margin-left: 20px;font-size: 18px">
<div>
<h2 style="color: red" class="f-36">更新日志[2022-9-26]</h2>
<p class="f-20" style="line-height:32px;">
1、工会列表查询功能优化成员信息界面修改为单独页面展示<br>
2、部分页面展示bug修改<br>
</p>
<h2 style="color: red" class="f-18">更新日志[2022-8-29]</h2>
<p class="f-14" style="line-height:32px;">
1、修改了部分界面的“服务器多选框”的样式兼容手机页面<br>
2、修改了服务器信息界面部分按钮的配色<br>
3、服务器信息修改界面给需要注意的修改内容标红提醒<br>
</p>
<h2 style="color: red" class="f-18">更新日志[2022-7-13]</h2>
<p class="f-14" style="line-height:32px;">
1、“服务器管理”标签下添加“批量修改服务器信息”页面用来做服务器的批量修改包含全部状态服务器<br>
2、“服务器信息”界面的 批量修改跨服id输入框 移动到 “批量修改服务器信息” 界面下,修改服务器状态选择框还在原位<br>
3、目前可在 “批量修改服务器信息” 页面下进行复数服务器的跨服id修改不管什么状态都可以选中一起修改修改逻辑未变详情可将鼠标移动到改页面的“跨服id修改”文字上即可查看<br>
4、优化显示“服务器信息”页面中每一列的宽度<br>
</p>
<h2 style="color: red" class="f-18">更新日志[2022-7-5]</h2>
<p class="f-14" style="line-height:32px;">
1、服务器清库步骤整理(清库和修改状态操作推荐在开服当天执行,不然会导致游戏内开服时间异常)<br>
1确认服务器状态处于“未运营”状态下<br>
2点击修改按钮修改服务器对应参数重要的参数有服务器开服时间跨服id等。注意这时候不要修改服务器状态<br>
3点击清库按钮<br>
4刷新界面然后检查服务器开服时间和跨服id等参数是否正确<br>
5确认无误后点击修改按钮修改服务器状态由“未运营”修改为其他状态即可<br>
</p>
<h2 style="color: red" class="f-18">更新日志[2022-6-29]</h2>
<p class="f-14" style="line-height:32px;">
1、服务器信息页面删除缓存更新文字按钮同时修改右上角绿色修改刷新时会更新缓存<br>
2、部分选框没有注释的可以将鼠标移动到改选框上会有提示。例如服务器信息界面上方批量修改的状态多选框和跨服id输入框<br>
3、服务器批量修改bug处理
</p>
<h2 style="color: red" class="f-18">更新日志[2022-5-26]</h2>
<p class="f-14" style="line-height:32px;">
1、封禁列表显示字段优化<br>
2、封禁列表添加天眼封禁显示<br>
3、服务器列表添加重启和清库按钮同时<span style="color: red">去除未运营修改为其他状态时的清库操作</span>,但是清库按钮只有在未运营状态时可使用<br>
4、服务器修改信息添加开服时间字段<br>
5、<span style="color: red">必看</span>:服务器处于<span style="color: red">未运营</span>状态时修改服务器的跨服id和开服时间会立刻生效其他状态时修改会延迟生效具体生效时间根据功能不同来定<br>
ps跨服id每周一零点更新开服时间非未运营状态修改无效<br>
6、聊天管理界面添加封禁功能删除功能暂未完成需注意封禁功能对于没有显示账号id的玩家无法封禁请前往封禁列表自行操作更新后的内容都会包含有账号id<br>
7、添加重启服务器功能权限
</p>
<h2 style="color: red" class="f-18">更新日志[2022-5-7]</h2>
<p class="f-14" style="line-height:32px;">
1、优化封禁列表显示功能添加天眼功能的封禁信息
</p>
</div>
<div style="margin-left: 20px;">
<a href="javascript:;" style="color: red" id="version">下载更新记录</a>
</div>
<footer class="footer mt-20">
</footer>
<script type="text/javascript" src="lib/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="h-ui/js/H-ui.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/showdown@2.1.0/dist/showdown.min.js"></script>
<script>
$('#version').on('click', function(){
try {
let elemIF = document.createElement("iframe");
elemIF.src = "../version.md";
elemIF.style.display = "none";
document.body.appendChild(elemIF);
} catch (e) {
alert("下载失败!");
}
})
</script>
</body>
</html>

View File

@ -0,0 +1,29 @@
## 更新日志
+ ### 2022-10-25
1. 游戏管理主页签下添加自动返利活动功能,可以配置自动返利功能信息
2. 发送邮件功能整合到邮件管理主页签下
+ ### 2022-9-26
1. 工会列表查询功能优化,成员信息界面修改为单独页面展示
2. 部分页面展示bug修改
+ ### 2022-8-29
1. 修改了部分界面的“服务器多选框”的样式,兼容手机页面
2. 修改了服务器信息界面部分按钮的配色
3. 服务器信息修改界面,给需要注意的修改内容标红提醒
+ ### 2022-7-13
1. “服务器管理”标签下添加“批量修改服务器信息”页面,用来做服务器的批量修改,包含全部状态服务器
2. “服务器信息”界面的 批量修改跨服id输入框 移动到 “批量修改服务器信息” 界面下,修改服务器状态选择框还在原位
3. 目前可在 “批量修改服务器信息” 页面下进行复数服务器的跨服id修改不管什么状态都可以选中一起修改修改逻辑未变详情可将鼠标移动到改页面的“跨服id修改”文字上即可查看
4. 优化显示“服务器信息”页面中每一列的宽度
+ ### 2022-7-5
服务器清库步骤整理(清库和修改状态操作推荐在开服当天执行,不然会导致游戏内开服时间异常)
1. 确认服务器状态处于“未运营”状态下
2. 点击修改按钮修改服务器对应参数重要的参数有服务器开服时间跨服id等。注意这时候不要修改服务器状态
3. 点击清库按钮
4. 刷新界面然后检查服务器开服时间和跨服id等参数是否正确
5. 确认无误后,点击修改按钮,修改服务器状态,由“未运营”修改为其他状态即可