diff --git a/docs/sql/add_valuation_menu.sql b/docs/sql/add_valuation_menu.sql
new file mode 100644
index 0000000..d08691d
--- /dev/null
+++ b/docs/sql/add_valuation_menu.sql
@@ -0,0 +1,24 @@
+-- 新增估值管理菜单
+-- 创建时间: 2025-11-13
+
+-- 插入一级目录:估值管理
+INSERT INTO menu (id, name, menu_type, icon, path, 'order', parent_id, is_hidden, component, keepalive, redirect, created_at, updated_at)
+VALUES
+ (18, '估值管理', 'catalog', 'carbon:calculator', '/valuation', 4, 0, 0, 'Layout', 0, '/valuation/audit', datetime('now'), datetime('now'));
+
+-- 插入二级菜单:审核列表
+INSERT INTO menu (id, name, menu_type, icon, path, 'order', parent_id, is_hidden, component, keepalive, redirect, created_at, updated_at)
+VALUES
+ (19, '审核列表', 'menu', 'carbon:task-approved', 'audit', 1, 18, 0, '/valuation/audit', 0, NULL, datetime('now'), datetime('now'));
+
+-- 为管理员角色分配菜单权限
+INSERT INTO role_menu (role_id, menu_id)
+VALUES
+ (1, 18),
+ (1, 19);
+
+-- 为普通用户角色分配菜单权限
+INSERT INTO role_menu (role_id, menu_id)
+VALUES
+ (2, 18),
+ (2, 19);
diff --git a/web/src/api/index.js b/web/src/api/index.js
index b0b7f6c..64bfa43 100644
--- a/web/src/api/index.js
+++ b/web/src/api/index.js
@@ -53,4 +53,13 @@ export default {
deleteInvoice: (params = {}) => request.delete('/invoice/delete', { params }),
updateInvoiceStatus: (data = {}) => request.post('/invoice/update-status', data),
remindInvoice: (data = {}) => request.post('/invoice/remind', data),
+ // valuation (估值评估)
+ getValuationList: (params = {}) => request.get('/valuation', { params }),
+ getValuationById: (params = {}) => request.get(`/valuation/${params.valuation_id}`),
+ createValuation: (data = {}) => request.post('/valuation', data),
+ updateValuation: (data = {}) => request.put(`/valuation/${data.id}`, data),
+ deleteValuation: (params = {}) => request.delete(`/valuation/${params.valuation_id}`),
+ approveValuation: (data = {}) => request.post(`/valuation/${data.valuation_id}/approve`, data),
+ rejectValuation: (data = {}) => request.post(`/valuation/${data.valuation_id}/reject`, data),
+ updateValuationNotes: (data = {}) => request.put(`/valuation/${data.valuation_id}/admin-notes`, data),
}
diff --git a/web/src/views/valuation/audit/index.vue b/web/src/views/valuation/audit/index.vue
new file mode 100644
index 0000000..fb46181
--- /dev/null
+++ b/web/src/views/valuation/audit/index.vue
@@ -0,0 +1,394 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ modalForm.id }}
+
+
+ {{ modalForm.phone }}
+
+
+ {{ modalForm.wechat }}
+
+
+ {{ formatAmount(modalForm.valuation_result) }}
+
+
+ {{ modalForm.asset_name || '-' }}
+
+
+ {{ modalForm.institution || '-' }}
+
+
+ {{ modalForm.industry || '-' }}
+
+
+ {{ modalForm.heritage_level || '-' }}
+
+
+ {{ formatDate(modalForm.created_at) }}
+
+
+ {{ modalForm.reviewed_at ? formatDate(modalForm.reviewed_at) : '-' }}
+
+
+ {{ renderStatus(modalForm.status) }}
+
+
+ {{ modalForm.admin_notes || '-' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 通过
+
+
+
+
+
+ 拒绝
+
+ 取消
+
+
+
+
+
+