|
@@ -162,7 +162,16 @@
|
|
|
|
|
|
|
|
<!-- 开放时间 -->
|
|
<!-- 开放时间 -->
|
|
|
<el-form-item label="开放时间" prop="openTime">
|
|
<el-form-item label="开放时间" prop="openTime">
|
|
|
- <el-input v-model="form.openTime" placeholder="空则不显示" />
|
|
|
|
|
|
|
+ <el-time-picker
|
|
|
|
|
+ v-model="openTimeRange"
|
|
|
|
|
+ is-range
|
|
|
|
|
+ format="HH:mm"
|
|
|
|
|
+ range-separator="至"
|
|
|
|
|
+ start-placeholder="开始时间"
|
|
|
|
|
+ end-placeholder="结束时间"
|
|
|
|
|
+ style="width: 100%"
|
|
|
|
|
+ />
|
|
|
|
|
+ <div class="form-tip">不选则APP端不显示</div>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<!-- 联系电话 -->
|
|
<!-- 联系电话 -->
|
|
@@ -310,6 +319,7 @@ const initForm = {
|
|
|
contentImages: []
|
|
contentImages: []
|
|
|
};
|
|
};
|
|
|
const form = ref({ ...initForm, contentImages: [] });
|
|
const form = ref({ ...initForm, contentImages: [] });
|
|
|
|
|
+const openTimeRange = ref(null);
|
|
|
|
|
|
|
|
const rules = {
|
|
const rules = {
|
|
|
title: [{ required: true, message: '标题不能为空', trigger: 'blur' }]
|
|
title: [{ required: true, message: '标题不能为空', trigger: 'blur' }]
|
|
@@ -628,6 +638,7 @@ function handleDelete(row) {
|
|
|
// ========== 新增/修改 ==========
|
|
// ========== 新增/修改 ==========
|
|
|
function handleAdd() {
|
|
function handleAdd() {
|
|
|
form.value = { ...initForm, contentImages: [] };
|
|
form.value = { ...initForm, contentImages: [] };
|
|
|
|
|
+ openTimeRange.value = null;
|
|
|
dialogTitle.value = '新增旅游推荐';
|
|
dialogTitle.value = '新增旅游推荐';
|
|
|
dialogVisible.value = true;
|
|
dialogVisible.value = true;
|
|
|
}
|
|
}
|
|
@@ -651,6 +662,21 @@ async function handleUpdate(row) {
|
|
|
status: data.status || '0',
|
|
status: data.status || '0',
|
|
|
contentImages: (data.imageList || []).map(img => img.imageUrl)
|
|
contentImages: (data.imageList || []).map(img => img.imageUrl)
|
|
|
};
|
|
};
|
|
|
|
|
+ // 解析开放时间字符串为时间范围选择器值
|
|
|
|
|
+ if (data.openTime) {
|
|
|
|
|
+ const parts = data.openTime.split(/[-–~至]/);
|
|
|
|
|
+ if (parts.length === 2) {
|
|
|
|
|
+ const [sh, sm] = parts[0].trim().split(':').map(Number);
|
|
|
|
|
+ const [eh, em] = parts[1].trim().split(':').map(Number);
|
|
|
|
|
+ const start = new Date(); start.setHours(sh || 0, sm || 0, 0, 0);
|
|
|
|
|
+ const end = new Date(); end.setHours(eh || 0, em || 0, 0, 0);
|
|
|
|
|
+ openTimeRange.value = [start, end];
|
|
|
|
|
+ } else {
|
|
|
|
|
+ openTimeRange.value = null;
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ openTimeRange.value = null;
|
|
|
|
|
+ }
|
|
|
dialogTitle.value = '修改旅游推荐';
|
|
dialogTitle.value = '修改旅游推荐';
|
|
|
dialogVisible.value = true;
|
|
dialogVisible.value = true;
|
|
|
} catch (err) {
|
|
} catch (err) {
|
|
@@ -661,6 +687,13 @@ async function handleUpdate(row) {
|
|
|
function submitForm() {
|
|
function submitForm() {
|
|
|
formRef.value.validate(async (valid) => {
|
|
formRef.value.validate(async (valid) => {
|
|
|
if (!valid) return;
|
|
if (!valid) return;
|
|
|
|
|
+ // 将时间选择器的值转为字符串存入openTime
|
|
|
|
|
+ if (openTimeRange.value && openTimeRange.value.length === 2) {
|
|
|
|
|
+ const fmt = (d) => `${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}`;
|
|
|
|
|
+ form.value.openTime = `${fmt(openTimeRange.value[0])}-${fmt(openTimeRange.value[1])}`;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ form.value.openTime = '';
|
|
|
|
|
+ }
|
|
|
try {
|
|
try {
|
|
|
if (form.value.id) {
|
|
if (form.value.id) {
|
|
|
await updateTravelRecommendation(form.value);
|
|
await updateTravelRecommendation(form.value);
|