表格模板导出

This commit is contained in:
Lenovo 2024-07-18 14:57:16 +08:00
parent 815e27439c
commit 661c503aee
10 changed files with 442 additions and 532 deletions

View File

@ -0,0 +1,121 @@
package com.ruoyi.business.controller;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.business.domain.BusStoreDayHistoryInfo;
import com.ruoyi.business.domain.BusStoreExcelInfo;
import com.ruoyi.business.domain.BusStoreInfo;
import com.ruoyi.business.service.IBusReturnVisitInfoService;
import com.ruoyi.business.service.IBusStoreInfoService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.business.service.IBusStoreDayHistoryInfoService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* 店铺单日历史信息Controller
*
* @author ruoyi
* @date 2024-07-18
*/
@RestController
@RequestMapping("/excel/info")
public class BusStoreDayHistoryInfoController extends BaseController
{
@Autowired
private IBusStoreDayHistoryInfoService busStoreDayHistoryInfoService;
@Autowired
private IBusStoreInfoService busStoreInfoService;
@Autowired
private IBusReturnVisitInfoService iBusReturnVisitInfoService;
/**
* 查询店铺单日历史信息列表
*/
// @PreAuthorize("@ss.hasPermi('system:info:list')")
@GetMapping("/list")
public TableDataInfo list(BusStoreExcelInfo excelInfo)
{
startPage();
List<BusStoreExcelInfo> list = busStoreDayHistoryInfoService.selectBusStoreDayHistoryInfoList(excelInfo);
return getDataTable(list);
}
@PostMapping("/export")
public void export(Long storeId,String expStartTime,String expEndTime,HttpServletResponse response) throws Exception {
String startTime = expStartTime;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
BusStoreInfo storeInfo = busStoreInfoService.selectBusStoreInfoById(storeId);
List<BusStoreExcelInfo> list = new ArrayList<>();
if (storeInfo != null) {
int totalComments = 0;
BigDecimal totamMoney = new BigDecimal("0");
while (dateFormat.parse(startTime).getTime() <= dateFormat.parse(expEndTime).getTime()){
BusStoreExcelInfo excelInfo = new BusStoreExcelInfo();
excelInfo.setOrderDate(startTime);
excelInfo.setCommentsDate(startTime);
String sT = startTime+" 00:00:00";
String eT = startTime+" 23:59:59";
int visitCount = iBusReturnVisitInfoService.getByDate(storeInfo.getStoreCode(),sT,eT);
excelInfo.setVisitNumber(visitCount);
BusStoreDayHistoryInfo data = busStoreDayHistoryInfoService.getByDate(storeId,sT,eT);
if (data != null && data.getLastPositiveReviewsNum() != null){
excelInfo.setCommentsNumber(data.getLastPositiveReviewsNum());
totalComments += data.getLastPositiveReviewsNum();
}else{
excelInfo.setCommentsNumber(0);
}
excelInfo.setPrice(storeInfo.getPrice().toString());
BigDecimal money = new BigDecimal(storeInfo.getPrice().toString()).multiply(new BigDecimal(visitCount));
excelInfo.setMoney(money.toString());
totamMoney = totamMoney.add(money);
list.add(excelInfo);
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateFormat.parse(startTime));
calendar.add(Calendar.DAY_OF_YEAR, 1);
Date newDate = calendar.getTime();
startTime = dateFormat.format(newDate);
}
BusStoreExcelInfo info1 = new BusStoreExcelInfo();
info1.setOrderDate("合计好评量");
info1.setCommentsDate(String.valueOf(totalComments));
info1.setVisitNumber(null);
info1.setCommentsNumber(null);
BusStoreExcelInfo info2 = new BusStoreExcelInfo();
info2.setOrderDate("合计金额");
info2.setCommentsDate(totamMoney.toString());
info2.setVisitNumber(null);
info2.setCommentsNumber(null);
list.add(info1);
list.add(info2);
}
ExcelUtil<BusStoreExcelInfo> util = new ExcelUtil<>(BusStoreExcelInfo.class);
util.exportExcel(response, list, "店铺信息数据");
}
}

View File

@ -274,61 +274,7 @@ public class BusStoreInfoController extends BaseController {
@Log(title = "店铺信息", businessType = BusinessType.EXPORT) @Log(title = "店铺信息", businessType = BusinessType.EXPORT)
@PostMapping("/export") @PostMapping("/export")
public void export(Long id,String expStartTime,String expEndTime,HttpServletResponse response) throws Exception { public void export(Long id,String expStartTime,String expEndTime,HttpServletResponse response) throws Exception {
String startTime = expStartTime;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
BusStoreInfo storeInfo = busStoreInfoService.selectBusStoreInfoById(id);
List<BusStoreExcelInfo> list = new ArrayList<>();
if (storeInfo != null) {
int totalComments = 0;
BigDecimal totamMoney = new BigDecimal("0");
while (dateFormat.parse(startTime).getTime() <= dateFormat.parse(expEndTime).getTime()){
BusStoreExcelInfo excelInfo = new BusStoreExcelInfo();
excelInfo.setOrderDate(startTime);
excelInfo.setCommentsDate(startTime);
String sT = startTime+" 00:00:00";
String eT = startTime+" 23:59:59";
int visitCount = iBusReturnVisitInfoService.getByDate(storeInfo.getStoreCode(),sT,eT);
excelInfo.setVisitNumber(visitCount);
BusStoreDayHistoryInfo data = busStoreDayHistoryInfoService.getByDate(id,sT,eT);
if (data != null && data.getLastPositiveReviewsNum() != null){
excelInfo.setCommentsNumber(data.getLastPositiveReviewsNum());
totalComments += data.getLastPositiveReviewsNum();
}else{
excelInfo.setCommentsNumber(0);
}
// excelInfo.setPrice(storeInfo.getPrice());
excelInfo.setPrice("3");
BigDecimal money = new BigDecimal("3").multiply(new BigDecimal(visitCount));
excelInfo.setMoney(money.toString());
totamMoney = totamMoney.add(money);
list.add(excelInfo);
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateFormat.parse(startTime));
calendar.add(Calendar.DAY_OF_YEAR, 1);
Date newDate = calendar.getTime();
startTime = dateFormat.format(newDate);
}
BusStoreExcelInfo info1 = new BusStoreExcelInfo();
info1.setOrderDate("合计好评量");
info1.setCommentsDate(String.valueOf(totalComments));
info1.setVisitNumber(null);
info1.setCommentsNumber(null);
BusStoreExcelInfo info2 = new BusStoreExcelInfo();
info2.setOrderDate("合计金额");
info2.setCommentsDate(totamMoney.toString());
info2.setVisitNumber(null);
info2.setCommentsNumber(null);
list.add(info1);
list.add(info2);
}
ExcelUtil<BusStoreExcelInfo> util = new ExcelUtil<>(BusStoreExcelInfo.class);
util.exportExcel(response, list, "店铺信息数据");
} }
/** /**

View File

@ -6,7 +6,9 @@ import com.ruoyi.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle; import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* 店铺信息对象 bus_store_info * 店铺信息对象 bus_store_info
@ -17,6 +19,33 @@ import java.util.Date;
public class BusStoreExcelInfo extends BaseEntity public class BusStoreExcelInfo extends BaseEntity
{ {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private Integer storeId;
private String storeName;
public Integer getStoreId() {
return storeId;
}
public void setStoreId(Integer storeId) {
this.storeId = storeId;
}
List<Integer> storeList;
public List<Integer> getStoreList() {
return storeList;
}
public void setStoreList(List<Integer> storeList) {
this.storeList = storeList;
}
public String getStoreName() {
return storeName;
}
public void setStoreName(String storeName) {
this.storeName = storeName;
}
@Excel(name = "订单日期") @Excel(name = "订单日期")
private String orderDate; private String orderDate;
@ -57,7 +86,7 @@ public class BusStoreExcelInfo extends BaseEntity
this.commentsDate = commentsDate; this.commentsDate = commentsDate;
} }
public int getVisitNumber() { public Integer getVisitNumber() {
return visitNumber; return visitNumber;
} }
@ -65,7 +94,7 @@ public class BusStoreExcelInfo extends BaseEntity
this.visitNumber = visitNumber; this.visitNumber = visitNumber;
} }
public int getCommentsNumber() { public Integer getCommentsNumber() {
return commentsNumber; return commentsNumber;
} }

View File

@ -2,6 +2,7 @@ package com.ruoyi.business.mapper;
import com.ruoyi.business.domain.BusStoreDayHistoryInfo; import com.ruoyi.business.domain.BusStoreDayHistoryInfo;
import com.ruoyi.business.domain.BusStoreDayInfo; import com.ruoyi.business.domain.BusStoreDayInfo;
import com.ruoyi.business.domain.BusStoreExcelInfo;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
@ -25,10 +26,10 @@ public interface BusStoreDayHistoryInfoMapper
/** /**
* 查询店铺单日信息列表 * 查询店铺单日信息列表
* *
* @param busStoreDayHistoryInfo 店铺单日信息 * @param busStoreExcelInfo 店铺单日信息
* @return 店铺单日信息集合 * @return 店铺单日信息集合
*/ */
public List<BusStoreDayHistoryInfo> selectBusStoreDayHistoryInfoList(BusStoreDayHistoryInfo busStoreDayHistoryInfo); public List<BusStoreExcelInfo> selectBusStoreDayHistoryInfoList(BusStoreExcelInfo busStoreExcelInfo);
/** /**
* 新增店铺单日信息 * 新增店铺单日信息

View File

@ -1,6 +1,7 @@
package com.ruoyi.business.service; package com.ruoyi.business.service;
import com.ruoyi.business.domain.BusStoreDayHistoryInfo; import com.ruoyi.business.domain.BusStoreDayHistoryInfo;
import com.ruoyi.business.domain.BusStoreExcelInfo;
import java.util.List; import java.util.List;
@ -23,10 +24,10 @@ public interface IBusStoreDayHistoryInfoService
/** /**
* 查询店铺单日信息列表 * 查询店铺单日信息列表
* *
* @param busStoreDayHistoryInfo 店铺单日信息 * @param busStoreExcelInfo 店铺单日信息
* @return 店铺单日信息集合 * @return 店铺单日信息集合
*/ */
public List<BusStoreDayHistoryInfo> selectBusStoreDayHistoryInfoList(BusStoreDayHistoryInfo busStoreDayHistoryInfo); public List<BusStoreExcelInfo> selectBusStoreDayHistoryInfoList(BusStoreExcelInfo busStoreExcelInfo);
/** /**
* 新增店铺单日信息 * 新增店铺单日信息

View File

@ -2,14 +2,19 @@ package com.ruoyi.business.service.impl;
import com.ruoyi.business.domain.BusStoreDayHistoryInfo; import com.ruoyi.business.domain.BusStoreDayHistoryInfo;
import com.ruoyi.business.domain.BusStoreDayInfo; import com.ruoyi.business.domain.BusStoreDayInfo;
import com.ruoyi.business.domain.BusStoreExcelInfo;
import com.ruoyi.business.domain.BusStoreInfo;
import com.ruoyi.business.mapper.BusStoreDayHistoryInfoMapper; import com.ruoyi.business.mapper.BusStoreDayHistoryInfoMapper;
import com.ruoyi.business.mapper.BusStoreDayInfoMapper; import com.ruoyi.business.mapper.BusStoreDayInfoMapper;
import com.ruoyi.business.mapper.BusStoreInfoMapper;
import com.ruoyi.business.service.IBusStoreDayHistoryInfoService; import com.ruoyi.business.service.IBusStoreDayHistoryInfoService;
import com.ruoyi.business.service.IBusStoreDayInfoService; import com.ruoyi.business.service.IBusStoreDayInfoService;
import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -23,6 +28,8 @@ public class BusStoreDayHistoryInfoServiceImpl implements IBusStoreDayHistoryInf
{ {
@Autowired @Autowired
private BusStoreDayHistoryInfoMapper busStoreDayHistoryInfoMapper; private BusStoreDayHistoryInfoMapper busStoreDayHistoryInfoMapper;
@Autowired
private BusStoreInfoMapper storeInfoMapper;
/** /**
* 查询店铺单日信息 * 查询店铺单日信息
@ -39,13 +46,23 @@ public class BusStoreDayHistoryInfoServiceImpl implements IBusStoreDayHistoryInf
/** /**
* 查询店铺单日信息列表 * 查询店铺单日信息列表
* *
* @param busStoreDayHistoryInfo 店铺单日信息 * @param busStoreExcelInfo 店铺单日信息
* @return 店铺单日信息 * @return 店铺单日信息
*/ */
@Override @Override
public List<BusStoreDayHistoryInfo> selectBusStoreDayHistoryInfoList(BusStoreDayHistoryInfo busStoreDayHistoryInfo) public List<BusStoreExcelInfo> selectBusStoreDayHistoryInfoList(BusStoreExcelInfo busStoreExcelInfo)
{ {
return busStoreDayHistoryInfoMapper.selectBusStoreDayHistoryInfoList(busStoreDayHistoryInfo); BusStoreInfo info = new BusStoreInfo();
info.setBindId(SecurityUtils.getLoginUser().getUserId());
List<BusStoreInfo> list = storeInfoMapper.selectBusStoreInfoList(info);
if (list.size() != 0) {
List<Integer> sl = new ArrayList<>();
for (BusStoreInfo storeInfo : list) {
sl.add(storeInfo.getId().intValue());
}
busStoreExcelInfo.setStoreList(sl);
}
return busStoreDayHistoryInfoMapper.selectBusStoreDayHistoryInfoList(busStoreExcelInfo);
} }
/** /**

View File

@ -21,17 +21,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select id, store_id, last_order_num, last_positive_reviews_num, last_five_star_reviews_num, last_return_visit_num, last_return_visit_rate, today_return_visit_num, score, create_time from bus_store_day_history_info select id, store_id, last_order_num, last_positive_reviews_num, last_five_star_reviews_num, last_return_visit_num, last_return_visit_rate, today_return_visit_num, score, create_time from bus_store_day_history_info
</sql> </sql>
<select id="selectBusStoreDayHistoryInfoList" parameterType="BusStoreDayHistoryInfo" resultMap="BusStoreDayHistoryInfoResult"> <sql id="selectBusStoreDayHistoryInfoVo1">
<include refid="selectBusStoreDayHistoryInfoVo"/> SELECT
a.store_id as storeId,
b.store_name as storeName,
DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 DAY),'%Y-%m-%d') as orderDate,
DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 DAY),'%Y-%m-%d') as commentsDate,
ifnull(a.last_return_visit_num,0) as visitNumber,
ifnull(a.last_positive_reviews_num,0) as commentsNumber,
ifnull(b.price,0) as price,
(ifnull(b.price,0) * ifnull(a.last_return_visit_num,0)) as money
from bus_store_day_history_info a INNER JOIN bus_store_info b on b.id = a.store_id
</sql>
<select id="selectBusStoreDayHistoryInfoList" parameterType="com.ruoyi.business.domain.BusStoreExcelInfo" resultType="com.ruoyi.business.domain.BusStoreExcelInfo">
<include refid="selectBusStoreDayHistoryInfoVo1"/>
<where> <where>
<if test="storeId != null "> and store_id = #{storeId}</if> DATE_FORMAT(a.create_time,'%Y-%m-%d') = DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 DAY),'%Y-%m-%d')
<!-- <if test="lastOrderNum != null "> and last_order_num = #{lastOrderNum}</if>--> and b.self_delivery_status != '3'
<!-- <if test="lastPositiveReviewsNum != null "> and last_positive_reviews_num = #{lastPositiveReviewsNum}</if>--> <if test="storeList != null">
<!-- <if test="lastFiveStarReviewsNum != null "> and last_five_star_reviews_num = #{lastFiveStarReviewsNum}</if>--> and a.store_id in
<!-- <if test="lastReturnVisitNum != null "> and last_return_visit_num = #{lastReturnVisitNum}</if>--> <foreach collection="storeList" open="(" close=")" item="item" separator="," index="i">
<!-- <if test="lastReturnVisitRate != null and lastReturnVisitRate != ''"> and last_return_visit_rate = #{lastReturnVisitRate}</if>--> #{item}
<!-- <if test="todayReturnVisitNum != null "> and today_return_visit_num = #{todayReturnVisitNum}</if>--> </foreach>
<!-- <if test="score != null and score != ''"> and score = #{score}</if>--> </if>
<if test="storeName != null and storeName != '' "> and b.store_name = #{storeName}</if>
</where> </where>
</select> </select>

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询店铺单日历史信息列表
export function listInfo(query) {
return request({
url: '/excel/info/list',
method: 'get',
params: query
})
}
// 查询店铺单日历史信息详细
export function getInfo(id) {
return request({
url: '/excel/info/' + id,
method: 'get'
})
}
// 新增店铺单日历史信息
export function addInfo(data) {
return request({
url: '/excel/info',
method: 'post',
data: data
})
}
// 修改店铺单日历史信息
export function updateInfo(data) {
return request({
url: '/excel/info',
method: 'put',
data: data
})
}
// 删除店铺单日历史信息
export function delInfo(id) {
return request({
url: '/excel/info/' + id,
method: 'delete'
})
}

View File

@ -1,87 +1,53 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<!-- <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">--> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<!-- <el-form-item label="营销源名称" prop="roleName">--> <el-form-item label="店铺名称" prop="storeName">
<!-- <el-input--> <el-input
<!-- v-model="queryParams.roleName"--> v-model="queryParams.storeName"
<!-- placeholder="请输入营销源名称"--> placeholder="请输入店铺名称"
<!-- clearable--> clearable
<!-- style="width: 240px"--> @keyup.enter.native="handleQuery"
<!-- @keyup.enter.native="handleQuery"--> />
<!-- />--> </el-form-item>
<!-- </el-form-item>--> <el-form-item>
<!-- <el-form-item label="营销源标识" prop="roleKey">--> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<!-- <el-input--> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<!-- v-model="queryParams.roleKey"--> </el-form-item>
<!-- placeholder="请输入营销源标识"--> </el-form>
<!-- clearable-->
<!-- style="width: 240px"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="仅当前账号" prop="status">-->
<!-- <el-select-->
<!-- v-model="queryParams.status"-->
<!-- placeholder="角色状态"-->
<!-- clearable-->
<!-- style="width: 240px"-->
<!-- >-->
<!-- <el-option-->
<!-- v-for="dict in dict.type.sys_normal_disable"-->
<!-- :key="dict.value"-->
<!-- :label="dict.label"-->
<!-- :value="dict.value"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="备注" prop="roleKey">-->
<!-- <el-input-->
<!-- v-model="queryParams.roleKey"-->
<!-- placeholder="备注"-->
<!-- clearable-->
<!-- style="width: 240px"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item>-->
<!-- <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>-->
<!-- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">--> <el-col :span="1.5">
<!-- <el-button--> <el-button
<!-- type="primary"--> type="primary"
<!-- plain--> plain
<!-- icon="el-icon-plus"--> icon="el-icon-plus"
<!-- size="mini"--> size="mini"
<!-- @click="handleAdd"--> @click="handleAdd"
<!-- v-hasPermi="['system:role:add']"--> v-hasPermi="['system:info:add']"
<!-- >新增</el-button>--> >新增</el-button>
<!-- </el-col>--> </el-col>
<!-- <el-col :span="1.5">--> <el-col :span="1.5">
<!-- <el-button--> <el-button
<!-- type="success"--> type="success"
<!-- plain--> plain
<!-- icon="el-icon-edit"--> icon="el-icon-edit"
<!-- size="mini"--> size="mini"
<!-- :disabled="single"--> :disabled="single"
<!-- @click="handleUpdate"--> @click="handleUpdate"
<!-- v-hasPermi="['system:role:edit']"--> v-hasPermi="['system:info:edit']"
<!-- >修改</el-button>--> >修改</el-button>
<!-- </el-col>--> </el-col>
<!-- <el-col :span="1.5">--> <el-col :span="1.5">
<!-- <el-button--> <el-button
<!-- type="danger"--> type="danger"
<!-- plain--> plain
<!-- icon="el-icon-delete"--> icon="el-icon-delete"
<!-- size="mini"--> size="mini"
<!-- :disabled="multiple"--> :disabled="multiple"
<!-- @click="handleDelete"--> @click="handleDelete"
<!-- v-hasPermi="['system:role:remove']"--> v-hasPermi="['system:info:remove']"
<!-- >删除</el-button>--> >删除</el-button>
<!-- </el-col>--> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="warning" type="warning"
@ -89,63 +55,32 @@
icon="el-icon-download" icon="el-icon-download"
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['system:role:export']" v-hasPermi="['system:info:export']"
>导出</el-button> >导出</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="infoList" @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" />--> <el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="序号" prop="roleId" width="120" />--> <el-table-column label="序号" align="center" prop="storeId" />
<el-table-column label="订单日期" prop="roleName" :show-overflow-tooltip="true" width="270" /> <el-table-column label="店铺名称" align="center" prop="storeName" />
<el-table-column label="好评日期" prop="roleKey" :show-overflow-tooltip="true" width="270" /> <el-table-column label="订单日期" align="center" prop="orderDate" />
<el-table-column label="拨打电话量" align="center" width="270"/> <el-table-column label="好评日期" align="center" prop="commentsDate" />
<el-table-column label="好评量" align="center" width="290"/> <el-table-column label="拨打电话量" align="center" prop="visitNumber" />
<el-table-column label="单价" align="center" width="290"/> <el-table-column label="好评量" align="center" prop="commentsNumber" />
<el-table-column label="金额" align="center" width="290"/> <el-table-column label="单价" align="center" prop="price" />
<el-table-column label="金额" align="center" prop="money" />
<!-- <template slot-scope="scope">--> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<!-- <el-switch--> <template slot-scope="scope">
<!-- v-model="scope.row.status"--> <el-button
<!-- active-value="0"--> size="mini"
<!-- inactive-value="1"--> type="text"
<!-- @change="handleStatusChange(scope.row)"--> icon="el-icon-mouse"
<!-- ></el-switch>--> @click="export1(scope.row)"
<!-- </template>--> >导出</el-button>
<!-- </el-table-column>--> </template>
<!-- <el-table-column label="创建时间" align="center" prop="createTime" width="180">--> </el-table-column>
<!-- <template slot-scope="scope">-->
<!-- <span>{{ parseTime(scope.row.createTime) }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
<!-- <template slot-scope="scope" v-if="scope.row.roleId !== 1">-->
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-edit"-->
<!-- @click="handleUpdate(scope.row)"-->
<!-- v-hasPermi="['system:role:edit']"-->
<!-- >修改</el-button>-->
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-delete"-->
<!-- @click="handleDelete(scope.row)"-->
<!-- v-hasPermi="['system:role:remove']"-->
<!-- >删除</el-button>-->
<!-- <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']">-->
<!-- <el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>-->
<!-- <el-dropdown-menu slot="dropdown">-->
<!-- <el-dropdown-item command="handleDataScope" icon="el-icon-circle-check"-->
<!-- v-hasPermi="['system:role:edit']">数据权限</el-dropdown-item>-->
<!-- <el-dropdown-item command="handleAuthUser" icon="el-icon-user"-->
<!-- v-hasPermi="['system:role:edit']">分配用户</el-dropdown-item>-->
<!-- </el-dropdown-menu>-->
<!-- </el-dropdown>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table> </el-table>
<pagination <pagination
@ -156,50 +91,32 @@
@pagination="getList" @pagination="getList"
/> />
<!-- 添加或修改角色配置对话框 --> <!-- 添加或修改店铺单日历史信息对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px"> <el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="角色名称" prop="roleName"> <el-form-item label="店铺id" prop="storeId">
<el-input v-model="form.roleName" placeholder="请输入角色名称" /> <el-input v-model="form.storeId" placeholder="请输入店铺id" />
</el-form-item> </el-form-item>
<el-form-item prop="roleKey"> <el-form-item label="昨日订单量" prop="lastOrderNum">
<span slot="label"> <el-input v-model="form.lastOrderNum" placeholder="请输入昨日订单量" />
<el-tooltip content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
权限字符
</span>
<el-input v-model="form.roleKey" placeholder="请输入权限字符" />
</el-form-item> </el-form-item>
<el-form-item label="角色顺序" prop="roleSort"> <el-form-item label="昨日好评量" prop="lastPositiveReviewsNum">
<el-input-number v-model="form.roleSort" controls-position="right" :min="0" /> <el-input v-model="form.lastPositiveReviewsNum" placeholder="请输入昨日好评量" />
</el-form-item> </el-form-item>
<el-form-item label="状态"> <el-form-item label="昨日五星量" prop="lastFiveStarReviewsNum">
<el-radio-group v-model="form.status"> <el-input v-model="form.lastFiveStarReviewsNum" placeholder="请输入昨日五星量" />
<el-radio
v-for="dict in dict.type.sys_normal_disable"
:key="dict.value"
:label="dict.value"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="菜单权限"> <el-form-item label="昨日回访量" prop="lastReturnVisitNum">
<el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event, 'menu')">展开/折叠</el-checkbox> <el-input v-model="form.lastReturnVisitNum" placeholder="请输入昨日回访量" />
<el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event, 'menu')">全选/全不选</el-checkbox>
<el-checkbox v-model="form.menuCheckStrictly" @change="handleCheckedTreeConnect($event, 'menu')">父子联动</el-checkbox>
<el-tree
class="tree-border"
:data="menuOptions"
show-checkbox
ref="menu"
node-key="id"
:check-strictly="!form.menuCheckStrictly"
empty-text="加载中,请稍候"
:props="defaultProps"
></el-tree>
</el-form-item> </el-form-item>
<el-form-item label="备注"> <el-form-item label="昨日回访比50%" prop="lastReturnVisitRate">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input> <el-input v-model="form.lastReturnVisitRate" placeholder="请输入昨日回访比50%" />
</el-form-item>
<el-form-item label="今日回访量" prop="todayReturnVisitNum">
<el-input v-model="form.todayReturnVisitNum" placeholder="请输入今日回访量" />
</el-form-item>
<el-form-item label="评分" prop="score">
<el-input v-model="form.score" placeholder="请输入评分" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
@ -208,57 +125,34 @@
</div> </div>
</el-dialog> </el-dialog>
<!-- 分配角色数据权限对话框 --> <el-dialog :visible.sync="open1" width="800px" append-to-body>
<el-dialog :title="title" :visible.sync="openDataScope" width="500px" append-to-body> <el-form ref="form1" :model="form1" label-width="150px">
<el-form :model="form" label-width="80px"> <el-form-item label="导出时段" prop="start_time">
<el-form-item label="角色名称"> <el-date-picker
<el-input v-model="form.roleName" :disabled="true" /> v-model="timeRange1"
</el-form-item> value-format="yyyy-MM-dd"
<el-form-item label="权限字符"> type="daterange"
<el-input v-model="form.roleKey" :disabled="true" /> range-separator="至"
</el-form-item> start-placeholder="开始日期"
<el-form-item label="权限范围"> end-placeholder="结束日期"
<el-select v-model="form.dataScope" @change="dataScopeSelectChange"> align="right">
<el-option </el-date-picker>
v-for="item in dataScopeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="数据权限" v-show="form.dataScope == 2">
<el-checkbox v-model="deptExpand" @change="handleCheckedTreeExpand($event, 'dept')">展开/折叠</el-checkbox>
<el-checkbox v-model="deptNodeAll" @change="handleCheckedTreeNodeAll($event, 'dept')">全选/全不选</el-checkbox>
<el-checkbox v-model="form.deptCheckStrictly" @change="handleCheckedTreeConnect($event, 'dept')">父子联动</el-checkbox>
<el-tree
class="tree-border"
:data="deptOptions"
show-checkbox
default-expand-all
ref="dept"
node-key="id"
:check-strictly="!form.deptCheckStrictly"
empty-text="加载中,请稍候"
:props="defaultProps"
></el-tree>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitDataScope"> </el-button> <el-button type="primary" @click="submitExport"> </el-button>
<el-button @click="cancelDataScope"> </el-button> <el-button @click="cancel1"> </el-button>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect } from "@/api/system/role"; import { listInfo, getInfo, delInfo, addInfo, updateInfo } from "@/api/statistics/excel";
import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu";
export default { export default {
name: "Role", name: "Info",
dicts: ['sys_normal_disable'],
data() { data() {
return { return {
// //
@ -273,71 +167,40 @@ export default {
showSearch: true, showSearch: true,
// //
total: 0, total: 0,
// //
roleList: [], infoList: [],
// //
title: "", title: "",
// //
open: false, open: false,
// open1: false,
openDataScope: false, timeRange1: undefined,
menuExpand: false, queryParams1: {
menuNodeAll: false, storeId: undefined,
deptExpand: true, storeName: undefined,
deptNodeAll: false, expStartTime: undefined,
// expEndTime: undefined
dateRange: [], },
//
dataScopeOptions: [
{
value: "1",
label: "全部数据权限"
},
{
value: "2",
label: "自定数据权限"
},
{
value: "3",
label: "本部门数据权限"
},
{
value: "4",
label: "本部门及以下数据权限"
},
{
value: "5",
label: "仅本人数据权限"
}
],
//
menuOptions: [],
//
deptOptions: [],
// //
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
roleName: undefined, storeId: null,
roleKey: undefined, lastOrderNum: null,
status: undefined lastPositiveReviewsNum: null,
lastFiveStarReviewsNum: null,
lastReturnVisitNum: null,
lastReturnVisitRate: null,
todayReturnVisitNum: null,
score: null,
}, },
// //
form: {}, form: {},
defaultProps: { form1: {},
children: "children",
label: "label"
},
// //
rules: { rules: {
roleName: [ timeRange1: [
{ required: true, message: "角色名称不能为空", trigger: "blur" } { required: true, message: "时间不能为空", trigger: "blur" }
],
roleKey: [
{ required: true, message: "权限字符不能为空", trigger: "blur" }
],
roleSort: [
{ required: true, message: "角色顺序不能为空", trigger: "blur" }
] ]
} }
}; };
@ -346,63 +209,13 @@ export default {
this.getList(); this.getList();
}, },
methods: { methods: {
/** 查询角色列表 */ /** 查询店铺单日历史信息列表 */
getList() { getList() {
this.loading = false; this.loading = true;
listRole(this.addDateRange(this.queryParams, this.dateRange)).then(response => { listInfo(this.queryParams).then(response => {
this.roleList = null; this.infoList = response.rows;
this.total = null; this.total = response.total;
this.loading = false; this.loading = false;
}
);
},
/** 查询菜单树结构 */
getMenuTreeselect() {
menuTreeselect().then(response => {
this.menuOptions = response.data;
});
},
//
getMenuAllCheckedKeys() {
//
let checkedKeys = this.$refs.menu.getCheckedKeys();
//
let halfCheckedKeys = this.$refs.menu.getHalfCheckedKeys();
checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
return checkedKeys;
},
//
getDeptAllCheckedKeys() {
//
let checkedKeys = this.$refs.dept.getCheckedKeys();
//
let halfCheckedKeys = this.$refs.dept.getHalfCheckedKeys();
checkedKeys.unshift.apply(checkedKeys, halfCheckedKeys);
return checkedKeys;
},
/** 根据角色ID查询菜单树结构 */
getRoleMenuTreeselect(roleId) {
return roleMenuTreeselect(roleId).then(response => {
this.menuOptions = response.menus;
return response;
});
},
/** 根据角色ID查询部门树结构 */
getDeptTree(roleId) {
return deptTreeSelect(roleId).then(response => {
this.deptOptions = response.depts;
return response;
});
},
//
handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用";
this.$modal.confirm('确认要"' + text + '""' + row.roleName + '"角色吗?').then(function() {
return changeRoleStatus(row.roleId, row.status);
}).then(() => {
this.$modal.msgSuccess(text + "成功");
}).catch(function() {
row.status = row.status === "0" ? "1" : "0";
}); });
}, },
// //
@ -410,31 +223,52 @@ export default {
this.open = false; this.open = false;
this.reset(); this.reset();
}, },
// cancel1() {
cancelDataScope() { this.open1 = false;
this.openDataScope = false; this.reset1();
this.reset(); },
reset1() {
this.timeRange1 = ['',''];
this.form1= {};
this.resetForm("form1");
},
export1(row) {
this.open1 = true;
this.form1.id = row.storeId;
this.form1.name = row.storeName;
},
submitExport: function() {
if(this.timeRange1==undefined || this.timeRange1.length == 0){
this.$modal.msgSuccess("请填写时段!");
return
}
this.form1.exportStartTime = this.timeRange1[0]
this.form1.exportEndTime = this.timeRange1[1]
this.$refs["form1"].validate(valid => {
if (valid) {
this.queryParams1.expStartTime = this.form1.exportStartTime;
this.queryParams1.expEndTime = this.form1.exportEndTime;
this.queryParams1.storeId = this.form1.id;
this.queryParams1.storeName = this.form1.name;
this.handleExport(this.queryParams1);
this.cancel1();
}
});
}, },
// //
reset() { reset() {
if (this.$refs.menu != undefined) {
this.$refs.menu.setCheckedKeys([]);
}
this.menuExpand = false,
this.menuNodeAll = false,
this.deptExpand = true,
this.deptNodeAll = false,
this.form = { this.form = {
roleId: undefined, id: null,
roleName: undefined, storeId: null,
roleKey: undefined, lastOrderNum: null,
roleSort: 0, lastPositiveReviewsNum: null,
status: "0", lastFiveStarReviewsNum: null,
menuIds: [], lastReturnVisitNum: null,
deptIds: [], lastReturnVisitRate: null,
menuCheckStrictly: true, todayReturnVisitNum: null,
deptCheckStrictly: true, score: null,
remark: undefined createTime: null
}; };
this.resetForm("form"); this.resetForm("form");
}, },
@ -445,127 +279,43 @@ export default {
}, },
/** 重置按钮操作 */ /** 重置按钮操作 */
resetQuery() { resetQuery() {
this.dateRange = [];
this.resetForm("queryForm"); this.resetForm("queryForm");
this.handleQuery(); this.handleQuery();
}, },
// //
handleSelectionChange(selection) { handleSelectionChange(selection) {
this.ids = selection.map(item => item.roleId) this.ids = selection.map(item => item.id)
this.single = selection.length!=1 this.single = selection.length!==1
this.multiple = !selection.length this.multiple = !selection.length
}, },
//
handleCommand(command, row) {
switch (command) {
case "handleDataScope":
this.handleDataScope(row);
break;
case "handleAuthUser":
this.handleAuthUser(row);
break;
default:
break;
}
},
// /
handleCheckedTreeExpand(value, type) {
if (type == 'menu') {
let treeList = this.menuOptions;
for (let i = 0; i < treeList.length; i++) {
this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value;
}
} else if (type == 'dept') {
let treeList = this.deptOptions;
for (let i = 0; i < treeList.length; i++) {
this.$refs.dept.store.nodesMap[treeList[i].id].expanded = value;
}
}
},
// /
handleCheckedTreeNodeAll(value, type) {
if (type == 'menu') {
this.$refs.menu.setCheckedNodes(value ? this.menuOptions: []);
} else if (type == 'dept') {
this.$refs.dept.setCheckedNodes(value ? this.deptOptions: []);
}
},
//
handleCheckedTreeConnect(value, type) {
if (type == 'menu') {
this.form.menuCheckStrictly = value ? true: false;
} else if (type == 'dept') {
this.form.deptCheckStrictly = value ? true: false;
}
},
/** 新增按钮操作 */ /** 新增按钮操作 */
handleAdd() { handleAdd() {
this.reset(); this.reset();
this.getMenuTreeselect();
this.open = true; this.open = true;
this.title = "添加角色"; this.title = "添加店铺单日历史信息";
}, },
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
this.reset(); this.reset();
const roleId = row.roleId || this.ids const id = row.id || this.ids
const roleMenu = this.getRoleMenuTreeselect(roleId); getInfo(id).then(response => {
getRole(roleId).then(response => {
this.form = response.data; this.form = response.data;
this.open = true; this.open = true;
this.$nextTick(() => { this.title = "修改店铺单日历史信息";
roleMenu.then(res => {
let checkedKeys = res.checkedKeys
checkedKeys.forEach((v) => {
this.$nextTick(()=>{
this.$refs.menu.setChecked(v, true ,false);
})
})
});
});
this.title = "修改角色";
}); });
}, },
/** 选择角色权限范围触发 */
dataScopeSelectChange(value) {
if(value !== '2') {
this.$refs.dept.setCheckedKeys([]);
}
},
/** 分配数据权限操作 */
handleDataScope(row) {
this.reset();
const deptTreeSelect = this.getDeptTree(row.roleId);
getRole(row.roleId).then(response => {
this.form = response.data;
this.openDataScope = true;
this.$nextTick(() => {
deptTreeSelect.then(res => {
this.$refs.dept.setCheckedKeys(res.checkedKeys);
});
});
this.title = "分配数据权限";
});
},
/** 分配用户操作 */
handleAuthUser: function(row) {
const roleId = row.roleId;
this.$router.push("/system/role-auth/user/" + roleId);
},
/** 提交按钮 */ /** 提交按钮 */
submitForm: function() { submitForm() {
this.$refs["form"].validate(valid => { this.$refs["form"].validate(valid => {
if (valid) { if (valid) {
if (this.form.roleId != undefined) { if (this.form.id != null) {
this.form.menuIds = this.getMenuAllCheckedKeys(); updateInfo(this.form).then(response => {
updateRole(this.form).then(response => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess("修改成功");
this.open = false; this.open = false;
this.getList(); this.getList();
}); });
} else { } else {
this.form.menuIds = this.getMenuAllCheckedKeys(); addInfo(this.form).then(response => {
addRole(this.form).then(response => {
this.$modal.msgSuccess("新增成功"); this.$modal.msgSuccess("新增成功");
this.open = false; this.open = false;
this.getList(); this.getList();
@ -574,32 +324,26 @@ export default {
} }
}); });
}, },
/** 提交按钮(数据权限) */
submitDataScope: function() {
if (this.form.roleId != undefined) {
this.form.deptIds = this.getDeptAllCheckedKeys();
dataScope(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.openDataScope = false;
this.getList();
});
}
},
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
const roleIds = row.roleId || this.ids; const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除角色编号为"' + roleIds + '"的数据项?').then(function() { this.$modal.confirm('是否确认删除店铺单日历史信息编号为"' + ids + '"的数据项?').then(function() {
return delRole(roleIds); return delInfo(ids);
}).then(() => { }).then(() => {
this.getList(); this.getList();
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess("删除成功");
}).catch(() => {}); }).catch(() => {});
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { // handleExport() {
this.download('system/role/export', { // this.download('system/info/export', {
...this.queryParams // ...this.queryParams
}, `role_${new Date().getTime()}.xlsx`) // }, `info_${new Date().getTime()}.xlsx`)
// }
handleExport(data) {
this.download('excel/info/export', {
...this.queryParams1
}, data.storeName+`_${new Date().getTime()}.xlsx`)
} }
} }
}; };

View File

@ -200,7 +200,7 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width =120> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width =120>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
icon="el-icon-delete" icon="el-icon-delete"
@ -212,12 +212,6 @@
icon="el-icon-mouse" icon="el-icon-mouse"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
>设置</el-button> >设置</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-mouse"
@click="export1(scope.row)"
>导出</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -379,7 +373,7 @@
<el-button @click="cancel1"> </el-button> <el-button @click="cancel1"> </el-button>
</div> </div>
</el-dialog> </el-dialog>
<el-dialog :visible.sync="open2" width="800px" append-to-body> <el-dialog :visible.sync="open2" width="800px" append-to-body>
<el-form ref="form2" :model="form2" label-width="150px"> <el-form ref="form2" :model="form2" label-width="150px">
<el-input v-model="form2.id" type="hidden" ></el-input> <el-input v-model="form2.id" type="hidden" ></el-input>