diff --git a/fund-admin/src/App.vue b/fund-admin/src/App.vue
deleted file mode 100644
index 02e6d3e..0000000
--- a/fund-admin/src/App.vue
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
diff --git a/fund-admin/src/api/auth.js b/fund-admin/src/api/auth.js
deleted file mode 100644
index e465661..0000000
--- a/fund-admin/src/api/auth.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import request from '../utils/request'
-
-export const login = (data) => {
- return request({
- url: '/sys/api/v1/auth/login',
- method: 'post',
- data
- })
-}
-
-export const refreshToken = (refreshToken) => {
- return request({
- url: '/sys/api/v1/auth/refresh',
- method: 'post',
- data: { refreshToken }
- })
-}
-
-export const logout = () => {
- return request({
- url: '/sys/api/v1/auth/logout',
- method: 'post'
- })
-}
diff --git a/fund-admin/src/api/contract.js b/fund-admin/src/api/contract.js
deleted file mode 100644
index d95575a..0000000
--- a/fund-admin/src/api/contract.js
+++ /dev/null
@@ -1,65 +0,0 @@
-import request from '../utils/request'
-
-/**
- * 获取合同列表(分页)
- */
-export const getContractList = (params) => {
- return request({
- url: '/proj/api/v1/contract/list',
- method: 'get',
- params
- })
-}
-
-/**
- * 获取合同详情
- */
-export const getContractById = (id) => {
- return request({
- url: `/proj/api/v1/contract/${id}`,
- method: 'get'
- })
-}
-
-/**
- * 创建合同
- */
-export const createContract = (data) => {
- return request({
- url: '/proj/api/v1/contract',
- method: 'post',
- data
- })
-}
-
-/**
- * 更新合同
- */
-export const updateContract = (id, data) => {
- return request({
- url: `/proj/api/v1/contract/${id}`,
- method: 'put',
- data
- })
-}
-
-/**
- * 删除合同
- */
-export const deleteContract = (id) => {
- return request({
- url: `/proj/api/v1/contract/${id}`,
- method: 'delete'
- })
-}
-
-/**
- * 更新合同状态
- */
-export const updateContractStatus = (id, status) => {
- return request({
- url: `/proj/api/v1/contract/${id}/status`,
- method: 'put',
- params: { status }
- })
-}
diff --git a/fund-admin/src/api/customer.js b/fund-admin/src/api/customer.js
deleted file mode 100644
index 49d3124..0000000
--- a/fund-admin/src/api/customer.js
+++ /dev/null
@@ -1,70 +0,0 @@
-import request from '../utils/request'
-
-export const getCustomerList = (params) => {
- return request({
- url: '/cust/api/v1/customer/list',
- method: 'get',
- params
- })
-}
-
-export const getCustomerById = (id) => {
- return request({
- url: `/cust/api/v1/customer/${id}`,
- method: 'get'
- })
-}
-
-export const createCustomer = (data) => {
- return request({
- url: '/cust/api/v1/customer',
- method: 'post',
- data
- })
-}
-
-export const updateCustomer = (id, data) => {
- return request({
- url: `/cust/api/v1/customer/${id}`,
- method: 'put',
- data
- })
-}
-
-export const deleteCustomer = (id) => {
- return request({
- url: `/cust/api/v1/customer/${id}`,
- method: 'delete'
- })
-}
-
-export const getContactList = (params) => {
- return request({
- url: '/cust/api/v1/contact/list',
- method: 'get',
- params
- })
-}
-
-export const createContact = (data) => {
- return request({
- url: '/cust/api/v1/contact',
- method: 'post',
- data
- })
-}
-
-export const updateContact = (id, data) => {
- return request({
- url: `/cust/api/v1/contact/${id}`,
- method: 'put',
- data
- })
-}
-
-export const deleteContact = (id) => {
- return request({
- url: `/cust/api/v1/contact/${id}`,
- method: 'delete'
- })
-}
diff --git a/fund-admin/src/api/dashboard.js b/fund-admin/src/api/dashboard.js
deleted file mode 100644
index 05f0736..0000000
--- a/fund-admin/src/api/dashboard.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import request from '../utils/request'
-
-/**
- * 获取仪表盘统计数据
- */
-export const getDashboardData = (params) => {
- return request({
- url: '/proj/api/v1/dashboard',
- method: 'get',
- params
- })
-}
diff --git a/fund-admin/src/api/dept.js b/fund-admin/src/api/dept.js
deleted file mode 100644
index ce7ca4f..0000000
--- a/fund-admin/src/api/dept.js
+++ /dev/null
@@ -1,64 +0,0 @@
-import request from '../utils/request'
-
-/**
- * 获取部门树
- */
-export const getDeptTree = () => {
- return request({
- url: '/sys/api/v1/dept/tree',
- method: 'get'
- })
-}
-
-/**
- * 获取部门列表
- */
-export const getDeptList = (params) => {
- return request({
- url: '/sys/api/v1/dept/list',
- method: 'get',
- params
- })
-}
-
-/**
- * 获取部门详情
- */
-export const getDeptById = (id) => {
- return request({
- url: `/sys/api/v1/dept/${id}`,
- method: 'get'
- })
-}
-
-/**
- * 创建部门
- */
-export const createDept = (data) => {
- return request({
- url: '/sys/api/v1/dept',
- method: 'post',
- data
- })
-}
-
-/**
- * 更新部门
- */
-export const updateDept = (id, data) => {
- return request({
- url: `/sys/api/v1/dept/${id}`,
- method: 'put',
- data
- })
-}
-
-/**
- * 删除部门
- */
-export const deleteDept = (id) => {
- return request({
- url: `/sys/api/v1/dept/${id}`,
- method: 'delete'
- })
-}
diff --git a/fund-admin/src/api/expense.js b/fund-admin/src/api/expense.js
deleted file mode 100644
index 7e6c7db..0000000
--- a/fund-admin/src/api/expense.js
+++ /dev/null
@@ -1,65 +0,0 @@
-import request from '../utils/request'
-
-/**
- * 获取支出列表(分页)
- */
-export const getExpenseList = (params) => {
- return request({
- url: '/proj/api/v1/expense/list',
- method: 'get',
- params
- })
-}
-
-/**
- * 获取支出详情
- */
-export const getExpenseById = (expenseId) => {
- return request({
- url: `/proj/api/v1/expense/${expenseId}`,
- method: 'get'
- })
-}
-
-/**
- * 创建支出
- */
-export const createExpense = (data) => {
- return request({
- url: '/proj/api/v1/expense',
- method: 'post',
- data
- })
-}
-
-/**
- * 更新支出
- */
-export const updateExpense = (expenseId, data) => {
- return request({
- url: `/proj/api/v1/expense/${expenseId}`,
- method: 'put',
- data
- })
-}
-
-/**
- * 删除支出
- */
-export const deleteExpense = (expenseId) => {
- return request({
- url: `/proj/api/v1/expense/${expenseId}`,
- method: 'delete'
- })
-}
-
-/**
- * 更新支出状态
- */
-export const updateExpenseStatus = (expenseId, status) => {
- return request({
- url: `/proj/api/v1/expense/${expenseId}/status`,
- method: 'put',
- params: { status }
- })
-}
diff --git a/fund-admin/src/api/expenseType.js b/fund-admin/src/api/expenseType.js
deleted file mode 100644
index 5c76155..0000000
--- a/fund-admin/src/api/expenseType.js
+++ /dev/null
@@ -1,74 +0,0 @@
-import request from '../utils/request'
-
-/**
- * 获取支出类型树(仅启用)
- */
-export const getExpenseTypeTree = () => {
- return request({
- url: '/proj/api/v1/expense-type/tree',
- method: 'get'
- })
-}
-
-/**
- * 获取所有支出类型树(包含禁用)
- */
-export const getAllExpenseTypeTree = () => {
- return request({
- url: '/proj/api/v1/expense-type/tree/all',
- method: 'get'
- })
-}
-
-/**
- * 获取支出类型详情
- */
-export const getExpenseTypeById = (typeId) => {
- return request({
- url: `/proj/api/v1/expense-type/${typeId}`,
- method: 'get'
- })
-}
-
-/**
- * 创建支出类型
- */
-export const createExpenseType = (data) => {
- return request({
- url: '/proj/api/v1/expense-type',
- method: 'post',
- data
- })
-}
-
-/**
- * 更新支出类型
- */
-export const updateExpenseType = (typeId, data) => {
- return request({
- url: `/proj/api/v1/expense-type/${typeId}`,
- method: 'put',
- data
- })
-}
-
-/**
- * 删除支出类型
- */
-export const deleteExpenseType = (typeId) => {
- return request({
- url: `/proj/api/v1/expense-type/${typeId}`,
- method: 'delete'
- })
-}
-
-/**
- * 更新支出类型状态
- */
-export const updateExpenseTypeStatus = (typeId, status) => {
- return request({
- url: `/proj/api/v1/expense-type/${typeId}/status`,
- method: 'put',
- params: { status }
- })
-}
diff --git a/fund-admin/src/api/file.js b/fund-admin/src/api/file.js
deleted file mode 100644
index e56f0b5..0000000
--- a/fund-admin/src/api/file.js
+++ /dev/null
@@ -1,67 +0,0 @@
-import request from '../utils/request'
-
-/**
- * 上传文件
- */
-export const uploadFile = (data) => {
- return request({
- url: '/sys/api/v1/file/upload',
- method: 'post',
- data,
- headers: {
- 'Content-Type': 'multipart/form-data'
- }
- })
-}
-
-/**
- * 获取文件列表(分页)
- */
-export const getFileList = (params) => {
- return request({
- url: '/sys/api/v1/file/list',
- method: 'get',
- params
- })
-}
-
-/**
- * 根据业务类型和ID查询文件列表
- */
-export const getFileListByBusiness = (businessType, businessId) => {
- return request({
- url: '/sys/api/v1/file/list/business',
- method: 'get',
- params: { businessType, businessId }
- })
-}
-
-/**
- * 获取文件详情
- */
-export const getFileById = (fileId) => {
- return request({
- url: `/sys/api/v1/file/${fileId}`,
- method: 'get'
- })
-}
-
-/**
- * 删除文件
- */
-export const deleteFile = (fileId) => {
- return request({
- url: `/sys/api/v1/file/${fileId}`,
- method: 'delete'
- })
-}
-
-/**
- * 获取文件访问URL
- */
-export const getFileUrl = (fileId) => {
- return request({
- url: `/sys/api/v1/file/${fileId}/url`,
- method: 'get'
- })
-}
diff --git a/fund-admin/src/api/menu.js b/fund-admin/src/api/menu.js
deleted file mode 100644
index e071d09..0000000
--- a/fund-admin/src/api/menu.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import request from '../utils/request'
-
-export const getMenuTree = (params) => {
- return request({
- url: '/sys/api/v1/menu/tree',
- method: 'get',
- params
- })
-}
-
-export const getMenuList = (params) => {
- return request({
- url: '/sys/api/v1/menu/list',
- method: 'get',
- params
- })
-}
-
-export const getMenuDetail = (menuId) => {
- return request({
- url: `/sys/api/v1/menu/${menuId}`,
- method: 'get'
- })
-}
-
-export const createMenu = (data) => {
- return request({
- url: '/sys/api/v1/menu',
- method: 'post',
- data
- })
-}
-
-export const updateMenu = (menuId, data) => {
- return request({
- url: `/sys/api/v1/menu/${menuId}`,
- method: 'put',
- data
- })
-}
-
-export const deleteMenu = (menuId) => {
- return request({
- url: `/sys/api/v1/menu/${menuId}`,
- method: 'delete'
- })
-}
diff --git a/fund-admin/src/api/operationLog.js b/fund-admin/src/api/operationLog.js
deleted file mode 100644
index 589f20d..0000000
--- a/fund-admin/src/api/operationLog.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import request from '../utils/request'
-
-/**
- * 获取操作日志列表(分页)
- */
-export const getOperationLogList = (params) => {
- return request({
- url: '/sys/api/v1/operation-log/list',
- method: 'get',
- params
- })
-}
-
-/**
- * 获取操作日志详情
- */
-export const getOperationLogById = (logId) => {
- return request({
- url: `/sys/api/v1/operation-log/${logId}`,
- method: 'get'
- })
-}
-
-/**
- * 删除操作日志
- */
-export const deleteOperationLog = (logId) => {
- return request({
- url: `/sys/api/v1/operation-log/${logId}`,
- method: 'delete'
- })
-}
-
-/**
- * 批量删除操作日志(删除指定天数之前的日志)
- */
-export const batchDeleteOperationLog = (days) => {
- return request({
- url: '/sys/api/v1/operation-log/batch',
- method: 'delete',
- params: { days }
- })
-}
diff --git a/fund-admin/src/api/post.js b/fund-admin/src/api/post.js
deleted file mode 100644
index 262f354..0000000
--- a/fund-admin/src/api/post.js
+++ /dev/null
@@ -1,85 +0,0 @@
-import request from '../utils/request'
-
-/**
- * 获取岗位列表(分页)
- */
-export const getPostList = (params) => {
- return request({
- url: '/sys/api/v1/post/list',
- method: 'get',
- params
- })
-}
-
-/**
- * 根据部门ID获取岗位列表
- */
-export const getPostListByDept = (deptId) => {
- return request({
- url: `/sys/api/v1/post/list/dept/${deptId}`,
- method: 'get'
- })
-}
-
-/**
- * 获取所有启用的岗位列表
- */
-export const getPostListEnabled = () => {
- return request({
- url: '/sys/api/v1/post/list/enabled',
- method: 'get'
- })
-}
-
-/**
- * 获取岗位详情
- */
-export const getPostById = (postId) => {
- return request({
- url: `/sys/api/v1/post/${postId}`,
- method: 'get'
- })
-}
-
-/**
- * 创建岗位
- */
-export const createPost = (data) => {
- return request({
- url: '/sys/api/v1/post',
- method: 'post',
- data
- })
-}
-
-/**
- * 更新岗位
- */
-export const updatePost = (postId, data) => {
- return request({
- url: `/sys/api/v1/post/${postId}`,
- method: 'put',
- data
- })
-}
-
-/**
- * 删除岗位
- */
-export const deletePost = (postId) => {
- return request({
- url: `/sys/api/v1/post/${postId}`,
- method: 'delete'
- })
-}
-
-/**
- * 更新岗位状态
- */
-export const updatePostStatus = (postId, status) => {
- return request({
- url: `/sys/api/v1/post/${postId}/status`,
- method: 'put',
- params: { status }
- })
-}
diff --git a/fund-admin/src/api/project.js b/fund-admin/src/api/project.js
deleted file mode 100644
index c5f5677..0000000
--- a/fund-admin/src/api/project.js
+++ /dev/null
@@ -1,65 +0,0 @@
-import request from '../utils/request'
-
-/**
- * 获取项目列表(分页)
- */
-export const getProjectList = (params) => {
- return request({
- url: '/proj/api/v1/project/list',
- method: 'get',
- params
- })
-}
-
-/**
- * 获取项目详情
- */
-export const getProjectById = (id) => {
- return request({
- url: `/proj/api/v1/project/${id}`,
- method: 'get'
- })
-}
-
-/**
- * 创建项目
- */
-export const createProject = (data) => {
- return request({
- url: '/proj/api/v1/project',
- method: 'post',
- data
- })
-}
-
-/**
- * 更新项目
- */
-export const updateProject = (id, data) => {
- return request({
- url: `/proj/api/v1/project/${id}`,
- method: 'put',
- data
- })
-}
-
-/**
- * 删除项目
- */
-export const deleteProject = (id) => {
- return request({
- url: `/proj/api/v1/project/${id}`,
- method: 'delete'
- })
-}
-
-/**
- * 更新项目状态
- */
-export const updateProjectStatus = (id, status) => {
- return request({
- url: `/proj/api/v1/project/${id}/status`,
- method: 'put',
- params: { status }
- })
-}
diff --git a/fund-admin/src/api/projectMember.js b/fund-admin/src/api/projectMember.js
deleted file mode 100644
index 3bde51e..0000000
--- a/fund-admin/src/api/projectMember.js
+++ /dev/null
@@ -1,74 +0,0 @@
-import request from '../utils/request'
-
-/**
- * 获取项目成员列表(按项目ID)
- */
-export const getMemberListByProject = (projectId) => {
- return request({
- url: `/proj/api/v1/project-member/list/project/${projectId}`,
- method: 'get'
- })
-}
-
-/**
- * 获取用户的项目列表(按用户ID)
- */
-export const getMemberListByUser = (userId) => {
- return request({
- url: `/proj/api/v1/project-member/list/user/${userId}`,
- method: 'get'
- })
-}
-
-/**
- * 获取项目成员详情
- */
-export const getMemberById = (memberId) => {
- return request({
- url: `/proj/api/v1/project-member/${memberId}`,
- method: 'get'
- })
-}
-
-/**
- * 添加项目成员
- */
-export const addMember = (data) => {
- return request({
- url: '/proj/api/v1/project-member',
- method: 'post',
- data
- })
-}
-
-/**
- * 更新项目成员
- */
-export const updateMember = (memberId, data) => {
- return request({
- url: `/proj/api/v1/project-member/${memberId}`,
- method: 'put',
- data
- })
-}
-
-/**
- * 移除项目成员
- */
-export const removeMember = (memberId) => {
- return request({
- url: `/proj/api/v1/project-member/${memberId}`,
- method: 'delete'
- })
-}
-
-/**
- * 更新成员状态
- */
-export const updateMemberStatus = (memberId, status) => {
- return request({
- url: `/proj/api/v1/project-member/${memberId}/status`,
- method: 'put',
- params: { status }
- })
-}
diff --git a/fund-admin/src/api/receipt.js b/fund-admin/src/api/receipt.js
deleted file mode 100644
index 4126c77..0000000
--- a/fund-admin/src/api/receipt.js
+++ /dev/null
@@ -1,70 +0,0 @@
-import request from '@/utils/request'
-
-// 收款记录管理API
-
-export function getReceiptPage(params) {
- return request({
- url: '/receipt/page',
- method: 'get',
- params
- })
-}
-
-export function getReceiptById(receiptId) {
- return request({
- url: `/receipt/${receiptId}`,
- method: 'get'
- })
-}
-
-export function createReceipt(data) {
- return request({
- url: '/receipt',
- method: 'post',
- data
- })
-}
-
-export function updateReceipt(receiptId, data) {
- return request({
- url: `/receipt/${receiptId}`,
- method: 'put',
- data
- })
-}
-
-export function deleteReceipt(receiptId) {
- return request({
- url: `/receipt/${receiptId}`,
- method: 'delete'
- })
-}
-
-export function batchDeleteReceipt(receiptIds) {
- return request({
- url: '/receipt/batch',
- method: 'delete',
- params: { receiptIds }
- })
-}
-
-export function getReceiptStatistics() {
- return request({
- url: '/receipt/statistics',
- method: 'get'
- })
-}
-
-export function getReceiptsByProject(projectId) {
- return request({
- url: '/receipt/project/' + projectId,
- method: 'get'
- })
-}
-
-export function getReceiptsByCustomer(customerId) {
- return request({
- url: '/receipt/customer/' + customerId,
- method: 'get'
- })
-}
diff --git a/fund-admin/src/api/receivable.js b/fund-admin/src/api/receivable.js
deleted file mode 100644
index aa66c2b..0000000
--- a/fund-admin/src/api/receivable.js
+++ /dev/null
@@ -1,76 +0,0 @@
-import request from '../utils/request'
-
-/**
- * 获取应收款列表(分页)
- */
-export const getReceivableList = (params) => {
- return request({
- url: '/proj/api/v1/receivable/list',
- method: 'get',
- params
- })
-}
-
-/**
- * 获取应收款详情
- */
-export const getReceivableById = (receivableId) => {
- return request({
- url: `/proj/api/v1/receivable/${receivableId}`,
- method: 'get'
- })
-}
-
-/**
- * 创建应收款
- */
-export const createReceivable = (data) => {
- return request({
- url: '/proj/api/v1/receivable',
- method: 'post',
- data
- })
-}
-
-/**
- * 更新应收款
- */
-export const updateReceivable = (receivableId, data) => {
- return request({
- url: `/proj/api/v1/receivable/${receivableId}`,
- method: 'put',
- data
- })
-}
-
-/**
- * 删除应收款
- */
-export const deleteReceivable = (receivableId) => {
- return request({
- url: `/proj/api/v1/receivable/${receivableId}`,
- method: 'delete'
- })
-}
-
-/**
- * 记录收款
- */
-export const recordPayment = (receivableId, amount) => {
- return request({
- url: `/proj/api/v1/receivable/${receivableId}/payment`,
- method: 'post',
- params: { amount }
- })
-}
-
-/**
- * 更新应收款状态
- */
-export const updateReceivableStatus = (receivableId, status) => {
- return request({
- url: `/proj/api/v1/receivable/${receivableId}/status`,
- method: 'put',
- params: { status }
- })
-}
diff --git a/fund-admin/src/api/requirement.js b/fund-admin/src/api/requirement.js
deleted file mode 100644
index b83f3a3..0000000
--- a/fund-admin/src/api/requirement.js
+++ /dev/null
@@ -1,76 +0,0 @@
-import request from '../utils/request'
-
-/**
- * 获取需求工单列表
- */
-export const getRequirementList = (params) => {
- return request({
- url: '/proj/api/v1/requirement/list',
- method: 'get',
- params
- })
-}
-
-/**
- * 获取需求工单详情
- */
-export const getRequirementById = (requirementId) => {
- return request({
- url: `/proj/api/v1/requirement/${requirementId}`,
- method: 'get'
- })
-}
-
-/**
- * 创建需求工单
- */
-export const createRequirement = (data) => {
- return request({
- url: '/proj/api/v1/requirement',
- method: 'post',
- data
- })
-}
-
-/**
- * 更新需求工单
- */
-export const updateRequirement = (requirementId, data) => {
- return request({
- url: `/proj/api/v1/requirement/${requirementId}`,
- method: 'put',
- data
- })
-}
-
-/**
- * 删除需求工单
- */
-export const deleteRequirement = (requirementId) => {
- return request({
- url: `/proj/api/v1/requirement/${requirementId}`,
- method: 'delete'
- })
-}
-
-/**
- * 更新需求状态
- */
-export const updateRequirementStatus = (requirementId, status) => {
- return request({
- url: `/proj/api/v1/requirement/${requirementId}/status`,
- method: 'put',
- params: { status }
- })
-}
-
-/**
- * 更新需求进度
- */
-export const updateRequirementProgress = (requirementId, progress) => {
- return request({
- url: `/proj/api/v1/requirement/${requirementId}/progress`,
- method: 'put',
- params: { progress }
- })
-}
diff --git a/fund-admin/src/api/role.js b/fund-admin/src/api/role.js
deleted file mode 100644
index 13912f0..0000000
--- a/fund-admin/src/api/role.js
+++ /dev/null
@@ -1,54 +0,0 @@
-import request from '../utils/request'
-
-export const getRoleList = (params) => {
- return request({
- url: '/sys/api/v1/role/list',
- method: 'get',
- params
- })
-}
-
-export const getRoleDetail = (roleId) => {
- return request({
- url: `/sys/api/v1/role/${roleId}`,
- method: 'get'
- })
-}
-
-export const createRole = (data) => {
- return request({
- url: '/sys/api/v1/role',
- method: 'post',
- data
- })
-}
-
-export const updateRole = (roleId, data) => {
- return request({
- url: `/sys/api/v1/role/${roleId}`,
- method: 'put',
- data
- })
-}
-
-export const deleteRole = (roleId) => {
- return request({
- url: `/sys/api/v1/role/${roleId}`,
- method: 'delete'
- })
-}
-
-export const getRoleMenuIds = (roleId) => {
- return request({
- url: `/sys/api/v1/role/${roleId}/menus`,
- method: 'get'
- })
-}
-
-export const assignRoleMenus = (roleId, menuIds) => {
- return request({
- url: `/sys/api/v1/role/${roleId}/menus`,
- method: 'post',
- data: { menuIds }
- })
-}
diff --git a/fund-admin/src/api/sysConfig.js b/fund-admin/src/api/sysConfig.js
deleted file mode 100644
index 5547e6e..0000000
--- a/fund-admin/src/api/sysConfig.js
+++ /dev/null
@@ -1,63 +0,0 @@
-import request from '@/utils/request'
-
-// 系统配置管理API
-
-export function getConfigPage(params) {
- return request({
- url: '/sys/config/page',
- method: 'get',
- params
- })
-}
-
-export function getConfigById(configId) {
- return request({
- url: `/sys/config/${configId}`,
- method: 'get'
- })
-}
-
-export function getConfigValue(configKey) {
- return request({
- url: `/sys/config/value/${configKey}`,
- method: 'get'
- })
-}
-
-export function getConfigByGroup(configGroup) {
- return request({
- url: `/sys/config/group/${configGroup}`,
- method: 'get'
- })
-}
-
-export function createConfig(data) {
- return request({
- url: '/sys/config',
- method: 'post',
- data
- })
-}
-
-export function updateConfig(configId, data) {
- return request({
- url: `/sys/config/${configId}`,
- method: 'put',
- data
- })
-}
-
-export function deleteConfig(configId) {
- return request({
- url: `/sys/config/${configId}`,
- method: 'delete'
- })
-}
-
-export function batchDeleteConfig(configIds) {
- return request({
- url: '/sys/config/batch',
- method: 'delete',
- params: { configIds }
- })
-}
diff --git a/fund-admin/src/api/sysDict.js b/fund-admin/src/api/sysDict.js
deleted file mode 100644
index 53be994..0000000
--- a/fund-admin/src/api/sysDict.js
+++ /dev/null
@@ -1,78 +0,0 @@
-import request from '@/utils/request'
-
-// 数据字典管理API
-
-export function getDictPage(params) {
- return request({
- url: '/sys/dict/page',
- method: 'get',
- params
- })
-}
-
-export function getDictById(dictId) {
- return request({
- url: `/sys/dict/${dictId}`,
- method: 'get'
- })
-}
-
-export function getDictByType(dictType) {
- return request({
- url: `/sys/dict/type/${dictType}`,
- method: 'get'
- })
-}
-
-export function getAllDictTypes() {
- return request({
- url: '/sys/dict/types',
- method: 'get'
- })
-}
-
-export function getDictMap(dictType) {
- return request({
- url: `/sys/dict/map/${dictType}`,
- method: 'get'
- })
-}
-
-export function getDictLabel(dictType, dictCode) {
- return request({
- url: '/sys/dict/label',
- method: 'get',
- params: { dictType, dictCode }
- })
-}
-
-export function createDict(data) {
- return request({
- url: '/sys/dict',
- method: 'post',
- data
- })
-}
-
-export function updateDict(dictId, data) {
- return request({
- url: `/sys/dict/${dictId}`,
- method: 'put',
- data
- })
-}
-
-export function deleteDict(dictId) {
- return request({
- url: `/sys/dict/${dictId}`,
- method: 'delete'
- })
-}
-
-export function batchDeleteDict(dictIds) {
- return request({
- url: '/sys/dict/batch',
- method: 'delete',
- params: { dictIds }
- })
-}
diff --git a/fund-admin/src/api/user.js b/fund-admin/src/api/user.js
deleted file mode 100644
index dc736d2..0000000
--- a/fund-admin/src/api/user.js
+++ /dev/null
@@ -1,55 +0,0 @@
-import request from '../utils/request'
-
-export const getUserList = (params) => {
- return request({
- url: '/sys/api/v1/user/list',
- method: 'get',
- params
- })
-}
-
-export const getUserById = (id) => {
- return request({
- url: `/sys/api/v1/user/${id}`,
- method: 'get'
- })
-}
-
-export const createUser = (data) => {
- return request({
- url: '/sys/api/v1/user',
- method: 'post',
- data
- })
-}
-
-export const updateUser = (id, data) => {
- return request({
- url: `/sys/api/v1/user/${id}`,
- method: 'put',
- data
- })
-}
-
-export const deleteUser = (id) => {
- return request({
- url: `/sys/api/v1/user/${id}`,
- method: 'delete'
- })
-}
-
-export const resetPassword = (id, newPassword) => {
- return request({
- url: `/sys/api/v1/user/${id}/reset-password`,
- method: 'put',
- params: { newPassword }
- })
-}
-
-export const updateUserStatus = (id, status) => {
- return request({
- url: `/sys/api/v1/user/${id}/status`,
- method: 'put',
- params: { status }
- })
-}
diff --git a/fund-admin/src/api/userAssignment.js b/fund-admin/src/api/userAssignment.js
deleted file mode 100644
index 035e39a..0000000
--- a/fund-admin/src/api/userAssignment.js
+++ /dev/null
@@ -1,55 +0,0 @@
-import request from '../utils/request'
-
-/**
- * 获取用户分配列表(分页)
- */
-export const getUserAssignmentList = (params) => {
- return request({
- url: '/sys/api/v1/user-assignment/list',
- method: 'get',
- params
- })
-}
-
-/**
- * 根据部门ID获取用户列表
- */
-export const getUserListByDept = (deptId) => {
- return request({
- url: `/sys/api/v1/user-assignment/list/dept/${deptId}`,
- method: 'get'
- })
-}
-
-/**
- * 分配用户到部门和岗位
- */
-export const assignUser = (userId, data) => {
- return request({
- url: `/sys/api/v1/user-assignment/${userId}`,
- method: 'put',
- params: data
- })
-}
-
-/**
- * 批量分配用户
- */
-export const batchAssignUsers = (userIds, deptId, postId) => {
- return request({
- url: '/sys/api/v1/user-assignment/batch',
- method: 'put',
- data: userIds,
- params: { deptId, postId }
- })
-}
-
-/**
- * 移除用户分配
- */
-export const removeUserAssignment = (userId) => {
- return request({
- url: `/sys/api/v1/user-assignment/${userId}`,
- method: 'delete'
- })
-}
diff --git a/fund-admin/src/assets/vue.svg b/fund-admin/src/assets/vue.svg
deleted file mode 100644
index 770e9d3..0000000
--- a/fund-admin/src/assets/vue.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/fund-admin/src/components/HelloWorld.vue b/fund-admin/src/components/HelloWorld.vue
deleted file mode 100644
index 546ebbc..0000000
--- a/fund-admin/src/components/HelloWorld.vue
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
- {{ msg }}
-
-
-
-
- Edit
- components/HelloWorld.vue to test HMR
-
-
-
-
- Check out
- create-vue, the official Vue + Vite starter
-
-
- Learn more about IDE Support for Vue in the
- Vue Docs Scaling up Guide.
-
- Click on the Vite and Vue logos to learn more
-
-
-
diff --git a/fund-admin/src/components/Layout.vue b/fund-admin/src/components/Layout.vue
deleted file mode 100644
index 987b31b..0000000
--- a/fund-admin/src/components/Layout.vue
+++ /dev/null
@@ -1,185 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/components/MobileSidebar/index.vue b/fund-admin/src/components/MobileSidebar/index.vue
deleted file mode 100644
index 60a187e..0000000
--- a/fund-admin/src/components/MobileSidebar/index.vue
+++ /dev/null
@@ -1,178 +0,0 @@
-
-
-
-
-
-
-
diff --git a/fund-admin/src/composables/useMobile.js b/fund-admin/src/composables/useMobile.js
deleted file mode 100644
index 592cbbb..0000000
--- a/fund-admin/src/composables/useMobile.js
+++ /dev/null
@@ -1,209 +0,0 @@
-import { ref, computed, onMounted, onUnmounted } from 'vue'
-
-// 断点定义
-const BREAKPOINTS = {
- xs: 768, // 手机
- sm: 992, // 平板
- md: 1200, // 小桌面
- lg: 1920 // 大桌面
-}
-
-/**
- * 移动端检测组合式函数
- */
-export function useMobile() {
- // 视口宽度
- const width = ref(window.innerWidth)
- const height = ref(window.innerHeight)
-
- // 是否移动端(< 768px)
- const isMobile = computed(() => width.value < BREAKPOINTS.xs)
-
- // 是否平板(768px - 992px)
- const isTablet = computed(() => width.value >= BREAKPOINTS.xs && width.value < BREAKPOINTS.sm)
-
- // 是否桌面(>= 992px)
- const isDesktop = computed(() => width.value >= BREAKPOINTS.sm)
-
- // 是否小屏幕(< 992px)
- const isSmallScreen = computed(() => width.value < BREAKPOINTS.sm)
-
- // 当前断点
- const breakpoint = computed(() => {
- if (width.value < BREAKPOINTS.xs) return 'xs'
- if (width.value < BREAKPOINTS.sm) return 'sm'
- if (width.value < BREAKPOINTS.md) return 'md'
- if (width.value < BREAKPOINTS.lg) return 'lg'
- return 'xl'
- })
-
- // 侧边栏是否折叠
- const sidebarCollapsed = ref(false)
-
- // 移动端侧边栏是否打开
- const mobileSidebarOpen = ref(false)
-
- // 切换侧边栏
- const toggleSidebar = () => {
- if (isMobile.value) {
- mobileSidebarOpen.value = !mobileSidebarOpen.value
- } else {
- sidebarCollapsed.value = !sidebarCollapsed.value
- }
- }
-
- // 关闭移动端侧边栏
- const closeMobileSidebar = () => {
- mobileSidebarOpen.value = false
- }
-
- // 打开移动端侧边栏
- const openMobileSidebar = () => {
- mobileSidebarOpen.value = true
- }
-
- // 监听窗口大小变化
- const handleResize = () => {
- width.value = window.innerWidth
- height.value = window.innerHeight
-
- // 切换到桌面端时关闭移动端侧边栏
- if (!isMobile.value) {
- mobileSidebarOpen.value = false
- }
- }
-
- onMounted(() => {
- window.addEventListener('resize', handleResize)
- handleResize()
- })
-
- onUnmounted(() => {
- window.removeEventListener('resize', handleResize)
- })
-
- return {
- width,
- height,
- isMobile,
- isTablet,
- isDesktop,
- isSmallScreen,
- breakpoint,
- sidebarCollapsed,
- mobileSidebarOpen,
- toggleSidebar,
- closeMobileSidebar,
- openMobileSidebar
- }
-}
-
-/**
- * 响应式表格组合式函数
- */
-export function useResponsiveTable() {
- const { isMobile } = useMobile()
-
- // 表格高度
- const tableHeight = computed(() => {
- if (isMobile.value) {
- return 'auto'
- }
- // 桌面端:视口高度 - 头部(50) - 搜索区域(80) - 分页(50) - 边距(40)
- return window.innerHeight - 220
- })
-
- // 分页大小选项
- const pageSizeOptions = computed(() => {
- return isMobile.value ? [10, 20] : [10, 20, 50, 100]
- })
-
- // 默认分页大小
- const defaultPageSize = computed(() => {
- return isMobile.value ? 10 : 20
- })
-
- return {
- isMobile,
- tableHeight,
- pageSizeOptions,
- defaultPageSize
- }
-}
-
-/**
- * 触摸手势支持
- */
-export function useTouchGesture() {
- const touchStartX = ref(0)
- const touchEndX = ref(0)
- const touchStartY = ref(0)
- const touchEndY = ref(0)
-
- // 最小滑动距离
- const MIN_SWIPE_DISTANCE = 50
-
- // 处理触摸开始
- const handleTouchStart = (e) => {
- touchStartX.value = e.touches[0].clientX
- touchStartY.value = e.touches[0].clientY
- }
-
- // 处理触摸结束
- const handleTouchEnd = (e) => {
- touchEndX.value = e.changedTouches[0].clientX
- touchEndY.value = e.changedTouches[0].clientY
-
- return {
- direction: getSwipeDirection(),
- distance: Math.abs(touchEndX.value - touchStartX.value)
- }
- }
-
- // 获取滑动方向
- const getSwipeDirection = () => {
- const diffX = touchEndX.value - touchStartX.value
- const diffY = touchEndY.value - touchStartY.value
-
- // 判断是水平滑动还是垂直滑动
- if (Math.abs(diffX) > Math.abs(diffY)) {
- if (Math.abs(diffX) < MIN_SWIPE_DISTANCE) return null
- return diffX > 0 ? 'right' : 'left'
- } else {
- if (Math.abs(diffY) < MIN_SWIPE_DISTANCE) return null
- return diffY > 0 ? 'down' : 'up'
- }
- }
-
- return {
- handleTouchStart,
- handleTouchEnd,
- getSwipeDirection
- }
-}
-
-/**
- * 虚拟键盘检测
- */
-export function useVirtualKeyboard() {
- const isKeyboardOpen = ref(false)
- const windowHeight = ref(window.innerHeight)
-
- const handleResize = () => {
- const currentHeight = window.innerHeight
- // 如果窗口高度变小超过150px,认为是虚拟键盘打开
- isKeyboardOpen.value = windowHeight.value - currentHeight > 150
- }
-
- onMounted(() => {
- window.addEventListener('resize', handleResize)
- })
-
- onUnmounted(() => {
- window.removeEventListener('resize', handleResize)
- })
-
- return {
- isKeyboardOpen
- }
-}
diff --git a/fund-admin/src/main.js b/fund-admin/src/main.js
deleted file mode 100644
index c4808c1..0000000
--- a/fund-admin/src/main.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import { createApp } from 'vue'
-import App from './App.vue'
-import router from './router'
-import { createPinia } from 'pinia'
-import ElementPlus from 'element-plus'
-import 'element-plus/dist/index.css'
-import * as ElementPlusIconsVue from '@element-plus/icons-vue'
-
-const app = createApp(App)
-
-// 注册所有图标
-for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
- app.component(key, component)
-}
-
-app.use(createPinia())
-app.use(router)
-app.use(ElementPlus)
-
-app.mount('#app')
diff --git a/fund-admin/src/router/index.js b/fund-admin/src/router/index.js
deleted file mode 100644
index 73e5fc1..0000000
--- a/fund-admin/src/router/index.js
+++ /dev/null
@@ -1,197 +0,0 @@
-import { createRouter, createWebHistory } from 'vue-router'
-import { useUserStore } from '../stores/user'
-
-const routes = [
- {
- path: '/login',
- name: 'Login',
- component: () => import('../views/login/index.vue'),
- meta: { public: true }
- },
- {
- path: '/',
- name: 'Layout',
- component: () => import('../components/Layout.vue'),
- redirect: '/dashboard',
- children: [
- {
- path: 'dashboard',
- name: 'Dashboard',
- component: () => import('../views/dashboard/index.vue'),
- meta: { title: '首页', icon: 'HomeFilled' }
- },
- {
- path: 'system',
- name: 'System',
- meta: { title: '系统管理', icon: 'Setting' },
- children: [
- {
- path: 'user',
- name: 'User',
- component: () => import('../views/system/user.vue'),
- meta: { title: '用户管理' }
- },
- {
- path: 'dept',
- name: 'Dept',
- component: () => import('../views/system/dept.vue'),
- meta: { title: '部门管理' }
- },
- {
- path: 'role',
- name: 'Role',
- component: () => import('../views/system/role.vue'),
- meta: { title: '角色管理' }
- },
- {
- path: 'menu',
- name: 'Menu',
- component: () => import('../views/system/menu.vue'),
- meta: { title: '菜单管理' }
- },
- {
- path: 'post',
- name: 'Post',
- component: () => import('../views/system/post.vue'),
- meta: { title: '岗位管理' }
- },
- {
- path: 'user-assignment',
- name: 'UserAssignment',
- component: () => import('../views/system/userAssignment.vue'),
- meta: { title: '人员分配' }
- },
- {
- path: 'file',
- name: 'File',
- component: () => import('../views/system/file.vue'),
- meta: { title: '文件管理' }
- },
- {
- path: 'operation-log',
- name: 'OperationLog',
- component: () => import('../views/system/operationLog.vue'),
- meta: { title: '操作日志' }
- },
- {
- path: 'sys-config',
- name: 'SysConfig',
- component: () => import('../views/system/sysConfig.vue'),
- meta: { title: '系统配置' }
- },
- {
- path: 'sys-dict',
- name: 'SysDict',
- component: () => import('../views/system/sysDict.vue'),
- meta: { title: '数据字典' }
- }
- ]
- },
- {
- path: 'customer',
- name: 'Customer',
- meta: { title: '客户中心', icon: 'UserFilled' },
- children: [
- {
- path: 'list',
- name: 'CustomerList',
- component: () => import('../views/customer/list.vue'),
- meta: { title: '客户管理' }
- },
- {
- path: 'contact',
- name: 'CustomerContact',
- component: () => import('../views/customer/contact.vue'),
- meta: { title: '联系人管理' }
- }
- ]
- },
- {
- path: 'project',
- name: 'Project',
- meta: { title: '项目管理', icon: 'FolderOpened' },
- children: [
- {
- path: 'list',
- name: 'ProjectList',
- component: () => import('../views/project/list.vue'),
- meta: { title: '项目管理' }
- },
- {
- path: 'contract',
- name: 'Contract',
- component: () => import('../views/project/contract.vue'),
- meta: { title: '合同管理' }
- },
- {
- path: 'requirement',
- name: 'Requirement',
- component: () => import('../views/project/requirement.vue'),
- meta: { title: '需求工单' }
- },
- {
- path: 'member',
- name: 'ProjectMember',
- component: () => import('../views/project/projectMember.vue'),
- meta: { title: '项目成员' }
- }
- ]
- },
- {
- path: 'finance',
- name: 'Finance',
- meta: { title: '财务管理', icon: 'Money' },
- children: [
- {
- path: 'expense-type',
- name: 'ExpenseType',
- component: () => import('../views/finance/expenseType.vue'),
- meta: { title: '支出类型' }
- },
- {
- path: 'expense',
- name: 'Expense',
- component: () => import('../views/finance/expense.vue'),
- meta: { title: '支出管理' }
- },
- {
- path: 'receivable',
- name: 'Receivable',
- component: () => import('../views/finance/receivable.vue'),
- meta: { title: '应收款管理' }
- },
- {
- path: 'receipt',
- name: 'Receipt',
- component: () => import('../views/finance/receipt.vue'),
- meta: { title: '收款记录' }
- }
- ]
- }
- ]
- }
-]
-
-const router = createRouter({
- history: createWebHistory(),
- routes
-})
-
-// 路由守卫
-router.beforeEach((to, from, next) => {
- const userStore = useUserStore()
-
- if (to.meta.public) {
- next()
- return
- }
-
- if (!userStore.token) {
- next('/login')
- return
- }
-
- next()
-})
-
-export default router
diff --git a/fund-admin/src/stores/user.js b/fund-admin/src/stores/user.js
deleted file mode 100644
index f7f3088..0000000
--- a/fund-admin/src/stores/user.js
+++ /dev/null
@@ -1,72 +0,0 @@
-import { defineStore } from 'pinia'
-import { ref, computed } from 'vue'
-
-export const useUserStore = defineStore('user', () => {
- // State
- const token = ref(localStorage.getItem('token') || '')
- const userInfo = ref(JSON.parse(localStorage.getItem('userInfo') || '{}'))
- const permissions = ref(JSON.parse(localStorage.getItem('permissions') || '[]'))
- const roles = ref(JSON.parse(localStorage.getItem('roles') || '[]'))
-
- // Getters
- const isLoggedIn = computed(() => !!token.value)
- const username = computed(() => userInfo.value?.username || '')
- const realName = computed(() => userInfo.value?.realName || '')
-
- // Actions
- const setToken = (newToken) => {
- token.value = newToken
- localStorage.setItem('token', newToken)
- }
-
- const setUserInfo = (info) => {
- userInfo.value = info
- localStorage.setItem('userInfo', JSON.stringify(info))
- }
-
- const setPermissions = (perms) => {
- permissions.value = perms
- localStorage.setItem('permissions', JSON.stringify(perms))
- }
-
- const setRoles = (roleList) => {
- roles.value = roleList
- localStorage.setItem('roles', JSON.stringify(roleList))
- }
-
- const hasPermission = (perm) => {
- return permissions.value.includes(perm)
- }
-
- const hasRole = (role) => {
- return roles.value.includes(role)
- }
-
- const logout = () => {
- token.value = ''
- userInfo.value = {}
- permissions.value = []
- roles.value = []
- localStorage.removeItem('token')
- localStorage.removeItem('userInfo')
- localStorage.removeItem('permissions')
- localStorage.removeItem('roles')
- }
-
- return {
- token,
- userInfo,
- permissions,
- roles,
- isLoggedIn,
- username,
- realName,
- setToken,
- setUserInfo,
- setPermissions,
- setRoles,
- hasPermission,
- hasRole,
- logout
- }
-})
diff --git a/fund-admin/src/style.css b/fund-admin/src/style.css
deleted file mode 100644
index f691315..0000000
--- a/fund-admin/src/style.css
+++ /dev/null
@@ -1,79 +0,0 @@
-:root {
- font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
- line-height: 1.5;
- font-weight: 400;
-
- color-scheme: light dark;
- color: rgba(255, 255, 255, 0.87);
- background-color: #242424;
-
- font-synthesis: none;
- text-rendering: optimizeLegibility;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-a {
- font-weight: 500;
- color: #646cff;
- text-decoration: inherit;
-}
-a:hover {
- color: #535bf2;
-}
-
-body {
- margin: 0;
- display: flex;
- place-items: center;
- min-width: 320px;
- min-height: 100vh;
-}
-
-h1 {
- font-size: 3.2em;
- line-height: 1.1;
-}
-
-button {
- border-radius: 8px;
- border: 1px solid transparent;
- padding: 0.6em 1.2em;
- font-size: 1em;
- font-weight: 500;
- font-family: inherit;
- background-color: #1a1a1a;
- cursor: pointer;
- transition: border-color 0.25s;
-}
-button:hover {
- border-color: #646cff;
-}
-button:focus,
-button:focus-visible {
- outline: 4px auto -webkit-focus-ring-color;
-}
-
-.card {
- padding: 2em;
-}
-
-#app {
- max-width: 1280px;
- margin: 0 auto;
- padding: 2rem;
- text-align: center;
-}
-
-@media (prefers-color-scheme: light) {
- :root {
- color: #213547;
- background-color: #ffffff;
- }
- a:hover {
- color: #747bff;
- }
- button {
- background-color: #f9f9f9;
- }
-}
diff --git a/fund-admin/src/styles/mobile.scss b/fund-admin/src/styles/mobile.scss
deleted file mode 100644
index 336f1e3..0000000
--- a/fund-admin/src/styles/mobile.scss
+++ /dev/null
@@ -1,296 +0,0 @@
-// 移动端适配样式
-// 断点定义:xs < 768px < sm < 992px < md < 1200px < lg
-
-// 移动端基础样式
-@media screen and (max-width: 768px) {
- // 隐藏侧边栏
- .sidebar-container {
- transform: translateX(-100%);
- transition: transform 0.3s;
-
- &.mobile-open {
- transform: translateX(0);
- }
- }
-
- // 主内容区域全宽
- .main-container {
- margin-left: 0 !important;
- width: 100% !important;
- }
-
- // 顶部导航栏适配
- .navbar {
- .hamburger-container {
- display: none;
- }
-
- .breadcrumb-container {
- display: none;
- }
-
- .right-menu {
- .right-menu-item {
- padding: 0 8px;
- }
- }
- }
-
- // 搜索表单改为垂直布局
- .search-form {
- .el-form-item {
- margin-right: 0;
- margin-bottom: 10px;
- width: 100%;
-
- .el-input,
- .el-select {
- width: 100% !important;
- }
- }
-
- .el-button {
- width: 100%;
- margin-left: 0 !important;
- margin-bottom: 10px;
- }
- }
-
- // 表格操作按钮
- .el-table {
- .el-button--link {
- padding: 4px 8px;
- font-size: 12px;
- }
- }
-
- // 分页器适配
- .el-pagination {
- .el-pagination__sizes,
- .el-pagination__jump {
- display: none;
- }
-
- .btn-prev,
- .btn-next {
- min-width: 28px;
- }
-
- .el-pager li {
- min-width: 28px;
- }
- }
-
- // 对话框全屏
- .el-dialog {
- width: 100% !important;
- margin: 0 !important;
- border-radius: 0 !important;
- height: 100vh;
-
- .el-dialog__body {
- max-height: calc(100vh - 120px);
- overflow-y: auto;
- }
- }
-
- // 抽屉全屏
- .el-drawer {
- width: 100% !important;
- }
-
- // 表单单行显示
- .el-form {
- .el-form-item {
- margin-bottom: 15px;
-
- .el-form-item__label {
- float: none;
- display: block;
- text-align: left;
- margin-bottom: 5px;
- }
-
- .el-form-item__content {
- margin-left: 0 !important;
- }
- }
- }
-
- // 卡片内边距减小
- .el-card {
- .el-card__header {
- padding: 12px 15px;
- }
-
- .el-card__body {
- padding: 15px;
- }
- }
-
- // 统计卡片
- .dashboard-card {
- margin-bottom: 15px;
-
- .card-icon {
- font-size: 36px;
- }
-
- .card-value {
- font-size: 20px;
- }
- }
-
- // 底部固定按钮
- .fixed-bottom-buttons {
- position: fixed;
- bottom: 0;
- left: 0;
- right: 0;
- padding: 10px 15px;
- background: #fff;
- box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1);
- z-index: 100;
- display: flex;
- gap: 10px;
-
- .el-button {
- flex: 1;
- }
- }
-
- // 底部留白(避免被固定按钮遮挡)
- .has-fixed-bottom {
- padding-bottom: 60px;
- }
-}
-
-// 平板适配
-@media screen and (min-width: 769px) and (max-width: 992px) {
- .sidebar-container {
- width: 54px !important;
-
- .el-menu {
- .el-sub-menu__title,
- .el-menu-item {
- padding: 0 15px !important;
-
- span {
- display: none;
- }
-
- .el-sub-menu__icon-arrow {
- display: none;
- }
- }
- }
- }
-
- .main-container {
- margin-left: 54px !important;
- }
-}
-
-// 移动端菜单按钮
-.mobile-menu-btn {
- display: none;
-
- @media screen and (max-width: 768px) {
- display: inline-flex;
- align-items: center;
- justify-content: center;
- width: 40px;
- height: 40px;
- font-size: 20px;
- cursor: pointer;
- }
-}
-
-// 移动端遮罩层
-.mobile-sidebar-mask {
- display: none;
-
- @media screen and (max-width: 768px) {
- display: block;
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- background: rgba(0, 0, 0, 0.5);
- z-index: 999;
- opacity: 0;
- visibility: hidden;
- transition: all 0.3s;
-
- &.show {
- opacity: 1;
- visibility: visible;
- }
- }
-}
-
-// 响应式工具类
-.hide-on-mobile {
- @media screen and (max-width: 768px) {
- display: none !important;
- }
-}
-
-.show-on-mobile {
- display: none !important;
-
- @media screen and (max-width: 768px) {
- display: block !important;
- }
-}
-
-// 响应式表格
-.responsive-table {
- @media screen and (max-width: 768px) {
- .el-table {
- &__header-wrapper {
- display: none;
- }
-
- &__body-wrapper {
- .el-table__row {
- display: block;
- margin-bottom: 15px;
- border: 1px solid #ebeef5;
- border-radius: 4px;
- padding: 10px;
-
- td {
- display: flex;
- justify-content: space-between;
- align-items: center;
- border: none;
- padding: 8px 0;
-
- &:not(:last-child) {
- border-bottom: 1px solid #ebeef5;
- }
-
- &::before {
- content: attr(data-label);
- font-weight: bold;
- color: #606266;
- }
- }
- }
- }
- }
- }
-}
-
-// 触摸优化
-@media (hover: none) {
- .el-button:hover {
- opacity: 1;
- }
-
- .el-table__row:hover > td {
- background-color: transparent !important;
- }
-}
diff --git a/fund-admin/src/utils/request.js b/fund-admin/src/utils/request.js
deleted file mode 100644
index 8a7adcf..0000000
--- a/fund-admin/src/utils/request.js
+++ /dev/null
@@ -1,82 +0,0 @@
-import axios from 'axios'
-import { ElMessage } from 'element-plus'
-import { useUserStore } from '../stores/user'
-
-// 创建axios实例
-const request = axios.create({
- baseURL: '',
- timeout: 10000,
- headers: {
- 'Content-Type': 'application/json'
- }
-})
-
-// 请求拦截器
-request.interceptors.request.use(
- (config) => {
- const userStore = useUserStore()
- if (userStore.token) {
- config.headers.Authorization = `Bearer ${userStore.token}`
- }
- return config
- },
- (error) => {
- return Promise.reject(error)
- }
-)
-
-// 响应拦截器
-request.interceptors.response.use(
- (response) => {
- const res = response.data
-
- // 业务成功
- if (res.code === 200) {
- return res.data
- }
-
- // 处理401未认证
- if (res.code === 401) {
- ElMessage.error(res.message || '登录已过期,请重新登录')
- const userStore = useUserStore()
- userStore.logout()
- window.location.href = '/login'
- return Promise.reject(new Error(res.message || '未认证'))
- }
-
- // 其他业务失败
- ElMessage.error(res.message || '请求失败')
- return Promise.reject(new Error(res.message || '请求失败'))
- },
- (error) => {
- const { response } = error
-
- if (response) {
- switch (response.status) {
- case 401:
- ElMessage.error('登录已过期,请重新登录')
- const userStore = useUserStore()
- userStore.logout()
- window.location.href = '/login'
- break
- case 403:
- ElMessage.error('没有权限访问')
- break
- case 404:
- ElMessage.error('请求的资源不存在')
- break
- case 500:
- ElMessage.error('服务器内部错误')
- break
- default:
- ElMessage.error(response.data?.message || '请求失败')
- }
- } else {
- ElMessage.error('网络错误,请检查网络连接')
- }
-
- return Promise.reject(error)
- }
-)
-
-export default request
diff --git a/fund-admin/src/views/customer/contact.vue b/fund-admin/src/views/customer/contact.vue
deleted file mode 100644
index d642ce4..0000000
--- a/fund-admin/src/views/customer/contact.vue
+++ /dev/null
@@ -1,332 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 查询
- 重置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ scope.row.isPrimary === '1' ? '是' : '否' }}
-
-
-
-
-
-
- {{ scope.row.status === '1' ? '启用' : '禁用' }}
-
-
-
-
-
- 编辑
-
- 设为主联系人
-
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/customer/list.vue b/fund-admin/src/views/customer/list.vue
deleted file mode 100644
index 17cc57e..0000000
--- a/fund-admin/src/views/customer/list.vue
+++ /dev/null
@@ -1,298 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 查询
- 重置
-
-
-
-
-
-
-
-
- {{ scope.row.customerType === 'ENTERPRISE' ? '企业' : '个人' }}
-
-
-
-
-
-
-
-
- {{ scope.row.status === '1' ? '正常' : '停用' }}
-
-
-
-
-
- 编辑
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/dashboard/index.vue b/fund-admin/src/views/dashboard/index.vue
deleted file mode 100644
index 615f0b2..0000000
--- a/fund-admin/src/views/dashboard/index.vue
+++ /dev/null
@@ -1,638 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
{{ data.projectCount || 0 }}
-
项目总数
-
-
-
-
-
-
-
-
-
-
-
{{ data.customerCount || 0 }}
-
客户总数
-
-
-
-
-
-
-
-
-
-
-
{{ data.contractCount || 0 }}
-
合同总数
-
-
-
-
-
-
-
-
-
-
{{ data.requirementCount || 0 }}
-
需求工单
-
-
-
-
-
-
-
-
-
- 总收入
- ¥ {{ formatMoney(data.totalIncome) }}
- 本月收入:¥ {{ formatMoney(data.monthIncome) }}
-
-
-
-
- 总支出
- ¥ {{ formatMoney(data.totalExpense) }}
- 本月支出:¥ {{ formatMoney(data.monthExpense) }}
-
-
-
-
- 净利润
-
- ¥ {{ formatMoney(data.netProfit) }}
-
- 利润率:{{ getProfitRate() }}%
-
-
-
-
-
-
-
-
- 应收款总额
- ¥ {{ formatMoney(data.totalReceivable) }}
-
-
-
-
- 待收款金额
- ¥ {{ formatMoney(data.totalUnpaid) }}
-
-
-
-
- 逾期金额
- ¥ {{ formatMoney(data.overdueAmount) }}
-
-
-
-
-
-
-
-
-
- 收支趋势(最近12个月)
-
-
-
-
-
-
-
- 项目状态分布
-
-
-
-
-
-
-
-
-
-
- 支出类型分布
-
-
-
-
-
-
-
- 应收款状态分布
-
-
-
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/finance/expense.vue b/fund-admin/src/views/finance/expense.vue
deleted file mode 100644
index c696b9a..0000000
--- a/fund-admin/src/views/finance/expense.vue
+++ /dev/null
@@ -1,506 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 搜索
- 重置
-
-
-
-
-
- 新增支出
-
-
-
-
-
-
-
- {{ getExpenseTypeName(row.expenseTypeId) }}
-
-
-
-
- ¥{{ row.expenseAmount }}
-
-
-
-
-
-
- {{ getProjectName(row.projectId) }}
-
-
-
-
- {{ getPaymentMethodText(row.paymentMethod) }}
-
-
-
-
- 待付款
- 已付款
- 已完成
- 已作废
-
-
-
-
-
- 编辑
- 更新状态
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/finance/expenseType.vue b/fund-admin/src/views/finance/expenseType.vue
deleted file mode 100644
index 160082a..0000000
--- a/fund-admin/src/views/finance/expenseType.vue
+++ /dev/null
@@ -1,295 +0,0 @@
-
-
-
-
-
- 新增类型
-
-
-
-
-
-
-
-
-
-
-
-
- {{ row.status === 1 ? '启用' : '禁用' }}
-
-
-
-
-
-
- 添加子类型
- 编辑
-
- {{ row.status === 1 ? '禁用' : '启用' }}
-
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 启用
- 禁用
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/finance/receipt.vue b/fund-admin/src/views/finance/receipt.vue
deleted file mode 100644
index 7ada1eb..0000000
--- a/fund-admin/src/views/finance/receipt.vue
+++ /dev/null
@@ -1,391 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 搜索
- 重置
-
-
-
-
-
- 新增收款记录
-
-
-
-
-
-
-
- {{ getReceivableName(row.receivableId) }}
-
-
-
-
- ¥{{ row.receiptAmount }}
-
-
-
-
-
- {{ getReceiptMethodText(row.receiptMethod) }}
-
-
-
-
-
-
-
-
-
- 编辑
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/finance/receivable.vue b/fund-admin/src/views/finance/receivable.vue
deleted file mode 100644
index 0704a10..0000000
--- a/fund-admin/src/views/finance/receivable.vue
+++ /dev/null
@@ -1,540 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 搜索
- 重置
-
-
-
-
-
- 新增应收款
-
-
-
-
-
-
-
- {{ getRequirementName(row.requirementId) }}
-
-
-
-
- {{ getCustomerName(row.customerId) }}
-
-
-
-
- {{ getProjectName(row.projectId) }}
-
-
-
-
- ¥{{ row.receivableAmount }}
-
-
-
-
- ¥{{ row.receivedAmount }}
-
-
-
-
-
- ¥{{ row.unpaidAmount }}
-
-
-
-
-
-
-
- 待收款
- 部分收款
- 已收款
- 逾期
-
-
-
-
- {{ row.overdueDays }}天
- -
-
-
-
-
-
- 编辑
- 记录收款
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/login/index.vue b/fund-admin/src/views/login/index.vue
deleted file mode 100644
index c907694..0000000
--- a/fund-admin/src/views/login/index.vue
+++ /dev/null
@@ -1,139 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 登录
-
-
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/project/contract.vue b/fund-admin/src/views/project/contract.vue
deleted file mode 100644
index a1480c3..0000000
--- a/fund-admin/src/views/project/contract.vue
+++ /dev/null
@@ -1,343 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 查询
- 重置
-
-
-
-
-
-
-
-
-
- {{ getStatusText(scope.row.contractStatus) }}
-
-
-
-
-
- {{ formatAmount(scope.row.contractAmount) }}
-
-
-
-
-
-
- 编辑
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/project/list.vue b/fund-admin/src/views/project/list.vue
deleted file mode 100644
index a0685b0..0000000
--- a/fund-admin/src/views/project/list.vue
+++ /dev/null
@@ -1,392 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 查询
- 重置
-
-
-
-
-
-
-
-
-
- {{ getStatusText(scope.row.projectStatus) }}
-
-
-
-
-
- {{ formatAmount(scope.row.budgetAmount) }}
-
-
-
-
- {{ formatAmount(scope.row.contractAmount) }}
-
-
-
-
-
-
-
- 编辑
- 状态
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/project/projectMember.vue b/fund-admin/src/views/project/projectMember.vue
deleted file mode 100644
index 4bdf449..0000000
--- a/fund-admin/src/views/project/projectMember.vue
+++ /dev/null
@@ -1,393 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 搜索
- 重置
-
-
-
-
-
- 添加成员
-
-
-
-
-
-
-
-
- {{ getRoleText(row.role) }}
-
-
-
-
-
- {{ row.leaveDate || '-' }}
-
-
-
-
- {{ row.workload }}%
-
-
-
-
- 在职
- 已离开
-
-
-
-
-
-
- 编辑
- 标记离开
- 恢复在职
- 移除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/project/requirement.vue b/fund-admin/src/views/project/requirement.vue
deleted file mode 100644
index 5098841..0000000
--- a/fund-admin/src/views/project/requirement.vue
+++ /dev/null
@@ -1,641 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 搜索
- 重置
-
-
-
-
-
- 新增需求
-
-
-
-
-
-
-
-
- {{ getProjectName(row.projectId) }}
-
-
-
-
- {{ getCustomerName(row.customerId) }}
-
-
-
-
- 高
- 中
- 低
-
-
-
-
- 待开发
- 开发中
- 已交付
- 已完成
-
-
-
-
-
-
-
-
-
-
-
- {{ row.receivableAmount ? '¥' + row.receivableAmount : '-' }}
-
-
-
-
-
- 编辑
- 更新状态
- 更新进度
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/system/dept.vue b/fund-admin/src/views/system/dept.vue
deleted file mode 100644
index 35a96a7..0000000
--- a/fund-admin/src/views/system/dept.vue
+++ /dev/null
@@ -1,257 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ scope.row.status === 1 ? '启用' : '禁用' }}
-
-
-
-
-
- 添加子部门
- 编辑
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/system/file.vue b/fund-admin/src/views/system/file.vue
deleted file mode 100644
index e413b31..0000000
--- a/fund-admin/src/views/system/file.vue
+++ /dev/null
@@ -1,402 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 搜索
- 重置
-
-
-
-
-
-
- 上传文件
-
-
-
-
-
-
-
-
-
-
- {{ row.originalName }}
-
-
-
-
-
-
- {{ getBusinessTypeText(row.businessType) }}
-
-
-
-
-
-
- {{ formatFileSize(row.fileSize) }}
-
-
-
-
-
-
-
- 下载
- 预览
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ selectedFile.name }}
- ({{ formatFileSize(selectedFile.size) }})
-
- 选择文件
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 上传
-
-
-
-
-
-
-
-
![]()
-
-
-
-
-
-
-
-
该文件类型暂不支持预览
-
文件名:{{ currentFile.originalName }}
-
文件大小:{{ formatFileSize(currentFile.fileSize) }}
-
下载查看
-
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/system/menu.vue b/fund-admin/src/views/system/menu.vue
deleted file mode 100644
index 04105f6..0000000
--- a/fund-admin/src/views/system/menu.vue
+++ /dev/null
@@ -1,288 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ getMenuTypeLabel(scope.row.menuType) }}
-
-
-
-
-
-
-
-
-
-
-
- {{ scope.row.status === 1 ? '启用' : '禁用' }}
-
-
-
-
-
- 编辑
- 添加子菜单
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/system/operationLog.vue b/fund-admin/src/views/system/operationLog.vue
deleted file mode 100644
index fa99713..0000000
--- a/fund-admin/src/views/system/operationLog.vue
+++ /dev/null
@@ -1,350 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 搜索
- 重置
-
-
-
-
-
- 批量清理
-
-
-
-
-
-
-
-
-
- {{ getOperationTypeText(row.operationType) }}
-
-
-
-
-
-
-
-
-
- {{ row.executionTime }}ms
-
-
-
-
-
-
-
- 成功
- 失败
-
-
-
-
-
- 查看详情
- 删除
-
-
-
-
-
-
-
-
-
-
-
- {{ detail.logId }}
- {{ detail.module }}
-
-
- {{ getOperationTypeText(detail.operationType) }}
-
-
-
- 成功
- 失败
-
- {{ detail.description }}
- {{ detail.requestMethod }}
- {{ detail.executionTime }}ms
- {{ detail.requestUrl }}
-
- {{ detail.requestParams }}
-
-
- {{ detail.responseResult }}
-
- {{ detail.operatorName }}
- {{ detail.operatorId }}
- {{ detail.operatorIp }}
- {{ detail.operatorLocation }}
- {{ detail.createdTime }}
-
- {{ detail.errorMsg }}
-
-
-
- 关闭
-
-
-
-
-
-
-
-
-
- 将删除 {{ batchDeleteDays }} 天前的所有操作日志
-
-
-
-
- 取消
- 确定删除
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/system/post.vue b/fund-admin/src/views/system/post.vue
deleted file mode 100644
index 5954e80..0000000
--- a/fund-admin/src/views/system/post.vue
+++ /dev/null
@@ -1,415 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 搜索
- 重置
-
-
-
-
-
- 新增岗位
-
-
-
-
-
-
-
-
-
- {{ getDeptName(row.deptId) }}
-
-
-
-
-
-
-
-
-
-
-
-
- 编辑
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 启用
- 禁用
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/system/role.vue b/fund-admin/src/views/system/role.vue
deleted file mode 100644
index abef997..0000000
--- a/fund-admin/src/views/system/role.vue
+++ /dev/null
@@ -1,361 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 查询
- 重置
-
-
-
-
-
-
-
-
-
-
-
- {{ scope.row.roleType === 'system' ? '系统角色' : '自定义角色' }}
-
-
-
-
-
- {{ getDataScopeLabel(scope.row.dataScope) }}
-
-
-
-
-
-
- {{ scope.row.status === 1 ? '启用' : '禁用' }}
-
-
-
-
-
-
- 编辑
- 分配菜单
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/system/sysConfig.vue b/fund-admin/src/views/system/sysConfig.vue
deleted file mode 100644
index 78d0b6c..0000000
--- a/fund-admin/src/views/system/sysConfig.vue
+++ /dev/null
@@ -1,404 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 搜索
-
-
- 重置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ getTypeLabel(row.configType) }}
-
-
-
-
-
- {{ getGroupLabel(row.configGroup) }}
-
-
-
-
-
- {{ row.isSystem === 1 ? '是' : '否' }}
-
-
-
-
-
-
-
-
-
-
-
- 编辑
-
-
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 否
- 是
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/system/sysDict.vue b/fund-admin/src/views/system/sysDict.vue
deleted file mode 100644
index 503eead..0000000
--- a/fund-admin/src/views/system/sysDict.vue
+++ /dev/null
@@ -1,393 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 搜索
-
-
- 重置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ row.isDefault === 1 ? '是' : '否' }}
-
-
-
-
-
-
-
-
-
-
-
- 编辑
-
-
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 否
- 是
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/system/user.vue b/fund-admin/src/views/system/user.vue
deleted file mode 100644
index a923082..0000000
--- a/fund-admin/src/views/system/user.vue
+++ /dev/null
@@ -1,361 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 查询
- 重置
-
-
-
-
-
-
-
-
-
-
-
-
- {{ scope.row.status === 1 ? '启用' : '禁用' }}
-
-
-
-
-
- 编辑
- 重置密码
-
- {{ scope.row.status === 1 ? '禁用' : '启用' }}
-
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
diff --git a/fund-admin/src/views/system/userAssignment.vue b/fund-admin/src/views/system/userAssignment.vue
deleted file mode 100644
index f4105be..0000000
--- a/fund-admin/src/views/system/userAssignment.vue
+++ /dev/null
@@ -1,407 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 搜索
- 重置
-
-
-
-
-
-
- 批量分配
-
-
- {{ showUnassigned ? '显示全部' : '仅显示未分配' }}
-
-
- 已选择 {{ selectedUsers.length }} 人
-
-
-
-
-
-
-
-
-
-
-
- {{ row.gender === 1 ? '男' : row.gender === 2 ? '女' : '未知' }}
-
-
-
-
-
- {{ row.deptName }}
- 未分配
-
-
-
-
- {{ row.postName }}
- -
-
-
-
-
-
- 启用
- 禁用
-
-
-
-
- 分配
-
- 移除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ user.realName || user.username }}
-
-
-
- {{ form.userName }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 取消
- 确定
-
-
-
-
-
-
-
-
diff --git a/fundplatform b/fundplatform
index 85528d3..b2e2535 160000
--- a/fundplatform
+++ b/fundplatform
@@ -1 +1 @@
-Subproject commit 85528d3f3bcefbcea1a237175ee93b18f7b8feb2
+Subproject commit b2e2535d6798d027d15320c5cab163907c2fb920
diff --git a/开发规则清单.md b/开发规则清单.md
deleted file mode 100644
index 3924276..0000000
--- a/开发规则清单.md
+++ /dev/null
@@ -1,429 +0,0 @@
-# 资金服务平台 - 开发规则清单
-
-> **创建时间**: 2026-02-17
-> **用途**: 重新生成代码前的规范和约束
-> **版本**: v1.0
-
----
-
-## 1. 技术栈规范
-
-### 1.1 核心框架
-- **Java**: 21
-- **Spring Boot**: 3.2.0
-- **Spring Cloud**: 2023.0.0
-- **认证框架**: Apache Shiro 2.0.0(必须,不使用 Spring Security)
-- **数据库连接池**: HikariCP
-- **ORM框架**: MyBatis-Plus 3.5.6
-
-### 1.2 依赖版本锁定
-```xml
-1.18.30
-2.0.0
-4.4.0
-5.8.23
-3.5.6
-```
-
-### 1.3 禁用的依赖
-- ❌ `spring-boot-starter-security`
-- ❌ Shiro 1.x(不兼容 Spring Boot 3)
-
----
-
-## 2. Maven 多模块配置规范
-
-### 2.1 父 POM 配置
-```xml
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.13.0
-
- 21
- 21
-
- -parameters
-
-
-
- org.projectlombok
- lombok
- ${lombok.version}
-
-
-
-
-
-
-```
-
-### 2.2 子模块 POM 配置
-**每个子模块都必须显式激活 maven-compiler-plugin**:
-```xml
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.13.0
-
- 21
- 21
-
- -parameters
-
-
-
- org.projectlombok
- lombok
- ${lombok.version}
-
-
-
-
-
-
-```
-
-### 2.3 依赖冲突检查
-- ⚠️ 避免在 pom.xml 中重复声明同一依赖
-- ⚠️ 使用 `mvn dependency:tree` 检查依赖冲突
-
----
-
-## 3. Lombok 使用规范
-
-### 3.1 禁止在继承 ServiceImpl 的类上使用 @Slf4j
-
-**❌ 错误示例**:
-```java
-@Slf4j
-@Service
-public class DeptService extends ServiceImpl {
- public void saveDept(Dept dept) {
- log.info("保存部门"); // 编译错误!
- }
-}
-```
-
-**✅ 正确示例**:
-```java
-@Service
-public class DeptService extends ServiceImpl {
- private static final Logger logger = LoggerFactory.getLogger(DeptService.class);
-
- public void saveDept(Dept dept) {
- logger.info("保存部门");
- }
-}
-```
-
-**原因**: MyBatis-Plus 的 ServiceImpl 基类已定义 `protected Log log`(org.apache.ibatis.logging.Log),与 Lombok @Slf4j 生成的字段冲突。
-
-### 3.2 实体类 Lombok 注解规范
-```java
-@Data
-@EqualsAndHashCode(callSuper = true)
-@TableName("sys_dept")
-public class Dept extends BaseEntity {
- // 必须确保 import lombok.Data 和 import lombok.EqualsAndHashCode 存在
-}
-```
-
-### 3.3 Controller/Component Lombok 注解
-```java
-@RestController
-@RequestMapping("/api/v1/dept")
-@RequiredArgsConstructor // 推荐用于依赖注入
-public class DeptController {
- private final DeptService deptService;
-}
-```
-
----
-
-## 4. Shiro 认证框架规范
-
-### 4.1 核心组件清单
-1. **JwtToken.java** - 自定义 Token 类
-2. **JwtRealm.java** - 认证授权域
-3. **JwtFilter.java** - JWT 过滤器
-4. **ShiroConfig.java** - Shiro 配置类
-5. **PasswordEncoderConfig.java** - 密码编码器(使用 BCrypt)
-
-### 4.2 权限注解规范
-- ✅ 使用 `@RequiresRoles("ADMIN")`
-- ✅ 使用 `@RequiresPermissions("system:user:view")`
-- ❌ 不使用 Spring Security 注解(@PreAuthorize)
-
-### 4.3 认证流程
-1. 用户登录 → 查询数据库
-2. BCrypt 验证密码
-3. 生成 JWT Token(包含 userId, username, tenantId)
-4. 每次请求通过 JwtFilter 验证 Token
-5. JwtRealm 加载用户权限
-
----
-
-## 5. 代码编写规范
-
-### 5.1 分层架构
-```
-Controller → Service → Mapper → Database
- ↓ ↓
- DTO Entity
-```
-
-### 5.2 包结构规范
-```
-com.fundplatform.sys
-├── controller # 控制器层
-├── service # 业务逻辑层
-├── mapper # 数据访问层
-├── entity # 实体类
-├── dto # 数据传输对象
-├── vo # 视图对象
-├── security # 安全相关(Shiro配置)
-├── config # 配置类
-└── util # 工具类
-```
-
-### 5.3 命名规范
-- **Entity**: 单数名词,如 `User.java`、`Dept.java`
-- **Mapper**: 实体名 + Mapper,如 `UserMapper.java`
-- **Service**: 实体名 + Service,如 `UserService.java`
-- **Controller**: 实体名 + Controller,如 `UserController.java`
-
-### 5.4 日志规范
-```java
-// 业务操作日志
-logger.info("[ServiceName] 业务操作描述: {}, 参数: {}", entity.getName(), param);
-
-// 错误日志
-logger.error("[ServiceName] 操作失败: {}", errorMessage, exception);
-```
-
----
-
-## 6. 数据库规范
-
-### 6.1 表命名规范
-- 系统表前缀: `sys_`(如 `sys_user`, `sys_role`)
-- 业务表前缀: `biz_`(如 `biz_project`, `biz_fund`)
-
-### 6.2 字段规范
-- 主键: `主表名_id`(如 `user_id`, `dept_id`)
-- 租户ID: `tenant_id`(必须字段,默认值 1)
-- 软删除: `deleted`(0-未删除,1-已删除)
-- 状态: `status`(1-启用,0-禁用)
-- 时间: `created_time`, `updated_time`
-
-### 6.3 BaseEntity 基类
-```java
-@Data
-public class BaseEntity implements Serializable {
- private Long tenantId; // 租户ID
- private Integer deleted; // 删除标记
- private LocalDateTime createdTime; // 创建时间
- private Long createdBy; // 创建人
- private LocalDateTime updatedTime; // 更新时间
- private Long updatedBy; // 更新人
-}
-```
-
----
-
-## 7. API 规范
-
-### 7.1 RESTful 路径规范
-```
-GET /api/v1/dept # 查询列表
-GET /api/v1/dept/{id} # 查询单个
-POST /api/v1/dept # 创建
-PUT /api/v1/dept/{id} # 更新
-DELETE /api/v1/dept/{id} # 删除
-```
-
-### 7.2 统一响应格式
-```java
-public class Result {
- private Integer code; // 200-成功,其他-失败
- private String message;
- private T data;
-}
-```
-
-### 7.3 认证路径规范
-```
-POST /api/v1/auth/login # 登录(不需要认证)
-POST /api/v1/auth/logout # 登出
-POST /api/v1/auth/refresh # 刷新Token
-```
-
----
-
-## 8. 多租户规范
-
-### 8.1 租户隔离
-- 所有业务表必须包含 `tenant_id` 字段
-- Service 层插入数据时自动设置 `tenant_id`
-- 查询时自动过滤 `tenant_id`
-
-### 8.2 默认租户
-- 系统租户: `tenant_id = 0`
-- 业务租户: `tenant_id >= 1`
-
----
-
-## 9. 编译和测试规范
-
-### 9.1 编译命令
-```bash
-# 清理编译
-cd /home/along/MyCode/wanjiabuluo/fundplatform/fundplatform
-mvn clean compile -DskipTests
-
-# 安装到本地仓库
-mvn clean install -DskipTests
-
-# 编译单个模块
-mvn clean compile -pl fund-sys -am -DskipTests
-```
-
-### 9.2 禁止的操作
-- ❌ 不要在 run_in_terminal 中重复 `cd` 到同一目录
-- ❌ 不要使用 `mvn clean` 后立即执行其他命令(应分开执行)
-
----
-
-## 10. Git 规范
-
-### 10.1 分支策略
-- `main` - 生产分支
-- `develop` - 开发分支
-- `feature/*` - 功能分支
-- `bugfix/*` - 修复分支
-
-### 10.2 提交规范
-```
-feat: 新功能
-fix: 修复bug
-refactor: 重构
-docs: 文档更新
-style: 代码格式调整
-test: 测试相关
-chore: 构建/工具链相关
-```
-
----
-
-## 11. 常见陷阱清单
-
-### 11.1 Lombok 相关
-- ✓ 每个子模块必须显式配置 maven-compiler-plugin
-- ✓ 继承 ServiceImpl 的类不能使用 @Slf4j
-- ✓ 确保所有 import lombok.* 语句存在
-
-### 11.2 Shiro 相关
-- ✓ 使用 Shiro 2.0.0(支持 jakarta.servlet)
-- ✓ 保留 spring-security-crypto(用于 BCrypt)
-- ✓ 登录接口路径配置为匿名访问
-
-### 11.3 Maven 相关
-- ✓ 避免在 pom.xml 中重复声明依赖
-- ✓ 父 pom 中未创建的子模块需注释掉
-- ✓ 使用 `-U` 参数强制更新依赖
-
-### 11.4 数据库相关
-- ✓ 初始化 SQL 主键必须与字段定义一致
-- ✓ tenant_id 必须有默认值保障机制
-- ✓ 软删除字段 deleted 默认为 0
-
----
-
-## 12. 重新生成代码的策略
-
-### 12.1 代码生成工具选择
-**选项 A**: MyBatis-Plus 代码生成器
-- 优点: 自动生成 Entity、Mapper、Service、Controller
-- 缺点: 需要手动调整生成的代码
-
-**选项 B**: 手动编写
-- 优点: 完全可控,符合规范
-- 缺点: 工作量大
-
-**选项 C**: 模板化生成
-- 优点: 可重复使用,质量稳定
-- 缺点: 需要先建立模板
-
-### 12.2 推荐策略
-1. **第一步**: 手动编写核心基础类(BaseEntity、Result、自定义异常)
-2. **第二步**: 使用 MyBatis-Plus 生成器生成基础 CRUD
-3. **第三步**: 手动完善业务逻辑和复杂查询
-4. **第四步**: 编写单元测试验证
-
-### 12.3 生成顺序
-```
-1. fund-common (基础类)
- ├── BaseEntity
- ├── Result
- └── 工具类
-
-2. fund-sys (系统模块)
- ├── 实体类 (Entity)
- ├── Mapper 接口
- ├── Service 实现
- ├── Controller
- └── Shiro 配置
-
-3. fund-gateway (网关)
- └── 路由配置
-
-4. fund-cust (客户模块)
-5. fund-proj (项目模块)
-```
-
----
-
-## 13. 架构约束
-
-### 13.1 必须遵守的架构要求
-1. ✅ 使用 Shiro 作为认证框架(架构文档要求)
-2. ✅ 实现多租户数据隔离
-3. ✅ Header 透传(X-Uid, X-Uname)
-4. ✅ 全链路日志追踪
-
-### 13.2 性能要求
-- 接口响应时间 < 500ms
-- 数据库查询使用索引
-- 使用 Redis 缓存热点数据
-
----
-
-## 14. 下一步行动
-
-### 14.1 准备工作
-- [ ] 备份当前代码
-- [ ] 清理所有 target 目录
-- [ ] 确认数据库表结构
-- [ ] 准备初始化 SQL 脚本
-
-### 14.2 代码生成
-- [ ] 生成 fund-common 基础类
-- [ ] 生成 fund-sys 实体类和 Mapper
-- [ ] 实现 Shiro 认证框架
-- [ ] 编写核心业务逻辑
-
-### 14.3 验证
-- [ ] 编译通过(mvn clean compile)
-- [ ] 启动成功
-- [ ] 登录功能正常
-- [ ] 基础 CRUD 接口正常
-
----
-
-**注意**: 本规则清单将持续更新,每次遇到问题都会添加到"常见陷阱清单"中。
-