Compare commits
	
		
			2 Commits
		
	
	
		
			4d0e340fee
			...
			9768b04c88
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 9768b04c88 | |||
| 95a14f596c | 
| @ -43,9 +43,9 @@ export const addBanned = (data: BannedForm) => { | |||||||
|  * 修改举报 |  * 修改举报 | ||||||
|  * @param data |  * @param data | ||||||
|  */ |  */ | ||||||
| export const updateBanned = (data: BannedForm) => { | export const updatemanage = (data: BannedForm) => { | ||||||
|   return request({ |   return request({ | ||||||
|     url: '/manage/banned', |     url: '/manage/report', | ||||||
|     method: 'put', |     method: 'put', | ||||||
|     data: data |     data: data | ||||||
|   }); |   }); | ||||||
|  | |||||||
| @ -95,3 +95,14 @@ export const productCategoryall = (query?: MkJigsawQuery): AxiosPromise<MkJigsaw | |||||||
|     params: query |     params: query | ||||||
|   }); |   }); | ||||||
| }; | }; | ||||||
|  | /** | ||||||
|  |  * 参与游戏人数 | ||||||
|  |  * @param query | ||||||
|  |  */ | ||||||
|  | export const mkJoinlist = (query?: MkJigsawQuery): AxiosPromise<MkJigsawVO[]> => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/manage/mkJoin/list', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  | |||||||
| @ -2,17 +2,25 @@ | |||||||
|   <!-- 带有搜索地点的地图 --> |   <!-- 带有搜索地点的地图 --> | ||||||
|   <div> |   <div> | ||||||
|     <el-form-item :label="title"> |     <el-form-item :label="title"> | ||||||
|       <el-input |       <el-select | ||||||
|         v-model="form.address" |         v-model="searchLocation" | ||||||
|         :placeholder="`请输入${title}`" |         filterable | ||||||
|         class="input-with-select" |         remote | ||||||
|  |         reserve-keyword | ||||||
|  |         clearable | ||||||
|  |         placeholder="请输入地址信息" | ||||||
|  |         :remote-method="remoteMethod" | ||||||
|  |         @change="selectChnange" | ||||||
|         style="width: 300px" |         style="width: 300px" | ||||||
|         @keyup.enter="debouncedSearch(form.address)" |  | ||||||
|       > |       > | ||||||
|         <template #append> |         <el-option | ||||||
|           <el-button :icon="Search" @click="debouncedSearch(form.address)" /> |           v-for="item in locationOptions" | ||||||
|         </template> |           :key="item.id" | ||||||
|       </el-input> |           :label="item.title + '      ' + item.province + ' - ' + item.city" | ||||||
|  |           :value="item.province + item.city + item.title" | ||||||
|  |         /> | ||||||
|  |         <!-- :value="item.ad_info.province+item.ad_info.city+item.title" /> --> | ||||||
|  |       </el-select> | ||||||
|     </el-form-item> |     </el-form-item> | ||||||
|     <tlbs-map |     <tlbs-map | ||||||
|       ref="map" |       ref="map" | ||||||
| @ -26,6 +34,15 @@ | |||||||
|     > |     > | ||||||
|       <tlbs-multi-marker :geometries="geometries" :styles="styles" :options="options" /> |       <tlbs-multi-marker :geometries="geometries" :styles="styles" :options="options" /> | ||||||
|     </tlbs-map> |     </tlbs-map> | ||||||
|  |     <el-form-item label="详细地址" prop="address" style="margin-top: 15px"> | ||||||
|  |       <el-input v-model="form.address" placeholder="输入地理位置或点击度图上的地点" disabled /> | ||||||
|  |     </el-form-item> | ||||||
|  |     <el-form-item label="经度" prop="longitude"> | ||||||
|  |       <el-input v-model="form.longitude" placeholder="输入地理位置或点击度图上的地点" disabled /> | ||||||
|  |     </el-form-item> | ||||||
|  |     <el-form-item label="纬度" prop="latitude"> | ||||||
|  |       <el-input v-model="form.latitude" placeholder="输入地理位置或点击度图上的地点" disabled /> | ||||||
|  |     </el-form-item> | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| @ -73,7 +90,39 @@ const form = ref( | |||||||
|     regionCode: '' |     regionCode: '' | ||||||
|   } |   } | ||||||
| ); | ); | ||||||
|  | const searchLocation = ref(props.datas.address||''); // 搜索地点 | ||||||
|  | 
 | ||||||
|  | const locationOptions = ref([]); //腾讯地图返回的搜索地址列表 | ||||||
| watch(() => props.modelValue); | watch(() => props.modelValue); | ||||||
|  | // 地理位置 输入实时搜索 | ||||||
|  | const remoteMethod = (query: string) => { | ||||||
|  |   if (query !== '') { | ||||||
|  |     // 调用腾讯地图API进行搜索,并展示在地图上 | ||||||
|  |     // geocoder(query).then((result) => { | ||||||
|  |     //   console.log(result); | ||||||
|  |     // }); | ||||||
|  |     console.log(query); | ||||||
|  |     // jsonp(`https://apis.map.qq.com/ws/place/v1/search?key=${'6XFBZ-SAVLT-JGIX2-VOLMK-6S2H3-XUBGO'}&keyword=${encodeURI(query)}&boundary=nearby(20.018883,110.348801,1000)&output=jsonp`, {}).then((res) => { | ||||||
|  |     jsonp( | ||||||
|  |       `https://apis.map.qq.com/ws/place/v1/suggestion?key=${'6XFBZ-SAVLT-JGIX2-VOLMK-6S2H3-XUBGO'}&keyword=${encodeURI(query)}®ion=三亚市®ion_fix=0&output=jsonp`, | ||||||
|  |       {} | ||||||
|  |     ).then((res) => { | ||||||
|  |       // if (res.region.title!=='海南省') { | ||||||
|  |       //   proxy?.$modal.msgError('仅支持海南省地理位置'); | ||||||
|  |       //   return | ||||||
|  |       // } | ||||||
|  |       if (res.status == 0) { | ||||||
|  |         locationOptions.value = res.data; | ||||||
|  |       } | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  | // 选择地理位置 下拉框值变化 | ||||||
|  | const selectChnange = (val: string) => { | ||||||
|  |   if (val) { | ||||||
|  |     debouncedSearch(searchLocation.value); | ||||||
|  |   } | ||||||
|  | }; | ||||||
| // 点击地点,获取经纬度及地址信息 | // 点击地点,获取经纬度及地址信息 | ||||||
| const onClick = (e: any) => { | const onClick = (e: any) => { | ||||||
|   jsonp( |   jsonp( | ||||||
| @ -82,15 +131,15 @@ const onClick = (e: any) => { | |||||||
|   ).then((data) => { |   ).then((data) => { | ||||||
|     if (data.status == 0) { |     if (data.status == 0) { | ||||||
|       if (form.value) { |       if (form.value) { | ||||||
|         // form.value.address = |         form.value.address = | ||||||
|         //   data.result.address_component.province + |           data.result.address_component.province + | ||||||
|         //   data.result.address_component.city + |           data.result.address_component.city + | ||||||
|         //   data.result.address_component.district + |           data.result.address_component.district + | ||||||
|         //   data.result.address_component.street + |           data.result.address_component.street + | ||||||
|         //   data.result.address_component.street_number; |           data.result.address_component.street_number + data.result.formatted_addresses.recommend; | ||||||
|         form.value.latitude = data.result.location.lat; |         form.value.latitude = data.result.location.lat; | ||||||
|         form.value.longitude = data.result.location.lng; |         form.value.longitude = data.result.location.lng; | ||||||
|         form.value.address = data.result.formatted_addresses.recommend; |         // form.value.address = data.result.formatted_addresses.recommend; | ||||||
|         // form.value.city = data.result.address_component.city; |         // form.value.city = data.result.address_component.city; | ||||||
|         // form.value.region = data.result.ad_info.adcode; //行政区划编码 |         // form.value.region = data.result.ad_info.adcode; //行政区划编码 | ||||||
|         form.value.regionCode = data.result.ad_info.adcode; //行政区划编码 |         form.value.regionCode = data.result.ad_info.adcode; //行政区划编码 | ||||||
| @ -119,18 +168,18 @@ const performSearch = async (text) => { | |||||||
|     jsonp(`https://apis.map.qq.com/ws/geocoder/v1/?address=${text}&key=${'6XFBZ-SAVLT-JGIX2-VOLMK-6S2H3-XUBGO'}&output=jsonp`, {}).then((data) => { |     jsonp(`https://apis.map.qq.com/ws/geocoder/v1/?address=${text}&key=${'6XFBZ-SAVLT-JGIX2-VOLMK-6S2H3-XUBGO'}&output=jsonp`, {}).then((data) => { | ||||||
|       console.log(data); |       console.log(data); | ||||||
|       if (data.status == 0) { |       if (data.status == 0) { | ||||||
|         // form.value.address = |         form.value.address = | ||||||
|         //   data.result.address_components.province + |           data.result.address_components.province + | ||||||
|         //   data.result.address_components.city + |           data.result.address_components.city + | ||||||
|         //   data.result.address_components.district + |           data.result.address_components.district + | ||||||
|         //   data.result.address_components.street + |           data.result.address_components.street + | ||||||
|         //   data.result.address_components.street_number; |           data.result.address_components.street_number + data.result.title; | ||||||
|         form.value.latitude = data.result.location.lat; |         form.value.latitude = data.result.location.lat; | ||||||
|         form.value.longitude = data.result.location.lng; |         form.value.longitude = data.result.location.lng; | ||||||
|         // form.value.region = data.result.ad_info.adcode; //行政区划编码 |         // form.value.region = data.result.ad_info.adcode; //行政区划编码 | ||||||
|         // form.value.regionCode = data.result.ad_info.adcode; //行政区划编码 |         // form.value.regionCode = data.result.ad_info.adcode; //行政区划编码 | ||||||
| 
 | 
 | ||||||
|         form.value.address = text; |         // form.value.address = text; | ||||||
|         // form.value.city = data.result.address_components.city; |         // form.value.city = data.result.address_components.city; | ||||||
|         center.value = { lat: data.result.location.lat, lng: data.result.location.lng }; |         center.value = { lat: data.result.location.lat, lng: data.result.location.lng }; | ||||||
|         geometries.value = [{ styleId: 'marker', position: { lat: data.result.location.lat, lng: data.result.location.lng } }]; |         geometries.value = [{ styleId: 'marker', position: { lat: data.result.location.lat, lng: data.result.location.lng } }]; | ||||||
| @ -147,16 +196,15 @@ const performSearch = async (text) => { | |||||||
| const debouncedSearch = debounce(performSearch, 300); // 创建防抖后的搜索函数,延迟设为300毫秒 | const debouncedSearch = debounce(performSearch, 300); // 创建防抖后的搜索函数,延迟设为300毫秒 | ||||||
| 
 | 
 | ||||||
| const map = ref(null); | const map = ref(null); | ||||||
| const center = ref({ lat: form.value.latitude || 39.145902, lng: form.value.longitude || 117.17546 }); | const center = ref({ lat: form.value.latitude ||  20.018883, lng: form.value.longitude ||  110.348801 }); | ||||||
| const zoom = ref(20); | const zoom = ref(147); | ||||||
| const control = reactive({ | const control = reactive({ | ||||||
|   scale: {}, |   scale: {}, | ||||||
|   zoom: { |   zoom: { | ||||||
|     position: 'topLeft' |     position: 'topLeft' | ||||||
|   } |   } | ||||||
| }); | }); | ||||||
| const searchLocation = ref(''); // 搜索地点 | const geometries = ref([{ styleId: 'marker', position: { lat: form.value.latitude || 20.018883, lng: form.value.longitude || 110.348801 } }]); | ||||||
| const geometries = ref([{ styleId: 'marker', position: { lat: form.value.latitude || 39.145902, lng: form.value.longitude || 117.17546 } }]); |  | ||||||
| const styles = reactive({ | const styles = reactive({ | ||||||
|   marker: { |   marker: { | ||||||
|     width: 20, |     width: 20, | ||||||
|  | |||||||
| @ -10,7 +10,8 @@ | |||||||
|             <el-form-item label="发布状态" prop="status"> |             <el-form-item label="发布状态" prop="status"> | ||||||
|               <el-select v-model="queryParams.status" placeholder="请选择发布状态" style="width: 200px" @keyup.enter="handleQuery"> |               <el-select v-model="queryParams.status" placeholder="请选择发布状态" style="width: 200px" @keyup.enter="handleQuery"> | ||||||
|                 <el-option label="未发布" value="0" /> |                 <el-option label="未发布" value="0" /> | ||||||
|                 <el-option label="已发布" value="1" /> |                 <el-option label="已发布" value="2" /> | ||||||
|  |                 <el-option label="审核中" value="1" /> | ||||||
|               </el-select> |               </el-select> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|             <el-form-item> |             <el-form-item> | ||||||
| @ -24,7 +25,7 @@ | |||||||
|     </transition> |     </transition> | ||||||
| 
 | 
 | ||||||
|     <el-card shadow="never"> |     <el-card shadow="never"> | ||||||
|       <el-table v-loading="loading" :data="hotelList"> |       <el-table v-loading="loading" :data="hotelList" border> | ||||||
|         <el-table-column fixed label="序号" align="center" width="80"> |         <el-table-column fixed label="序号" align="center" width="80"> | ||||||
|           <template #default="scope"> |           <template #default="scope"> | ||||||
|             <span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span> |             <span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span> | ||||||
| @ -36,7 +37,8 @@ | |||||||
|         <el-table-column label="联系方式" align="center" prop="number" /> |         <el-table-column label="联系方式" align="center" prop="number" /> | ||||||
|         <el-table-column label="状态" align="center" prop="status"> |         <el-table-column label="状态" align="center" prop="status"> | ||||||
|           <template #default="scope"> |           <template #default="scope"> | ||||||
|             <el-tag v-if="scope.row.status == 1" type="primary">已发布</el-tag> |             <el-tag v-if="scope.row.status == 1" type="success">审核中</el-tag> | ||||||
|  |             <el-tag v-if="scope.row.status == 2" type="primary">已发布</el-tag> | ||||||
|             <el-tag v-if="scope.row.status == 0" type="info">未发布</el-tag> |             <el-tag v-if="scope.row.status == 0" type="info">未发布</el-tag> | ||||||
|           </template> |           </template> | ||||||
|         </el-table-column> |         </el-table-column> | ||||||
| @ -44,16 +46,16 @@ | |||||||
|         <el-table-column label="更新时间" align="center" prop="updateTime" width="180" /> |         <el-table-column label="更新时间" align="center" prop="updateTime" width="180" /> | ||||||
|         <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |         <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | ||||||
|           <template #default="scope"> |           <template #default="scope"> | ||||||
|             <el-tooltip v-if="scope.row.status != 1" content="编辑" placement="top"> |             <el-tooltip v-if="scope.row.status == 0" content="编辑" placement="top"> | ||||||
|               <el-button v-hasPermi="['manage:hotel:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button> |               <el-button v-hasPermi="['manage:hotel:edit']" link type="primary" @click="handleUpdate(scope.row)">编辑</el-button> | ||||||
|             </el-tooltip> |             </el-tooltip> | ||||||
|             <el-tooltip v-if="scope.row.status != 1" content="删除" placement="top"> |             <el-tooltip v-if="scope.row.status == 0" content="删除" placement="top"> | ||||||
|               <el-button v-hasPermi="['manage:hotel:remove']" link type="primary" @click="handleDelete(scope.row)">删除</el-button> |               <el-button v-hasPermi="['manage:hotel:remove']" link type="primary" @click="handleDelete(scope.row)">删除</el-button> | ||||||
|             </el-tooltip> |             </el-tooltip> | ||||||
|             <el-tooltip v-if="scope.row.status == 0" content="发布" placement="top"> |             <el-tooltip v-if="scope.row.status == 0" content="发布" placement="top"> | ||||||
|               <el-button v-hasPermi="['manage:hotel:remove']" link type="primary" @click="handleEdit(scope.row)">发布</el-button> |               <el-button v-hasPermi="['manage:hotel:remove']" link type="primary" @click="handleEdit(scope.row)">发布</el-button> | ||||||
|             </el-tooltip> |             </el-tooltip> | ||||||
|             <el-tooltip v-if="scope.row.status == 1" content="撤销发布" placement="top"> |             <el-tooltip v-if="scope.row.status == 2" content="撤销发布" placement="top"> | ||||||
|               <el-button v-hasPermi="['manage:hotel:remove']" link type="primary" @click="handleEdit(scope.row)">撤销发布</el-button> |               <el-button v-hasPermi="['manage:hotel:remove']" link type="primary" @click="handleEdit(scope.row)">撤销发布</el-button> | ||||||
|             </el-tooltip> |             </el-tooltip> | ||||||
|           </template> |           </template> | ||||||
| @ -87,17 +89,24 @@ | |||||||
|           <el-col :span="24"> |           <el-col :span="24"> | ||||||
|             <el-form-item label="地理位置" prop="address"> |             <el-form-item label="地理位置" prop="address"> | ||||||
|               <!-- <el-input v-model="searchLocation" type="text" placeholder="请输入地址信息" clearable /> --> |               <!-- <el-input v-model="searchLocation" type="text" placeholder="请输入地址信息" clearable /> --> | ||||||
|               <el-input |               <el-select | ||||||
|                 v-model="form.address" |                 v-model="searchLocation" | ||||||
|  |                 filterable | ||||||
|  |                 remote | ||||||
|  |                 reserve-keyword | ||||||
|  |                 clearable | ||||||
|                 placeholder="请输入地址信息" |                 placeholder="请输入地址信息" | ||||||
|                 class="input-with-select" |                 :remote-method="remoteMethod" | ||||||
|                 style="width: 300px" |                 @change="selectChnange" | ||||||
|                 @keyup.enter="debouncedSearch(form.address)" |  | ||||||
|               > |               > | ||||||
|                 <template #append> |                 <el-option | ||||||
|                   <el-button :icon="Search" @click="debouncedSearch(form.address)" /> |                   v-for="item in locationOptions" | ||||||
|                 </template> |                   :key="item.id" | ||||||
|               </el-input> |                   :label="item.title + '      ' + item.province + ' - ' + item.city + '-' + item.district" | ||||||
|  |                   :value="item.province + item.city + item.title" | ||||||
|  |                 /> | ||||||
|  |                 <!-- :value="item.ad_info.province+item.ad_info.city+item.title" /> --> | ||||||
|  |               </el-select> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|             <tlbs-map |             <tlbs-map | ||||||
|               v-if="dialog.visible" |               v-if="dialog.visible" | ||||||
| @ -112,6 +121,15 @@ | |||||||
|             > |             > | ||||||
|               <tlbs-multi-marker :geometries="geometries" :styles="styles" :options="options" /> |               <tlbs-multi-marker :geometries="geometries" :styles="styles" :options="options" /> | ||||||
|             </tlbs-map> |             </tlbs-map> | ||||||
|  |             <el-form-item label="详细地址" prop="address" style="margin-top: 15px"> | ||||||
|  |               <el-input v-model="form.address" placeholder="输入地理位置或点击度图上的地点" disabled /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="经度" prop="longitude"> | ||||||
|  |               <el-input v-model="form.longitude" placeholder="输入地理位置或点击度图上的地点" disabled /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="纬度" prop="latitude"> | ||||||
|  |               <el-input v-model="form.latitude" placeholder="输入地理位置或点击度图上的地点" disabled /> | ||||||
|  |             </el-form-item> | ||||||
|           </el-col> |           </el-col> | ||||||
|         </el-row> |         </el-row> | ||||||
|       </el-form> |       </el-form> | ||||||
| @ -143,6 +161,7 @@ const idsname = ref([]); | |||||||
| const single = ref(true); | const single = ref(true); | ||||||
| const multiple = ref(true); | const multiple = ref(true); | ||||||
| const total = ref(0); | const total = ref(0); | ||||||
|  | const locationOptions = ref([]); //腾讯地图返回的搜索地址列表 | ||||||
| 
 | 
 | ||||||
| const queryFormRef = ref<ElFormInstance>(); | const queryFormRef = ref<ElFormInstance>(); | ||||||
| const hotelFormRef = ref<ElFormInstance>(); | const hotelFormRef = ref<ElFormInstance>(); | ||||||
| @ -251,8 +270,9 @@ const handleAdd = () => { | |||||||
|   reset(); |   reset(); | ||||||
|   dialog.visible = true; |   dialog.visible = true; | ||||||
|   dialog.title = '添加住宿'; |   dialog.title = '添加住宿'; | ||||||
|   geometries.value = [{ styleId: 'marker', position: { lat: form.value.latitude || 39.145902, lng: form.value.longitude || 117.17546 } }]; |   searchLocation.value = ''; | ||||||
|   center.value = { lat: form.value.latitude || 39.145902, lng: form.value.longitude || 117.17546 }; |   geometries.value = [{ styleId: 'marker', position: { lat: form.value.latitude || 20.018883, lng: form.value.longitude || 110.348801 } }]; | ||||||
|  |   center.value = { lat: form.value.latitude || 20.018883, lng: form.value.longitude || 110.348801 }; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /** 修改按钮操作 */ | /** 修改按钮操作 */ | ||||||
| @ -264,6 +284,7 @@ const handleUpdate = async (row?: HotelVO) => { | |||||||
|   Object.assign(form.value, res.data); |   Object.assign(form.value, res.data); | ||||||
|   center.value = { lat: row.latitude, lng: row.longitude }; |   center.value = { lat: row.latitude, lng: row.longitude }; | ||||||
|   geometries.value = [{ styleId: 'marker', position: { lat: row.latitude, lng: row.longitude } }]; |   geometries.value = [{ styleId: 'marker', position: { lat: row.latitude, lng: row.longitude } }]; | ||||||
|  |   searchLocation.value = form.value.address; | ||||||
|   dialog.visible = true; |   dialog.visible = true; | ||||||
|   dialog.title = '修改住宿'; |   dialog.title = '修改住宿'; | ||||||
| }; | }; | ||||||
| @ -316,7 +337,35 @@ const handleEdit = async (row?: HotelVO) => { | |||||||
|   proxy?.$modal.msgSuccess(messages); |   proxy?.$modal.msgSuccess(messages); | ||||||
|   await getList(); |   await getList(); | ||||||
| }; | }; | ||||||
| 
 | // 地理位置 输入实时搜索 | ||||||
|  | const remoteMethod = (query: string) => { | ||||||
|  |   if (query !== '') { | ||||||
|  |     // 调用腾讯地图API进行搜索,并展示在地图上 | ||||||
|  |     // geocoder(query).then((result) => { | ||||||
|  |     //   console.log(result); | ||||||
|  |     // }); | ||||||
|  |     console.log(query); | ||||||
|  |     // jsonp(`https://apis.map.qq.com/ws/place/v1/search?key=${'6XFBZ-SAVLT-JGIX2-VOLMK-6S2H3-XUBGO'}&keyword=${encodeURI(query)}&boundary=nearby(20.018883,110.348801,1000)&output=jsonp`, {}).then((res) => { | ||||||
|  |     jsonp( | ||||||
|  |       `https://apis.map.qq.com/ws/place/v1/suggestion?key=${'6XFBZ-SAVLT-JGIX2-VOLMK-6S2H3-XUBGO'}&keyword=${encodeURI(query)}®ion=三亚市®ion_fix=0&output=jsonp`, | ||||||
|  |       {} | ||||||
|  |     ).then((res) => { | ||||||
|  |       // if (res.region.title!=='海南省') { | ||||||
|  |       //   proxy?.$modal.msgError('仅支持海南省地理位置'); | ||||||
|  |       //   return | ||||||
|  |       // } | ||||||
|  |       if (res.status == 0) { | ||||||
|  |         locationOptions.value = res.data; | ||||||
|  |       } | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  | // 选择地理位置 下拉框值变化 | ||||||
|  | const selectChnange = (val: string) => { | ||||||
|  |   if (val) { | ||||||
|  |     debouncedSearch(searchLocation.value); | ||||||
|  |   } | ||||||
|  | }; | ||||||
| //输入位置,搜索位置 | //输入位置,搜索位置 | ||||||
| const performSearch = async (text) => { | const performSearch = async (text) => { | ||||||
|   // 这里简单模拟延迟,模拟真实的异步请求耗时 |   // 这里简单模拟延迟,模拟真实的异步请求耗时 | ||||||
| @ -338,7 +387,8 @@ const performSearch = async (text) => { | |||||||
|           data.result.address_components.city + |           data.result.address_components.city + | ||||||
|           data.result.address_components.district + |           data.result.address_components.district + | ||||||
|           data.result.address_components.street + |           data.result.address_components.street + | ||||||
|           data.result.address_components.street_number; |           data.result.address_components.street_number + | ||||||
|  |           data.result.title; | ||||||
|         form.value.latitude = data.result.location.lat; |         form.value.latitude = data.result.location.lat; | ||||||
|         form.value.longitude = data.result.location.lng; |         form.value.longitude = data.result.location.lng; | ||||||
|         // form.value.region = data.result.ad_info.adcode; //行政区划编码 |         // form.value.region = data.result.ad_info.adcode; //行政区划编码 | ||||||
| @ -368,7 +418,8 @@ const onClick = (e: any) => { | |||||||
|           data.result.address_component.city + |           data.result.address_component.city + | ||||||
|           data.result.address_component.district + |           data.result.address_component.district + | ||||||
|           data.result.address_component.street + |           data.result.address_component.street + | ||||||
|           data.result.address_component.street_number; |           data.result.address_component.street_number + | ||||||
|  |           data.result.formatted_addresses.recommend; | ||||||
|         form.value.latitude = data.result.location.lat; |         form.value.latitude = data.result.location.lat; | ||||||
|         form.value.longitude = data.result.location.lng; |         form.value.longitude = data.result.location.lng; | ||||||
|         // form.value.province = data.result.address_component.province; |         // form.value.province = data.result.address_component.province; | ||||||
| @ -385,8 +436,8 @@ const onClick = (e: any) => { | |||||||
| const debouncedSearch = debounce(performSearch, 300); // 创建防抖后的搜索函数,延迟设为300毫秒 | const debouncedSearch = debounce(performSearch, 300); // 创建防抖后的搜索函数,延迟设为300毫秒 | ||||||
| 
 | 
 | ||||||
| const map = ref(null); | const map = ref(null); | ||||||
| const center = ref({ lat: form.value.latitude || 39.145902, lng: form.value.longitude || 117.17546 }); | const center = ref({ lat: form.value.latitude || 20.018883, lng: form.value.longitude || 110.348801 }); | ||||||
| const zoom = ref(20); | const zoom = ref(17); | ||||||
| const control = reactive({ | const control = reactive({ | ||||||
|   scale: {}, |   scale: {}, | ||||||
|   zoom: { |   zoom: { | ||||||
| @ -394,7 +445,7 @@ const control = reactive({ | |||||||
|   } |   } | ||||||
| }); | }); | ||||||
| const searchLocation = ref(''); // 搜索地点 | const searchLocation = ref(''); // 搜索地点 | ||||||
| const geometries = ref([{ styleId: 'marker', position: { lat: form.value.latitude || 39.145902, lng: form.value.longitude || 117.17546 } }]); | const geometries = ref([{ styleId: 'marker', position: { lat: form.value.latitude || 20.018883, lng: form.value.longitude || 110.348801 } }]); | ||||||
| const styles = reactive({ | const styles = reactive({ | ||||||
|   marker: { |   marker: { | ||||||
|     width: 20, |     width: 20, | ||||||
|  | |||||||
| @ -47,12 +47,12 @@ | |||||||
|         <el-table-column label="设置得奖人数" align="center" prop="awardConfigCount" /> |         <el-table-column label="设置得奖人数" align="center" prop="awardConfigCount" /> | ||||||
|         <el-table-column label="参与人数" align="center" prop="joinCount"> |         <el-table-column label="参与人数" align="center" prop="joinCount"> | ||||||
|           <template #default="scope"> |           <template #default="scope"> | ||||||
|             <el-button type="primary" link>{{ scope.row.joinCount }}</el-button> |             <el-button type="primary" link @click="handleJoin(scope.row)">{{ scope.row.joinCount }}</el-button> | ||||||
|           </template> |           </template> | ||||||
|         </el-table-column> |         </el-table-column> | ||||||
|         <el-table-column label="实际得奖人数" align="center" prop="awardCount"> |         <el-table-column label="实际得奖人数" align="center" prop="awardCount"> | ||||||
|           <template #default="scope"> |           <template #default="scope"> | ||||||
|             <el-button type="primary" link>{{ scope.row.awardCount }}</el-button> |             <el-button link type="primary" @click="handleAward(scope.row)">{{ scope.row.awardCount }}</el-button> | ||||||
|           </template> |           </template> | ||||||
|         </el-table-column> |         </el-table-column> | ||||||
|         <el-table-column label="拼图碎片获得人数" align="center" prop="awardCount"> |         <el-table-column label="拼图碎片获得人数" align="center" prop="awardCount"> | ||||||
| @ -222,6 +222,64 @@ | |||||||
|         <el-table-column prop="joinCount" label="获得人数" /> |         <el-table-column prop="joinCount" label="获得人数" /> | ||||||
|       </el-table> |       </el-table> | ||||||
|     </el-dialog> |     </el-dialog> | ||||||
|  |     <!-- 获奖人员 --> | ||||||
|  |     <el-dialog v-model="mkReward.visible" title="获奖人员" width="600px" append-to-body> | ||||||
|  |       <div> | ||||||
|  |         <el-table :data="mkRewardUserLists" border style="width: 100%"> | ||||||
|  |           <el-table-column prop="userId" label="用户ID" /> | ||||||
|  |           <el-table-column prop="nickName" label="昵称" /> | ||||||
|  |           <el-table-column prop="" label="获得奖品"> | ||||||
|  |             <template #default="scope"> | ||||||
|  |               <el-button link type="primary" @click="getproductInfo(scope.row.productId)">查看详情</el-button> | ||||||
|  |             </template> | ||||||
|  |           </el-table-column> | ||||||
|  |         </el-table> | ||||||
|  |       </div> | ||||||
|  |       <template #footer> | ||||||
|  |         <div class="dialog-footer"> | ||||||
|  |           <el-button @click="cancel">关 闭</el-button> | ||||||
|  |         </div> | ||||||
|  |       </template> | ||||||
|  |     </el-dialog> | ||||||
|  |     <!-- 奖品详情 --> | ||||||
|  |     <el-dialog v-model="productInfo.visible" title="奖品详情" width="600px" append-to-body> | ||||||
|  |       <div> | ||||||
|  |         <el-form ref="" :model="productInfo.form" label-width="70px"> | ||||||
|  |           <el-row :gutter="10" style="margin-bottom: 10px; margin-right: 5px !important"> | ||||||
|  |             <el-col :span="8"> | ||||||
|  |               <el-form-item label="商品名称" prop=""> | ||||||
|  |                 <span>{{ productInfo.form.productName }}</span> | ||||||
|  |               </el-form-item> | ||||||
|  |             </el-col> | ||||||
|  |             <el-col :span="8"> | ||||||
|  |               <el-form-item label="商品类别" prop=""> | ||||||
|  |                 <span>{{ formatCategoryName(productInfo.form.categoryId) }}</span> | ||||||
|  |               </el-form-item> | ||||||
|  |             </el-col> | ||||||
|  |             <el-col :span="8"> | ||||||
|  |               <el-form-item label="供应商" prop=""> | ||||||
|  |                 <span>{{ formatVendorName(productInfo.form.vendorId) }}</span> | ||||||
|  |               </el-form-item> | ||||||
|  |             </el-col> | ||||||
|  |             <el-col :span="8"> | ||||||
|  |               <el-form-item label="商品图片" prop=""> | ||||||
|  |                 <image-preview :src="productInfo.form.image" :width="100" :height="100" /> | ||||||
|  |               </el-form-item> | ||||||
|  |             </el-col> | ||||||
|  |             <el-col :span="12"> | ||||||
|  |               <el-form-item label="商品说明" prop=""> | ||||||
|  |                 <span>{{ productInfo.form.productShows }}</span> | ||||||
|  |               </el-form-item> | ||||||
|  |             </el-col> | ||||||
|  |           </el-row> | ||||||
|  |         </el-form> | ||||||
|  |       </div> | ||||||
|  |       <template #footer> | ||||||
|  |         <div class="dialog-footer"> | ||||||
|  |           <el-button @click="cancelProductInfo()">关 闭</el-button> | ||||||
|  |         </div> | ||||||
|  |       </template> | ||||||
|  |     </el-dialog> | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| @ -234,9 +292,12 @@ import { | |||||||
|   updateMkJigsaw, |   updateMkJigsaw, | ||||||
|   productall, |   productall, | ||||||
|   mkJigsawDetaillist, |   mkJigsawDetaillist, | ||||||
|   productCategoryall |   productCategoryall, mkJoinlist | ||||||
| } from '@/api/manage/mkJigsaw'; | } from "@/api/manage/mkJigsaw"; | ||||||
| import { MkJigsawVO, MkJigsawQuery, MkJigsawForm } from '@/api/manage/mkJigsaw/types'; | import { MkJigsawVO, MkJigsawQuery, MkJigsawForm } from '@/api/manage/mkJigsaw/types'; | ||||||
|  | import { mkRewardUserList } from '@/api/manage/mkConfig'; | ||||||
|  | import { listProductCategory } from '@/api/manage/productCategory'; | ||||||
|  | import { getProduct } from '@/api/manage/product'; | ||||||
| 
 | 
 | ||||||
| const { proxy } = getCurrentInstance() as ComponentInternalInstance; | const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||||
| const { mk_jigsaw_task_catagory } = toRefs<any>(proxy?.useDict('mk_jigsaw_task_catagory')); | const { mk_jigsaw_task_catagory } = toRefs<any>(proxy?.useDict('mk_jigsaw_task_catagory')); | ||||||
| @ -266,7 +327,24 @@ const dialog = reactive<DialogOption>({ | |||||||
|   visible: false, |   visible: false, | ||||||
|   title: '' |   title: '' | ||||||
| }); | }); | ||||||
| 
 | const mkRewardUserParams = reactive({ | ||||||
|  |   pageNum: 1, | ||||||
|  |   pageSize: 10, | ||||||
|  |   bizId: null | ||||||
|  | }); | ||||||
|  | const mkReward = reactive({ | ||||||
|  |   visible: false | ||||||
|  | }); | ||||||
|  | const productInfo = reactive({ | ||||||
|  |   visible: false, | ||||||
|  |   form: { | ||||||
|  |     image: null, | ||||||
|  |     vendorId: null, | ||||||
|  |     categoryId: null, | ||||||
|  |     productName: null, | ||||||
|  |     productShows: null | ||||||
|  |   } | ||||||
|  | }); | ||||||
| const mksave = reactive<DialogOption>({ | const mksave = reactive<DialogOption>({ | ||||||
|   visible: false, |   visible: false, | ||||||
|   title: '拼图详情' |   title: '拼图详情' | ||||||
| @ -364,6 +442,7 @@ const getList = async () => { | |||||||
| const cancel = () => { | const cancel = () => { | ||||||
|   reset(); |   reset(); | ||||||
|   dialog.visible = false; |   dialog.visible = false; | ||||||
|  |   mkReward.visible = false; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /** 表单重置 */ | /** 表单重置 */ | ||||||
| @ -570,10 +649,80 @@ const mkdatetime = () => { | |||||||
|     form.value.endDate = value2.value[1]; |     form.value.endDate = value2.value[1]; | ||||||
|   } |   } | ||||||
| }; | }; | ||||||
|  | //参与人数 | ||||||
|  | const handleJoin = async () => { | ||||||
|  | const res = await mkJoinlist() | ||||||
|  | }; | ||||||
|  | //关闭奖品详情 | ||||||
|  | const cancelProductInfo = () => { | ||||||
|  |   productInfo.visible = false; | ||||||
|  | }; | ||||||
|  | /** | ||||||
|  |  * 查看奖品详情 | ||||||
|  |  * @param productId | ||||||
|  |  */ | ||||||
|  | const getproductInfo = async (productId: any) => { | ||||||
|  |   const res = await getProduct(productId); | ||||||
|  |   productInfo.form = res.data; | ||||||
|  |   productInfo.visible = true; | ||||||
|  | }; | ||||||
|  | const mkRewardUserLists = ref([]); | ||||||
|  | 
 | ||||||
|  | const handleAward = async (row: any) => { | ||||||
|  |   loading.value = true; | ||||||
|  |   mkRewardUserParams.bizId = row.id; | ||||||
|  |   const res = await mkRewardUserList(mkRewardUserParams).finally(() => (loading.value = false)); | ||||||
|  |   mkRewardUserLists.value = res.rows; | ||||||
|  |   mkReward.visible = true; | ||||||
|  | 
 | ||||||
|  |   // dialog.title = "修改营销配置"; | ||||||
|  | }; | ||||||
|  | /** | ||||||
|  |  * 供应商列表 | ||||||
|  |  */ | ||||||
|  | const listVendorList = ref([]); | ||||||
|  | const getlistVendor = async () => { | ||||||
|  |   let res = await listVendor({ pageNum: 1, pageSize: 9999 }); | ||||||
|  |   listVendorList.value = res.rows; | ||||||
|  | }; | ||||||
|  | /** | ||||||
|  |  * 格式化 供应商名称 | ||||||
|  |  * @param id | ||||||
|  |  */ | ||||||
|  | const formatVendorName = (id: any) => { | ||||||
|  |   for (let i = 0; i < listVendorList.value.length; i++) { | ||||||
|  |     const element = listVendorList.value[i]; | ||||||
|  |     if (element.id == id) { | ||||||
|  |       return element.vendorName; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  | /** | ||||||
|  |  * 商品类别列表 | ||||||
|  |  */ | ||||||
|  | const productCategoryList = ref([]); | ||||||
|  | const getProductCategoryList = async () => { | ||||||
|  |   let res = await listProductCategory({ pageNum: 1, pageSize: 9999 }); | ||||||
|  |   productCategoryList.value = res.rows; | ||||||
|  | }; | ||||||
|  | /** | ||||||
|  |  * 格式化商品类别名称 | ||||||
|  |  * @param row | ||||||
|  |  */ | ||||||
|  | const formatCategoryName = (id: any) => { | ||||||
|  |   for (let i = 0; i < productCategoryList.value.length; i++) { | ||||||
|  |     const element = productCategoryList.value[i]; | ||||||
|  |     if (element.id == id) { | ||||||
|  |       return element.category; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | }; | ||||||
| onMounted(() => { | onMounted(() => { | ||||||
|   getList(); |   getList(); | ||||||
|   getproductall(); |   getproductall(); | ||||||
|   goodleibie(); |   goodleibie(); | ||||||
|  |   getlistVendor(); //供应商列表 | ||||||
|  |   getProductCategoryList(); //商品类别列表 | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
| <style> | <style> | ||||||
|  | |||||||
| @ -365,6 +365,9 @@ const handleQuery = () => { | |||||||
| /** 重置按钮操作 */ | /** 重置按钮操作 */ | ||||||
| const resetQuery = () => { | const resetQuery = () => { | ||||||
|   queryParams.value.status = ''; |   queryParams.value.status = ''; | ||||||
|  |   queryParams.value.title = ''; | ||||||
|  |   queryParams.value.location = ''; | ||||||
|  |   queryParams.value.updateByName = ''; | ||||||
|   queryFormRef.value?.resetFields(); |   queryFormRef.value?.resetFields(); | ||||||
|   handleQuery(); |   handleQuery(); | ||||||
| }; | }; | ||||||
| @ -419,8 +422,8 @@ const contenttext = async (row?: NotebookVO) => { | |||||||
| }; | }; | ||||||
| /** 提交按钮 */ | /** 提交按钮 */ | ||||||
| const submitForm = async (type) => { | const submitForm = async (type) => { | ||||||
|   form.value.tagId = tagvalue.value.join(','); |   form.value.tagId = tagvalue.value == '' ? '' : tagvalue.value.join(','); | ||||||
|   form.value.location = addressvalue.value.join(','); |   form.value.location = addressvalue.value == '' ? '' : addressvalue.value.join(','); | ||||||
|   form.value.cover = ''; |   form.value.cover = ''; | ||||||
|   form.value.status = Number(type); |   form.value.status = Number(type); | ||||||
|   form.value.content = form.value.content == '<p><br></p>' ? '' : form.value.content; |   form.value.content = form.value.content == '<p><br></p>' ? '' : form.value.content; | ||||||
|  | |||||||
| @ -76,6 +76,13 @@ | |||||||
|         <el-table-column label="举报时间" align="center" prop="createTime" width="200px" /> |         <el-table-column label="举报时间" align="center" prop="createTime" width="200px" /> | ||||||
|         <el-table-column label="操作时间" align="center" prop="updateTime" width="200px" /> |         <el-table-column label="操作时间" align="center" prop="updateTime" width="200px" /> | ||||||
|         <el-table-column label="操作人" align="center" prop="updateName" width="150px" /> |         <el-table-column label="操作人" align="center" prop="updateName" width="150px" /> | ||||||
|  |         <el-table-column label="用户状态" align="center" prop="status" width="150px" > | ||||||
|  |           <template #default="scope"> | ||||||
|  |             <el-tag v-if="scope.row.status == 1" type="info">禁言</el-tag> | ||||||
|  |             <el-tag v-if="scope.row.status == 2" type="warning">封禁</el-tag> | ||||||
|  |             <el-tag v-if="scope.row.status == 0" type="primary">正常</el-tag> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|         <el-table-column label="状态" align="center" prop="handlingStatus"> |         <el-table-column label="状态" align="center" prop="handlingStatus"> | ||||||
|           <template #default="scope"> |           <template #default="scope"> | ||||||
|             <el-tag v-if="scope.row.handlingStatus == 0" type="info">未处理</el-tag> |             <el-tag v-if="scope.row.handlingStatus == 0" type="info">未处理</el-tag> | ||||||
| @ -85,13 +92,31 @@ | |||||||
|         <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150px"> |         <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150px"> | ||||||
|           <template #default="scope"> |           <template #default="scope"> | ||||||
|             <el-button v-hasPermi="['manage:report:edit']" link type="primary" @click="handleUpdate(scope.row)">封禁</el-button> |             <el-button v-hasPermi="['manage:report:edit']" link type="primary" @click="handleUpdate(scope.row)">封禁</el-button> | ||||||
|             <el-button v-if="queryParams.type == 1" v-hasPermi="['manage:report:remove']" link type="primary" @click="handleDelete(scope.row)" |             <el-button | ||||||
|  |               v-if="queryParams.type == 1" | ||||||
|  |               v-hasPermi="['manage:report:remove']" | ||||||
|  |               link | ||||||
|  |               type="primary" | ||||||
|  |               :disabled="scope.row.status == 1" | ||||||
|  |               @click="handleDelete(scope.row)" | ||||||
|               >删除笔记</el-button |               >删除笔记</el-button | ||||||
|             > |             > | ||||||
|             <el-button v-if="queryParams.type == 2" v-hasPermi="['manage:report:remove']" link type="primary" @click="handleDelete(scope.row)" |             <el-button | ||||||
|  |               v-if="queryParams.type == 2" | ||||||
|  |               v-hasPermi="['manage:report:remove']" | ||||||
|  |               link | ||||||
|  |               type="primary" | ||||||
|  |               :disabled="scope.row.status == 1" | ||||||
|  |               @click="handleDelete(scope.row)" | ||||||
|               >删除活动</el-button |               >删除活动</el-button | ||||||
|             > |             > | ||||||
|             <el-button v-if="queryParams.type == 3" v-hasPermi="['manage:report:remove']" link type="primary" @click="handleDelete(scope.row)" |             <el-button | ||||||
|  |               v-if="queryParams.type == 3" | ||||||
|  |               v-hasPermi="['manage:report:remove']" | ||||||
|  |               link | ||||||
|  |               type="primary" | ||||||
|  |               :disabled="scope.row.status == 1" | ||||||
|  |               @click="handleDelete(scope.row)" | ||||||
|               >删除评论</el-button |               >删除评论</el-button | ||||||
|             > |             > | ||||||
|           </template> |           </template> | ||||||
| @ -131,7 +156,7 @@ | |||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script setup name="Banned" lang="ts"> | <script setup name="Banned" lang="ts"> | ||||||
| import { listBanned, getBanned, delBanned, addBanned, updateBanned, userLevelall } from '@/api/manage/banned'; | import { listBanned, getBanned, delBanned, addBanned, updatemanage, userLevelall } from '@/api/manage/banned'; | ||||||
| import { BannedVO, BannedQuery, BannedForm } from '@/api/manage/banned/types'; | import { BannedVO, BannedQuery, BannedForm } from '@/api/manage/banned/types'; | ||||||
| import { delNotebook } from '@/api/manage/notebook'; | import { delNotebook } from '@/api/manage/notebook'; | ||||||
| 
 | 
 | ||||||
| @ -292,9 +317,14 @@ const submitForm = () => { | |||||||
| const handleDelete = async (row?: BannedVO) => { | const handleDelete = async (row?: BannedVO) => { | ||||||
|   const _ids = row?.contentId; |   const _ids = row?.contentId; | ||||||
|   const _idsname = row?.contentName; |   const _idsname = row?.contentName; | ||||||
|  |   const arr = { | ||||||
|  |     id: row?.contentId, | ||||||
|  |     type: queryParams.value.type, | ||||||
|  |     handlingStatus: 1 | ||||||
|  |   }; | ||||||
|   const text = queryParams.value.type == 1 ? '笔记名称为“' : queryParams.value.type == 2 ? '活动名称为“' : '评论内容为“'; |   const text = queryParams.value.type == 1 ? '笔记名称为“' : queryParams.value.type == 2 ? '活动名称为“' : '评论内容为“'; | ||||||
|   await proxy?.$modal.confirm('是否确认删除' + text + _idsname + '"的数据项?').finally(() => (loading.value = false)); |   await proxy?.$modal.confirm('是否确认删除' + text + _idsname + '"的数据项?').finally(() => (loading.value = false)); | ||||||
|   await delNotebook(_ids); |   await updatemanage(arr); | ||||||
|   proxy?.$modal.msgSuccess('删除成功'); |   proxy?.$modal.msgSuccess('删除成功'); | ||||||
|   await getList(); |   await getList(); | ||||||
| }; | }; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user