|
@@ -104,8 +104,8 @@
|
|
|
|
|
|
|
|
<!-- 置顶排序 -->
|
|
<!-- 置顶排序 -->
|
|
|
<el-form-item label="置顶" prop="sortOrder">
|
|
<el-form-item label="置顶" prop="sortOrder">
|
|
|
- <el-input-number v-model="form.sortOrder" :min="1" controls-position="right" style="width: 200px" />
|
|
|
|
|
- <span style="margin-left: 10px; font-size: 12px; color: #909399;">最小为1,数字越小越置顶,不可重复</span>
|
|
|
|
|
|
|
+ <el-input-number v-model="form.sortOrder" :min="1" :value-on-clear="null" placeholder="留空自动排到最后" controls-position="right" style="width: 200px" />
|
|
|
|
|
+ <span style="margin-left: 10px; font-size: 12px; color: #909399;">数字越小越置顶,不可重复;新增时留空则自动排到最后</span>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<!-- 封面图片 -->
|
|
<!-- 封面图片 -->
|
|
@@ -319,15 +319,31 @@ const initForm = {
|
|
|
contactPhone: '',
|
|
contactPhone: '',
|
|
|
openTime: '',
|
|
openTime: '',
|
|
|
content: '',
|
|
content: '',
|
|
|
- sortOrder: 1,
|
|
|
|
|
|
|
+ // 留空由后端自动分配为「当前最大值+1」,避免默认值与已有记录撞车导致新增失败
|
|
|
|
|
+ sortOrder: null,
|
|
|
status: '0',
|
|
status: '0',
|
|
|
contentImages: []
|
|
contentImages: []
|
|
|
};
|
|
};
|
|
|
const form = ref({ ...initForm, contentImages: [] });
|
|
const form = ref({ ...initForm, contentImages: [] });
|
|
|
const openTimeRange = ref(null);
|
|
const openTimeRange = ref(null);
|
|
|
|
|
|
|
|
|
|
+// 置顶排序校验:新增允许留空(后端自动排到最后),修改必须是一个不小于1的有效值
|
|
|
|
|
+// 后端 updateByBo 对 null/小于1 会直接抛「置顶排序最小为1」,这里提前拦住,避免保存时才报错
|
|
|
|
|
+function validateSortOrder(rule, value, callback) {
|
|
|
|
|
+ const empty = value === null || value === undefined || value === '';
|
|
|
|
|
+ if (empty) {
|
|
|
|
|
+ if (!form.value.id) return callback();
|
|
|
|
|
+ return callback(new Error('请填写置顶排序值,最小为1且不可与其他记录重复'));
|
|
|
|
|
+ }
|
|
|
|
|
+ if (Number(value) < 1) {
|
|
|
|
|
+ return callback(new Error('置顶排序最小为1'));
|
|
|
|
|
+ }
|
|
|
|
|
+ callback();
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
const rules = {
|
|
const rules = {
|
|
|
- title: [{ required: true, message: '标题不能为空', trigger: 'blur' }]
|
|
|
|
|
|
|
+ title: [{ required: true, message: '标题不能为空', trigger: 'blur' }],
|
|
|
|
|
+ sortOrder: [{ validator: validateSortOrder, trigger: 'blur' }]
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// ========== 地图相关 ==========
|
|
// ========== 地图相关 ==========
|
|
@@ -663,7 +679,8 @@ async function handleUpdate(row) {
|
|
|
contactPhone: data.contactPhone || '',
|
|
contactPhone: data.contactPhone || '',
|
|
|
openTime: data.openTime || '',
|
|
openTime: data.openTime || '',
|
|
|
content: data.content || '',
|
|
content: data.content || '',
|
|
|
- sortOrder: data.sortOrder || 0,
|
|
|
|
|
|
|
+ // 库里若为 0/NULL 这类无效值,保持为空强制用户重填,不能兜底成 0(后端会拒绝保存)
|
|
|
|
|
+ sortOrder: data.sortOrder && data.sortOrder >= 1 ? data.sortOrder : null,
|
|
|
status: data.status || '0',
|
|
status: data.status || '0',
|
|
|
contentImages: (data.imageList || []).map(img => img.imageUrl)
|
|
contentImages: (data.imageList || []).map(img => img.imageUrl)
|
|
|
};
|
|
};
|