| | |
| | | */ |
| | | @Data |
| | | public class RefereeList { |
| | | /** 裁判 ID,敏感信息查询时用于精确定位单条记录。 */ |
| | | private Integer id; |
| | | /** |
| | | * 姓名 |
| | | */ |
| | |
| | | CONCAT(province, city) as province, |
| | | state |
| | | from t_referee where state != 3 |
| | | <if test="null != item.id"> |
| | | and id = #{item.id} |
| | | </if> |
| | | <if test="null != item.name and '' != item.name"> |
| | | and name like CONCAT('%', #{item.name}, '%') |
| | | </if> |
| | |
| | | select |
| | | count(*) |
| | | from t_referee where state != 3 |
| | | <if test="null != item.id"> |
| | | and id = #{item.id} |
| | | </if> |
| | | <if test="null != item.name and '' != item.name"> |
| | | and name like CONCAT('%', #{item.name}, '%') |
| | | </if> |
| | |
| | | and cityCode = #{item.cityCode} |
| | | </if> |
| | | </select> |
| | | </mapper> |
| | | </mapper> |
| | |
| | | if (tHuiminCard.getStatus() != null){ |
| | | queryWrapper.eq("status",tHuiminCard.getStatus()); |
| | | } |
| | | queryWrapper.orderByDesc("sort").orderByDesc("id"); |
| | | Page<THuiminCard> page = new Page<>(); |
| | | page.setCurrent(tHuiminCard.getCurrent()); |
| | | page.setSize(tHuiminCard.getSize()); |
| | |
| | | } |
| | | Store store = storeClient.queryStoreById(re.getStoreId()); |
| | | TAppUser appUser = appUserClient.queryAppUser1(re.getAppUserId()); |
| | | String studentId = re.getStudentId(); |
| | | String[] split = studentId.split(";"); |
| | | StringBuilder stringBuilder = new StringBuilder(""); |
| | | |
| | | for (String s : split) { |
| | | Student student = studentClient.queryStudentById(Integer.valueOf(s)); |
| | | stringBuilder.append(student.getName()+","); |
| | | String studentId = re.getStudentId(); |
| | | if (studentId != null && !studentId.trim().isEmpty()) { |
| | | String[] split = studentId.split(";"); |
| | | for (String s : split) { |
| | | if (s == null || s.trim().isEmpty()) { |
| | | continue; |
| | | } |
| | | Student student = studentClient.queryStudentById(Integer.valueOf(s)); |
| | | if (student != null) { |
| | | stringBuilder.append(student.getName()).append(","); |
| | | } |
| | | } |
| | | } |
| | | String string = stringBuilder.toString(); |
| | | if (string.length() > 0) { |
| | |
| | | t1.payUserName as buyTypeName, t1.classHours as classHours,t1.insertTime as insertTime,t1.coursePackageId as coursePackageId, |
| | | CONCAT(t2.province,t2.city) as provinceAndCity,t2.coursePackageTypeId,t2.storeId,t2.name as coursePackage, |
| | | t3.name as coursePackageType,t1.orderNumber |
| | | from t_course_package_order t1 |
| | | from ( |
| | | select * from t_course_package_order1 |
| | | union all select * from t_course_package_order2 |
| | | union all select * from t_course_package_order3 |
| | | union all select * from t_course_package_order4 |
| | | union all select * from t_course_package_order5 |
| | | ) t1 |
| | | left join t_course_package t2 on t1.coursePackageId = t2.id |
| | | left join t_course_package_type t3 on t2.coursePackageTypeId = t3.id |
| | | <where> |
| | |
| | | order by t1.insertTime desc |
| | | </select> |
| | | |
| | | </mapper> |
| | | </mapper> |
| | |
| | | */ |
| | | @Data |
| | | public class RefereeList { |
| | | /** 裁判 ID,敏感信息查询时用于精确定位单条记录。 */ |
| | | private Integer id; |
| | | /** |
| | | * 姓名 |
| | | */ |
| | |
| | | return storeId; |
| | | } |
| | | |
| | | /** |
| | | * 运营商统计的门店范围:平台(0)统计平台门店,其他值统计对应运营商门店。 |
| | | */ |
| | | /** 平台(0)或运营商统计均以门店的 operatorId 作为唯一归属依据。 */ |
| | | private List<TStore> listStatisticsStores(Integer operatorId, boolean enabledOnly) { |
| | | LambdaQueryWrapper<TStore> wrapper = new LambdaQueryWrapper<>(); |
| | | if (enabledOnly) { |
| | |
| | | } |
| | | if (operatorId == null) { |
| | | // 平台统计:所有门店总和,不按门店所属运营商过滤。 |
| | | } else if (Integer.valueOf(0).equals(operatorId)) { |
| | | wrapper.eq(TStore::getType, 1); |
| | | } else { |
| | | wrapper.eq(TStore::getType, 2).eq(TStore::getOperatorId, operatorId); |
| | | wrapper.eq(TStore::getOperatorId, operatorId); |
| | | } |
| | | return storeService.list(wrapper); |
| | | } |
| | |
| | | // 下游多处查询会在门店集合为空时忽略门店过滤。运营商没有任何门店时, |
| | | // 直接返回完整的零值结构,避免被误统计为全平台数据。 |
| | | if (operatorId != null && storeId == null |
| | | && listStatisticsStores(operatorId, false).isEmpty()) { |
| | | && storeService.count(new LambdaQueryWrapper<TStore>() |
| | | .eq(TStore::getOperatorId, operatorId) |
| | | .ne(TStore::getState, 3)) == 0) { |
| | | Map<String, Object> emptyIncomeData = buildIncomeStatistics(Collections.emptyList()); |
| | | emptyIncomeData.put("incomeTypeNet", buildIncomeTypeNet(Collections.emptyList(), null)); |
| | | Map<String, Object> emptyTicketIncome = new HashMap<>(); |
| | |
| | | @RequestMapping(value = "/userAndVipPt") |
| | | @ResponseBody |
| | | public Object userAndVipPt(Integer type) { |
| | | HashMap<String, Object> map = appUserClient.userAndVipYys(listStatisticsAppUserIds(null)); |
| | | // 平台用户统计按用户归属全量统计,不能以“已有消费记录”筛选, |
| | | // 否则会遗漏尚未在门店消费的新注册用户。 |
| | | HashMap<String, Object> map = appUserClient.userAndVipPt(1); |
| | | return map; |
| | | } |
| | | |
| | |
| | | TAppUser tAppUser = appUserClient.queryById(vipPayment.getAppUserId()); |
| | | IncomeVO temp = new IncomeVO(); |
| | | temp.setId(vipPayment.getId().toString()); |
| | | temp.setAppUserId(vipPayment.getAppUserId()); |
| | | if (tAppUser!=null){ |
| | | if (tAppUser.getProvince()!=null){ |
| | | temp.setProvince(tAppUser.getProvince()); |
| | |
| | | TAppUser tAppUser = appUserClient.queryById(rechargeRecordsVO.getAppUserId()); |
| | | IncomeVO temp = new IncomeVO(); |
| | | temp.setId(rechargeRecordsVO.getId().toString()); |
| | | temp.setAppUserId(rechargeRecordsVO.getAppUserId()); |
| | | if (tAppUser!=null){ |
| | | if (tAppUser.getProvince()!=null){ |
| | | temp.setProvince(tAppUser.getProvince()); |
| | |
| | | TAppUser tAppUser = appUserClient.queryById(registerOrderVO.getAppUserId()); |
| | | IncomeVO temp = new IncomeVO(); |
| | | temp.setId(registerOrderVO.getId().toString()); |
| | | temp.setAppUserId(registerOrderVO.getAppUserId()); |
| | | if (tAppUser!=null){ |
| | | if (tAppUser.getProvince()!=null){ |
| | | temp.setProvince(tAppUser.getProvince()); |
| | |
| | | temp.setStoreName(substring); |
| | | } |
| | | temp.setId(competition.getId().toString()); |
| | | temp.setAppUserId(competition.getAppUserId()); |
| | | if (tAppUser!=null){ |
| | | if (tAppUser.getProvince()!=null){ |
| | | temp.setProvince(tAppUser.getProvince()); |
| | |
| | | Store store = storeClient.getStoreById(siteBooking.getStoreId()); |
| | | |
| | | temp.setId(siteBooking.getId().toString()); |
| | | temp.setAppUserId(siteBooking.getAppUserId()); |
| | | temp.setProvince(siteBooking.getProvince()); |
| | | temp.setCity(siteBooking.getCity()); |
| | | temp.setStoreName(store.getName()); |
| | |
| | | |
| | | |
| | | } |
| | | |
| | |
| | | tHuiminCard.setObjectType(objectType); |
| | | Integer objectId = user.getObjectId(); |
| | | tHuiminCard.setObjectId(objectId); |
| | | return super.packForBT(huiminCardClient.queryPage(tHuiminCard)); |
| | | Page<THuiminCard> page = huiminCardClient.queryPage(tHuiminCard); |
| | | page.getRecords().sort(Comparator |
| | | .comparing((THuiminCard card) -> parseSort(card.getSort()), Comparator.nullsLast(Comparator.reverseOrder())) |
| | | .thenComparing(THuiminCard::getId, Comparator.nullsLast(Comparator.reverseOrder()))); |
| | | return super.packForBT(page); |
| | | } |
| | | |
| | | private Long parseSort(String sort) { |
| | | try { |
| | | return sort == null ? null : Long.valueOf(sort); |
| | | } catch (NumberFormatException ignored) { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | } |
| | | }else { |
| | | TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getId, tStore.getProvinceCode())); |
| | | // 编辑页提交的是行政区划编码;按 id 查询会导致查不到省、市,随后访问名称时抛出 NPE。 |
| | | TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, tStore.getProvinceCode())); |
| | | if (one == null) { |
| | | return ERROR; |
| | | } |
| | | tStore.setProvince(one.getName()); |
| | | tStore.setProvinceCode(one.getCode()); |
| | | TCity one1 = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getId, tStore.getCityCode())); |
| | | TCity one1 = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, tStore.getCityCode())); |
| | | if (one1 == null) { |
| | | return ERROR; |
| | | } |
| | | tStore.setCity(one1.getName()); |
| | | tStore.setCityCode(one1.getCode()); |
| | | } |
| | |
| | | User user = UserExt.getUser(); |
| | | ballQueryDto.setType(user.getObjectType()); |
| | | ballQueryDto.setId(user.getObjectId()); |
| | | return ballClient.list(ballQueryDto); |
| | | List<Game> games = ballClient.list(ballQueryDto); |
| | | games.sort(Comparator.comparing(Game::getId, Comparator.nullsLast(Comparator.reverseOrder()))); |
| | | return games; |
| | | } |
| | | |
| | | @ResponseBody |
| | |
| | | package com.dsh.guns.modular.system.controller.system; |
| | | |
| | | import com.dsh.course.feignClient.account.AppUserClient; |
| | | import com.dsh.course.feignClient.account.CoachClient; |
| | | import com.dsh.course.feignClient.account.RefereeClient; |
| | | import com.dsh.course.feignClient.account.model.CoachSerchVO; |
| | | import com.dsh.course.feignClient.account.model.RefereeList; |
| | | import com.dsh.guns.config.UserExt; |
| | | import com.dsh.guns.core.common.exception.BizExceptionEnum; |
| | | import com.dsh.guns.core.exception.GunsException; |
| | | import com.dsh.guns.modular.system.audit.ManagementAuditWriter; |
| | | import com.dsh.guns.modular.system.model.SiteBooking; |
| | | import com.dsh.guns.modular.system.model.TOperator; |
| | | import com.dsh.guns.modular.system.model.CoachQuery; |
| | | import com.dsh.guns.modular.system.service.ISiteBookingService; |
| | | import com.dsh.guns.modular.system.service.TOperatorService; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | |
| | | import javax.annotation.Resource; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.UUID; |
| | | |
| | |
| | | @Resource private ManagementAuditWriter auditWriter; |
| | | @Resource private IUserService userService; |
| | | @Resource private ISiteBookingService siteBookingService; |
| | | @Resource private CoachClient coachClient; |
| | | @Resource private RefereeClient refereeClient; |
| | | @Resource private TOperatorService operatorService; |
| | | |
| | | @GetMapping("/app-user/{id}") |
| | | public Map<String, Object> appUser(@PathVariable Integer id) { |
| | |
| | | return result; |
| | | } |
| | | |
| | | @GetMapping("/coach/{id}") |
| | | public Map<String, Object> coach(@PathVariable Integer id) { |
| | | assertAdmin(); |
| | | // 与教练管理页 /tCoach/list 使用同一个查询入口,确保返回字段和数据权限一致。 |
| | | CoachQuery query = new CoachQuery(); |
| | | query.setId(id); |
| | | List<CoachSerchVO> coaches = coachClient.listAll(query); |
| | | CoachSerchVO coach = coaches == null || coaches.isEmpty() ? null : coaches.get(0); |
| | | Map<String, Object> result = null; |
| | | if (coach != null) { |
| | | result = new HashMap<String, Object>(); |
| | | result.put("id", coach.getId()); |
| | | result.put("name", coach.getName()); |
| | | result.put("phone", coach.getPhone()); |
| | | result.put("idCard", coach.getIdcard()); |
| | | } |
| | | writeAudit("coach", id, coach == null ? null : coach.getName(), result == null ? "NOT_FOUND" : "SUCCESS"); |
| | | return result; |
| | | } |
| | | |
| | | @GetMapping("/referee/{id}") |
| | | public Map<String, Object> referee(@PathVariable Integer id) { |
| | | assertAdmin(); |
| | | // 使用裁判管理页 /referee/listAll 对应的列表查询接口精确查询该裁判。 |
| | | RefereeList query = new RefereeList(); |
| | | query.setId(id); |
| | | query.setOffset(0); |
| | | query.setLimit(1); |
| | | Map<String, Object> listResult = refereeClient.getRefereeList(query); |
| | | List<Map<String, Object>> referees = listResult == null ? null |
| | | : (List<Map<String, Object>>) listResult.get("rows"); |
| | | Map<String, Object> referee = referees == null || referees.isEmpty() ? null : referees.get(0); |
| | | Map<String, Object> result = null; |
| | | if (referee != null) { |
| | | result = new HashMap<String, Object>(); |
| | | result.put("id", referee.get("id")); |
| | | result.put("name", referee.get("name")); |
| | | result.put("phone", referee.get("phone")); |
| | | } |
| | | writeAudit("referee", id, referee == null ? null : String.valueOf(referee.get("name")), |
| | | result == null ? "NOT_FOUND" : "SUCCESS"); |
| | | return result; |
| | | } |
| | | |
| | | @GetMapping("/operator/{id}") |
| | | public Map<String, Object> operator(@PathVariable Integer id) { |
| | | assertAdmin(); |
| | | TOperator operator = operatorService.getById(id); |
| | | User employee = operator == null ? null : userService.getById(operator.getUserId()); |
| | | Map<String, Object> result = null; |
| | | if (employee != null) { |
| | | result = new HashMap<String, Object>(); |
| | | result.put("id", employee.getId()); |
| | | result.put("name", employee.getName()); |
| | | result.put("phone", employee.getPhone()); |
| | | result.put("idCard", employee.getIdCard()); |
| | | } |
| | | writeAudit("operator", id, operator == null ? null : operator.getName(), result == null ? "NOT_FOUND" : "SUCCESS"); |
| | | return result; |
| | | } |
| | | |
| | | private void assertAdmin() { |
| | | if (UserExt.getUser() == null || !"admin".equalsIgnoreCase(UserExt.getUser().getAccount())) { |
| | | throw new GunsException(BizExceptionEnum.NO_PERMITION); |
| | |
| | | } |
| | | roleLambdaQueryWrapper.eq(Role::getObjType,UserExt.getUser().getObjectType()); |
| | | List<Role> list = roleService.list(roleLambdaQueryWrapper); |
| | | // 员工可能是由平台账号创建、后续归属到门店的,原角色不一定属于当前登录人的角色范围。 |
| | | // 编辑时仍需保留该角色作为可选项,避免下拉框无法回显。 |
| | | if (role != null && list.stream().noneMatch(item -> Objects.equals(item.getId(), role.getId()))) { |
| | | list.add(role); |
| | | } |
| | | model.addAttribute("list",list); |
| | | model.addAttribute("language",UserExt.getLanguage()); |
| | | // 部门列表 |
| | |
| | | oldUser.setObjectId(null); |
| | | } |
| | | } |
| | | // 门店关联会维护员工归属信息,但不能覆盖编辑页明确选择的角色。 |
| | | // 必须在关联处理后写入,否则有门店的员工会被上面的兼容逻辑强制改回角色 3。 |
| | | if (!StringUtils.isEmpty(user.getRoleid())) { |
| | | oldUser.setRoleid(user.getRoleid()); |
| | | } |
| | | this.userService.updateById(oldUser); |
| | | return SUCCESS_TIP; |
| | | } |
| | |
| | | {title: '状态', field: 'state', visible: true, align: 'center', valign: 'middle',formatter:function (data) {return{1:"已支付",2:"未支付"}[data]}} |
| | | */ |
| | | private String id; |
| | | /** 关联用户 ID,仅用于管理端受审计的敏感信息查询。 */ |
| | | private Integer appUserId; |
| | | private String province; |
| | | private String city; |
| | | private String storeName; |
| | |
| | | private String idCard; |
| | | // 所在部门 |
| | | private String deptName; |
| | | // 角色名称 |
| | | private String roleName; |
| | | // 状态 1=正常 2=冻结 |
| | | private Integer status; |
| | | |
| | |
| | | </select> |
| | | <select id="searchUsers" resultType="com.dsh.guns.modular.system.model.UserListVO"> |
| | | select t1.id,t1.name ,t1.phone ,t1.avatar,t1.birthday,t1.sex,t1.idCard,t1.status,t1.version |
| | | ,t2.simplename as deptName from sys_user t1 |
| | | ,t2.simplename as deptName, |
| | | (select group_concat(r.name separator ',') from sys_role r where find_in_set(r.id, t1.roleid)) as roleName from sys_user t1 |
| | | left join sys_dept t2 on t1.deptid = t2.id |
| | | <where> |
| | | <if test="query.name != null and query.name != ''"> |
| | |
| | | <script src="${ctxPath}/js/common/web-upload-object.js"></script> |
| | | <script src="${ctxPath}/js/common/ztree-object.js"></script> |
| | | <script src="${ctxPath}/js/common/Feng.js"></script> |
| | | <script src="${ctxPath}/js/common/sensitive-info.js"></script> |
| | | <script src="${ctxPath}/js/plugins/sweetalert/sweetalert.min.js"></script> |
| | | <script src="${ctxPath}/layui/layui.js"></script> |
| | | |
| | |
| | | <#button name="取消预约" icon="fa-edit" clickFun="TStudent.openTStudentDetail4()" space="true"/> |
| | | <#button name="手动支付" icon="fa-edit" clickFun="TStudent.openTStudentDetail6()" space="true"/> |
| | | <#button name="查看详情" icon="fa-edit" clickFun="TStudent.openTStudentDetail5()" space="true"/> |
| | | <#button name="查看敏感信息" icon="fa-eye" clickFun="TStudent.viewSensitiveData()" space="true"/> |
| | | <#button name="导出" icon="fa-download" clickFun="TStudent.exportData()" space="true"/> |
| | | <!-- <button id="exportButton">TTTTTTTTTT</button>--> |
| | | </div> |
| | |
| | | var yearX = []; |
| | | var timeX = []; |
| | | var dataX = []; |
| | | // 仅允许接口真实数据渲染,禁止历史遗留的演示图表覆盖统计结果。 |
| | | var renderDemoStatistics = false; |
| | | // 创建一个日期对象 |
| | | var currentDate = new Date(); |
| | | // 获取当前日期的号数 |
| | |
| | | jxtj() |
| | | srtj() |
| | | income() |
| | | } |
| | | if (!renderDemoStatistics) { |
| | | return; |
| | | } |
| | | var chartDom = document.getElementById('cookieTicket'); |
| | | var myChart = echarts.init(chartDom); |
| | |
| | | myChart.setOption(option); |
| | | }); |
| | | $(function(){ |
| | | if (!renderDemoStatistics) { |
| | | return; |
| | | } |
| | | var chartDom = document.getElementById('cookieCourse'); |
| | | var myChart = echarts.init(chartDom); |
| | | var option; |
| | |
| | | myChart.setOption(option); |
| | | }); |
| | | $(function(){ |
| | | if (!renderDemoStatistics) { |
| | | return; |
| | | } |
| | | var chartDom = document.getElementById('cookieBooking'); |
| | | var myChart = echarts.init(chartDom); |
| | | var option; |
| | |
| | | myChart.setOption(option); |
| | | }); |
| | | $(function(){ |
| | | if (!renderDemoStatistics) { |
| | | return; |
| | | } |
| | | var chartDom = document.getElementById('cookieAge'); |
| | | var myChart = echarts.init(chartDom); |
| | | var option; |
| | |
| | | myChart.setOption(option); |
| | | }); |
| | | $(function(){ |
| | | if (!renderDemoStatistics) { |
| | | return; |
| | | } |
| | | var chartDom = document.getElementById('cookieGender'); |
| | | var myChart = echarts.init(chartDom); |
| | | var option; |
| | |
| | | myChart.setOption(option); |
| | | }); |
| | | $(function(){ |
| | | if (!renderDemoStatistics) { |
| | | return; |
| | | } |
| | | var chartDom = document.getElementById('cookieTeachCourse'); |
| | | var myChart = echarts.init(chartDom); |
| | | var option; |
| | |
| | | var number = Number(value); |
| | | return isFinite(number) ? number.toFixed(2) : '0.00'; |
| | | } |
| | | // 首次进入页面时,收入类型来自服务端模板变量;同样按两位小数展示。 |
| | | $(function () { |
| | | $('#fee1, #fee2, #fee3, #fee4, #fee5, #fee7').each(function () { |
| | | $(this).text(formatStatisticNumber($(this).text())); |
| | | }); |
| | | }); |
| | | laydate.render({ |
| | | elem: '#beginTime' |
| | | , trigger: 'click' |
| | |
| | | <#button name="重置" icon="fa-trash" clickFun="TCompetition.resetSearch()" space="true"/> |
| | | </div> |
| | | </div> |
| | | <div class="hidden-xs" id="TCompetitionTableToolbar" role="group"> |
| | | <#button name="查看敏感信息" icon="fa-eye" clickFun="TCompetition.viewSensitiveData()"/> |
| | | </div> |
| | | <div class="ibox-title" style="display: flex"> |
| | | <h3 id ="totalMoney"></h3><h3>元</h3> |
| | | </div> |
| | |
| | | <#button name="重置" icon="fa-trash" clickFun="TCompetition.resetSearch()" space="true"/> |
| | | </div> |
| | | </div> |
| | | <div class="hidden-xs" id="TCompetitionTableToolbar" role="group"> |
| | | <#button name="查看敏感信息" icon="fa-eye" clickFun="TCompetition.viewSensitiveData()"/> |
| | | </div> |
| | | <div class="ibox-title" style="display: flex"> |
| | | <h3 id ="totalOrder"></h3> |
| | | <h3 id ="cashPayment"></h3><h3>元</h3> |
| | |
| | | <#button name="解冻" icon="fa-check" clickFun="TSite.onShelf()" space="true"/> |
| | | <#button name="重置密码" icon="fa-search" clickFun="TSite.reload()" space="true"/> |
| | | <#button name="绑定商户号" icon="fa-search" clickFun="TSite.bindWx()" space="true"/> |
| | | <#button name="查看敏感信息" icon="fa-eye" clickFun="TSite.viewSensitiveData()" space="true"/> |
| | | </div> |
| | | <#table id="TSiteTable"/> |
| | | </div> |
| | |
| | | @} |
| | | @if(shiro.hasPermission("/referee/onShelf")){ |
| | | <#button name="解冻" icon="fa-edit" clickFun="Referee.onShelf()" space="true"/> |
| | | <#button name="查看敏感信息" icon="fa-eye" clickFun="Referee.viewSensitiveData()" space="true"/> |
| | | @} |
| | | </div> |
| | | <#table id="RefereeTable"/> |
| | |
| | | <#button name="解冻" icon="fa-check" clickFun="TSite.onShelf()" space="true"/> |
| | | <#button name="冻结" icon="fa-remove" clickFun="TSite.offShelf()" space="true"/> |
| | | <#button name="查看详情" icon="fa-search" clickFun="TSite.openInfo()" space="true"/> |
| | | <#button name="查看敏感信息" icon="fa-eye" clickFun="TSite.viewSensitiveData()" space="true"/> |
| | | </div> |
| | | <#table id="TSiteTable"/> |
| | | </div> |
| | |
| | | </div> |
| | | <div class="hidden-xs" id="TCompetitionTableToolbar" role="group"> |
| | | <#button name="赠送积分" icon="fa-plus" clickFun="TSite.openAdd()"/> |
| | | <#button name="查看敏感信息" icon="fa-eye" clickFun="TSite.viewSensitiveData()" space="true"/> |
| | | |
| | | </div> |
| | | <#table id="TSiteTable"/> |
| | |
| | | @} |
| | | @if(shiro.hasPermission("/tPayHuimin/export")){ |
| | | <#button name="导出" icon="fa-edit" clickFun="TPayHuimin.export()" space="true"/> |
| | | <#button name="查看敏感信息" icon="fa-eye" clickFun="TPayHuimin.viewSensitiveData()" space="true"/> |
| | | @} |
| | | <div class="form-group"> |
| | | <label> 售卖总金额:¥</label> |
| | |
| | | <#button name="上架" icon="fa-plus" clickFun="TCompetition.updateState(1)"/> |
| | | <#button name="下架" icon="fa-edit" clickFun="TCompetition.updateState(2)" space="true"/> |
| | | <#button name="查看详情" icon="fa-remove" clickFun="TCompetition.info()" space="true"/> |
| | | <#button name="查看敏感信息" icon="fa-eye" clickFun="TCompetition.viewSensitiveData()" space="true"/> |
| | | </div> |
| | | <#table id="TCompetitionTable"/> |
| | | </div> |
| | |
| | | </div> |
| | | <div class="hidden-xs" id="DriverApplyRefundTableToolbar" role="group"> |
| | | <#button name="批量审核" icon="fa-plus" clickFun="DriverApplyRefund.auditBatch()"/> |
| | | <#button name="查看敏感信息" icon="fa-eye" clickFun="DriverApplyRefund.viewSensitiveData()" space="true"/> |
| | | </div> |
| | | <#table id="DriverApplyRefundTable"/> |
| | | </div> |
| | |
| | | <div class="hidden-xs" id="TCompetitionTableToolbar" role="group"> |
| | | @if(objectType==1){ |
| | | <#button name="导出" icon="fa-plus" clickFun="TCompetition.export()"/> |
| | | <#button name="查看敏感信息" icon="fa-eye" clickFun="TCompetition.viewSensitiveData()" space="true"/> |
| | | @} |
| | | </div> |
| | | <#table id="TCompetitionTable"/> |
| | |
| | | </div> |
| | | <div class="hidden-xs" id="TCompetitionTableToolbar" role="group"> |
| | | <#button name="导出" icon="fa-plus" clickFun="TCompetition.export()"/> |
| | | <#button name="查看敏感信息" icon="fa-eye" clickFun="TCompetition.viewSensitiveData()" space="true"/> |
| | | </div> |
| | | <#table id="TCompetitionTable"/> |
| | | </div> |
| New file |
| | |
| | | /** Admin-only sensitive-information viewer. Every request is audited by the server. */ |
| | | var SensitiveInfo = { |
| | | view: function (url) { |
| | | layer.confirm('查看完整敏感信息将记录操作日志,是否继续?', { |
| | | icon: 3, |
| | | title: '敏感信息查看' |
| | | }, function (index) { |
| | | $.ajax({ |
| | | url: Feng.ctxPath + url, |
| | | type: 'GET', |
| | | success: function (data) { |
| | | layer.close(index); |
| | | if (!data) { |
| | | Feng.info('未查询到敏感信息'); |
| | | return; |
| | | } |
| | | // 弹窗只展示手机号;接口中的 id、name 等定位字段不应暴露给页面。 |
| | | var phone = data.phone || data.mobile || data.telephone || data.tel || data.name; |
| | | if (!phone) { |
| | | Feng.info('未查询到手机号'); |
| | | return; |
| | | } |
| | | var content = '<div class="form-horizontal" style="padding:20px"><div class="form-group">' |
| | | + '<label class="col-sm-4 control-label">手机号:</label><div class="col-sm-8">' |
| | | + '<p class="form-control-static">' + SensitiveInfo.escape(String(phone)) |
| | | + '</p></div></div></div>'; |
| | | layer.open({type: 1, title: '敏感信息', area: ['480px', 'auto'], content: content}); |
| | | }, |
| | | error: function (xhr) { |
| | | layer.close(index); |
| | | Feng.error(xhr.responseJSON && xhr.responseJSON.message ? xhr.responseJSON.message : '敏感信息查询失败'); |
| | | } |
| | | }); |
| | | }); |
| | | }, |
| | | escape: function (value) { |
| | | return value.replace(/[&<>'"]/g, function (char) { |
| | | return {'&': '&', '<': '<', '>': '>', "'": ''', '"': '"'}[char]; |
| | | }); |
| | | } |
| | | }; |
| | |
| | | } |
| | | }; |
| | | |
| | | TStudent.viewSensitiveData = function () { |
| | | if (this.check()) SensitiveInfo.view('/system/sensitive/booking/' + this.seItem.id); |
| | | }; |
| | | |
| | | /** |
| | | * 点击添加 |
| | | */ |
| | |
| | | } |
| | | }; |
| | | |
| | | TCompetition.viewSensitiveData = function () { |
| | | if (this.check()) SensitiveInfo.view('/system/sensitive/app-user/' + this.seItem.appUserId); |
| | | }; |
| | | |
| | | |
| | | |
| | | |
| | |
| | | TCompetition.table = table.init(); |
| | | TCompetition.getData(); |
| | | }); |
| | | |
| | |
| | | } |
| | | }; |
| | | |
| | | TCompetition.viewSensitiveData = function () { |
| | | if (!this.check()) return; |
| | | if (!this.seItem.appUserId) { Feng.info('该收入记录未关联可查询用户'); return; } |
| | | SensitiveInfo.view('/system/sensitive/app-user/' + this.seItem.appUserId); |
| | | }; |
| | | |
| | | |
| | | |
| | | |
| | |
| | | TCompetition.table = table.init(); |
| | | TCompetition.getData(); |
| | | }); |
| | | |
| | |
| | | return true; |
| | | } |
| | | }; |
| | | |
| | | TSite.viewSensitiveData = function () { |
| | | if (this.check()) SensitiveInfo.view('/system/sensitive/operator/' + this.seItem.id); |
| | | }; |
| | | /** |
| | | * 商户号认证 |
| | | */ |
| | |
| | | return true; |
| | | } |
| | | }; |
| | | |
| | | Referee.viewSensitiveData = function () { |
| | | if (this.check()) SensitiveInfo.view('/system/sensitive/referee/' + this.seItem.id); |
| | | }; |
| | | /** |
| | | * 商户号认证 |
| | | */ |
| | |
| | | return true; |
| | | } |
| | | }; |
| | | |
| | | TSite.viewSensitiveData = function () { |
| | | if (this.check()) SensitiveInfo.view('/system/sensitive/coach/' + this.seItem.id); |
| | | }; |
| | | /** |
| | | * 上架 |
| | | */ |
| | |
| | | return true; |
| | | } |
| | | }; |
| | | |
| | | TSite.viewSensitiveData = function () { |
| | | if (!this.check()) return; |
| | | var userId = this.seItem.appUserId || this.seItem.userId; |
| | | if (!userId) { Feng.info('该积分记录未关联用户'); return; } |
| | | SensitiveInfo.view('/system/sensitive/app-user/' + userId); |
| | | }; |
| | | TSite.oneChange = function (e) { |
| | | var oneId=$(e).val(); |
| | | var ajax = new $ax(Feng.ctxPath + "/tCity/onChange", function(data){ |
| | |
| | | } |
| | | }; |
| | | |
| | | TPayHuimin.viewSensitiveData = function () { |
| | | if (this.check()) SensitiveInfo.view('/system/sensitive/app-user/' + this.seItem.appUserId); |
| | | }; |
| | | |
| | | /** |
| | | * 点击添加玩湃惠民卡 |
| | | */ |
| | |
| | | } |
| | | }; |
| | | |
| | | TCompetition.viewSensitiveData = function () { |
| | | if (!this.check()) return; |
| | | var userId = this.seItem.appUserId || this.seItem.userId; |
| | | if (!userId) { Feng.info('该评价未关联用户'); return; } |
| | | SensitiveInfo.view('/system/sensitive/app-user/' + userId); |
| | | }; |
| | | |
| | | /** |
| | | * 点击添加车辆管理 |
| | | */ |
| | |
| | | }else { |
| | | Feng.confirm("Apakah Anda pasti akan mengekspor informasi kendaraan?", operation); |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | }, |
| | | {title: '身份证号', field: 'idCard', align: 'center', valign: 'middle', sortable: true}, |
| | | {title: '角色', field: 'roleName', align: 'center', valign: 'middle', sortable: true}, |
| | | {title: '所在部门', field: 'deptName', align: 'center', valign: 'middle', sortable: true}, |
| | | {title: '状态', field: 'status', align: 'center', valign: 'middle', sortable: true, |
| | | formatter:function (data) { |
| | |
| | | return true; |
| | | }; |
| | | |
| | | DriverApplyRefund.viewSensitiveData = function () { |
| | | if (this.check()) SensitiveInfo.view('/system/sensitive/app-user/' + this.seItem.userId); |
| | | }; |
| | | |
| | | |
| | | /** |
| | | * 打开编辑 |
| | |
| | | ]; |
| | | }; |
| | | |
| | | TCompetition.check = function () { |
| | | var selected = $('#' + this.id).bootstrapTable('getSelections'); |
| | | if (selected.length === 0) { Feng.info('请先选中表格中的某一记录!'); return false; } |
| | | TCompetition.seItem = selected[0]; |
| | | return true; |
| | | }; |
| | | |
| | | TCompetition.viewSensitiveData = function () { |
| | | if (this.check()) SensitiveInfo.view('/system/sensitive/app-user/' + this.seItem.appUserId); |
| | | }; |
| | | |
| | | |
| | | TCompetition.export = function (){ |
| | | var queryData = TCompetition.getQueryParam(); |
| | |
| | | }else { |
| | | Feng.confirm("Apakah Anda pasti akan mengekspor informasi kendaraan?", operation); |
| | | } |
| | | } |
| | | } |
| | |
| | | ]; |
| | | }; |
| | | |
| | | TCompetition.check = function () { |
| | | var selected = $('#' + this.id).bootstrapTable('getSelections'); |
| | | if (selected.length === 0) { Feng.info('请先选中表格中的某一记录!'); return false; } |
| | | TCompetition.seItem = selected[0]; |
| | | return true; |
| | | }; |
| | | |
| | | TCompetition.viewSensitiveData = function () { |
| | | if (this.check()) SensitiveInfo.view('/system/sensitive/app-user/' + this.seItem.appUserId); |
| | | }; |
| | | |
| | | TCompetition.export = function (){ |
| | | var queryData = TCompetition.getQueryParam(); |
| | | // 生成带参数的完整URL |
| | |
| | | }else { |
| | | Feng.confirm("Apakah Anda pasti akan mengekspor informasi kendaraan?", operation); |
| | | } |
| | | } |
| | | } |
| | |
| | | and si.`name` like concat('%',#{query.site},'%') |
| | | |
| | | </if> |
| | | |
| | | order by ga.id desc |
| | | |
| | | </select> |
| | | <select id="orderlist" resultType="map"> |