项目初始化

This commit is contained in:
2026-03-24 15:01:54 +08:00
parent dd3c29e5e5
commit fecfab97cc
13 changed files with 2616 additions and 2381 deletions

View File

@@ -0,0 +1,18 @@
package com.jeesite.modules.apps.Module;
import lombok.Data;
import java.io.Serializable;
@Data
public class ChartConfig implements Serializable {
private Integer sort;
private String chartId;
private String oldChartId;
private String chartName;
private String chartCode;
private Integer oldSort;
private String color;
}

View File

@@ -0,0 +1,15 @@
package com.jeesite.modules.apps.Module;
import lombok.Data;
import java.io.Serializable;
@Data
public class ErpFlowParams implements Serializable {
private Integer pageNum;
private Integer pageSize;
private String accountId;
private String flowName;
private String flowType;
private String categoryId;
}

View File

@@ -0,0 +1,23 @@
package com.jeesite.modules.apps.Module;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class PageResult<T> implements Serializable {
private List<T> list; // 当前页数据
private Integer currentPage; // 当前页码
private Integer pageSize; // 每页条数
private Integer total; // 总记录数
public PageResult(List<T> list,Integer currentPage,Integer pageSize,Integer total){
this.list = list;
this.currentPage = currentPage;
this.pageSize = pageSize;
this.total = total;
}
}

View File

@@ -2,6 +2,7 @@ package com.jeesite.modules.biz.web;
import java.util.List; import java.util.List;
import com.jeesite.modules.apps.Module.ChartConfig;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
@@ -154,4 +155,16 @@ public class MyChartInfoController extends BaseController {
public List<MyChartInfo> listAll(MyChartInfo myChartInfo) { public List<MyChartInfo> listAll(MyChartInfo myChartInfo) {
return myChartInfoService.findList(myChartInfo); return myChartInfoService.findList(myChartInfo);
} }
/**
*
*/
@RequestMapping(value = "setting")
@ResponseBody
public String setting(List<ChartConfig> configs) {
for (ChartConfig config : configs) {
System.out.println(config);
}
return renderResult(Global.TRUE, text("配置图表成功!"));
}
} }

View File

@@ -1,6 +1,10 @@
package com.jeesite.modules.erp.web; package com.jeesite.modules.erp.web;
import java.util.List; import java.util.List;
import com.jeesite.modules.apps.Module.ErpFlowParams;
import com.jeesite.modules.apps.Module.PageResult;
import com.jeesite.modules.utils.PageUtil;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
@@ -26,6 +30,7 @@ import com.jeesite.modules.erp.service.ErpTransactionFlowService;
/** /**
* 收支流水 Controller * 收支流水 Controller
*
* @author gaoxq * @author gaoxq
* @version 2026-03-22 * @version 2026-03-22
*/ */
@@ -33,114 +38,131 @@ import com.jeesite.modules.erp.service.ErpTransactionFlowService;
@RequestMapping(value = "${adminPath}/erp/transactionFlow") @RequestMapping(value = "${adminPath}/erp/transactionFlow")
public class ErpTransactionFlowController extends BaseController { public class ErpTransactionFlowController extends BaseController {
private final ErpTransactionFlowService erpTransactionFlowService; private final ErpTransactionFlowService erpTransactionFlowService;
public ErpTransactionFlowController(ErpTransactionFlowService erpTransactionFlowService) { public ErpTransactionFlowController(ErpTransactionFlowService erpTransactionFlowService) {
this.erpTransactionFlowService = erpTransactionFlowService; this.erpTransactionFlowService = erpTransactionFlowService;
} }
/** /**
* 获取数据 * 获取数据
*/ */
@ModelAttribute @ModelAttribute
public ErpTransactionFlow get(String flowId, boolean isNewRecord) { public ErpTransactionFlow get(String flowId, boolean isNewRecord) {
return erpTransactionFlowService.get(flowId, isNewRecord); return erpTransactionFlowService.get(flowId, isNewRecord);
} }
/** /**
* 查询列表 * 查询列表
*/ */
@RequiresPermissions("erp:transactionFlow:view") @RequiresPermissions("erp:transactionFlow:view")
@RequestMapping(value = {"list", ""}) @RequestMapping(value = {"list", ""})
public String list(ErpTransactionFlow erpTransactionFlow, Model model) { public String list(ErpTransactionFlow erpTransactionFlow, Model model) {
model.addAttribute("erpTransactionFlow", erpTransactionFlow); model.addAttribute("erpTransactionFlow", erpTransactionFlow);
return "modules/erp/erpTransactionFlowList"; return "modules/erp/erpTransactionFlowList";
} }
/** /**
* 查询列表数据 * 查询列表数据
*/ */
@RequiresPermissions("erp:transactionFlow:view") @RequiresPermissions("erp:transactionFlow:view")
@RequestMapping(value = "listData") @RequestMapping(value = "listData")
@ResponseBody @ResponseBody
public Page<ErpTransactionFlow> listData(ErpTransactionFlow erpTransactionFlow, HttpServletRequest request, HttpServletResponse response) { public Page<ErpTransactionFlow> listData(ErpTransactionFlow erpTransactionFlow, HttpServletRequest request, HttpServletResponse response) {
erpTransactionFlow.setPage(new Page<>(request, response)); erpTransactionFlow.setPage(new Page<>(request, response));
Page<ErpTransactionFlow> page = erpTransactionFlowService.findPage(erpTransactionFlow); Page<ErpTransactionFlow> page = erpTransactionFlowService.findPage(erpTransactionFlow);
return page; return page;
} }
/** /**
* 查看编辑表单 * 查看编辑表单
*/ */
@RequiresPermissions("erp:transactionFlow:view") @RequiresPermissions("erp:transactionFlow:view")
@RequestMapping(value = "form") @RequestMapping(value = "form")
public String form(ErpTransactionFlow erpTransactionFlow, Model model) { public String form(ErpTransactionFlow erpTransactionFlow, Model model) {
model.addAttribute("erpTransactionFlow", erpTransactionFlow); model.addAttribute("erpTransactionFlow", erpTransactionFlow);
return "modules/erp/erpTransactionFlowForm"; return "modules/erp/erpTransactionFlowForm";
} }
/** /**
* 保存数据 * 保存数据
*/ */
@RequiresPermissions("erp:transactionFlow:edit") @RequiresPermissions("erp:transactionFlow:edit")
@PostMapping(value = "save") @PostMapping(value = "save")
@ResponseBody @ResponseBody
public String save(@Validated ErpTransactionFlow erpTransactionFlow) { public String save(@Validated ErpTransactionFlow erpTransactionFlow) {
erpTransactionFlowService.save(erpTransactionFlow); erpTransactionFlowService.save(erpTransactionFlow);
return renderResult(Global.TRUE, text("保存流水成功!")); return renderResult(Global.TRUE, text("保存流水成功!"));
} }
/** /**
* 导出数据 * 导出数据
*/ */
@RequiresPermissions("erp:transactionFlow:view") @RequiresPermissions("erp:transactionFlow:view")
@RequestMapping(value = "exportData") @RequestMapping(value = "exportData")
public void exportData(ErpTransactionFlow erpTransactionFlow, HttpServletResponse response) { public void exportData(ErpTransactionFlow erpTransactionFlow, HttpServletResponse response) {
List<ErpTransactionFlow> list = erpTransactionFlowService.findList(erpTransactionFlow); List<ErpTransactionFlow> list = erpTransactionFlowService.findList(erpTransactionFlow);
String fileName = "流水" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx"; String fileName = "流水" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
try(ExcelExport ee = new ExcelExport("流水", ErpTransactionFlow.class)){ try (ExcelExport ee = new ExcelExport("流水", ErpTransactionFlow.class)) {
ee.setDataList(list).write(response, fileName); ee.setDataList(list).write(response, fileName);
} }
} }
/** /**
* 下载模板 * 下载模板
*/ */
@RequiresPermissions("erp:transactionFlow:view") @RequiresPermissions("erp:transactionFlow:view")
@RequestMapping(value = "importTemplate") @RequestMapping(value = "importTemplate")
public void importTemplate(HttpServletResponse response) { public void importTemplate(HttpServletResponse response) {
ErpTransactionFlow erpTransactionFlow = new ErpTransactionFlow(); ErpTransactionFlow erpTransactionFlow = new ErpTransactionFlow();
List<ErpTransactionFlow> list = ListUtils.newArrayList(erpTransactionFlow); List<ErpTransactionFlow> list = ListUtils.newArrayList(erpTransactionFlow);
String fileName = "流水模板.xlsx"; String fileName = "流水模板.xlsx";
try(ExcelExport ee = new ExcelExport("流水", ErpTransactionFlow.class, Type.IMPORT)){ try (ExcelExport ee = new ExcelExport("流水", ErpTransactionFlow.class, Type.IMPORT)) {
ee.setDataList(list).write(response, fileName); ee.setDataList(list).write(response, fileName);
} }
} }
/** /**
* 导入数据 * 导入数据
*/ */
@ResponseBody @ResponseBody
@RequiresPermissions("erp:transactionFlow:edit") @RequiresPermissions("erp:transactionFlow:edit")
@PostMapping(value = "importData") @PostMapping(value = "importData")
public String importData(MultipartFile file) { public String importData(MultipartFile file) {
try { try {
String message = erpTransactionFlowService.importData(file); String message = erpTransactionFlowService.importData(file);
return renderResult(Global.TRUE, "posfull:"+message); return renderResult(Global.TRUE, "posfull:" + message);
} catch (Exception ex) { } catch (Exception ex) {
return renderResult(Global.FALSE, "posfull:"+ex.getMessage()); return renderResult(Global.FALSE, "posfull:" + ex.getMessage());
} }
} }
/** /**
* 删除数据 * 删除数据
*/ */
@RequiresPermissions("erp:transactionFlow:edit") @RequiresPermissions("erp:transactionFlow:edit")
@RequestMapping(value = "delete") @RequestMapping(value = "delete")
@ResponseBody @ResponseBody
public String delete(ErpTransactionFlow erpTransactionFlow) { public String delete(ErpTransactionFlow erpTransactionFlow) {
erpTransactionFlowService.delete(erpTransactionFlow); erpTransactionFlowService.delete(erpTransactionFlow);
return renderResult(Global.TRUE, text("删除流水成功!")); return renderResult(Global.TRUE, text("删除流水成功!"));
} }
@RequestMapping(value = "FlowList")
@ResponseBody
public PageResult<ErpTransactionFlow> getFlowList(ErpFlowParams erpFlowParams) {
ErpTransactionFlow erpTransactionFlow = new ErpTransactionFlow();
erpTransactionFlow.setFlowType(erpFlowParams.getFlowType());
erpTransactionFlow.setFlowName(erpFlowParams.getFlowName());
erpTransactionFlow.setAccountId(erpFlowParams.getAccountId());
erpTransactionFlow.setCategoryId(erpFlowParams.getCategoryId());
List<ErpTransactionFlow> list = erpTransactionFlowService.findList(erpTransactionFlow);
PageUtil<ErpTransactionFlow> util = new PageUtil<>(erpFlowParams.getPageNum(), erpFlowParams.getPageSize(), list);
return new PageResult<>(
util.OkData(),
util.getCurPage(),
util.getPageSize(),
util.getTotalCount()
);
}
} }

View File

@@ -0,0 +1,44 @@
package com.jeesite.modules.utils;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@Data
public class PageUtil<T> implements Serializable {
private List<T> data;
private Integer curPage;// 当前页
private int totalCount;// 总条数
private int pageSize; // 每页显示的条数
//构造数据
public PageUtil(int curPage, int pageSize, List<T> data) {
this.data = data;
this.curPage = curPage;
this.pageSize = pageSize;
this.totalCount = data.size();
}
public int beginIndex(int pageSize, int curPage) {
return pageSize * (curPage - 1);
}
public int endIndex(int pageSize, int curPage) {
return (pageSize * curPage) - 1;
}
public List<T> OkData() {
List<T> list = new ArrayList<T>();
for (int i = beginIndex(pageSize, curPage); i <= endIndex(pageSize, curPage); i++) {
if (i < totalCount) {
list.add(data.get(i));
}
}
return list;
}
}

View File

@@ -43,6 +43,9 @@ export const myChartInfoForm = (params?: MyChartInfo | any) =>
export const myChartInfoSave = (params?: any, data?: MyChartInfo | any) => export const myChartInfoSave = (params?: any, data?: MyChartInfo | any) =>
defHttp.postJson<MyChartInfo>({ url: adminPath + '/biz/myChartInfo/save', params, data }); defHttp.postJson<MyChartInfo>({ url: adminPath + '/biz/myChartInfo/save', params, data });
export const myChartSetting = (params?: any, data?: MyChartInfo | any) =>
defHttp.postJson<MyChartInfo>({ url: adminPath + '/biz/myChartInfo/setting', params, data });
export const myChartInfoImportData = ( export const myChartInfoImportData = (
params: UploadFileParams, params: UploadFileParams,
onUploadProgress: (progressEvent: AxiosProgressEvent) => void, onUploadProgress: (progressEvent: AxiosProgressEvent) => void,

View File

@@ -9,43 +9,38 @@
<el-form :model="searchForm" class="search-form"> <el-form :model="searchForm" class="search-form">
<div class="form-items-wrapper"> <div class="form-items-wrapper">
<el-form-item label="交易名称:" class="form-item"> <el-form-item label="交易名称:" class="form-item">
<el-input <el-input v-model="searchForm.flowName" placeholder="请输入交易名称" clearable />
v-model="searchForm.flowName" </el-form-item>
placeholder="请输入交易名称" <el-form-item label="交易类型:" class="form-item">
clearable <el-select
/> v-model="searchForm.flowType"
placeholder="请选择交易类型"
clearable
class="custom-select"
popper-class="theme-select-popper"
:popper-append-to-body="true"
@change="getTranTypes"
>
<el-option label="收入" value="2" />
<el-option label="支出" value="1" />
<el-option label="转账" value="0" />
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="交易类型:" class="form-item">
<el-select
v-model="searchForm.transactionType"
placeholder="请选择交易类型"
clearable
class="custom-select"
teleport="body"
popper-class="theme-select-popper"
:popper-append-to-body="true"
@change="getTranTypes"
>
<el-option label="收入" value="2" />
<el-option label="支出" value="1" />
</el-select>
</el-form-item>
<el-form-item label="交易分类:" class="form-item"> <el-form-item label="交易分类:" class="form-item">
<el-select <el-select
v-model="searchForm.categoryId" v-model="searchForm.categoryId"
placeholder="请选择交易分类" placeholder="请选择交易分类"
clearable clearable
class="custom-select" class="custom-select"
teleport="body"
popper-class="theme-select-popper" popper-class="theme-select-popper"
:popper-append-to-body="true" :popper-append-to-body="true"
> >
<el-option <el-option
v-for="item in tranTypes" v-for="item in tranTypes"
:key="item.categoryId" :key="item.categoryId"
:label="item.categoryName" :label="item.categoryName"
:value="item.categoryId" :value="item.categoryId"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</div> </div>
@@ -70,36 +65,40 @@
background: 'transparent', background: 'transparent',
color: '#a0cfff', color: '#a0cfff',
border: 'none', border: 'none',
borderBottom: '1px solid rgba(64, 158, 255, 0.3)' borderBottom: '1px solid rgba(64, 158, 255, 0.3)',
}" }"
:row-style="{ :row-style="{
background: 'transparent', background: 'transparent',
color: '#a0cfff', color: '#a0cfff',
border: 'none' border: 'none',
}" }"
:cell-style="{ :cell-style="{
border: 'none', border: 'none',
borderBottom: '1px solid rgba(64, 158, 255, 0.2)' borderBottom: '1px solid rgba(64, 158, 255, 0.2)',
}" }"
> >
<el-table-column prop="flowId" label="交易编号" /> <el-table-column prop="yearDate" label="年份" width="60" />
<el-table-column prop="monthDate" label="月份" width="60" />
<el-table-column prop="flowName" label="交易名称" /> <el-table-column prop="flowName" label="交易名称" />
<el-table-column prop="parentName" label="父级分类" />
<el-table-column prop="categoryName" label="交易分类" /> <el-table-column prop="categoryName" label="交易分类" />
<el-table-column prop="tranType" label="交易类型" /> <el-table-column prop="flowType" label="交易类型" width="120">
<el-table-column prop="amount" label="交易金额">
<template #default="scope"> <template #default="scope">
¥{{ scope.row.amount }} {{ getFlowTypeLabel(scope.row.flowType) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="remark" label="交易备注" /> <el-table-column prop="amount" label="交易金额">
<el-table-column prop="transactionTime" label="交易时间" /> <template #default="scope"> ¥ {{ scope.row.amount }} </template>
</el-table-column>
<el-table-column prop="remark" label="交易备注" />
<el-table-column prop="tradeTime" label="交易时间" width="180" />
</el-table> </el-table>
</div> </div>
<div class="pagination-wrapper"> <div class="pagination-wrapper">
<el-pagination <el-pagination
v-model:current-page="currentPage" v-model:current-page="currentPage"
v-model:page-size="pageSize" v-model:page-size="pageSize"
:page-sizes="[20,50,99]" :page-sizes="[20, 50, 99]"
:total="total" :total="total"
layout="total, sizes, prev, pager, next, jumper" layout="total, sizes, prev, pager, next, jumper"
@size-change="handleSizeChange" @size-change="handleSizeChange"
@@ -114,437 +113,460 @@
</div> </div>
</template> </template>
<script setup> <script lang="ts" setup>
import { defineProps, defineEmits, ref, onMounted, reactive } from 'vue' import { defineProps, defineEmits, ref, onMounted, reactive } from 'vue';
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus';
// import { getErpCategoryList, getErpTransactionFlowList } from '@/api/bizApi' import { ErpCategory, erpCategoryListAll } from '@jeesite/erp/api/erp/category';
import { ErpTransactionFlow, erpTransactionPageFlowList } from '@jeesite/erp/api/erp/transactionFlow';
const props = defineProps({ const props = defineProps({
accountData: { accountData: {
type: Object, type: Object,
default: () => ({}) default: () => ({}),
} },
}) });
const emit = defineEmits(['close']) const emit = defineEmits(['close']);
const handleClose = () => emit('close') const handleClose = () => emit('close');
const tranTypes = ref(); const flowTypeDict: Record<string, string> = {
const loading = ref(false); '0': '转账',
'1': '支出',
'2': '收入',
};
const searchForm = reactive({ const getFlowTypeLabel = (flowType?: string | number) => {
flowName: '', return flowTypeDict[String(flowType ?? '')] || '-';
transactionType: '', };
categoryId: '',
})
const tableData = ref([]); const tranTypes = ref();
const currentPage = ref(1); const loading = ref(false);
const pageSize = ref(20);
const total = ref(0);
const handleSearch = () => { const searchForm = reactive({
getList();
}
const handleReset = () => {
Object.assign(searchForm, {
flowName: '', flowName: '',
transactionType: '', flowType: '',
categoryId: '', categoryId: '',
}) });
currentPage.value = 1;
getList();
}
const handleSizeChange = (val) => { const tableData = ref<ErpTransactionFlow[]>();
pageSize.value = val; const currentPage = ref(1);
getList(); const pageSize = ref(20);
} const total = ref(0);
const handleCurrentChange = (val) => {
currentPage.value = val;
getList();
}
async function getTranTypes(){ const handleSearch = () => {
try { getList();
const params = { };
categoryType: searchForm.transactionType,
}
const res = await getErpCategoryList(params);
tranTypes.value = res || [];
} catch (error) {
console.error('获取数据失败:', error);
tranTypes.value = [];
}
}
async function getList() { const handleReset = () => {
loading.value = true; Object.assign(searchForm, {
try { flowName: '',
const reqParmas = { flowType: '',
... searchForm, categoryId: '',
pageNum: currentPage.value, });
pageSize: pageSize.value, currentPage.value = 1;
accountId: props.accountData.rawData?.accountId || '', getList();
} };
const res = await getErpTransactionFlowList(reqParmas);
total.value = res.total; const handleSizeChange = (val: number) => {
tableData.value = res.list || []; pageSize.value = val;
} catch (error) { getList();
console.error('获取数据失败:', error); };
tableData.value = []; const handleCurrentChange = (val: number) => {
} finally { currentPage.value = val;
loading.value = false; getList();
};
async function getTranTypes() {
try {
const params = {
categoryType: searchForm.flowType,
};
const res = await erpCategoryListAll(params);
tranTypes.value = res || [];
} catch (error) {
console.error('获取数据失败:', error);
tranTypes.value = [];
}
} }
}
onMounted(async () => { async function getList() {
await getList(); loading.value = true;
await getTranTypes(); try {
}) const reqParmas = {
...searchForm,
pageNum: currentPage.value,
pageSize: pageSize.value,
accountId: props.accountData.rawData?.accountId || '',
};
const res = await erpTransactionPageFlowList(reqParmas);
total.value = res.total;
tableData.value = res.list || [];
} catch (error) {
console.error('获取数据失败:', error);
tableData.value = [];
} finally {
loading.value = false;
}
}
onMounted(async () => {
await getList();
await getTranTypes();
});
</script> </script>
<style scoped> <style scoped>
.detail-container { .detail-container {
width: 100%; width: 100%;
height: 100%; height: 100%;
padding: 12px; padding: 12px;
color: #e0e6ff; color: #e0e6ff;
background: url('@jeesite/assets/chart/box/18.png') no-repeat center center; background: url('@jeesite/assets/chart/box/18.png') no-repeat center center;
background-size: 100% 100%; background-size: 100% 100%;
background-color: transparent !important; background-color: rgba(18, 52, 92, 0.28) !important;
border: none !important; border: none !important;
box-sizing: border-box; box-sizing: border-box;
position: relative; position: relative;
z-index: 10001; z-index: 10001;
} backdrop-filter: blur(6px);
.detail-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
}
.detail-header h3 {
margin: 0;
color: #409EFF;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
font-size: 18px;
}
.close-btn {
background: transparent;
border: none;
font-size: 24px;
color: #e0e6ff;
cursor: pointer;
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
transition: color 0.2s;
z-index: 10002;
}
.close-btn:hover {
color: #409EFF;
}
.split-line {
height: 1px;
background-color: #409EFF;
opacity: 0.6;
margin-bottom: 16px;
}
.detail-body {
width: 100%;
height: calc(100% - 80px);
border: 1px solid #409EFF;
border-radius: 6px;
padding: 16px;
background-color: rgba(10, 30, 60, 0.2);
box-sizing: border-box;
display: flex;
flex-direction: column;
gap: 16px;
overflow: visible;
position: relative;
z-index: 10001;
}
.search-form {
display: flex;
align-items: center;
width: 100%;
padding-bottom: 16px;
border-bottom: 1px solid rgba(64, 158, 255, 0.3);
flex-wrap: wrap;
position: relative;
z-index: 10001;
}
.form-items-wrapper {
display: flex;
flex: 1;
gap: 20px;
min-width: 0;
flex-wrap: wrap;
}
.form-item {
flex: 1;
margin-bottom: 0 !important;
min-width: 180px;
}
.date-range-item {
min-width: 280px !important;
}
.form-btn-group {
margin-left: 20px;
margin-bottom: 0 !important;
flex-shrink: 0;
display: flex;
gap: 10px;
}
.table-container {
flex: 1;
width: 100%;
overflow: auto;
position: relative;
z-index: 10001;
}
.custom-loading {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.1) !important;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
z-index: 999;
}
.loading-icon {
font-size: 24px;
color: #409EFF;
animation: loading-rotate 2s linear infinite;
margin-bottom: 8px;
}
.loading-text {
font-size: 14px;
color: #b4c7e7;
}
@keyframes loading-rotate {
0% {
transform: rotate(0deg);
} }
100% {
transform: rotate(360deg); .detail-container::before {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(180deg, rgba(48, 112, 196, 0.12), rgba(14, 42, 78, 0.24));
pointer-events: none;
z-index: 0;
} }
}
.data-table { .detail-header {
width: 100%; display: flex;
height: 100%; justify-content: space-between;
position: relative; align-items: center;
z-index: 1; margin-bottom: 10px;
} position: relative;
z-index: 1;
}
.detail-header h3 {
margin: 0;
color: #409eff;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
font-size: 18px;
}
.close-btn {
background: transparent;
border: none;
font-size: 24px;
color: #e0e6ff;
cursor: pointer;
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
transition: color 0.2s;
z-index: 10002;
}
.close-btn:hover {
color: #409eff;
}
.pagination-wrapper { .split-line {
display: flex; height: 1px;
justify-content: flex-end; background-color: #409eff;
align-items: center; opacity: 0.6;
padding-top: 10px; margin-bottom: 16px;
border-top: 1px solid rgba(64, 158, 255, 0.2); }
background-color: rgba(10, 30, 60, 0.2);
flex-shrink: 0;
position: relative;
z-index: 10001;
}
:deep(.el-form-item__label) { .detail-body {
color: #e0e6ff !important; width: 100%;
font-size: 14px; height: calc(100% - 80px);
} border: 1px solid #409eff;
:deep(.el-input__wrapper), border-radius: 6px;
:deep(.el-select__wrapper), padding: 16px;
:deep(.el-date-editor__wrapper) { background-color: rgba(36, 88, 156, 0.16);
background-color: rgba(0, 0, 0, 0.2) !important; box-sizing: border-box;
border: 1px solid #409EFF !important; display: flex;
box-shadow: none !important; flex-direction: column;
width: 100% !important; gap: 16px;
position: relative; overflow: visible;
z-index: 10001; position: relative;
} z-index: 1;
:deep(.el-input__inner), }
:deep(.el-select__inner),
:deep(.el-date-editor input) {
color: #e0e6ff !important;
background-color: transparent !important;
}
:deep(.el-input__placeholder),
:deep(.el-date-editor__placeholder) {
color: rgba(224, 230, 255, 0.6) !important;
}
:deep(.custom-pagination) { .search-form {
--el-pagination-text-color: #e0e6ff; display: flex;
--el-pagination-button-color: #e0e6ff; align-items: center;
--el-pagination-button-hover-color: #409EFF; width: 100%;
--el-pagination-button-active-color: #409EFF; padding-bottom: 16px;
--el-pagination-border-color: #409EFF; border-bottom: 1px solid rgba(64, 158, 255, 0.3);
--el-pagination-bg-color: rgba(10, 30, 60, 0.2) !important; flex-wrap: wrap;
z-index: 10001; position: relative;
} z-index: 10001;
:deep(.el-pagination button) { }
background-color: rgba(0, 0, 0, 0.2) !important; .form-items-wrapper {
border-color: #409EFF !important; display: flex;
color: #e0e6ff !important; flex: 1;
} gap: 20px;
:deep(.el-pagination .el-pager li) { min-width: 0;
color: #e0e6ff !important; flex-wrap: wrap;
} }
:deep(.el-pagination .el-pager li.active) { .form-item {
color: #409EFF !important; flex: 1;
font-weight: bold; margin-bottom: 0 !important;
} min-width: 180px;
}
.date-range-item {
min-width: 280px !important;
}
.form-btn-group {
margin-left: 20px;
margin-bottom: 0 !important;
flex-shrink: 0;
display: flex;
gap: 10px;
}
:deep(.el-table) { .table-container {
--el-table-text-color: #a0cfff; flex: 1;
--el-table-header-text-color: #a0cfff; width: 100%;
--el-table-row-hover-bg-color: rgba(64, 158, 255, 0.2); overflow: auto;
--el-table-border-color: transparent !important; position: relative;
--el-table-stripe-row-bg-color: rgba(10, 30, 60, 0.3); z-index: 10001;
background-color: transparent !important; }
border: none !important;
z-index: 10001;
}
:deep(.el-table th) {
border: none !important;
border-bottom: 1px solid rgba(64, 158, 255, 0.3) !important;
background-color: transparent !important;
color: #a0cfff !important;
}
:deep(.el-table td) {
border: none !important;
border-bottom: 1px solid rgba(64, 158, 255, 0.2) !important;
background-color: transparent !important;
color: #a0cfff !important;
}
:deep(.el-table--striped .el-table__row--striped td) {
background-color: rgba(10, 30, 60, 0.3) !important;
border-bottom-color: rgba(64, 158, 255, 0.2) !important;
}
:deep(.el-table__row:hover > td) {
background-color: rgba(64, 158, 255, 0.2) !important;
border-bottom-color: rgba(64, 158, 255, 0.3) !important;
}
:deep(.el-table tr:last-child td) {
border-bottom: none !important;
}
:deep(.el-table-empty-text) {
color: #a0cfff !important;
background-color: transparent !important;
}
:deep(.el-button) { .custom-loading {
--el-button-text-color: #e0e6ff !important; position: absolute;
--el-button-border-color: #409EFF !important; top: 0;
--el-button-hover-text-color: #fff !important; left: 0;
--el-button-hover-border-color: #409EFF !important; right: 0;
--el-button-hover-bg-color: rgba(64, 158, 255, 0.2) !important; bottom: 0;
height: 32px; background: rgba(0, 0, 0, 0.1) !important;
padding: 0 16px; display: flex;
z-index: 10001; flex-direction: column;
} justify-content: center;
:deep(.el-button--primary) { align-items: center;
--el-button-text-color: #fff !important; z-index: 999;
--el-button-bg-color: rgba(64, 158, 255, 0.8) !important; }
--el-button-border-color: #409EFF !important;
--el-button-hover-bg-color: #409EFF !important;
}
:deep(.reset-btn) {
background-color: rgba(0, 0, 0, 0.2) !important;
border-color: #409EFF !important;
color: #e0e6ff !important;
}
:deep(.reset-btn:hover) {
background-color: rgba(64, 158, 255, 0.2) !important;
color: #fff !important;
}
:deep(.el-loading-mask) { .loading-icon {
display: none !important; font-size: 24px;
} color: #409eff;
animation: loading-rotate 2s linear infinite;
margin-bottom: 8px;
}
.detail-body::-webkit-scrollbar, .loading-text {
:deep(.el-table__body-wrapper)::-webkit-scrollbar, font-size: 14px;
.table-container::-webkit-scrollbar { color: #b4c7e7;
width: 6px; }
height: 6px;
} @keyframes loading-rotate {
.detail-body::-webkit-scrollbar-track, 0% {
.table-container::-webkit-scrollbar-track { transform: rotate(0deg);
background: rgba(10, 30, 60, 0.1); }
border-radius: 3px; 100% {
} transform: rotate(360deg);
.detail-body::-webkit-scrollbar-thumb, }
.table-container::-webkit-scrollbar-thumb { }
background: rgba(64, 158, 255, 0.5);
border-radius: 3px; .data-table {
} width: 100%;
height: 100%;
position: relative;
z-index: 1;
}
.pagination-wrapper {
display: flex;
justify-content: flex-end;
align-items: center;
padding-top: 10px;
border-top: 1px solid rgba(64, 158, 255, 0.2);
background-color: rgba(10, 30, 60, 0.2);
flex-shrink: 0;
position: relative;
z-index: 10001;
}
:deep(.el-form-item__label) {
color: #e0e6ff !important;
font-size: 14px;
}
:deep(.el-input__wrapper),
:deep(.el-select__wrapper),
:deep(.el-date-editor__wrapper) {
background-color: rgba(0, 0, 0, 0.2) !important;
border: 1px solid #409eff !important;
box-shadow: none !important;
width: 100% !important;
position: relative;
z-index: 10001;
}
:deep(.el-input__inner),
:deep(.el-select__inner),
:deep(.el-date-editor input) {
color: #e0e6ff !important;
background-color: transparent !important;
}
:deep(.el-input__placeholder),
:deep(.el-date-editor__placeholder) {
color: rgba(224, 230, 255, 0.6) !important;
}
:deep(.custom-pagination) {
--el-pagination-text-color: #e0e6ff;
--el-pagination-button-color: #e0e6ff;
--el-pagination-button-hover-color: #409eff;
--el-pagination-button-active-color: #409eff;
--el-pagination-border-color: #409eff;
--el-pagination-bg-color: rgba(10, 30, 60, 0.2) !important;
z-index: 10001;
}
:deep(.el-pagination button) {
background-color: rgba(0, 0, 0, 0.2) !important;
border-color: #409eff !important;
color: #e0e6ff !important;
}
:deep(.el-pagination .el-pager li) {
color: #e0e6ff !important;
}
:deep(.el-pagination .el-pager li.active) {
color: #409eff !important;
font-weight: bold;
}
:deep(.el-table) {
--el-table-text-color: #a0cfff;
--el-table-header-text-color: #a0cfff;
--el-table-row-hover-bg-color: rgba(64, 158, 255, 0.2);
--el-table-border-color: transparent !important;
--el-table-stripe-row-bg-color: rgba(10, 30, 60, 0.3);
background-color: transparent !important;
border: none !important;
z-index: 10001;
}
:deep(.el-table th) {
border: none !important;
border-bottom: 1px solid rgba(64, 158, 255, 0.3) !important;
background-color: transparent !important;
color: #a0cfff !important;
}
:deep(.el-table td) {
border: none !important;
border-bottom: 1px solid rgba(64, 158, 255, 0.2) !important;
background-color: transparent !important;
color: #a0cfff !important;
}
:deep(.el-table--striped .el-table__row--striped td) {
background-color: rgba(10, 30, 60, 0.3) !important;
border-bottom-color: rgba(64, 158, 255, 0.2) !important;
}
:deep(.el-table__row:hover > td) {
background-color: rgba(64, 158, 255, 0.2) !important;
border-bottom-color: rgba(64, 158, 255, 0.3) !important;
}
:deep(.el-table tr:last-child td) {
border-bottom: none !important;
}
:deep(.el-table-empty-text) {
color: #a0cfff !important;
background-color: transparent !important;
}
:deep(.el-button) {
--el-button-text-color: #e0e6ff !important;
--el-button-border-color: #409eff !important;
--el-button-hover-text-color: #fff !important;
--el-button-hover-border-color: #409eff !important;
--el-button-hover-bg-color: rgba(64, 158, 255, 0.2) !important;
height: 32px;
padding: 0 16px;
z-index: 10001;
}
:deep(.el-button--primary) {
--el-button-text-color: #fff !important;
--el-button-bg-color: rgba(64, 158, 255, 0.8) !important;
--el-button-border-color: #409eff !important;
--el-button-hover-bg-color: #409eff !important;
}
:deep(.reset-btn) {
background-color: rgba(0, 0, 0, 0.2) !important;
border-color: #409eff !important;
color: #e0e6ff !important;
}
:deep(.reset-btn:hover) {
background-color: rgba(64, 158, 255, 0.2) !important;
color: #fff !important;
}
:deep(.el-loading-mask) {
display: none !important;
}
.detail-body::-webkit-scrollbar,
:deep(.el-table__body-wrapper)::-webkit-scrollbar,
.table-container::-webkit-scrollbar {
width: 6px;
height: 6px;
}
.detail-body::-webkit-scrollbar-track,
.table-container::-webkit-scrollbar-track {
background: rgba(10, 30, 60, 0.1);
border-radius: 3px;
}
.detail-body::-webkit-scrollbar-thumb,
.table-container::-webkit-scrollbar-thumb {
background: rgba(64, 158, 255, 0.5);
border-radius: 3px;
}
</style> </style>
<style> <style>
.theme-select-popper { .theme-select-popper {
background-color: rgba(10, 30, 60, 0.95) !important; background-color: rgba(10, 30, 60, 0.95) !important;
border: 1px solid #409EFF !important; border: 1px solid #409eff !important;
color: #e0e6ff !important; color: #e0e6ff !important;
z-index: 99999 !important; z-index: 99999 !important;
pointer-events: auto !important; pointer-events: auto !important;
position: fixed !important; position: fixed !important;
} }
.theme-select-popper .el-select-dropdown__item { .theme-select-popper .el-select-dropdown__item {
color: #e0e6ff !important; color: #e0e6ff !important;
background-color: transparent !important; background-color: transparent !important;
padding: 6px 12px !important; padding: 6px 12px !important;
} }
.theme-select-popper .el-select-dropdown__item:hover { .theme-select-popper .el-select-dropdown__item:hover {
background-color: rgba(64, 158, 255, 0.2) !important; background-color: rgba(64, 158, 255, 0.2) !important;
color: #fff !important; color: #fff !important;
} }
.theme-select-popper .el-select-dropdown__item.selected { .theme-select-popper .el-select-dropdown__item.selected {
background-color: rgba(64, 158, 255, 0.5) !important; background-color: rgba(64, 158, 255, 0.5) !important;
color: #fff !important; color: #fff !important;
} }
.theme-pagination-popper { .theme-pagination-popper {
background-color: rgba(10, 30, 60, 0.95) !important; background-color: rgba(10, 30, 60, 0.95) !important;
border: 1px solid #409EFF !important; border: 1px solid #409eff !important;
color: #e0e6ff !important; color: #e0e6ff !important;
z-index: 99999 !important; z-index: 99999 !important;
pointer-events: auto !important; pointer-events: auto !important;
position: fixed !important; position: fixed !important;
} }
.theme-pagination-popper .el-pagination__sizes-option { .theme-pagination-popper .el-pagination__sizes-option {
color: #e0e6ff !important; color: #e0e6ff !important;
background-color: transparent !important; background-color: transparent !important;
} }
.theme-pagination-popper .el-pagination__sizes-option:hover { .theme-pagination-popper .el-pagination__sizes-option:hover {
background-color: rgba(64, 158, 255, 0.2) !important; background-color: rgba(64, 158, 255, 0.2) !important;
color: #fff !important; color: #fff !important;
} }
.modal-overlay { .modal-overlay {
pointer-events: auto !important; pointer-events: auto !important;
} }
.modal-overlay .modal-content { .modal-overlay .modal-content {
pointer-events: auto !important; pointer-events: auto !important;
} }
</style> </style>

View File

@@ -26,9 +26,28 @@ export interface ErpTransactionFlow extends BasicModel<ErpTransactionFlow> {
businessId: string; // 业务标识 businessId: string; // 业务标识
} }
export interface ErpFlowParams extends BasicModel<ErpFlowParams> {
pageNum: number; // 当前页
pageSize: number; // 每页条数
flowName: string; // 交易名称
flowType: string; // 交易类型
accountId: string; // 交易账户
categoryId: string; // 交易分类
}
export interface PageResult<T> extends BasicModel<PageResult<T>> {
list: T[]; // 对应后端 List<T> list
currentPage: number; // 当前页
pageSize: number; // 每页条数
total: number; // 总条数
}
export const erpTransactionFlowList = (params?: ErpTransactionFlow | any) => export const erpTransactionFlowList = (params?: ErpTransactionFlow | any) =>
defHttp.get<ErpTransactionFlow>({ url: adminPath + '/erp/transactionFlow/list', params }); defHttp.get<ErpTransactionFlow>({ url: adminPath + '/erp/transactionFlow/list', params });
export const erpTransactionPageFlowList = (params?: ErpTransactionFlow | any) =>
defHttp.get<PageResult<ErpTransactionFlow>>({ url: adminPath + '/erp/transactionFlow/FlowList', params });
export const erpTransactionFlowListData = (params?: ErpTransactionFlow | any) => export const erpTransactionFlowListData = (params?: ErpTransactionFlow | any) =>
defHttp.post<Page<ErpTransactionFlow>>({ url: adminPath + '/erp/transactionFlow/listData', params }); defHttp.post<Page<ErpTransactionFlow>>({ url: adminPath + '/erp/transactionFlow/listData', params });