行程路线

This commit is contained in:
helen 2024-12-23 10:41:20 +08:00
parent 8481bc676e
commit 5071d63dcb
4 changed files with 138 additions and 42 deletions

View File

@ -88,3 +88,17 @@ export const activityAnsweringlist = (query?: ActivityQuery): AxiosPromise<Activ
params: query
});
};
/**
*
* @param query
* @returns {*}
*/
export const activityUsersList = (query?: ActivityQuery): AxiosPromise<ActivityVO[]> => {
return request({
url: '/manage/activityUsers/list',
method: 'get',
params: query
});
};

View File

@ -41,7 +41,11 @@
<el-table-column label="活动描述" align="center" fixed prop="activityDescription" width="180px" show-overflow-tooltip />
<el-table-column label="活动图片" align="center" prop="" />
<el-table-column label="活动人数" align="center" prop="activityUserCount" />
<el-table-column label="报名人数" align="center" prop="registrationCount" />
<el-table-column label="报名人数" align="center" prop="registrationCount">
<template #default="scope">
<el-button type="primary" link @click="registrationCountnum(scope.row)">{{ scope.row.registrationCount }}</el-button>
</template>
</el-table-column>
<el-table-column label="挑选玩友" align="center" prop="isSelected">
<template #default="scope">
<div>{{ scope.row.isSelected == 1 ? '是' : '否' }}</div>
@ -205,7 +209,16 @@
</template>
<script setup name="Activity" lang="ts">
import { listActivity, getActivity, delActivity, addActivity, updateActivity, activityprocess, activityAnsweringlist } from '@/api/manage/activity';
import {
listActivity,
getActivity,
delActivity,
addActivity,
updateActivity,
activityprocess,
activityAnsweringlist,
activityUsersList
} from '@/api/manage/activity';
import { ActivityVO, ActivityQuery, ActivityForm } from '@/api/manage/activity/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@ -219,9 +232,11 @@ const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const Answeringtotal = ref(0);
const activityUserstotal = ref(0);
const listdatatime = ref([{ activityTime: '', planContent: '' }]);
const Answeringlist = ref([]);
const activityUsersListarr = ref([]);
const queryFormRef = ref<ElFormInstance>();
const activityFormRef = ref<ElFormInstance>();
@ -255,6 +270,11 @@ const queryAnswerings = {
pageSize: 10,
activityId: undefined
};
const queryUsers = {
pageNum: 1,
pageSize: 10,
activityId: undefined
};
const data = reactive<PageData<ActivityForm, ActivityQuery>>({
form: { ...initFormData },
queryParams: {
@ -411,6 +431,14 @@ const wendalist = async (row) => {
Answeringtotal.value = res.total;
wendadialog.visible = true;
};
//
const registrationCountnum = async (row) => {
queryUsers.activityId = row.id;
const res = await activityUsersList(queryUsers);
activityUsersListarr.value = res.rows;
activityUserstotal.value = res.total;
numdialog.visible = true;
};
onMounted(() => {
getList();
});

View File

@ -11,7 +11,6 @@
<el-select v-model="queryParams.status" placeholder="请选择发布状态" style="width: 200px" @keyup.enter="handleQuery">
<el-option label="未发布" value="0" />
<el-option label="已发布" value="1" />
<el-option label="全部" value="" />
</el-select>
</el-form-item>
<el-form-item>
@ -52,11 +51,7 @@
</template>
</el-table-column>
<el-table-column label="更新者" align="center" prop="updateByName" />
<el-table-column label="更新时间" align="center" prop="updateTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime" width="180"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip v-if="scope.row.status != 1" content="编辑" placement="top">
@ -94,17 +89,17 @@
<!-- </el-form-item>-->
<el-row>
<el-col :span="24">
<el-form-item label="地理位置" prop="introduce">
<el-form-item label="地理位置" prop="address">
<!-- <el-input v-model="searchLocation" type="text" placeholder="请输入地址信息" clearable /> -->
<el-input
v-model="searchLocation"
v-model="form.address"
placeholder="请输入地址信息"
class="input-with-select"
style="width: 300px"
@keyup.enter="debouncedSearch(searchLocation)"
@keyup.enter="debouncedSearch(form.address)"
>
<template #append>
<el-button :icon="Search" @click="debouncedSearch(searchLocation)" />
<el-button :icon="Search" @click="debouncedSearch(form.address)" />
</template>
</el-input>
</el-form-item>
@ -122,9 +117,6 @@
</tlbs-map>
</el-col>
</el-row>
<el-form-item label="详细地址" prop="address" style="margin-top: 15px">
<el-input v-model="form.address" placeholder="输入地理位置或点击度图上的地点" disabled />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
@ -199,7 +191,9 @@ const data = reactive<PageData<HotelForm, HotelQuery>>({
latitude: [{ required: true, message: '纬度不能为空', trigger: 'blur' }],
province: [{ required: true, message: '省份编码不能为空', trigger: 'blur' }],
city: [{ required: true, message: '市级编码不能为空', trigger: 'blur' }],
county: [{ required: true, message: '区县编码不能为空', trigger: 'blur' }]
county: [{ required: true, message: '区县编码不能为空', trigger: 'blur' }],
address: [{ required: true, message: '地理位置不能为空', trigger: 'blur' }]
}
});
const imgUrlList = reactive({

View File

@ -134,11 +134,14 @@
</div>
</div>
<div>{{ item.description }}</div>
<div style="font-weight: 600">景点 {{ item.articleName }}</div>
<div>建议游玩{{ item.routeHours }}小时 | {{ item.address }}</div>
<div>{{ item.recommend }}</div>
<div>{{ item.addressDes }}</div>
<div>{{ item.guide }}</div>
<div v-for="(er, index_r) in item.lowerList">
<div style="font-weight: 600">景点{{ index_r + 1 }} {{ er.articleName }}</div>
<div>建议游玩{{ er.routeHours }}小时 | {{ er.address }}</div>
<div>{{ er.recommend }}</div>
<div>{{ er.addressDes }}</div>
<div>{{ er.guide }}</div>
</div>
<div class="hotellistcalss">
<div v-for="rr in item.hotelVoList" class="hotelitem">
<div class="title">{{ rr.name }}</div>
@ -168,25 +171,26 @@
<el-input v-model="routeDetailsList.description" placeholder="请输入描述" style="width: 500px" autosize type="textarea" />
</el-form-item>
<el-form-item label="添加地点">
<el-button type="primary">添加景点</el-button>
<el-button type="primary" @click="addjingdain">添加景点</el-button>
</el-form-item>
<div class="articlelist">
<div v-for="(item, index) in routeDetailsList.lowerList" class="articlelist">
<CircleClose v-if="index != 0" style="width: 2em; height: 2em; position: relative; left: 98%" @click="delLowerList(index)" />
<el-form-item label="添加地点">
<el-select v-model="routeDetailsList.articleId" placeholder="请选择标记地点" size="large" style="width: 500px">
<el-select v-model="item.articleId" placeholder="请选择标记地点" size="large" style="width: 500px">
<el-option v-for="item in sys_user_contentOptions" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="建议游玩时长">
<el-input v-model="routeDetailsList.routeHours" placeholder="请输入建议游玩时长" style="width: 500px" />
<el-input v-model="item.routeHours" placeholder="请输入建议游玩时长" style="width: 500px" />
</el-form-item>
<el-form-item label="推荐语">
<el-input v-model="routeDetailsList.recommend" placeholder="请输入推荐语" style="width: 500px" />
<el-input v-model="item.recommend" placeholder="请输入推荐语" style="width: 500px" />
</el-form-item>
<el-form-item label="地点描述">
<el-input v-model="routeDetailsList.addressDes" placeholder="请输入地点描述" style="width: 500px" autosize type="textarea" />
<el-input v-model="item.addressDes" placeholder="请输入地点描述" style="width: 500px" autosize type="textarea" />
</el-form-item>
<el-form-item label="避坑指南">
<el-input v-model="routeDetailsList.guide" placeholder="请输入避坑指南" style="width: 500px" autosize type="textarea" />
<el-input v-model="item.guide" placeholder="请输入避坑指南" style="width: 500px" autosize type="textarea" />
</el-form-item>
</div>
@ -227,11 +231,14 @@
<div class="title">DAY{{ index + 1 }}·{{ item.title }}</div>
</div>
<div>{{ item.description }}</div>
<div style="font-weight: 600">景点 {{ item.articleName }}</div>
<div>建议游玩{{ item.routeHours }}小时 | {{ item.address }}</div>
<div>{{ item.recommend }}</div>
<div>{{ item.addressDes }}</div>
<div>{{ item.guide }}</div>
<div v-for="(rr, index) in item.lowerList" :key="item.id">
<div style="font-weight: 600">景点 {{ index + 1 }} &nbsp;&nbsp;&nbsp;{{ rr.articleName }}</div>
<div>建议游玩{{ rr.routeHours }}小时 | {{ rr.address }}</div>
<div>{{ rr.recommend }}</div>
<div>{{ rr.addressDes }}</div>
<div>{{ rr.guide }}</div>
</div>
<div class="hotellistcalss">
<div v-for="rr in item.hotelVoList" class="hotelitem">
<div class="title">{{ rr.name }}</div>
@ -284,7 +291,15 @@ const regiontree = ref([]);
const props = { multiple: true, value: 'id' };
const queryFormRef = ref<ElFormInstance>();
const RouteFormRef = ref<ElFormInstance>();
const jingdianList = ref([
{
articleId: '',
routeHours: '',
recommend: '',
addressDes: '',
guide: ''
}
]);
const dialog = reactive<DialogOption>({
visible: false,
title: ''
@ -350,13 +365,13 @@ const data = reactive<PageData<RouteForm, RouteQuery>>({
city: [{ required: true, message: '市/区不能为空', trigger: 'blur' }],
remark: [{ required: true, message: '个人简介不能为空', trigger: 'blur' }],
memberLevel: [{ required: true, message: '会员等级不能为空', trigger: 'blur' }],
tagId: [{ required: true, message: '标签不能为空', trigger: 'blur' }],
// tagId: [{ required: true, message: '', trigger: 'blur' }],
appropriateTime: [{ required: true, message: '最佳时间', trigger: 'blur' }],
routeDriveHour: [{ required: true, message: '行驶时长', trigger: 'blur' }],
routeMileage: [{ required: true, message: '行程里数', trigger: 'blur' }],
routeDays: [{ required: true, message: '行程天数', trigger: 'blur' }],
treevalue: [{ required: true, message: '涉及的行政区', trigger: 'blur' }],
tagvalue: [{ required: true, message: '路线标签', trigger: 'blur' }],
region: [{ required: true, message: '涉及的行政区', trigger: 'blur' }],
tagId: [{ required: true, message: '标签不能为空', trigger: 'blur' }],
title: [{ required: true, message: '线路标题', trigger: 'blur' }]
}
});
@ -370,7 +385,16 @@ const routeDetailsList = ref({
articleId: '',
addressDes: '',
guide: '',
hotelIds: ''
hotelIds: '',
lowerList: [
{
articleId: '',
routeHours: '',
recommend: '',
addressDes: '',
guide: ''
}
]
});
const bookrouteDetailsList = ref([]);
const options = [
@ -507,7 +531,7 @@ const submitForm = (type) => {
form.value.status = Number(type);
form.value.routeDetailsList = bookrouteDetailsList.value;
console.log(form.value, bookrouteDetailsList.value);
// return
// return;
RouteFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
@ -564,7 +588,26 @@ const gethotelall = async () => {
//
const add = () => {
routeDetailsList.value = {};
routeDetailsList.value = {
title: '',
description: '',
routeHours: '',
recommend: '',
articleId: '',
addressDes: '',
guide: '',
hotelIds: '',
lowerList: [
{
articleId: '',
routeHours: '',
recommend: '',
addressDes: '',
guide: ''
}
]
};
hotelallvalue.value = [];
addressdialog.visible = true;
addressdialog.title = `添加DAY${bookrouteDetailsList.value.length + 1}行程`;
};
@ -580,7 +623,9 @@ const editlistitem = (item, index) => {
hotelallvalue.value = extractedIds;
};
//
const dellistitem = (index) => {};
const dellistitem = (index) => {
bookrouteDetailsList.value.splice(index, 1);
};
const savecancel = () => {
addressdialog.visible = false;
};
@ -674,6 +719,21 @@ const addressdata = (ids: string | null) => {
console.log(addressarray, 'qqqq');
return addressarray;
};
//
const addjingdain = () => {
routeDetailsList.value.lowerList.push({
articleId: '',
routeHours: '',
recommend: '',
addressDes: '',
guide: ''
});
};
//
const delLowerList = (index) => {
// bookrouteDetailsList.lowerList.splice(index, 1);
routeDetailsList.value.lowerList.splice(index, 1);
};
</script>
<style lang="scss" scoped>
.el-card :deep(.el-card__body) {
@ -723,6 +783,6 @@ const addressdata = (ids: string | null) => {
margin: 20px auto;
padding: 20px;
border-radius: 20px;
background-color:#f2f2f2 ;
background-color: #f2f2f2;
}
</style>