diff --git a/admin-console/src/views/RecordView.vue b/admin-console/src/views/RecordView.vue index 70431ad..76a7eb0 100644 --- a/admin-console/src/views/RecordView.vue +++ b/admin-console/src/views/RecordView.vue @@ -2,6 +2,10 @@ + + 用户: {{ filterUserId }} + x + ~ @@ -83,7 +87,8 @@ export default { pageSize: 20, keyword: '', dateFrom: '', - dateTo: '' + dateTo: '', + filterUserId: '' } }, computed: { @@ -95,9 +100,7 @@ export default { user_id: { immediate: true, handler(val) { - if (val) { - this.keyword = val - } + this.filterUserId = val || '' this.loadRecords() } } @@ -110,6 +113,7 @@ export default { page: this.page, page_size: this.pageSize, keyword: this.keyword, + user_id: this.filterUserId, date_from: this.dateFrom, date_to: this.dateTo } @@ -124,6 +128,11 @@ export default { this.page = 1 this.loadRecords() }, + clearUserFilter() { + this.filterUserId = '' + this.page = 1 + this.loadRecords() + }, onPage(p) { this.page = p this.loadRecords() @@ -156,7 +165,7 @@ export default { formatDate: formatDateUtil, async onExport() { try { - const data = await get('/api/v1/admin/records', { page: 1, page_size: 9999, keyword: this.keyword, date_from: this.dateFrom, date_to: this.dateTo }) + const data = await get('/api/v1/admin/records', { page: 1, page_size: 9999, keyword: this.keyword, user_id: this.filterUserId, date_from: this.dateFrom, date_to: this.dateTo }) var REGION_MAP = { 1: '左脸', 2: '右脸', 4: '额头', 8: '下巴', 16: '鼻', 32: '左眼', 64: '右眼' } const records = data.records || [] exportCSV('records_' + new Date().toISOString().slice(0, 10) + '.csv', @@ -192,4 +201,26 @@ export default { color: #999; font-size: 14px; } + +.filter-tag { + display: flex; + align-items: center; + gap: 4px; + background: #fff0f6; + border: 1px solid #E6508C; + border-radius: 4px; + padding: 4px 8px; + font-size: 12px; +} + +.filter-tag-text { + color: #E6508C; +} + +.filter-tag-close { + color: #E6508C; + cursor: pointer; + font-weight: bold; + margin-left: 4px; +} diff --git a/server/src/dao/treatment.dao.js b/server/src/dao/treatment.dao.js index afa56dd..97084ff 100644 --- a/server/src/dao/treatment.dao.js +++ b/server/src/dao/treatment.dao.js @@ -105,9 +105,13 @@ async function updateDevice(deviceId, battery, temperature) { * @param {number} opts.offset * @returns {Promise<{records: Array, total: number}>} */ -async function listAdmin({ keyword, dateFrom, dateTo, pageSize, offset }) { +async function listAdmin({ keyword, userId, dateFrom, dateTo, pageSize, offset }) { const conditions = [] const params = {} + if (userId) { + conditions.push('r.user_id = :user_id') + params.user_id = userId + } if (keyword) { conditions.push('u.nickname LIKE :kw') params.kw = '%' + keyword + '%' diff --git a/server/src/routes/admin.js b/server/src/routes/admin.js index 5e10f23..9e35a07 100644 --- a/server/src/routes/admin.js +++ b/server/src/routes/admin.js @@ -227,6 +227,7 @@ router.get('/records', requireAdmin, wrap(async (req, res) => { const { page, pageSize, offset } = pageParams(req.query) const { records, total } = await treatmentDao.listAdmin({ keyword: req.query.keyword, + userId: req.query.user_id, dateFrom: req.query.date_from, dateTo: req.query.date_to, pageSize,