feat(admin): 订单管理重构、设置管理增强、短信签名模板管理及通知渠道优化
Build and Deploy Vue3 / build (push) Successful in 1m27s
Build and Deploy Vue3 / deploy (push) Successful in 36s

- 订单列表重构为卡片式布局并新增筛选功能

- 设置管理支持struct/struct_list类型配置

- 新增短信签名和模板独立管理页面

- 通知渠道新增短信渠道配置

- 产品参数管理优化

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
shiran
2026-06-15 18:27:23 +08:00
parent 3227a50f9a
commit 4180f73c53
14 changed files with 3811 additions and 363 deletions
+6 -6
View File
@@ -488,11 +488,11 @@
<div class="tk-section-title">数值范围配置</div>
<el-form-item label="范围类型" prop="range_type">
<el-select v-model="paramValueForm.range_type" placeholder="请选择范围类型" style="width: 100%">
<el-option label="小于 (before)" value="before" />
<el-option label="大于 (after)" value="after" />
<el-option label="小于等于 (before)" value="before" />
<el-option label="大于等于 (after)" value="after" />
<el-option label="等于 (equal)" value="equal" />
</el-select>
<div class="form-tip">before: 数值 &lt; phase 时匹配 | after: 数值 &gt; phase 时匹配</div>
<div class="form-tip">before: 数值 phase 时匹配 | after: 数值 phase 时匹配</div>
</el-form-item>
<el-form-item label="阈值" prop="attr_range">
<el-input-number v-model="paramValueForm.attr_range" :min="0" placeholder="范围阈值" style="width: 100%" />
@@ -1532,7 +1532,7 @@ const getArgTypeTag = (type) => {
// 范围类型显示
const getRangeTypeText = (type) => {
const typeMap = { 'after': '大于 ', 'before': '小于 ', 'equal': '等于 ' }
const typeMap = { 'after': '大于等于 ≥', 'before': '小于等于 ≤', 'equal': '等于 ' }
return typeMap[type] || type || '-'
}
@@ -1960,9 +1960,9 @@ const findMatchingNumberAttr = (spec, numValue) => {
const phase = attr.phase || 0
const rangeType = attr.rangeType || 'before'
if (rangeType === 'before' && numValue < phase) {
if (rangeType === 'before' && numValue <= phase) {
return attr
} else if (rangeType === 'after' && numValue > phase) {
} else if (rangeType === 'after' && numValue >= phase) {
return attr
} else if (rangeType === 'equal' && numValue === phase) {
return attr
@@ -275,13 +275,13 @@
<el-form-item v-if="currentParam?.type === 'number'" label="数值范围" prop="attr_range">
<div class="range-config-row">
<el-select v-model="paramValueForm.range_type" class="range-type-select">
<el-option label="" value="before">
<span class="range-opt-symbol"></span>
<span class="range-opt-desc">小于</span>
<el-option label="" value="before">
<span class="range-opt-symbol"></span>
<span class="range-opt-desc">小于等于</span>
</el-option>
<el-option label="" value="after">
<span class="range-opt-symbol"></span>
<span class="range-opt-desc">大于</span>
<el-option label="" value="after">
<span class="range-opt-symbol"></span>
<span class="range-opt-desc">大于等于</span>
</el-option>
<el-option label="" value="equal">
<span class="range-opt-symbol"></span>
@@ -635,7 +635,7 @@ const getArgTypeTag = (type) => {
return tagMap[type] || 'info'
}
const getRangeTypeText = (type) => {
const typeMap = { 'after': '', 'before': '', 'equal': '' }
const typeMap = { 'after': '', 'before': '', 'equal': '' }
return typeMap[type] || type || '-'
}
@@ -548,8 +548,8 @@ const findMatchingNumberAttr = (spec, numValue) => {
for (const attr of sortedAttrs) {
const phase = attr.phase || 0
const rangeType = attr.rangeType || 'before'
if (rangeType === 'before' && numValue < phase) return attr
else if (rangeType === 'after' && numValue > phase) return attr
if (rangeType === 'before' && numValue <= phase) return attr
else if (rangeType === 'after' && numValue >= phase) return attr
else if (rangeType === 'equal' && numValue === phase) return attr
}
return sortedAttrs[sortedAttrs.length - 1]