Compare commits
	
		
			10 Commits
		
	
	
		
			0a81cadeb2
			...
			4d0e340fee
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 4d0e340fee | |||
| efa9a05d6e | |||
| 10ab6380c4 | |||
| dc43a2d40b | |||
| 90bd7911e6 | |||
| e09ad2fcc8 | |||
| 27b81b2096 | |||
| 8dd38e5a93 | |||
| 648ceef0e6 | |||
| dfda574ca2 | 
| @ -48,6 +48,7 @@ export interface BannedVO { | |||||||
|    * 状态(0=已发布,1=已下架) |    * 状态(0=已发布,1=已下架) | ||||||
|    */ |    */ | ||||||
|   handlingStatus: number; |   handlingStatus: number; | ||||||
|  |   nickName?: string | number; | ||||||
| 
 | 
 | ||||||
|   /** |   /** | ||||||
|    * 1=用户,2=笔记,3=活动,4=评论 |    * 1=用户,2=笔记,3=活动,4=评论 | ||||||
| @ -106,6 +107,7 @@ export interface BannedForm extends BaseEntity { | |||||||
|    * 状态(0=已发布,1=已下架) |    * 状态(0=已发布,1=已下架) | ||||||
|    */ |    */ | ||||||
|   handlingStatus?: number; |   handlingStatus?: number; | ||||||
|  |   nickName?: string | number; | ||||||
| 
 | 
 | ||||||
|   /** |   /** | ||||||
|    * 1=用户,2=笔记,3=活动,4=评论 |    * 1=用户,2=笔记,3=活动,4=评论 | ||||||
| @ -120,6 +122,7 @@ export interface BannedQuery extends PageQuery { | |||||||
|    * 被举报内容id |    * 被举报内容id | ||||||
|    */ |    */ | ||||||
|   contentId?: string | number; |   contentId?: string | number; | ||||||
|  |   nickName?: string | number; | ||||||
| 
 | 
 | ||||||
|   /** |   /** | ||||||
|    * 被举报用户ID |    * 被举报用户ID | ||||||
|  | |||||||
| @ -199,7 +199,7 @@ export interface DyUserForm extends BaseEntity { | |||||||
|   /** |   /** | ||||||
|    * 封禁天数 |    * 封禁天数 | ||||||
|    */ |    */ | ||||||
|   banDays?: number; |   banDays?: number | string; | ||||||
| 
 | 
 | ||||||
|   /** |   /** | ||||||
|    * 经度 |    * 经度 | ||||||
|  | |||||||
| @ -65,7 +65,7 @@ export const delNotebook = (id: string | number | Array<string | number>) => { | |||||||
|  * 查询标签 |  * 查询标签 | ||||||
|  * @param id |  * @param id | ||||||
|  */ |  */ | ||||||
| export const tagall = (): AxiosPromise<NotebookVO> => { | export const tagall = () => { | ||||||
|   return request({ |   return request({ | ||||||
|     url: '/manage/tag/all', |     url: '/manage/tag/all', | ||||||
|     method: 'get' |     method: 'get' | ||||||
| @ -75,7 +75,7 @@ export const tagall = (): AxiosPromise<NotebookVO> => { | |||||||
|  * 查询景点 |  * 查询景点 | ||||||
|  * @param query |  * @param query | ||||||
|  */ |  */ | ||||||
| export const contentall = (query?: NotebookQuery): AxiosPromise<NotebookVO> => { | export const contentall = (query?: any) => { | ||||||
|   return request({ |   return request({ | ||||||
|     url: '/manage/content/all', |     url: '/manage/content/all', | ||||||
|     method: 'get', |     method: 'get', | ||||||
|  | |||||||
| @ -77,7 +77,7 @@ export const getRegionTree = (query?: RouteForm) => { | |||||||
|  * 住宿下拉列表 |  * 住宿下拉列表 | ||||||
|  * @param query |  * @param query | ||||||
|  */ |  */ | ||||||
| export const hotelall = (query?: RouteForm) => { | export const hotelall = (query?: any) => { | ||||||
|   return request({ |   return request({ | ||||||
|     url: '/manage/hotel/all', |     url: '/manage/hotel/all', | ||||||
|     method: 'get', |     method: 'get', | ||||||
|  | |||||||
| @ -105,3 +105,15 @@ export const commentList = (query: any): AxiosPromise<ArticleVO[]> => { | |||||||
|     params: query |     params: query | ||||||
|   }); |   }); | ||||||
| }; | }; | ||||||
|  | /** | ||||||
|  |  * | ||||||
|  |  * @param query | ||||||
|  |  * @returns | ||||||
|  |  */ | ||||||
|  | export const recommend = (query: any) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/manage/notebook/recommend-list', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/address.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/assets/images/address.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 9.2 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/bgm.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/assets/images/bgm.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 13 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/laba.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/assets/images/laba.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 6.1 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/moeny.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/assets/images/moeny.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 4.5 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/num.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/assets/images/num.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 8.7 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/time.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/assets/images/time.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 7.4 KiB | 
| @ -1,28 +1,14 @@ | |||||||
| <template> | <template> | ||||||
|   <div> |   <div> | ||||||
|     <el-upload |     <el-upload v-if="type === 'url'" :action="upload.url" :before-upload="handleBeforeUpload" | ||||||
|       v-if="type === 'url'" |       :on-success="handleUploadSuccess" :on-error="handleUploadError" class="editor-img-uploader" name="file" | ||||||
|       :action="upload.url" |       :show-file-list="false" :headers="upload.headers"> | ||||||
|       :before-upload="handleBeforeUpload" |  | ||||||
|       :on-success="handleUploadSuccess" |  | ||||||
|       :on-error="handleUploadError" |  | ||||||
|       class="editor-img-uploader" |  | ||||||
|       name="file" |  | ||||||
|       :show-file-list="false" |  | ||||||
|       :headers="upload.headers" |  | ||||||
|     > |  | ||||||
|       <i ref="uploadRef"></i> |       <i ref="uploadRef"></i> | ||||||
|     </el-upload> |     </el-upload> | ||||||
|   </div> |   </div> | ||||||
|   <div class="editor"> |   <div class="editor"> | ||||||
|     <quill-editor |     <quill-editor ref="quillEditorRef" v-model:content="content" content-type="html" :options="options" :style="styles" | ||||||
|       ref="quillEditorRef" |       @text-change="(e: any) => $emit('update:modelValue', content)" /> | ||||||
|       v-model:content="content" |  | ||||||
|       content-type="html" |  | ||||||
|       :options="options" |  | ||||||
|       :style="styles" |  | ||||||
|       @text-change="(e: any) => $emit('update:modelValue', content)" |  | ||||||
|     /> |  | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| @ -102,6 +88,7 @@ const styles = computed(() => { | |||||||
|   if (props.height) { |   if (props.height) { | ||||||
|     style.height = `${props.height}px`; |     style.height = `${props.height}px`; | ||||||
|   } |   } | ||||||
|  |   style.width = '1000px'; | ||||||
|   return style; |   return style; | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| @ -166,77 +153,96 @@ const handleUploadError = (err: any) => { | |||||||
| .editor-img-uploader { | .editor-img-uploader { | ||||||
|   display: none; |   display: none; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .editor, | .editor, | ||||||
| .ql-toolbar { | .ql-toolbar { | ||||||
|   white-space: pre-wrap !important; |   white-space: pre-wrap !important; | ||||||
|   line-height: normal !important; |   line-height: normal !important; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .quill-img { | .quill-img { | ||||||
|   display: none; |   display: none; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .ql-snow .ql-tooltip[data-mode='link']::before { | .ql-snow .ql-tooltip[data-mode='link']::before { | ||||||
|   content: '请输入链接地址:'; |   content: '请输入链接地址:'; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .ql-snow .ql-tooltip.ql-editing a.ql-action::after { | .ql-snow .ql-tooltip.ql-editing a.ql-action::after { | ||||||
|   border-right: 0; |   border-right: 0; | ||||||
|   content: '保存'; |   content: '保存'; | ||||||
|   padding-right: 0; |   padding-right: 0; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .ql-snow .ql-tooltip[data-mode='video']::before { | .ql-snow .ql-tooltip[data-mode='video']::before { | ||||||
|   content: '请输入视频地址:'; |   content: '请输入视频地址:'; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .ql-snow .ql-picker.ql-size .ql-picker-label::before, | .ql-snow .ql-picker.ql-size .ql-picker-label::before, | ||||||
| .ql-snow .ql-picker.ql-size .ql-picker-item::before { | .ql-snow .ql-picker.ql-size .ql-picker-item::before { | ||||||
|   content: '14px'; |   content: '14px'; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='small']::before, | .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='small']::before, | ||||||
| .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='small']::before { | .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='small']::before { | ||||||
|   content: '10px'; |   content: '10px'; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='large']::before, | .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='large']::before, | ||||||
| .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='large']::before { | .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='large']::before { | ||||||
|   content: '18px'; |   content: '18px'; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='huge']::before, | .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='huge']::before, | ||||||
| .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='huge']::before { | .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='huge']::before { | ||||||
|   content: '32px'; |   content: '32px'; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .ql-snow .ql-picker.ql-header .ql-picker-label::before, | .ql-snow .ql-picker.ql-header .ql-picker-label::before, | ||||||
| .ql-snow .ql-picker.ql-header .ql-picker-item::before { | .ql-snow .ql-picker.ql-header .ql-picker-item::before { | ||||||
|   content: '文本'; |   content: '文本'; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='1']::before, | .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='1']::before, | ||||||
| .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='1']::before { | .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='1']::before { | ||||||
|   content: '标题1'; |   content: '标题1'; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='2']::before, | .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='2']::before, | ||||||
| .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='2']::before { | .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='2']::before { | ||||||
|   content: '标题2'; |   content: '标题2'; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='3']::before, | .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='3']::before, | ||||||
| .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='3']::before { | .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='3']::before { | ||||||
|   content: '标题3'; |   content: '标题3'; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='4']::before, | .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='4']::before, | ||||||
| .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='4']::before { | .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='4']::before { | ||||||
|   content: '标题4'; |   content: '标题4'; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='5']::before, | .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='5']::before, | ||||||
| .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='5']::before { | .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='5']::before { | ||||||
|   content: '标题5'; |   content: '标题5'; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='6']::before, | .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='6']::before, | ||||||
| .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='6']::before { | .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='6']::before { | ||||||
|   content: '标题6'; |   content: '标题6'; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .ql-snow .ql-picker.ql-font .ql-picker-label::before, | .ql-snow .ql-picker.ql-font .ql-picker-label::before, | ||||||
| .ql-snow .ql-picker.ql-font .ql-picker-item::before { | .ql-snow .ql-picker.ql-font .ql-picker-item::before { | ||||||
|   content: '标准字体'; |   content: '标准字体'; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='serif']::before, | .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='serif']::before, | ||||||
| .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='serif']::before { | .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='serif']::before { | ||||||
|   content: '衬线字体'; |   content: '衬线字体'; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='monospace']::before, | .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='monospace']::before, | ||||||
| .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='monospace']::before { | .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='monospace']::before { | ||||||
|   content: '等宽字体'; |   content: '等宽字体'; | ||||||
|  | |||||||
| @ -33,6 +33,7 @@ | |||||||
| import { Search } from '@element-plus/icons-vue'; | import { Search } from '@element-plus/icons-vue'; | ||||||
| import { propTypes } from '@/utils/propTypes'; | import { propTypes } from '@/utils/propTypes'; | ||||||
| import { jsonp } from 'vue-jsonp'; | import { jsonp } from 'vue-jsonp'; | ||||||
|  | const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||||
| import { debounce } from '@/utils/debounce.js'; | import { debounce } from '@/utils/debounce.js'; | ||||||
| import { OssVO } from '@/api/system/oss/types'; | import { OssVO } from '@/api/system/oss/types'; | ||||||
| import { listByIds } from '@/api/system/oss'; | import { listByIds } from '@/api/system/oss'; | ||||||
| @ -93,8 +94,7 @@ const onClick = (e: any) => { | |||||||
|         // 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; //行政区划编码 | ||||||
|         center.value.lat = data.result.location.lat; |         center.value = { lat: data.result.location.lat, lng: data.result.location.lng }; | ||||||
|         center.value.lng = data.result.location.lng; |  | ||||||
|         searchLocation.value = data.result.formatted_addresses.recommend; |         searchLocation.value = data.result.formatted_addresses.recommend; | ||||||
|         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 } }]; | ||||||
|         console.log(form.value); |         console.log(form.value); | ||||||
| @ -119,8 +119,6 @@ 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) { | ||||||
|         center.value.lat = data.result.location.lat; |  | ||||||
|         center.value.lng = data.result.location.lng; |  | ||||||
|         // 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 + | ||||||
| @ -132,8 +130,9 @@ const performSearch = async (text) => { | |||||||
|         // 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 = data.result.formatted_addresses.recommend; |         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 }; | ||||||
|         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 } }]; | ||||||
|         console.log(form.value); |         console.log(form.value); | ||||||
|         emit('modelValue', form.value); |         emit('modelValue', form.value); | ||||||
|  | |||||||
							
								
								
									
										142
									
								
								src/components/activitylink/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								src/components/activitylink/index.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,142 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="note"> | ||||||
|  |     <div class="content"> | ||||||
|  |       <img src="" /> | ||||||
|  |       <div class="title">{{ form.activityName }}</div> | ||||||
|  |       <div class="description"> | ||||||
|  |         <div><img src="../../assets/images/num.png" />活动人数:{{ form.activityUserCount }}人</div> | ||||||
|  |         <div><img src="../../assets/images/time.png" />活动时间:{{ form.activityTime }}</div> | ||||||
|  |         <div><img src="../../assets/images/laba.png" />报名截至:{{ form.registrationDeadline }}</div> | ||||||
|  |         <div><img src="../../assets/images/moeny.png" />活动费用:{{ form.paymentMethod == 1 ? '发起人收款' : '免费' }}</div> | ||||||
|  |         <div><img src="../../assets/images/address.png" />活动地址:{{ form.activityLocation }}</div> | ||||||
|  |       </div> | ||||||
|  |       <div> | ||||||
|  |         <div style="font-size: 14px;font-weight: 600;line-height:30px">活动介绍</div> | ||||||
|  |         <div>{{ form.activityDescription }}</div> | ||||||
|  |       </div> | ||||||
|  |       <div> | ||||||
|  |         <div style="font-size: 14px;font-weight: 600;line-height:30px">活动流程</div> | ||||||
|  |         <div v-for="(item, index) in listdatatime"> | ||||||
|  |           <div style="display: flex; align-items: center"> | ||||||
|  |             <div style="width: 10px; height: 10px; background-color: #000; border-radius: 50%"></div> | ||||||
|  |             <div>{{ item.activityTime }} </div> | ||||||
|  |             <div>{{ item.planContent }}</div> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  | <script setup lang="ts"> | ||||||
|  | import { string } from 'vue-types'; | ||||||
|  | import { contentall, tagall } from '@/api/manage/notebook'; | ||||||
|  | import { hotelall } from '@/api/manage/route'; | ||||||
|  | const sys_user_tagOptions = ref([]); //标签库 | ||||||
|  | const sys_user_contentOptions = ref([]); //标签库 | ||||||
|  | const props = defineProps({ | ||||||
|  |   form: { | ||||||
|  |     type: [String, Object, Array], | ||||||
|  |     default: () => {} | ||||||
|  |   }, | ||||||
|  |   listdatatime: { | ||||||
|  |     type: [String, Object, Array], | ||||||
|  |     default: () => {} | ||||||
|  |   } | ||||||
|  | }); | ||||||
|  | const form = ref(props.form); | ||||||
|  | const listdatatime = ref(props.listdatatime); | ||||||
|  | const getContent = async () => { | ||||||
|  |   const res = await contentall({ status: 2 }); | ||||||
|  |   const arr = await hotelall({ status: 1 }); | ||||||
|  |   sys_user_contentOptions.value = res.concat(arr); //地点 | ||||||
|  | }; | ||||||
|  | const getTag = async () => { | ||||||
|  |   const res = await tagall(); | ||||||
|  |   sys_user_tagOptions.value = res; //标签库 | ||||||
|  | }; | ||||||
|  | /** | ||||||
|  |  * 标签格式化 | ||||||
|  |  */ | ||||||
|  | const formatTag = (tagId: string | null) => { | ||||||
|  |   let tagString = ''; | ||||||
|  |   // for (let i = 0; i < sys_user_tagOptions.value.length; i++) { | ||||||
|  |   //   const element = sys_user_tagOptions.value[i]; | ||||||
|  |   //   if (tagId?.includes(element.id)) { | ||||||
|  |   //     tagString += ',' + element.title; | ||||||
|  |   //   } | ||||||
|  |   // } | ||||||
|  |   for (let i = 0; i < sys_user_tagOptions.value.length; i++) { | ||||||
|  |     const element = sys_user_tagOptions.value[i]; | ||||||
|  |     if (tagId != null) { | ||||||
|  |       let filteredArray = tagId.split(',').filter((item) => item == element.id); | ||||||
|  |       if (filteredArray.length > 0) { | ||||||
|  |         tagString += '#' + element.title; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   return tagString; | ||||||
|  | }; | ||||||
|  | /** | ||||||
|  |  * 标记地点格式化 | ||||||
|  |  */ | ||||||
|  | const formatlocation = (tagId: string | null) => { | ||||||
|  |   let tagString = ''; | ||||||
|  |   let arrlist = tagId?.split(',').map(Number); | ||||||
|  |   for (let i = 0; i < sys_user_contentOptions.value.length; i++) { | ||||||
|  |     const element = sys_user_contentOptions.value[i]; | ||||||
|  |     for (let j = 0; j < arrlist.length; j++) { | ||||||
|  |       const conten = arrlist[j]; | ||||||
|  |       if (conten == element.id) { | ||||||
|  |         tagString += ',' + element.name; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   return tagString.substring(1); | ||||||
|  | }; | ||||||
|  | onMounted(() => { | ||||||
|  |   getTag(); //标签库 | ||||||
|  |   getContent(); | ||||||
|  | }); | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .note { | ||||||
|  |   margin: 0 auto; | ||||||
|  |   width: 350px; | ||||||
|  |   height: 700px; | ||||||
|  |   background: url('../../assets/images/bgm.png') no-repeat; | ||||||
|  |   background-size: 100% 100%; | ||||||
|  |   padding-top: 70px; | ||||||
|  |   .content { | ||||||
|  |     width: 88%; | ||||||
|  |     height: 580px; | ||||||
|  |     overflow-y: auto; | ||||||
|  |     margin: 0 auto; | ||||||
|  |     .title { | ||||||
|  |       width: 95%; | ||||||
|  |       font-weight: 600; | ||||||
|  |       padding-top: 300px; | ||||||
|  |       margin: 0 auto; | ||||||
|  |       font-size: 16px; | ||||||
|  |     } | ||||||
|  |     .description { | ||||||
|  |       margin-top: 15px; | ||||||
|  |       border-radius: 20px; | ||||||
|  |       padding: 10px; | ||||||
|  |       line-height: 30px; | ||||||
|  |       background-color: #f3efe8; | ||||||
|  |       img { | ||||||
|  |         width: 15px; | ||||||
|  |         height: 15px; | ||||||
|  |         margin-right: 5px; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .content::-webkit-scrollbar { | ||||||
|  |   display: none; | ||||||
|  | } | ||||||
|  | .content::-webkit-scrollbar { | ||||||
|  |   width: 0px; | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @ -10,8 +10,8 @@ | |||||||
|             <div style="margin-right: 5px;"> |             <div style="margin-right: 5px;"> | ||||||
|               {{ comment.nickName }} |               {{ comment.nickName }} | ||||||
|             </div> |             </div> | ||||||
|             <div v-if="comment.parentId" class="reply-to"></div> |             <!-- <div v-if="comment.parentId" class="reply-to"></div> | ||||||
|             <div v-if="comment.parentId" class="reply-to-username">{{ comment.replyNickName }}</div> |             <div v-if="comment.parentId" class="reply-to-username">{{ comment.replyNickName }}</div> --> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="user-details"> |         <div class="user-details"> | ||||||
| @ -21,21 +21,26 @@ | |||||||
|             <span class="ip-address">IP: {{ comment.address?comment.address:'未知' }}</span> |             <span class="ip-address">IP: {{ comment.address?comment.address:'未知' }}</span> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <!-- <div v-if="comment.replies && comment.replies.length" class="replies"> |         <div v-if="comment.daList && comment.daList.length" class="replies"> | ||||||
|           <div v-for="reply in comment.replies" :key="reply.id" class="reply-item"> |           <div v-for="reply in comment.daList" :key="reply.id" class="reply-item"> | ||||||
|             <div class="user-info"> |             <div class="user-info"> | ||||||
|               <img :src="reply.avatar" alt="回复用户昵称" class="avatar"> |               <!-- <img :src="reply.avatar" alt="" class="avatar"> --> | ||||||
|               <div class="user-details"> |               <image-preview :src="reply.avatar" :width="25" :height="25" /> | ||||||
|                 <div class="username">回复 {{ reply.username }}</div> |               <div class=""> | ||||||
|                 <div class="comment-content">{{ reply.content }}</div> |                 <div class="username"> | ||||||
|                 <div class="comment-info"> |                   <span>{{ reply.nickName }}</span> | ||||||
|                   <span class="comment-time">{{ reply.time }}</span> |                   <div class="reply-to"></div> | ||||||
|                   <span class="ip-address">IP: {{ reply.ipAddress }}</span> |                   <span>{{ reply.replyNickName }}</span> | ||||||
|  |                 </div> | ||||||
|  |                 <div class="comment-content" style="margin-left: 10px;">{{ reply.content }}</div> | ||||||
|  |                 <div class="comment-info" style="margin-left: 10px;"> | ||||||
|  |                   <span class="comment-time">{{ reply.createTime }}</span> | ||||||
|  |                   <span class="ip-address">IP: {{ reply.address?reply.address:'未知' }}</span> | ||||||
|                 </div> |                 </div> | ||||||
|               </div> |               </div> | ||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> --> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|     <pagination v-show="total > 0" id="table_page" :total="total" v-model:page="queryParams.pageNum" |     <pagination v-show="total > 0" id="table_page" :total="total" v-model:page="queryParams.pageNum" | ||||||
| @ -113,13 +118,15 @@ const getCommentList = async () => { | |||||||
|         .reply-to { |         .reply-to { | ||||||
|           width: 0; |           width: 0; | ||||||
|           height: 0; |           height: 0; | ||||||
|           margin-top: 5px; |  | ||||||
|           border-top: 6px solid transparent; |           border-top: 6px solid transparent; | ||||||
|           /* 上边框透明 */ |           /* 上边框透明 */ | ||||||
|           border-bottom: 6px solid transparent; |           border-bottom: 6px solid transparent; | ||||||
|           /* 下边框透明 */ |           /* 下边框透明 */ | ||||||
|           border-left: 6px solid #999; |           border-left: 6px solid #999; | ||||||
|           /* 左边框为箭头颜色,这里设为黑色,可按需更改 */ |           /* 左边框为箭头颜色,这里设为黑色,可按需更改 */ | ||||||
|  | 
 | ||||||
|  |           margin: 0px 8px; | ||||||
|  |           margin-top: 5px; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         .reply-to-username { |         .reply-to-username { | ||||||
| @ -130,12 +137,12 @@ const getCommentList = async () => { | |||||||
| 
 | 
 | ||||||
|     .user-details { |     .user-details { | ||||||
|       margin-left: 35px; |       margin-left: 35px; | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|       .comment-content { |     .comment-content { | ||||||
|         color: #000; |       color: #000; | ||||||
|         font-size: 16px; |       font-size: 16px; | ||||||
|         padding: 3px 0px; |       padding: 3px 0px; | ||||||
|       } |  | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @ -145,6 +152,15 @@ const getCommentList = async () => { | |||||||
|   margin-left: 15px; |   margin-left: 15px; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .replies { | ||||||
|  |   margin-left: 35px; | ||||||
|  | 
 | ||||||
|  |   .reply-item { | ||||||
|  |     margin-top: 5px; | ||||||
|  |     padding: 5px 0px; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #table_page { | #table_page { | ||||||
|   height: 50px !important; |   height: 50px !important; | ||||||
|   margin-top: 10px !important; |   margin-top: 10px !important; | ||||||
|  | |||||||
							
								
								
									
										119
									
								
								src/components/note/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								src/components/note/index.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,119 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="note"> | ||||||
|  |     <div class="content"> | ||||||
|  |       <img src="" /> | ||||||
|  |       <div class="title">{{ form.title }}</div> | ||||||
|  |       <div v-html="form.content"></div> | ||||||
|  |       <div class="tagid">{{ formatTag(form.tagId) }}</div> | ||||||
|  |       <div class="address" v-if="form.location"> | ||||||
|  |         <img src="../../assets/images/address.png" /> | ||||||
|  |         {{ formatlocation(form.location) }} | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  | <script setup lang="ts"> | ||||||
|  | import { string } from 'vue-types'; | ||||||
|  | import { contentall, tagall } from '@/api/manage/notebook'; | ||||||
|  | import { hotelall } from '@/api/manage/route'; | ||||||
|  | const sys_user_tagOptions = ref([]); //标签库 | ||||||
|  | const sys_user_contentOptions = ref([]); //标签库 | ||||||
|  | const props = defineProps({ | ||||||
|  |   form: { | ||||||
|  |     type: [String, Object, Array], | ||||||
|  |     default: () => {} | ||||||
|  |   } | ||||||
|  | }); | ||||||
|  | const form = ref(props.form); | ||||||
|  | const getContent = async () => { | ||||||
|  |   const res = await contentall({ status: 2 }); | ||||||
|  |   const arr = await hotelall({ status: 1 }); | ||||||
|  |   sys_user_contentOptions.value = res.concat(arr); //地点 | ||||||
|  | }; | ||||||
|  | const getTag = async () => { | ||||||
|  |   const res = await tagall(); | ||||||
|  |   sys_user_tagOptions.value = res; //标签库 | ||||||
|  | }; | ||||||
|  | /** | ||||||
|  |  * 标签格式化 | ||||||
|  |  */ | ||||||
|  | const formatTag = (tagId: string | null) => { | ||||||
|  |   let tagString = ''; | ||||||
|  |   // for (let i = 0; i < sys_user_tagOptions.value.length; i++) { | ||||||
|  |   //   const element = sys_user_tagOptions.value[i]; | ||||||
|  |   //   if (tagId?.includes(element.id)) { | ||||||
|  |   //     tagString += ',' + element.title; | ||||||
|  |   //   } | ||||||
|  |   // } | ||||||
|  |   for (let i = 0; i < sys_user_tagOptions.value.length; i++) { | ||||||
|  |     const element = sys_user_tagOptions.value[i]; | ||||||
|  |     if (tagId != null) { | ||||||
|  |       let filteredArray = tagId.split(',').filter((item) => item == element.id); | ||||||
|  |       if (filteredArray.length > 0) { | ||||||
|  |         tagString += '#' + element.title; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   return tagString; | ||||||
|  | }; | ||||||
|  | /** | ||||||
|  |  * 标记地点格式化 | ||||||
|  |  */ | ||||||
|  | const formatlocation = (tagId: string | null) => { | ||||||
|  |   let tagString = ''; | ||||||
|  |   let arrlist = tagId?.split(',').map(Number); | ||||||
|  |   for (let i = 0; i < sys_user_contentOptions.value.length; i++) { | ||||||
|  |     const element = sys_user_contentOptions.value[i]; | ||||||
|  |     for (let j = 0; j < arrlist.length; j++) { | ||||||
|  |       const conten = arrlist[j]; | ||||||
|  |       if (conten == element.id) { | ||||||
|  |         tagString += ',' + element.name; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   return tagString.substring(1); | ||||||
|  | }; | ||||||
|  | onMounted(() => { | ||||||
|  |   getTag(); //标签库 | ||||||
|  |   getContent(); | ||||||
|  | }); | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .note { | ||||||
|  |   margin: 0 auto; | ||||||
|  |   width: 350px; | ||||||
|  |   height: 700px; | ||||||
|  |   background: url('../../assets/images/bgm.png') no-repeat; | ||||||
|  |   background-size: 100% 100%; | ||||||
|  |   padding-top: 70px; | ||||||
|  |   .content { | ||||||
|  |     width: 88%; | ||||||
|  |     height: 580px; | ||||||
|  |     overflow-y: auto; | ||||||
|  |     margin: 0 auto; | ||||||
|  |     .title { | ||||||
|  |       font-weight: 600; | ||||||
|  |       padding-top: 300px; | ||||||
|  |       margin: 0 auto; | ||||||
|  |     } | ||||||
|  |     .tagid { | ||||||
|  |       color: #1c84c6; | ||||||
|  |     } | ||||||
|  |     .address { | ||||||
|  |       line-height: 40px; | ||||||
|  |       color: #2b2f3a; | ||||||
|  |       img { | ||||||
|  |         width: 15px; | ||||||
|  |         height: 15px; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | .content::-webkit-scrollbar { | ||||||
|  |   display: none; | ||||||
|  | } | ||||||
|  | .content::-webkit-scrollbar { | ||||||
|  |   width: 0px; | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @ -3,12 +3,15 @@ | |||||||
|   <div> |   <div> | ||||||
|     <el-table :height="props.autoTableHeight" v-loading="loading" :data="props.articleList" |     <el-table :height="props.autoTableHeight" v-loading="loading" :data="props.articleList" | ||||||
|       @selection-change="handleSelectionChange" border> |       @selection-change="handleSelectionChange" border> | ||||||
|       <el-table-column type="selection" width="55" align="center" v-if="props.parentName != 'dyUser'" /> |       <!-- <el-table-column type="selection" width="55" align="center" v-if="props.parentName != 'dyUser'" /> --> | ||||||
|       <!-- <el-table-column label="ID" align="center" prop="id" v-if="props.parentName != 'dyUser'" /> --> |       <!-- <el-table-column label="ID" align="center" prop="id" v-if="props.parentName != 'dyUser'" /> --> | ||||||
|       <el-table-column label="笔记标题" align="center" prop="title" width="180px" /> |       <el-table-column label="笔记标题" align="center" prop="title" width="180px" /> | ||||||
|       <el-table-column label="笔记封面" align="center" prop="" width="80px" /> |       <el-table-column label="笔记封面" align="center" prop="" width="80px" /> | ||||||
|       <el-table-column label="笔记类别" align="center" prop="" width="80px" /> |       <el-table-column label="标记地点" align="center" prop="location"> | ||||||
|       <el-table-column label="标记地点" align="center" prop="location" width="180px" /> |         <template #default="scope"> | ||||||
|  |           <span>{{ formatlocation(scope.row.location) }}</span> | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|       <el-table-column label="标签" align="center" prop=""> |       <el-table-column label="标签" align="center" prop=""> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <span>{{ formatTag(scope.row.tagId.toString()) }}</span> |           <span>{{ formatTag(scope.row.tagId.toString()) }}</span> | ||||||
| @ -25,16 +28,16 @@ | |||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="点赞数" align="center" prop="agreeCount" width="80px"> |       <el-table-column label="点赞数" align="center" prop="agreeCount" width="80px"> | ||||||
|         <template #default="scope"> |         <!-- <template #default="scope"> | ||||||
|           <el-button link type="primary" @click="handleComment(scope.row)">12</el-button> |           <el-button link type="primary" @click="handleComment(scope.row)">12</el-button> | ||||||
|         </template> |         </template> --> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="发布状态" align="center" prop=""> |       <el-table-column label="发布状态" align="center" prop=""> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <span>{{ scope.row.status == 0 ? '未发布' : scope.row.status == 1 ? '审核中' : scope.row.status == 2 ? '已发布' : '草稿' }}</span> |           <span>{{ scope.row.status == 0 ? '未发布' : scope.row.status == 1 ? '审核中' : scope.row.status == 2 ? '已发布' : '草稿' }}</span> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="操作人" align="center" prop="updateByName" /> |       <!-- <el-table-column label="操作人" align="center" prop="updateByName" /> --> | ||||||
|       <el-table-column label="操作时间" align="center" prop="updateTime" width="180px" /> |       <el-table-column label="操作时间" align="center" prop="updateTime" width="180px" /> | ||||||
|       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" |       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" | ||||||
|         v-if="props.parentName != 'dyUser' && props.parentName != 'scenic'"> |         v-if="props.parentName != 'dyUser' && props.parentName != 'scenic'"> | ||||||
| @ -54,8 +57,6 @@ | |||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|     </el-table> |     </el-table> | ||||||
|     <pagination v-show="total > 0" id="table_page" :total="total" v-model:page="queryParams.pageNum" |  | ||||||
|       v-model:limit="queryParams.pageSize" @pagination="getTableList" /> |  | ||||||
|     <!-- 笔记详情弹层 --> |     <!-- 笔记详情弹层 --> | ||||||
|     <el-dialog title="笔记详情" v-model="noteDetail.visible" width="500px" append-to-body> |     <el-dialog title="笔记详情" v-model="noteDetail.visible" width="500px" append-to-body> | ||||||
|       <div> |       <div> | ||||||
| @ -88,6 +89,9 @@ | |||||||
| import { ref, reactive, onMounted, nextTick } from 'vue'; | import { ref, reactive, onMounted, nextTick } from 'vue'; | ||||||
| import { string } from 'vue-types'; | import { string } from 'vue-types'; | ||||||
| import { listByTagIdNotebook } from '@/api/manage/scenic'; | import { listByTagIdNotebook } from '@/api/manage/scenic'; | ||||||
|  | import { tagall,contentall } from '@/api/manage/notebook'; | ||||||
|  | import { hotelall } from '@/api/manage/route'; | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| //导入父组件传递的值 | //导入父组件传递的值 | ||||||
| const props = defineProps({ | const props = defineProps({ | ||||||
| @ -107,10 +111,10 @@ const props = defineProps({ | |||||||
|     type: String, |     type: String, | ||||||
|     default: () => '' |     default: () => '' | ||||||
|   }, |   }, | ||||||
|   sys_user_tagOptions: { |   // sys_user_tagOptions: { | ||||||
|     type: Array, |   //   type: Array, | ||||||
|     default: () => [] |   //   default: () => [] | ||||||
|   } |   // } | ||||||
| }); | }); | ||||||
| const total = ref(0); | const total = ref(0); | ||||||
| const loading = ref(false); | const loading = ref(false); | ||||||
| @ -153,14 +157,16 @@ const handleComment = async (row: any) => { | |||||||
| } | } | ||||||
| // 监听父组件传递的tagIds,当tagIds发生变化时,重新获取数据 | // 监听父组件传递的tagIds,当tagIds发生变化时,重新获取数据 | ||||||
| watch( | watch( | ||||||
|   () => props.noteBookTagIds, |   () => props.articleList, | ||||||
|   (newVal, oldVal) => { |   (newVal, oldVal) => { | ||||||
|     console.log(newVal); |     console.log(newVal); | ||||||
|     queryParams.tagIds = newVal; |     queryParams.tagIds = newVal; | ||||||
|     if (newVal) { |     if (newVal) { | ||||||
|       //获取数据 |       //获取数据 | ||||||
|       nextTick(() => { |       nextTick(() => { | ||||||
|         getTableList(); |         // getTableList(); | ||||||
|  |         getTag(); | ||||||
|  |         getContent(); | ||||||
|       }); |       }); | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
| @ -186,14 +192,8 @@ const handleDelete = (row: any) => { | |||||||
|  */ |  */ | ||||||
| const formatTag = (tagId: string | null) => { | const formatTag = (tagId: string | null) => { | ||||||
|   let tagString = ''; |   let tagString = ''; | ||||||
|   // for (let i = 0; i < props.sys_user_tagOptions.length; i++) { |   for (let i = 0; i < sys_user_tagOptions.value.length; i++) { | ||||||
|   //   const element:any = props.sys_user_tagOptions[i]; |     const element:any = sys_user_tagOptions.value[i]; | ||||||
|   //   if (tagId?.includes(element.id)) { |  | ||||||
|   //     tagString += ',' + element.title; |  | ||||||
|   //   } |  | ||||||
|   // } |  | ||||||
|   for (let i = 0; i < props.sys_user_tagOptions.length; i++) { |  | ||||||
|     const element:any = props.sys_user_tagOptions[i]; |  | ||||||
|     if (tagId!=null) { |     if (tagId!=null) { | ||||||
|       let filteredArray = tagId.split(',').filter((item) => item==element.id); |       let filteredArray = tagId.split(',').filter((item) => item==element.id); | ||||||
|       if (filteredArray.length>0) { |       if (filteredArray.length>0) { | ||||||
| @ -203,6 +203,36 @@ const formatTag = (tagId: string | null) => { | |||||||
|   } |   } | ||||||
|   return tagString.substring(1); |   return tagString.substring(1); | ||||||
| }; | }; | ||||||
|  | const sys_user_contentOptions = ref([]); //标签库 | ||||||
|  | // 获取地点 | ||||||
|  | const getContent = async () => { | ||||||
|  |   const res = await contentall({ status: 2 }); | ||||||
|  |   const arr = await hotelall({ status: 1 }); | ||||||
|  |   sys_user_contentOptions.value = res.concat(arr); //地点 | ||||||
|  | }; | ||||||
|  | // 获取标签 | ||||||
|  | const sys_user_tagOptions=ref([]);// | ||||||
|  | const getTag = async () => { | ||||||
|  |   const res = await tagall(); | ||||||
|  |   Object.assign(sys_user_tagOptions.value,res); | ||||||
|  | }; | ||||||
|  | /** | ||||||
|  |  * 标记地点格式化 | ||||||
|  |  */ | ||||||
|  | const formatlocation = (tagId: string | null) => { | ||||||
|  |   let tagString = ''; | ||||||
|  |   let arrlist = tagId?.split(',').map(Number); | ||||||
|  |   for (let i = 0; i < sys_user_contentOptions.value.length; i++) { | ||||||
|  |     const element = sys_user_contentOptions.value[i]; | ||||||
|  |     for (let j = 0; j < arrlist.length; j++) { | ||||||
|  |       const conten = arrlist[j]; | ||||||
|  |       if (conten == element.id) { | ||||||
|  |         tagString += ',' + element.name; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   return tagString.substring(1); | ||||||
|  | }; | ||||||
| // 导入父组件定义的函数 | // 导入父组件定义的函数 | ||||||
| const emit = defineEmits(['hideDialog', 'handleUpdate', 'handleDelete']); | const emit = defineEmits(['hideDialog', 'handleUpdate', 'handleDelete']); | ||||||
| </script> | </script> | ||||||
|  | |||||||
| @ -14,7 +14,11 @@ | |||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <!-- <el-table-column label="排序" align="center" prop="" /> --> |       <!-- <el-table-column label="排序" align="center" prop="" /> --> | ||||||
|       <el-table-column label="活动人数" align="center" prop="activityUserCount" /> |       <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 link type="primary" @click="baominglist(scope.row)">{{ scope.row.registrationCount }}</el-button> | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|       <el-table-column label="活动流程" align="center" prop="" width="100px"> |       <el-table-column label="活动流程" align="center" prop="" width="100px"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <el-button link type="primary" @click="chakanhandle(scope.row)">查看详情</el-button> |           <el-button link type="primary" @click="chakanhandle(scope.row)">查看详情</el-button> | ||||||
| @ -51,12 +55,44 @@ | |||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|     </el-table> |     </el-table> | ||||||
|  |     <!--    报名人数弹窗--> | ||||||
|  |     <el-dialog v-model="numdialog.visible" title="报名人数" width="60%" append-to-body> | ||||||
|  |       <el-table v-loading="loading" :height="500" border :data="numdialog.activityUsersList"> | ||||||
|  |         <el-table-column v-if="true" label="序号" align="center" prop="id" fixed width="80px" /> | ||||||
|  |         <el-table-column label="昵称" align="center" fixed prop="nickname" width="180px" /> | ||||||
|  |         <el-table-column label="头像" align="center" fixed prop="avatar" width="80px" /> | ||||||
|  |         <el-table-column label="性别" align="center" prop="sex"> | ||||||
|  |           <template #default="scope"> | ||||||
|  |             <dict-tag :options="sys_user_sex" :value="scope.row.sex" /> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |         <el-table-column label="报名宣言" align="center" prop="declaration" show-overflow-tooltip /> | ||||||
|  |         <el-table-column label="介绍照片" align="center" prop="introducePhoto" /> | ||||||
|  |         <el-table-column label="微信号" align="center" prop="wechat" /> | ||||||
|  | 
 | ||||||
|  |         <el-table-column label="报名时间" align="center" prop="createTime" width="180px" /> | ||||||
|  |         <el-table-column label="报名结果" align="center" prop="status" width="180px"> | ||||||
|  |           <template #default="scope"> | ||||||
|  |             <el-tag v-if="scope.row.status == 1" type="info">通过</el-tag> | ||||||
|  |             <el-tag v-if="scope.row.status == 0" type="primary">待挑选</el-tag> | ||||||
|  |             <!--            <el-tag v-if="scope.row.status == 3" type="primary">拒绝</el-tag>--> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |       </el-table> | ||||||
|  |       <pagination v-show="numdialog.total > 0" id="table_page" v-model:page="numdialog.params.pageNum" | ||||||
|  |         v-model:limit="numdialog.params.pageSize" :total="numdialog.total" @pagination="baominglist" /> | ||||||
|  |       <template #footer> | ||||||
|  |         <div class="dialog-footer"> | ||||||
|  |           <el-button @click="cancel">关 闭</el-button> | ||||||
|  |         </div> | ||||||
|  |       </template> | ||||||
|  |     </el-dialog> | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script setup lang="ts" name="partyList"> | <script setup lang="ts" name="partyList"> | ||||||
| import { ref, reactive, onMounted, nextTick } from 'vue'; | import { ref, reactive, onMounted, nextTick } from 'vue'; | ||||||
| 
 | import {activityUsersList} from '@/api/manage/activity'; | ||||||
| //导入父组件传递的值 | //导入父组件传递的值 | ||||||
| const props = defineProps({ | const props = defineProps({ | ||||||
|   partyList: { |   partyList: { | ||||||
| @ -89,6 +125,34 @@ const handleUpdate = async (row?: any) => { | |||||||
| const handleDelete = (row: any) => { | const handleDelete = (row: any) => { | ||||||
|   emit('handleDelete', row); |   emit('handleDelete', row); | ||||||
| }; | }; | ||||||
|  | const cancel = () => { | ||||||
|  |   numdialog.visible = false; | ||||||
|  |   numdialog.params.pageNum = 1; | ||||||
|  |   numdialog.params.activityId = undefined; | ||||||
|  | } | ||||||
|  | // 报名人数弹窗 | ||||||
|  | const numdialog = reactive({ | ||||||
|  |   visible: false, | ||||||
|  |   type:'', | ||||||
|  |   title:'', | ||||||
|  |   total:0, | ||||||
|  |   activityUsersList:[], | ||||||
|  |   params:{ | ||||||
|  |     pageNum: 1, | ||||||
|  |     pageSize: 10, | ||||||
|  |     activityId: undefined | ||||||
|  |   } | ||||||
|  | }); | ||||||
|  | // 查看报名人数 | ||||||
|  | const baominglist = async (row:any) => { | ||||||
|  |   if (row.id) { | ||||||
|  |     numdialog.params.activityId = row.id; | ||||||
|  |   } | ||||||
|  |   const res = await activityUsersList(numdialog.params); | ||||||
|  |   numdialog.activityUsersList = res.rows; | ||||||
|  |   numdialog.total = res.total; | ||||||
|  |   numdialog.visible = true; | ||||||
|  | }; | ||||||
| // 导入父组件定义的函数 | // 导入父组件定义的函数 | ||||||
| const emit = defineEmits(['hideDialog', 'handleUpdate', 'handleDelete']); | const emit = defineEmits(['hideDialog', 'handleUpdate', 'handleDelete']); | ||||||
| </script> | </script> | ||||||
|  | |||||||
| @ -1,82 +1,6 @@ | |||||||
| <template> | <template> | ||||||
|   <div class="app-container home"> |   <div class="app-container home"> | ||||||
|     <el-row :gutter="20"> |  | ||||||
|       <el-col :sm="24" :lg="12" style="padding-left: 20px"> |  | ||||||
|         <h2>岛游后台管理系统</h2> |  | ||||||
|         <p> |  | ||||||
|           岛游后台管理系统 是基于 RuoYi-Vue 针对 分布式集群 场景升级(不兼容原框架) |  | ||||||
|           <br /> |  | ||||||
|           * 前端开发框架 Vue3、TS、Element Plus<br /> |  | ||||||
|           * 后端开发框架 Spring Boot<br /> |  | ||||||
|           * 容器框架 Undertow 基于 Netty 的高性能容器<br /> |  | ||||||
|           * 权限认证框架 Sa-Token 支持多终端认证系统<br /> |  | ||||||
|           * 关系数据库 MySQL 适配 8.X 最低 5.7<br /> |  | ||||||
|           * 缓存数据库 Redis 适配 6.X 最低 4.X<br /> |  | ||||||
|           * 数据库框架 Mybatis-Plus 快速 CRUD 增加开发效率<br /> |  | ||||||
|           * 数据库框架 p6spy 更强劲的 SQL 分析<br /> |  | ||||||
|           * 多数据源框架 dynamic-datasource 支持主从与多种类数据库异构<br /> |  | ||||||
|           * 序列化框架 Jackson 统一使用 jackson 高效可靠<br /> |  | ||||||
|           * Redis客户端 Redisson 性能强劲、API丰富<br /> |  | ||||||
|           * 分布式限流 Redisson 全局、请求IP、集群ID 多种限流<br /> |  | ||||||
|           * 分布式锁 Lock4j 注解锁、工具锁 多种多样<br /> |  | ||||||
|           * 分布式幂等 Lock4j 基于分布式锁实现<br /> |  | ||||||
|           * 分布式链路追踪 SkyWalking 支持链路追踪、网格分析、度量聚合、可视化<br /> |  | ||||||
|           * 分布式任务调度 SnailJob 高性能 高可靠 易扩展<br /> |  | ||||||
|           * 文件存储 Minio 本地存储<br /> |  | ||||||
|           * 文件存储 七牛、阿里、腾讯 云存储<br /> |  | ||||||
|           * 监控框架 SpringBoot-Admin 全方位服务监控<br /> |  | ||||||
|           * 校验框架 Validation 增强接口安全性 严谨性<br /> |  | ||||||
|           * Excel框架 Alibaba EasyExcel 性能优异 扩展性强<br /> |  | ||||||
|           * 文档框架 SpringDoc、javadoc 无注解零入侵基于java注释<br /> |  | ||||||
|           * 工具类框架 Hutool、Lombok 减少代码冗余 增加安全性<br /> |  | ||||||
|           * 代码生成器 适配MP、SpringDoc规范化代码 一键生成前后端代码<br /> |  | ||||||
|           * 部署方式 Docker 容器编排 一键部署业务集群<br /> |  | ||||||
|           * 国际化 SpringMessage Spring标准国际化方案<br /> |  | ||||||
|         </p> |  | ||||||
|         <p><b>当前版本:</b> <span>v5.2.3</span></p> |  | ||||||
|         <p> |  | ||||||
|           <el-tag type="danger">¥免费开源</el-tag> |  | ||||||
|         </p> |  | ||||||
|       </el-col> |  | ||||||
| 
 | 
 | ||||||
|       <el-col :sm="24" :lg="12" style="padding-left: 20px"> |  | ||||||
|         <h2>RuoYi-Cloud-Plus多租户微服务管理系统</h2> |  | ||||||
|         <p> |  | ||||||
|           RuoYi-Cloud-Plus 微服务通用权限管理系统 重写 RuoYi-Cloud 全方位升级(不兼容原框架) |  | ||||||
|           <br /> |  | ||||||
|           * 前端开发框架 Vue3、TS、Element UI<br /> |  | ||||||
|           * 后端开发框架 Spring Boot<br /> |  | ||||||
|           * 微服务开发框架 Spring Cloud、Spring Cloud Alibaba<br /> |  | ||||||
|           * 容器框架 Undertow 基于 XNIO 的高性能容器<br /> |  | ||||||
|           * 权限认证框架 Sa-Token、Jwt 支持多终端认证系统<br /> |  | ||||||
|           * 关系数据库 MySQL 适配 8.X 最低 5.7<br /> |  | ||||||
|           * 关系数据库 Oracle 适配 11g 12c<br /> |  | ||||||
|           * 关系数据库 PostgreSQL 适配 13 14<br /> |  | ||||||
|           * 关系数据库 SQLServer 适配 2017 2019<br /> |  | ||||||
|           * 缓存数据库 Redis 适配 6.X 最低 5.X<br /> |  | ||||||
|           * 分布式注册中心 Alibaba Nacos 采用2.X 基于GRPC通信高性能<br /> |  | ||||||
|           * 分布式配置中心 Alibaba Nacos 采用2.X 基于GRPC通信高性能<br /> |  | ||||||
|           * 服务网关 Spring Cloud Gateway 响应式高性能网关<br /> |  | ||||||
|           * 负载均衡 Spring Cloud Loadbalancer 负载均衡处理<br /> |  | ||||||
|           * RPC远程调用 Apache Dubbo 原生态使用体验、高性能<br /> |  | ||||||
|           * 分布式限流熔断 Alibaba Sentinel 无侵入、高扩展<br /> |  | ||||||
|           * 分布式事务 Alibaba Seata 无侵入、高扩展 支持 四种模式<br /> |  | ||||||
|           * 分布式消息队列 Apache Kafka 高性能高速度<br /> |  | ||||||
|           * 分布式消息队列 Apache RocketMQ 高可用功能多样<br /> |  | ||||||
|           * 分布式消息队列 RabbitMQ 支持各种扩展插件功能多样性<br /> |  | ||||||
|           * 分布式搜索引擎 ElasticSearch 业界知名<br /> |  | ||||||
|           * 分布式链路追踪 Apache SkyWalking 链路追踪、网格分析、度量聚合、可视化<br /> |  | ||||||
|           * 分布式日志中心 ELK 业界成熟解决方案<br /> |  | ||||||
|           * 分布式监控 Prometheus、Grafana 全方位性能监控<br /> |  | ||||||
|           * 其余与 Vue 版本一致<br /> |  | ||||||
|         </p> |  | ||||||
|         <p><b>当前版本:</b> <span>v2.2.2</span></p> |  | ||||||
|         <p> |  | ||||||
|           <el-tag type="danger">¥免费开源</el-tag> |  | ||||||
|         </p> |  | ||||||
|       </el-col> |  | ||||||
|     </el-row> |  | ||||||
|     <el-divider /> |  | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -36,9 +36,13 @@ | |||||||
| 
 | 
 | ||||||
|     <el-table v-loading="loading" :height="autoTableHeight" :data="activityList" border @selection-change="handleSelectionChange"> |     <el-table v-loading="loading" :height="autoTableHeight" :data="activityList" border @selection-change="handleSelectionChange"> | ||||||
|       <!--      <el-table-column type="selection" width="55" align="center" />--> |       <!--      <el-table-column type="selection" width="55" align="center" />--> | ||||||
|       <el-table-column v-if="true" label="ID" align="center" prop="id" fixed width="180px" /> |       <el-table-column fixed label="序号" align="center" width="80"> | ||||||
|  |         <template #default="scope"> | ||||||
|  |           <span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span> | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|       <el-table-column label="活动名称" align="center" fixed prop="activityName" width="180px" /> |       <el-table-column label="活动名称" align="center" fixed prop="activityName" width="180px" /> | ||||||
|       <el-table-column label="活动描述" align="center" fixed prop="activityDescription" width="180px" show-overflow-tooltip /> |       <el-table-column label="活动描述" align="center" prop="activityDescription" width="180px" show-overflow-tooltip /> | ||||||
|       <el-table-column label="活动图片" align="center" prop="" /> |       <el-table-column label="活动图片" align="center" prop="" /> | ||||||
|       <el-table-column label="活动人数" align="center" prop="activityUserCount" /> |       <el-table-column label="活动人数" align="center" prop="activityUserCount" /> | ||||||
|       <el-table-column label="报名人数" align="center" prop="registrationCount"> |       <el-table-column label="报名人数" align="center" prop="registrationCount"> | ||||||
| @ -78,9 +82,7 @@ | |||||||
|           <el-tag v-if="scope.row.status == 3" type="primary">已发布</el-tag> |           <el-tag v-if="scope.row.status == 3" type="primary">已发布</el-tag> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="发布时间" align="center" prop="publishTime" /> |  | ||||||
|       <el-table-column label="发布人员" align="center" prop="publishName" /> |       <el-table-column label="发布人员" align="center" prop="publishName" /> | ||||||
|       <el-table-column label="操作人员" align="center" prop="updateName" /> |  | ||||||
|       <el-table-column label="操作时间" align="center" prop="updateTime" width="180px" /> |       <el-table-column label="操作时间" align="center" prop="updateTime" width="180px" /> | ||||||
|       <el-table-column label="操作" align="center" width="150px" fixed="right" class-name="small-padding fixed-width"> |       <el-table-column label="操作" align="center" width="150px" fixed="right" class-name="small-padding fixed-width"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
| @ -204,57 +206,8 @@ | |||||||
|     </el-dialog> |     </el-dialog> | ||||||
|     <!-- 查看活动流程 --> |     <!-- 查看活动流程 --> | ||||||
|     <el-dialog v-model="seedialog.visible" :title="seedialog.title" width="60%" append-to-body> |     <el-dialog v-model="seedialog.visible" :title="seedialog.title" width="60%" append-to-body> | ||||||
|       <el-form ref="activityFormRef" :model="form" :rules="rules" label-width="120px"> |       <activitylink :form="form" :listdatatime="listdatatime"></activitylink> | ||||||
|         <el-form-item label="活动名称"> | 
 | ||||||
|           <div>{{ form.activityName }}</div> |  | ||||||
|         </el-form-item> |  | ||||||
|         <el-form-item label="活动描述"> |  | ||||||
|           <div>{{ form.activityDescription }}</div> |  | ||||||
|         </el-form-item> |  | ||||||
|         <el-form-item label="活动人数"> |  | ||||||
|           <div>{{ form.activityUserCount }}人</div> |  | ||||||
|         </el-form-item> |  | ||||||
|         <div style="display: flex"> |  | ||||||
|           <el-form-item label="活动时间"> |  | ||||||
|             <div>{{ form.activityTime }}</div> |  | ||||||
|           </el-form-item> |  | ||||||
|           <el-form-item label="报名截至时间"> |  | ||||||
|             <div>{{ form.registrationDeadline }}</div> |  | ||||||
|           </el-form-item> |  | ||||||
|         </div> |  | ||||||
|         <div style="display: flex"> |  | ||||||
|           <el-form-item label="发布者地址"> |  | ||||||
|             <div>{{ form.publisherAddress }}</div> |  | ||||||
|           </el-form-item> |  | ||||||
|           <el-form-item label="活动地点"> |  | ||||||
|             <div>{{ form.activityLocation }}</div> |  | ||||||
|           </el-form-item> |  | ||||||
|         </div> |  | ||||||
|         <el-form-item label="收费方式"> |  | ||||||
|           <el-radio-group v-model="form.paymentMethod" disabled> |  | ||||||
|             <el-radio :value="1">发起人收款</el-radio> |  | ||||||
|             <el-radio :value="0">免费</el-radio> |  | ||||||
|           </el-radio-group> |  | ||||||
|         </el-form-item> |  | ||||||
|         <el-form-item label="挑选玩友"> |  | ||||||
|           <el-radio-group v-model="form.isSelected" disabled> |  | ||||||
|             <el-radio :value="1">挑选</el-radio> |  | ||||||
|             <el-radio :value="0">不挑选</el-radio> |  | ||||||
|           </el-radio-group> |  | ||||||
|           <span style="margin-left: 30px; font-size: 12px; color: #707070">勾选后,发起人需要逐个审核报名者,确认是否通过报名</span> |  | ||||||
|         </el-form-item> |  | ||||||
|         <el-form-item label="活动流程"> </el-form-item> |  | ||||||
|         <div v-for="(item, index) in listdatatime"> |  | ||||||
|           <div style="display: flex; align-items: center"> |  | ||||||
|             <el-form-item label="时间"> |  | ||||||
|               <div>{{ item.activityTime }}</div> |  | ||||||
|             </el-form-item> |  | ||||||
|             <el-form-item label="计划的活动内容"> |  | ||||||
|               <div>{{ item.planContent }}</div> |  | ||||||
|             </el-form-item> |  | ||||||
|           </div> |  | ||||||
|         </div> |  | ||||||
|       </el-form> |  | ||||||
|     </el-dialog> |     </el-dialog> | ||||||
|     <!--    问答弹窗--> |     <!--    问答弹窗--> | ||||||
|     <el-dialog v-model="wendadialog.visible" title="问答" width="40%" append-to-body> |     <el-dialog v-model="wendadialog.visible" title="问答" width="40%" append-to-body> | ||||||
| @ -516,7 +469,7 @@ const saveupdate = async (row?: ActivityVO, type) => { | |||||||
|   form.value.status = type == 1 ? 2 : 0; |   form.value.status = type == 1 ? 2 : 0; | ||||||
|   const test = type == 1 ? '发布' : '撤销发布'; |   const test = type == 1 ? '发布' : '撤销发布'; | ||||||
|   const _ids = row?.activityName || ids.value; |   const _ids = row?.activityName || ids.value; | ||||||
|   await proxy?.$modal.confirm('是否确认' + test + '活动信息编号为' + _ids + '的数据项?').finally(() => (loading.value = false)); |   await proxy?.$modal.confirm('是否确认' + test + '活动名称 为' + _ids + '的数据项?').finally(() => (loading.value = false)); | ||||||
|   await updateActivity(form.value).finally(() => (buttonLoading.value = false)); |   await updateActivity(form.value).finally(() => (buttonLoading.value = false)); | ||||||
|   proxy?.$modal.msgSuccess(test + '成功'); |   proxy?.$modal.msgSuccess(test + '成功'); | ||||||
|   await getList(); |   await getList(); | ||||||
| @ -575,8 +528,9 @@ const submitForm = () => { | |||||||
| 
 | 
 | ||||||
| /** 删除按钮操作 */ | /** 删除按钮操作 */ | ||||||
| const handleDelete = async (row?: ActivityVO) => { | const handleDelete = async (row?: ActivityVO) => { | ||||||
|   const _ids = row?.activityName || ids.value; |   const _ids = row?.id || ids.value; | ||||||
|   await proxy?.$modal.confirm('是否确认删除活动信息编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false)); |   const _idsname = row?.activityName || ids.value; | ||||||
|  |   await proxy?.$modal.confirm('是否确认删除活动名称为"' + _idsname + '"的数据项?').finally(() => (loading.value = false)); | ||||||
|   await delActivity(_ids); |   await delActivity(_ids); | ||||||
|   proxy?.$modal.msgSuccess('删除成功'); |   proxy?.$modal.msgSuccess('删除成功'); | ||||||
|   await getList(); |   await getList(); | ||||||
|  | |||||||
| @ -40,7 +40,12 @@ | |||||||
|     <el-table v-loading="loading" :height="autoTableHeight" border :data="articleList" |     <el-table v-loading="loading" :height="autoTableHeight" border :data="articleList" | ||||||
|       @selection-change="handleSelectionChange"> |       @selection-change="handleSelectionChange"> | ||||||
|       <!-- <el-table-column type="selection" width="55" align="center" /> --> |       <!-- <el-table-column type="selection" width="55" align="center" /> --> | ||||||
|       <el-table-column label="ID" align="center" prop="id" v-if="true" width="180px" /> |       <!-- <el-table-column label="ID" align="center" prop="id" v-if="true" width="180px" /> --> | ||||||
|  |       <el-table-column fixed label="序号" align="center" width="80"> | ||||||
|  |         <template #default="scope"> | ||||||
|  |           <span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span> | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|       <el-table-column label="标题" align="center" prop="title" /> |       <el-table-column label="标题" align="center" prop="title" /> | ||||||
|       <el-table-column label="内容" align="center" prop="content" width="80px"> |       <el-table-column label="内容" align="center" prop="content" width="80px"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
| @ -58,7 +63,7 @@ | |||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <el-tag v-if="scope.row.status == 0" type="info">未发布</el-tag> |           <el-tag v-if="scope.row.status == 0" type="info">未发布</el-tag> | ||||||
|           <el-tag v-if="scope.row.status == 1" type="success">审核中</el-tag> |           <el-tag v-if="scope.row.status == 1" type="success">审核中</el-tag> | ||||||
|           <el-tag v-if="scope.row.status == 2" type="success">已发布</el-tag> |           <el-tag v-if="scope.row.status == 2" type="primary">已发布</el-tag> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="更新时间" align="center" prop="updateTime" width="120"> |       <el-table-column label="更新时间" align="center" prop="updateTime" width="120"> | ||||||
| @ -69,9 +74,9 @@ | |||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160px"> |       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160px"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <el-button link type="primary" v-if="scope.row.status == 0" @click="updateRow(scope.row,'2')" |           <el-button link type="primary" v-if="scope.row.status == 0" @click="updateRow(scope.row,1)" | ||||||
|             v-hasPermi="['manage:article:edit']">发布</el-button> |             v-hasPermi="['manage:article:edit']">发布</el-button> | ||||||
|           <el-button link type="primary" v-if="scope.row.status == 2" @click="updateRow(scope.row,'0')" |           <el-button link type="primary" v-if="scope.row.status == 2" @click="updateRow(scope.row,0)" | ||||||
|             v-hasPermi="['manage:article:edit']">撤销发布</el-button> |             v-hasPermi="['manage:article:edit']">撤销发布</el-button> | ||||||
|           <el-tooltip content="编辑" placement="top" v-if="scope.row.status == 0"> |           <el-tooltip content="编辑" placement="top" v-if="scope.row.status == 0"> | ||||||
|             <el-button link type="primary" @click="handleUpdate(scope.row)" |             <el-button link type="primary" @click="handleUpdate(scope.row)" | ||||||
| @ -88,7 +93,7 @@ | |||||||
|     <pagination id="table_page" v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" |     <pagination id="table_page" v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" | ||||||
|       v-model:limit="queryParams.pageSize" @pagination="getList" /> |       v-model:limit="queryParams.pageSize" @pagination="getList" /> | ||||||
|     <!-- 添加或修改文章对话框 --> |     <!-- 添加或修改文章对话框 --> | ||||||
|     <el-dialog :title="dialog.title" v-model="dialog.visible" width="700px" append-to-body> |     <el-dialog :title="dialog.title" v-model="dialog.visible" :width="dialogWidth" append-to-body> | ||||||
|       <el-form ref="articleFormRef" :model="form" :rules="rules" label-width="80px"> |       <el-form ref="articleFormRef" :model="form" :rules="rules" label-width="80px"> | ||||||
|         <el-form-item label="文章标题" prop="title"> |         <el-form-item label="文章标题" prop="title"> | ||||||
|           <el-input v-model="form.title" placeholder="请输入文章标题" /> |           <el-input v-model="form.title" placeholder="请输入文章标题" /> | ||||||
| @ -131,7 +136,7 @@ | |||||||
| import { listTag,tagAll } from '@/api/manage/tag'; | import { listTag,tagAll } from '@/api/manage/tag'; | ||||||
| import { listArticle, getArticle, delArticle, addArticle, updateArticle } from '@/api/manage/article'; | import { listArticle, getArticle, delArticle, addArticle, updateArticle } from '@/api/manage/article'; | ||||||
| import { ArticleVO, ArticleQuery, ArticleForm } from '@/api/manage/article/types'; | import { ArticleVO, ArticleQuery, ArticleForm } from '@/api/manage/article/types'; | ||||||
| 
 | const dialogWidth=ref(window.innerWidth*0.6+'px'); | ||||||
| const { proxy } = getCurrentInstance() as ComponentInternalInstance; | const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||||
| const sys_user_tagOptions = ref([]); //标签库 | const sys_user_tagOptions = ref([]); //标签库 | ||||||
| const autoTableHeight = ref<number>(750); | const autoTableHeight = ref<number>(750); | ||||||
| @ -286,11 +291,12 @@ const handleUpdate = async (row?:any) => { | |||||||
|  * @param row 发布,撤销发布 |  * @param row 发布,撤销发布 | ||||||
|  * @param type |  * @param type | ||||||
|  */ |  */ | ||||||
| const updateRow = async (row: any, type: string) => { | const updateRow = async (row: any, type: number) => { | ||||||
|   await proxy?.$modal.confirm('是否确认' + (type == '0' ? '撤销发布' : '发布') + '名称为"' + row.title + '"的数据项?'); |   await proxy?.$modal.confirm('是否确认' + (type == 0 ? '撤销发布' : '发布') + '名称为"' + row.title + '"的数据项?'); | ||||||
|   row.status = type; |   Object.assign(form.value, row); | ||||||
|  |   form.value.status = type; | ||||||
|   buttonLoading.value = true; |   buttonLoading.value = true; | ||||||
|   await updateArticle(row).finally(() => (buttonLoading.value = false)); |   await updateArticle(form.value).finally(() => (buttonLoading.value = false)); | ||||||
|   proxy?.$modal.msgSuccess('操作成功'); |   proxy?.$modal.msgSuccess('操作成功'); | ||||||
|   getList(); |   getList(); | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -44,7 +44,7 @@ | |||||||
|           <el-table-column label="状态" align="center" prop="" width="90px"> |           <el-table-column label="状态" align="center" prop="" width="90px"> | ||||||
|             <template #default="scope"> |             <template #default="scope"> | ||||||
|               <el-tag v-if="scope.row.status == 0" type="info">未上架</el-tag> |               <el-tag v-if="scope.row.status == 0" type="info">未上架</el-tag> | ||||||
|               <el-tag v-if="scope.row.status == 1" type="success">已上架</el-tag> |               <el-tag v-if="scope.row.status == 1" type="primary">已上架</el-tag> | ||||||
|             </template> |             </template> | ||||||
|           </el-table-column> |           </el-table-column> | ||||||
|           <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180px"> |           <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180px"> | ||||||
|  | |||||||
| @ -32,8 +32,9 @@ | |||||||
|               </el-select> |               </el-select> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|             <el-form-item> |             <el-form-item> | ||||||
|               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> |               <el-button type="primary" icon="Search" @click="handleQuery" | ||||||
|               <el-button icon="Refresh" @click="resetQuery">重置</el-button> |                 v-hasPermi="['manage:dyUser:query']">搜索</el-button> | ||||||
|  |               <el-button icon="Refresh" @click="resetQuery" v-hasPermi="['manage:dyUser:query']">重置</el-button> | ||||||
|               <!-- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['manage:dyUser:edit']" |               <!-- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['manage:dyUser:edit']" | ||||||
|                 >封禁</el-button |                 >封禁</el-button | ||||||
|               > --> |               > --> | ||||||
| @ -48,13 +49,22 @@ | |||||||
|     <el-table :height="autoTableHeight" v-loading="loading" :data="dyUserList" @selection-change="handleSelectionChange" |     <el-table :height="autoTableHeight" v-loading="loading" :data="dyUserList" @selection-change="handleSelectionChange" | ||||||
|       style="width: 100%" border> |       style="width: 100%" border> | ||||||
|       <!-- <el-table-column fixed type="selection" width="55" align="center" /> --> |       <!-- <el-table-column fixed type="selection" width="55" align="center" /> --> | ||||||
|       <el-table-column fixed label="用户ID" align="center" prop="id" /> |       <el-table-column fixed label="序号" align="center" width="80"> | ||||||
|  |         <template #default="scope"> | ||||||
|  |           <span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span> | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|  |       <!-- <el-table-column fixed label="用户ID" align="center" prop="id" /> --> | ||||||
|       <el-table-column fixed label="帐号状态" align="center" prop="status"> |       <el-table-column fixed label="帐号状态" align="center" prop="status"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <dict-tag :options="dy_user_status" :value="scope.row.status" /> |           <dict-tag :options="dy_user_status" :value="scope.row.status" /> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column fixed label="会员等级" align="center" prop="levelName" /> |       <el-table-column fixed label="会员等级" align="center" prop="levelId"> | ||||||
|  |         <template #default="scope"> | ||||||
|  |           <span>{{ levelList.find(item => item.id === scope.row.levelId)?.levelName }}</span> | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|       <el-table-column fixed label="昵称" align="center" prop="nickName" /> |       <el-table-column fixed label="昵称" align="center" prop="nickName" /> | ||||||
|       <el-table-column label="用户性别" align="center" prop="sex"> |       <el-table-column label="用户性别" align="center" prop="sex"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
| @ -81,46 +91,50 @@ | |||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column width="55" label="年龄" align="center" prop="age" /> |       <el-table-column width="55" label="年龄" align="center" prop="age" /> | ||||||
|       <el-table-column width="150" label="常住地" align="center" prop="address" /> |       <el-table-column width="150" label="常住地" align="center" prop="address" /> | ||||||
|       <el-table-column width="70" label="星座" align="center" prop="constellation" /> |       <el-table-column width="80" label="星座" align="center" prop="constellation"> | ||||||
|  |         <template #default="scope"> | ||||||
|  |           <dict-tag :options="dy_user_sign" :value="scope.row.constellation" /> | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|       <el-table-column width="100" label="职业" align="center" prop="occupation" /> |       <el-table-column width="100" label="职业" align="center" prop="occupation" /> | ||||||
|       <el-table-column width="120" label="简介" align="center" prop="remark" /> |       <el-table-column width="120" label="简介" align="center" prop="remark" /> | ||||||
|       <el-table-column width="80" label="IP形象" align="center" prop="" /> |       <el-table-column width="80" label="IP形象" align="center" prop="" /> | ||||||
|       <el-table-column width="80" label="发布笔记" align="center" prop=""> |       <el-table-column width="80" label="发布笔记" align="center" prop=""> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <span style="color: dodgerblue; cursor: pointer; text-decoration: underline" |           <span style="color: dodgerblue; cursor: pointer; text-decoration: underline" | ||||||
|             @click="openNoteListDialog(scope.row)">12</span> |             @click="openNoteListDialog(scope.row)">{{ scope.row.notebookCount }}</span> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column width="90" label="发布的活动" align="center" prop=""> |       <el-table-column width="90" label="发布的活动" align="center" prop=""> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <span style="color: dodgerblue; cursor: pointer; text-decoration: underline" |           <span style="color: dodgerblue; cursor: pointer; text-decoration: underline" | ||||||
|             @click="openPartyListDialog(scope.row)">15</span> |             @click="openPartyListDialog(scope.row)">{{ scope.row.pubMateCount }}</span> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column width="80" label="关注的人" align="center" prop="" /> |       <el-table-column width="80" label="关注的人" align="center" prop="focusCount" /> | ||||||
|       <el-table-column width="80" label="粉丝数" align="center" prop="" /> |       <el-table-column width="80" label="粉丝数" align="center" prop="fanCount" /> | ||||||
|       <el-table-column width="90" label="到过的景点" align="center" prop=""> |       <el-table-column width="90" label="到过的景点" align="center" prop=""> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <span style="color: dodgerblue; cursor: pointer; text-decoration: underline" |           <span style="color: dodgerblue; cursor: pointer; text-decoration: underline" | ||||||
|             @click="openScenicListDialog(scope.row)">20</span> |             @click="openScenicListDialog(scope.row)">{{ scope.row.scenicSpotCount }}</span> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column width="90" label="点亮的城市" align="center" prop=""> |       <el-table-column width="90" label="点亮的城市" align="center" prop=""> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <span style="color: dodgerblue; cursor: pointer; text-decoration: underline" |           <span style="color: dodgerblue; cursor: pointer; text-decoration: underline" | ||||||
|             @click="openCityListDialog(scope.row)">25</span> |             @click="openCityListDialog(scope.row)">{{ scope.row.cityCount }}</span> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column width="110" label="获得的明信片" align="center" prop=""> |       <el-table-column width="110" label="获得的明信片" align="center" prop=""> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <span style="color: dodgerblue; cursor: pointer; text-decoration: underline" |           <span style="color: dodgerblue; cursor: pointer; text-decoration: underline" | ||||||
|             @click="openPostcardListDialog(scope.row)">12</span> |             @click="openPostcardListDialog(scope.row)">{{ scope.row.postcardCount }}</span> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column width="80" label="我的愿望" align="center" prop="" /> |       <el-table-column width="80" label="我的愿望" align="center" prop="" /> | ||||||
|       <el-table-column width="80" label="我的背包" align="center" prop="" /> |       <el-table-column width="80" label="我的背包" align="center" prop="" /> | ||||||
|       <el-table-column width="90" label="获得的物品" align="center" prop="" /> |       <el-table-column width="90" label="获得的物品" align="center" prop="obtainedItemsCount" /> | ||||||
|       <el-table-column width="70" label="积分" align="center" prop="score" /> |       <el-table-column width="70" label="积分" align="center" prop="userScore" /> | ||||||
|       <el-table-column width="90" label="我的订单" align="center" prop=""> |       <el-table-column width="90" label="我的订单" align="center" prop=""> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <span style="color: dodgerblue; cursor: pointer" @click="openOrderListDialog(scope.row)">查看详情</span> |           <span style="color: dodgerblue; cursor: pointer" @click="openOrderListDialog(scope.row)">查看详情</span> | ||||||
| @ -134,7 +148,7 @@ | |||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column width="80" label="处理方式" align="center" prop=""> |       <el-table-column width="80" label="处理方式" align="center" prop=""> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <dict-tag :options="dy_user_status" :value="scope.row.status" /> |           <dict-tag v-if="scope.row.status!=0" :options="dy_user_status" :value="scope.row.status" /> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column width="150" label="封禁理由" align="center" prop="reason" show-overflow-tooltip> |       <el-table-column width="150" label="封禁理由" align="center" prop="reason" show-overflow-tooltip> | ||||||
| @ -142,14 +156,14 @@ | |||||||
|           <dict-tag :options="dy_user_ban_mode" :value="scope.row.reason" /> |           <dict-tag :options="dy_user_ban_mode" :value="scope.row.reason" /> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column width="80" label="封禁天数" align="center" prop="banDays"> |       <el-table-column width="80" label="封禁天数" align="center" prop=""> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <dict-tag :options="dy_user_ban_days" :value="scope.row.banDays" /> |           <dict-tag v-if="scope.row.banDays!='0'" :options="dy_user_ban_days" :value="scope.row.banDays" /> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column width="90" label="操作人" align="center" prop="" /> |       <el-table-column width="90" label="操作人" align="center" prop="" /> | ||||||
|       <el-table-column width="120" label="操作时间" align="center" prop="" /> |       <el-table-column width="120" label="操作时间" align="center" prop="" /> | ||||||
|       <el-table-column fixed="right" label="操作" min-width="120"> |       <el-table-column fixed="right" label="操作" min-width="120" align="center"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <el-button link type="primary" size="small" v-hasPermi="['manage:dyUser:edit']" v-if="scope.row.status == 0" |           <el-button link type="primary" size="small" v-hasPermi="['manage:dyUser:edit']" v-if="scope.row.status == 0" | ||||||
|             @click="openbanned(scope.row)">封禁</el-button> |             @click="openbanned(scope.row)">封禁</el-button> | ||||||
| @ -173,8 +187,8 @@ | |||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <el-form-item label="处理方式" prop="status"> |         <el-form-item label="处理方式" prop="status"> | ||||||
|           <el-radio-group v-model="form.status"> |           <el-radio-group v-model="form.status"> | ||||||
|             <el-radio v-for="dict in dy_user_status" :key="dict.value" :label="dict.label" |             <el-radio v-for="dict in dy_user_status" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" | ||||||
|               :value="parseInt(dict.value)">{{ dict.label }}</el-radio> |               v-show="dict.value != '0'">{{ dict.label }}</el-radio> | ||||||
|           </el-radio-group> |           </el-radio-group> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <el-form-item label="处理天数" prop="banDays"> |         <el-form-item label="处理天数" prop="banDays"> | ||||||
| @ -270,7 +284,7 @@ | |||||||
|       </template> |       </template> | ||||||
|     </el-dialog> |     </el-dialog> | ||||||
|     <!-- 用户邀请人数 --> |     <!-- 用户邀请人数 --> | ||||||
|     <el-dialog title="邀请人数" v-model="inviteListDialog.visible" width="500px" append-to-body> |     <el-dialog title="邀请人数(大转盘)" v-model="inviteListDialog.visible" width="500px" append-to-body> | ||||||
|       <el-table :height="300" v-loading="loading" :data="inviteListDialog.inviteList" border> |       <el-table :height="300" v-loading="loading" :data="inviteListDialog.inviteList" border> | ||||||
|         <el-table-column label="用户名称" align="center" fixed prop="nickName" /> |         <el-table-column label="用户名称" align="center" fixed prop="nickName" /> | ||||||
|         <el-table-column label="用户头像" align="center" fixed prop="" /> |         <el-table-column label="用户头像" align="center" fixed prop="" /> | ||||||
| @ -308,8 +322,8 @@ import { listDyUser, getDyUser, delDyUser, addDyUser, updateDyUser,userSights,us | |||||||
| import { DyUserVO, DyUserQuery, DyUserForm } from '@/api/manage/dyUser/types'; | import { DyUserVO, DyUserQuery, DyUserForm } from '@/api/manage/dyUser/types'; | ||||||
| 
 | 
 | ||||||
| const { proxy } = getCurrentInstance() as ComponentInternalInstance; | const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||||
| const { dy_user_ban_days, dy_user_status, sys_user_sex, dy_user_ban_mode } = toRefs<any>( | const { dy_user_ban_days, dy_user_status, sys_user_sex, dy_user_ban_mode,dy_user_sign } = toRefs<any>( | ||||||
|   proxy?.useDict('dy_user_ban_days', 'dy_user_status', 'sys_user_sex', 'dy_user_ban_mode') |   proxy?.useDict('dy_user_ban_days', 'dy_user_status', 'sys_user_sex', 'dy_user_ban_mode','dy_user_sign') | ||||||
| ); | ); | ||||||
| const orderLists = ref([]); //用户订单列表 | const orderLists = ref([]); //用户订单列表 | ||||||
| const scenicList = ref([]); //用户点亮的景点 | const scenicList = ref([]); //用户点亮的景点 | ||||||
| @ -514,8 +528,8 @@ const handleStatus = async (row: DyUserVO) => { | |||||||
|   await proxy?.$modal.confirm('是否确认解封用户昵称为"' + row.nickName + '"的数据项?') |   await proxy?.$modal.confirm('是否确认解封用户昵称为"' + row.nickName + '"的数据项?') | ||||||
|   Object.assign(form.value, row); |   Object.assign(form.value, row); | ||||||
|   form.value.status = 0; |   form.value.status = 0; | ||||||
|   form.value.reason = null; |   form.value.reason = ''; | ||||||
|   form.value.banDays=null |   form.value.banDays='0'; | ||||||
|   loading.value = true; |   loading.value = true; | ||||||
|   await updateDyUser(form.value).finally(() => (loading.value = false)); |   await updateDyUser(form.value).finally(() => (loading.value = false)); | ||||||
|   proxy?.$modal.msgSuccess('操作成功'); |   proxy?.$modal.msgSuccess('操作成功'); | ||||||
|  | |||||||
| @ -16,6 +16,7 @@ | |||||||
|             <el-form-item> |             <el-form-item> | ||||||
|               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> |               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> | ||||||
|               <el-button icon="Refresh" @click="resetQuery">重置</el-button> |               <el-button icon="Refresh" @click="resetQuery">重置</el-button> | ||||||
|  |               <el-button v-hasPermi="['manage:hotel:add']" type="primary" plain icon="Plus" @click="handleAdd">新增</el-button> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|           </el-form> |           </el-form> | ||||||
|         </el-card> |         </el-card> | ||||||
| @ -23,23 +24,12 @@ | |||||||
|     </transition> |     </transition> | ||||||
| 
 | 
 | ||||||
|     <el-card shadow="never"> |     <el-card shadow="never"> | ||||||
|       <template #header> |       <el-table v-loading="loading" :data="hotelList"> | ||||||
|         <el-row :gutter="10" class="mb8"> |         <el-table-column fixed label="序号" align="center" width="80"> | ||||||
|           <el-col :span="1.5"> |           <template #default="scope"> | ||||||
|             <el-button v-hasPermi="['manage:hotel:add']" type="primary" plain icon="Plus" @click="handleAdd">新增</el-button> |             <span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span> | ||||||
|           </el-col> |           </template> | ||||||
|           <el-col :span="1.5"> |         </el-table-column> | ||||||
|             <el-button v-hasPermi="['manage:hotel:remove']" type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" |  | ||||||
|               >删除</el-button |  | ||||||
|             > |  | ||||||
|           </el-col> |  | ||||||
|           <right-toolbar v-model:showSearch="showSearch" @query-table="getList"></right-toolbar> |  | ||||||
|         </el-row> |  | ||||||
|       </template> |  | ||||||
| 
 |  | ||||||
|       <el-table v-loading="loading" :data="hotelList" @selection-change="handleSelectionChange"> |  | ||||||
|         <el-table-column type="selection" width="55" align="center" /> |  | ||||||
|         <el-table-column v-if="true" label="ID" align="center" prop="id" /> |  | ||||||
|         <el-table-column label="住宿商家名称" align="center" prop="name" /> |         <el-table-column label="住宿商家名称" align="center" prop="name" /> | ||||||
|         <el-table-column label="商家图片" align="center" prop="imageUrl" /> |         <el-table-column label="商家图片" align="center" prop="imageUrl" /> | ||||||
|         <el-table-column label="商家地理位置" align="center" prop="address" /> |         <el-table-column label="商家地理位置" align="center" prop="address" /> | ||||||
| @ -313,7 +303,7 @@ const handleEdit = async (row?: HotelVO) => { | |||||||
|   const res = await getHotel(_id); |   const res = await getHotel(_id); | ||||||
|   Object.assign(form.value, res.data); |   Object.assign(form.value, res.data); | ||||||
|   const _idname = row?.name; |   const _idname = row?.name; | ||||||
|   const text = row?.status != 1 ? '是否确认发布商家名称为' : '是否撤销发布商家名称为'; |   const text = row?.status != 1 ? '是否确认发布商家名称为"' : '是否撤销发布商家名称为"'; | ||||||
|   const messages = row?.status != 1 ? '发布成功' : '撤销成功'; |   const messages = row?.status != 1 ? '发布成功' : '撤销成功'; | ||||||
|   await proxy?.$modal.confirm(text + _idname + '"的数据项?').finally(() => (loading.value = false)); |   await proxy?.$modal.confirm(text + _idname + '"的数据项?').finally(() => (loading.value = false)); | ||||||
|   const template = { |   const template = { | ||||||
| @ -343,8 +333,6 @@ 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) { | ||||||
|         center.value.lat = data.result.location.lat; |  | ||||||
|         center.value.lng = data.result.location.lng; |  | ||||||
|         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 + | ||||||
| @ -357,6 +345,7 @@ const performSearch = async (text) => { | |||||||
|         form.value.regionCode = data.result.ad_info.adcode; //行政区划编码 |         form.value.regionCode = data.result.ad_info.adcode; //行政区划编码 | ||||||
|         // form.value.province = data.result.address_components.province; |         // form.value.province = data.result.address_components.province; | ||||||
|         // 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 }; | ||||||
|         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 } }]; | ||||||
|       } else if (data.status == 348) { |       } else if (data.status == 348) { | ||||||
|         //地址信息不明确,需弹出提示 |         //地址信息不明确,需弹出提示 | ||||||
| @ -386,8 +375,7 @@ const onClick = (e: any) => { | |||||||
|         // 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; //行政区划编码 | ||||||
|         center.value.lat = data.result.location.lat; |         center.value = { lat: data.result.location.lat, lng: data.result.location.lng }; | ||||||
|         center.value.lng = data.result.location.lng; |  | ||||||
|         searchLocation.value = data.result.formatted_addresses.recommend; |         searchLocation.value = data.result.formatted_addresses.recommend; | ||||||
|         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 } }]; | ||||||
|       } |       } | ||||||
|  | |||||||
| @ -12,8 +12,9 @@ | |||||||
|             <el-form-item label="发布状态" prop="status"> |             <el-form-item label="发布状态" prop="status"> | ||||||
|               <el-select v-model="queryParams.status" class="inputWidth" placeholder="请选择发布状态" clearable |               <el-select v-model="queryParams.status" class="inputWidth" placeholder="请选择发布状态" clearable | ||||||
|                 @keyup.enter="handleQuery"> |                 @keyup.enter="handleQuery"> | ||||||
|                 <el-option label="已发布" :value="1" /> |  | ||||||
|                 <el-option label="未发布" :value="0" /> |                 <el-option label="未发布" :value="0" /> | ||||||
|  |                 <el-option label="审核中" :value="1" /> | ||||||
|  |                 <el-option label="已发布" :value="2" /> | ||||||
|               </el-select> |               </el-select> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|             <el-form-item> |             <el-form-item> | ||||||
| @ -41,8 +42,9 @@ | |||||||
|       <el-table-column label="排序" align="center" prop="shor" /> |       <el-table-column label="排序" align="center" prop="shor" /> | ||||||
|       <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="success">已发布</el-tag> |           <el-tag v-if="scope.row.status == 0" type="info">未发布</el-tag> | ||||||
|           <el-tag v-else type="info">未发布</el-tag> |           <el-tag v-else-if="scope.row.status == 1" type="success">审核中</el-tag> | ||||||
|  |           <el-tag v-else-if="scope.row.status == 1" type="primary">已发布</el-tag> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="创建者" align="center" prop="createName" /> |       <el-table-column label="创建者" align="center" prop="createName" /> | ||||||
| @ -56,7 +58,7 @@ | |||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <el-button link type="primary" @click="handleStatus(scope.row,1)" v-if="scope.row.status == 0" |           <el-button link type="primary" @click="handleStatus(scope.row,1)" v-if="scope.row.status == 0" | ||||||
|             v-hasPermi="['manage:ipImage:edit']">发布</el-button> |             v-hasPermi="['manage:ipImage:edit']">发布</el-button> | ||||||
|           <el-button link type="primary" @click="handleStatus(scope.row,0)" v-if="scope.row.status==1" |           <el-button link type="primary" @click="handleStatus(scope.row,0)" v-if="scope.row.status==2" | ||||||
|             v-hasPermi="['manage:ipImage:edit']">撤销发布</el-button> |             v-hasPermi="['manage:ipImage:edit']">撤销发布</el-button> | ||||||
|           <el-tooltip content="编辑" placement="top"> |           <el-tooltip content="编辑" placement="top"> | ||||||
|             <el-button link type="primary" @click="handleUpdate(scope.row)" v-if="scope.row.status == 0" |             <el-button link type="primary" @click="handleUpdate(scope.row)" v-if="scope.row.status == 0" | ||||||
| @ -244,7 +246,7 @@ const submitForm = () => { | |||||||
| /** 删除按钮操作 */ | /** 删除按钮操作 */ | ||||||
| const handleDelete = async (row?: IpImageVO) => { | const handleDelete = async (row?: IpImageVO) => { | ||||||
|   const _ids = row?.id || ids.value; |   const _ids = row?.id || ids.value; | ||||||
|   await proxy?.$modal.confirm('是否确认删除IP形象编号为"' + _ids + '"的数据项?').finally(() => loading.value = false); |   await proxy?.$modal.confirm('是否确认删除IP形象为"' + row.ipName + '"的数据项?').finally(() => loading.value = false); | ||||||
|   await delIpImage(_ids); |   await delIpImage(_ids); | ||||||
|   proxy?.$modal.msgSuccess("删除成功"); |   proxy?.$modal.msgSuccess("删除成功"); | ||||||
|   await getList(); |   await getList(); | ||||||
|  | |||||||
| @ -37,7 +37,8 @@ | |||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="状态" align="center" prop="status"> |       <el-table-column label="状态" align="center" prop="status"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <span>{{ scope.row.status == 0 ? '未发布' : '已发布' }}</span> |           <el-tag v-if="scope.row.status == 0" type="info">未发布</el-tag> | ||||||
|  |           <el-tag v-if="scope.row.status == 1" type="primary">已发布</el-tag> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="创建者" align="center" prop="createName" /> |       <el-table-column label="创建者" align="center" prop="createName" /> | ||||||
|  | |||||||
| @ -15,6 +15,7 @@ | |||||||
|             <el-form-item> |             <el-form-item> | ||||||
|               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> |               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> | ||||||
|               <el-button icon="Refresh" @click="resetQuery">重置</el-button> |               <el-button icon="Refresh" @click="resetQuery">重置</el-button> | ||||||
|  |               <el-button v-hasPermi="['manage:mkJigsaw:add']" type="primary" plain icon="Plus" @click="handleAdd">新增</el-button> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|           </el-form> |           </el-form> | ||||||
|         </el-card> |         </el-card> | ||||||
| @ -22,23 +23,14 @@ | |||||||
|     </transition> |     </transition> | ||||||
| 
 | 
 | ||||||
|     <el-card shadow="never"> |     <el-card shadow="never"> | ||||||
|       <template #header> |  | ||||||
|         <el-row :gutter="10" class="mb8"> |  | ||||||
|           <el-col :span="1.5"> |  | ||||||
|             <el-button v-hasPermi="['manage:mkJigsaw:add']" type="primary" plain icon="Plus" @click="handleAdd">新增</el-button> |  | ||||||
|           </el-col> |  | ||||||
|           <right-toolbar v-model:showSearch="showSearch" @query-table="getList"></right-toolbar> |  | ||||||
|         </el-row> |  | ||||||
|       </template> |  | ||||||
| 
 |  | ||||||
|       <el-table v-loading="loading" :data="mkJigsawList"> |       <el-table v-loading="loading" :data="mkJigsawList"> | ||||||
|         <el-table-column label="任务名称" align="center" prop="name" /> |         <el-table-column label="任务名称" align="center" prop="name" show-overflow-tooltip /> | ||||||
|         <el-table-column label="任务类别" align="center" prop="category"> |         <el-table-column label="任务类别" align="center" prop="category"> | ||||||
|           <template #default="scope"> |           <template #default="scope"> | ||||||
|             <dict-tag :options="mk_jigsaw_task_catagory" :value="scope.row.category" /> |             <dict-tag :options="mk_jigsaw_task_catagory" :value="scope.row.category" /> | ||||||
|           </template> |           </template> | ||||||
|         </el-table-column> |         </el-table-column> | ||||||
|         <el-table-column label="商品ID" align="center" prop="productId" /> |         <el-table-column label="商品ID" align="center" prop="productId" show-overflow-tooltip /> | ||||||
|         <el-table-column label="商品名称" align="center" prop="productName" /> |         <el-table-column label="商品名称" align="center" prop="productName" /> | ||||||
|         <el-table-column label="商品类别" align="center" prop="productCategory"> |         <el-table-column label="商品类别" align="center" prop="productCategory"> | ||||||
|           <template #default="scope"> |           <template #default="scope"> | ||||||
| @ -53,8 +45,16 @@ | |||||||
|         </el-table-column> |         </el-table-column> | ||||||
|         <el-table-column label="拼图数量" align="center" prop="jigsawConfigCount" /> |         <el-table-column label="拼图数量" align="center" prop="jigsawConfigCount" /> | ||||||
|         <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"> | ||||||
|         <el-table-column label="实际得奖人数" align="center" prop="awardCount" /> |           <template #default="scope"> | ||||||
|  |             <el-button type="primary" link>{{ scope.row.joinCount }}</el-button> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |         <el-table-column label="实际得奖人数" align="center" prop="awardCount"> | ||||||
|  |           <template #default="scope"> | ||||||
|  |             <el-button type="primary" link>{{ scope.row.awardCount }}</el-button> | ||||||
|  |           </template> | ||||||
|  |         </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 @click="imagesui(scope.row)">查看详情</el-button> |             <el-button type="primary" link @click="imagesui(scope.row)">查看详情</el-button> | ||||||
| @ -73,9 +73,9 @@ | |||||||
|             <el-tag v-if="scope.row.status == 2" type="primary">已发布</el-tag> |             <el-tag v-if="scope.row.status == 2" type="primary">已发布</el-tag> | ||||||
|           </template> |           </template> | ||||||
|         </el-table-column> |         </el-table-column> | ||||||
|         <el-table-column label="创建人" align="center" prop="createName" /> |         <el-table-column label="创建人" align="center" prop="createName" show-overflow-tooltip /> | ||||||
|         <el-table-column label="创建时间" align="center" prop="createTime" /> |         <el-table-column label="创建时间" align="center" prop="createTime" show-overflow-tooltip /> | ||||||
|         <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="120px"> |         <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150px"> | ||||||
|           <template #default="scope"> |           <template #default="scope"> | ||||||
|             <el-button v-if="scope.row.status == 0" v-hasPermi="['manage:mkJigsaw:edit']" link type="primary" @click="handleUpdate(scope.row, 2)" |             <el-button v-if="scope.row.status == 0" v-hasPermi="['manage:mkJigsaw:edit']" link type="primary" @click="handleUpdate(scope.row, 2)" | ||||||
|               >编辑</el-button |               >编辑</el-button | ||||||
| @ -130,8 +130,8 @@ | |||||||
|             start-placeholder="选择开始时间" |             start-placeholder="选择开始时间" | ||||||
|             end-placeholder="选择结束时间" |             end-placeholder="选择结束时间" | ||||||
|             format="YYYY-MM-DD HH:mm:ss" |             format="YYYY-MM-DD HH:mm:ss" | ||||||
|             date-format="YYYY/MM/DD ddd" |             date-format="YYYY/MM/DD" | ||||||
|             time-format="A hh:mm:ss" |             time-format="HH:mm:ss" | ||||||
|             value-format="YYYY-MM-DD HH:mm:ss" |             value-format="YYYY-MM-DD HH:mm:ss" | ||||||
|             :picker-options="{ disabledDate: dateOptions }" |             :picker-options="{ disabledDate: dateOptions }" | ||||||
|             @change="mkdatetime" |             @change="mkdatetime" | ||||||
| @ -195,20 +195,20 @@ | |||||||
|           <div>{{ form.startDate }}~{{ form.endDate }}</div> |           <div>{{ form.startDate }}~{{ form.endDate }}</div> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <el-form-item label="设置拼图数量"> |         <el-form-item label="设置拼图数量"> | ||||||
|           <div>{{form.jigsawConfigCount}}</div> |           <div>{{ form.jigsawConfigCount }}</div> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <el-form-item label="得奖人数"> |         <el-form-item label="得奖人数"> | ||||||
|           <div>{{form.awardConfigCount}}</div> |           <div>{{ form.awardConfigCount }}</div> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <el-form-item label="控制得奖拼图"> |         <el-form-item label="控制得奖拼图"> | ||||||
|           <el-select v-model="form.controlJigsawIndex" placeholder="请选择控制得奖拼图" style="width: 300px" @change="selectnumlist" disabled> |           <el-select v-model="form.controlJigsawIndex" placeholder="请选择控制得奖拼图" style="width: 300px" disabled @change="selectnumlist"> | ||||||
|             <el-option v-for="dict in numlist" :key="dict.label" :label="dict.label" :value="dict.label"></el-option> |             <el-option v-for="dict in numlist" :key="dict.label" :label="dict.label" :value="dict.label"></el-option> | ||||||
|           </el-select> |           </el-select> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <div class="numlistclasss"> |         <div class="numlistclasss"> | ||||||
|           <div v-for="item in numlistdata" :key="item.name"> |           <div v-for="item in numlistdata" :key="item.name"> | ||||||
|             <el-form-item :label="`${item.name}:可获得概率`"> |             <el-form-item :label="`${item.name}:可获得概率`"> | ||||||
|               <div>{{item.probability}}%</div> |               <div>{{ item.probability }}%</div> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|  | |||||||
| @ -31,7 +31,11 @@ | |||||||
| 
 | 
 | ||||||
|     <el-table v-loading="loading" border :data="mkPostcardList" :height="autoTableHeight" |     <el-table v-loading="loading" border :data="mkPostcardList" :height="autoTableHeight" | ||||||
|       @selection-change="handleSelectionChange"> |       @selection-change="handleSelectionChange"> | ||||||
|       <el-table-column label="ID" align="center" prop="id" v-if="true" width="150" /> |       <el-table-column label="序号" align="center" width="80"> | ||||||
|  |         <template #default="scope"> | ||||||
|  |           <span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span> | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|       <el-table-column label="明信片名称" align="center" prop="name" /> |       <el-table-column label="明信片名称" align="center" prop="name" /> | ||||||
|       <el-table-column label="关联景点" align="center" prop="articleId"> |       <el-table-column label="关联景点" align="center" prop="articleId"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
| @ -53,7 +57,8 @@ | |||||||
|       <!-- 0-未上架 1-已上架 --> |       <!-- 0-未上架 1-已上架 --> | ||||||
|       <el-table-column label="状态" align="center" prop="status"> |       <el-table-column label="状态" align="center" prop="status"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <span>{{ scope.row.status == 1 ? '已上架' : '未上架'}}</span> |           <el-tag v-if="scope.row.status == 0" type="info">未上架</el-tag> | ||||||
|  |           <el-tag v-if="scope.row.status == 1" type="primary">已上架</el-tag> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="创建者" align="center" prop="updateByName" /> |       <el-table-column label="创建者" align="center" prop="updateByName" /> | ||||||
| @ -298,8 +303,8 @@ const handleExport = () => { | |||||||
| } | } | ||||||
| /** | /** | ||||||
|  * 明信片 上下架 |  * 明信片 上下架 | ||||||
|  * @param row  |  * @param row | ||||||
|  * @param type  |  * @param type | ||||||
|  */ |  */ | ||||||
| const handleStatus=async (row:MkPostcardVO,type:string)=>{ | const handleStatus=async (row:MkPostcardVO,type:string)=>{ | ||||||
|   if (type=='1') { |   if (type=='1') { | ||||||
| @ -315,7 +320,7 @@ const handleStatus=async (row:MkPostcardVO,type:string)=>{ | |||||||
| } | } | ||||||
| /** | /** | ||||||
|  * 格式化列表景点名称 |  * 格式化列表景点名称 | ||||||
|  * @param row  |  * @param row | ||||||
|  */ |  */ | ||||||
| const formatterArticleId = (id: string) => { | const formatterArticleId = (id: string) => { | ||||||
|   for (let i = 0; i < contentAllList.value.length; i++) { |   for (let i = 0; i < contentAllList.value.length; i++) { | ||||||
| @ -327,7 +332,7 @@ const formatterArticleId = (id: string) => { | |||||||
| } | } | ||||||
| /** | /** | ||||||
|  * 查看明信片详情 |  * 查看明信片详情 | ||||||
|  * @param row  |  * @param row | ||||||
|  */ |  */ | ||||||
| const postcardInfo=reactive({ | const postcardInfo=reactive({ | ||||||
|   visible:false, |   visible:false, | ||||||
|  | |||||||
| @ -1,33 +1,32 @@ | |||||||
| <!-- 笔记管理 --> | <!-- 笔记管理 --> | ||||||
| <template> | <template> | ||||||
|   <div class="p-2"> |   <div class="p-2"> | ||||||
|     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" |     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> | ||||||
|       :leave-active-class="proxy?.animate.searchAnimate.leave"> |  | ||||||
|       <div v-show="showSearch" class="mb-[10px]"> |       <div v-show="showSearch" class="mb-[10px]"> | ||||||
|         <el-card shadow="hover"> |         <el-card shadow="hover"> | ||||||
|           <el-form ref="queryFormRef" :model="queryParams" :inline="true"> |           <el-form ref="queryFormRef" :model="queryParams" :inline="true"> | ||||||
|             <el-form-item label="笔记标题" prop="id"> |             <el-form-item label="笔记标题" prop="id"> | ||||||
|               <el-input v-model="queryParams.title" placeholder="请输入笔记标题" clearable @keyup.enter="handleQuery" /> |               <el-input v-model="queryParams.title" placeholder="请输入笔记标题" clearable @keyup.enter="handleQuery" /> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|             <el-form-item label="发布人" prop="title"> |             <el-form-item label="发布人" prop="updateByName"> | ||||||
|               <el-input v-model="queryParams.title" placeholder="请输入发布人" clearable @keyup.enter="handleQuery" /> |               <el-input v-model="queryParams.updateByName" placeholder="请输入发布人" clearable @keyup.enter="handleQuery" /> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|             <el-form-item label="标记地点" prop="cover"> |             <el-form-item label="标记地点" prop="cover"> | ||||||
|               <!--              <el-input v-model="queryParams.cover" placeholder="请输入标记地点" clearable @keyup.enter="handleQuery" />--> |               <!--              <el-input v-model="queryParams.cover" placeholder="请输入标记地点" clearable @keyup.enter="handleQuery" />--> | ||||||
|               <el-select v-model="queryParams.cover" placeholder="请选择标记地点" style="width: 240px"> |               <el-select v-model="queryParams.location" placeholder="请选择标记地点" style="width: 240px"> | ||||||
|                 <el-option v-for="item in sys_user_contentOptions" :key="item.id" :label="item.name" :value="item.id" /> |                 <el-option v-for="item in sys_user_contentOptions" :key="item.id" :label="item.name" :value="item.id" /> | ||||||
|               </el-select> |               </el-select> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|             <el-form-item label="发布状态" prop="tagId"> |             <el-form-item label="发布状态" prop="tagId"> | ||||||
|               <!-- <el-input v-model="queryParams.tagId" placeholder="请输入标签" clearable @keyup.enter="handleQuery" /> --> |               <!-- <el-input v-model="queryParams.tagId" placeholder="请输入标签" clearable @keyup.enter="handleQuery" /> --> | ||||||
|               <el-select v-model="queryParams.tagId" placeholder="请选择发布状态" style="width: 240px" |               <el-select v-model="queryParams.status" placeholder="请选择发布状态" style="width: 240px" @keyup.enter="handleQuery"> | ||||||
|                 @keyup.enter="handleQuery"> |  | ||||||
|                 <el-option v-for="item in statusoptions" :key="item.value" :label="item.label" :value="item.value" /> |                 <el-option v-for="item in statusoptions" :key="item.value" :label="item.label" :value="item.value" /> | ||||||
|               </el-select> |               </el-select> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|             <el-form-item> |             <el-form-item> | ||||||
|               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> |               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> | ||||||
|               <el-button icon="Refresh" @click="resetQuery">重置</el-button> |               <el-button icon="Refresh" @click="resetQuery">重置</el-button> | ||||||
|  |               <el-button v-hasPermi="['manage:notebook:add']" type="primary" plain icon="Plus" @click="handleAdd">新增 </el-button> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|           </el-form> |           </el-form> | ||||||
|         </el-card> |         </el-card> | ||||||
| @ -35,41 +34,26 @@ | |||||||
|     </transition> |     </transition> | ||||||
| 
 | 
 | ||||||
|     <el-card shadow="never"> |     <el-card shadow="never"> | ||||||
|       <template #header> |       <el-table v-loading="loading" :data="notebookList" border @selection-change="handleSelectionChange"> | ||||||
|         <el-row :gutter="10" class="mb8"> |  | ||||||
|           <el-col :span="1.5"> |  | ||||||
|             <el-button v-hasPermi="['manage:notebook:add']" type="primary" plain icon="Plus" @click="handleAdd">新增 |  | ||||||
|             </el-button> |  | ||||||
|           </el-col> |  | ||||||
|           <!--          <el-col :span="1.5">--> |  | ||||||
|           <!--            <el-button v-hasPermi="['manage:notebook:remove']" type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"--> |  | ||||||
|           <!--              >删除--> |  | ||||||
|           <!--            </el-button>--> |  | ||||||
|           <!--          </el-col>--> |  | ||||||
|           <!-- <el-col :span="1.5"> |  | ||||||
|             <el-button v-hasPermi="['manage:notebook:export']" type="warning" plain icon="Download" |  | ||||||
|               @click="handleExport">导出 </el-button> |  | ||||||
|           </el-col> --> |  | ||||||
|           <right-toolbar v-model:showSearch="showSearch" @query-table="getList"></right-toolbar> |  | ||||||
|         </el-row> |  | ||||||
|       </template> |  | ||||||
| 
 |  | ||||||
|       <el-table v-loading="loading" :data="notebookList" @selection-change="handleSelectionChange"> |  | ||||||
|         <!--        <el-table-column type="selection" width="55" align="center" />--> |         <!--        <el-table-column type="selection" width="55" align="center" />--> | ||||||
|         <el-table-column v-if="true" label="ID" align="center" prop="id" /> |         <el-table-column label="序号" align="center" width="80"> | ||||||
|         <el-table-column label="笔记标题" align="center" prop="title" /> |           <template #default="scope"> | ||||||
|  |             <span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |         <el-table-column label="笔记标题" align="center" prop="title" show-overflow-tooltip /> | ||||||
|         <el-table-column label="笔记封面" align="center" prop="cover"> |         <el-table-column label="笔记封面" align="center" prop="cover"> | ||||||
|           <template #default="scope"> |           <template #default="scope"> | ||||||
|             <image-preview :src="scope.row.cover" :width="50" :height="50" /> |             <image-preview :src="scope.row.cover" :width="40" :height="40" /> | ||||||
|             <!-- <image-preview :src="scope.row.productImageUrl" /> --> |             <!-- <image-preview :src="scope.row.productImageUrl" /> --> | ||||||
|           </template> |           </template> | ||||||
|         </el-table-column> |         </el-table-column> | ||||||
|         <el-table-column label="标记地点" align="center" prop="location"> |         <el-table-column label="标记地点" align="center" prop="location" show-overflow-tooltip> | ||||||
|           <template #default="scope"> |           <template #default="scope"> | ||||||
|             <span>{{ formatlocation(scope.row.location) }}</span> |             <span>{{ formatlocation(scope.row.location) }}</span> | ||||||
|           </template> |           </template> | ||||||
|         </el-table-column> |         </el-table-column> | ||||||
|         <el-table-column label="标签" align="center" prop="tagId"> |         <el-table-column label="标签" align="center" prop="tagId" show-overflow-tooltip> | ||||||
|           <template #default="scope"> |           <template #default="scope"> | ||||||
|             <span>{{ formatTag(scope.row.tagId) }}</span> |             <span>{{ formatTag(scope.row.tagId) }}</span> | ||||||
|           </template> |           </template> | ||||||
| @ -101,23 +85,36 @@ | |||||||
|         <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" 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-if="scope.row.status == 0||scope.row.status == 1" v-hasPermi="['manage:notebook:edit']" link |             <el-button | ||||||
|               type="primary" @click="handleUpdate(scope.row)">编辑</el-button> |               v-if="scope.row.status == 0 || scope.row.status == 1" | ||||||
|             <el-button v-if="scope.row.status == 0" v-hasPermi="['manage:notebook:edit']" link type="primary" |               v-hasPermi="['manage:notebook:edit']" | ||||||
|               @click="fabudata(scope.row)">发布</el-button> |               link | ||||||
|             <el-button v-if="scope.row.status == 3" v-hasPermi="['manage:notebook:edit']" link type="primary" |               type="primary" | ||||||
|               @click="fabudata(scope.row)">撤销发布</el-button> |               @click="handleUpdate(scope.row)" | ||||||
|  |               >编辑</el-button | ||||||
|  |             > | ||||||
|  |             <el-button v-if="scope.row.status == 0" v-hasPermi="['manage:notebook:edit']" link type="primary" @click="fabudata(scope.row)" | ||||||
|  |               >发布</el-button | ||||||
|  |             > | ||||||
|  |             <el-button v-if="scope.row.status == 3" v-hasPermi="['manage:notebook:edit']" link type="primary" @click="fabudata(scope.row)" | ||||||
|  |               >撤销发布</el-button | ||||||
|  |             > | ||||||
|             <!--            <el-tooltip content="发布" placement="top">--> |             <!--            <el-tooltip content="发布" placement="top">--> | ||||||
|             <!--              <el-button v-hasPermi="['manage:notebook:edit']" link type="primary" icon="Edit" @click="handleUpdate(scope.row)"></el-button>--> |             <!--              <el-button v-hasPermi="['manage:notebook:edit']" link type="primary" icon="Edit" @click="handleUpdate(scope.row)"></el-button>--> | ||||||
|             <!--            </el-tooltip>--> |             <!--            </el-tooltip>--> | ||||||
|             <el-button v-if="scope.row.status == 0||scope.row.status == 1" v-hasPermi="['manage:notebook:remove']" link |             <el-button | ||||||
|               type="primary" @click="handleDelete(scope.row)">删除</el-button> |               v-if="scope.row.status == 0 || scope.row.status == 1" | ||||||
|  |               v-hasPermi="['manage:notebook:remove']" | ||||||
|  |               link | ||||||
|  |               type="primary" | ||||||
|  |               @click="handleDelete(scope.row)" | ||||||
|  |               >删除</el-button | ||||||
|  |             > | ||||||
|           </template> |           </template> | ||||||
|         </el-table-column> |         </el-table-column> | ||||||
|       </el-table> |       </el-table> | ||||||
| 
 | 
 | ||||||
|       <pagination v-show="total > 0" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" |       <pagination v-show="total > 0" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" :total="total" @pagination="getList" /> | ||||||
|         :total="total" @pagination="getList" /> |  | ||||||
|     </el-card> |     </el-card> | ||||||
|     <!-- 添加或修改笔记对话框 --> |     <!-- 添加或修改笔记对话框 --> | ||||||
|     <el-dialog v-model="dialog.visible" :title="dialog.title" width="60%" append-to-body> |     <el-dialog v-model="dialog.visible" :title="dialog.title" width="60%" append-to-body> | ||||||
| @ -156,11 +153,8 @@ | |||||||
|       </template> |       </template> | ||||||
|     </el-dialog> |     </el-dialog> | ||||||
|     <!--    笔记详情--> |     <!--    笔记详情--> | ||||||
|     <el-dialog v-model="concentdialog.visible" title="笔记详情" width="50%" append-to-body> |     <el-dialog v-model="concentdialog.visible" title="笔记详情" width="500px" append-to-body> | ||||||
|       <div>{{ form.title }}</div> |       <note :form="form"></note> | ||||||
|       <div>{{ formatTag(form.tagId) }}</div> |  | ||||||
|       <div>{{ formatlocation(form.location) }}</div> |  | ||||||
|       <div v-html="form.content"></div> |  | ||||||
|     </el-dialog> |     </el-dialog> | ||||||
|     <!-- 评论详情 --> |     <!-- 评论详情 --> | ||||||
|     <el-dialog v-model="comment.visible" title="评论详情" width="600px" append-to-body> |     <el-dialog v-model="comment.visible" title="评论详情" width="600px" append-to-body> | ||||||
| @ -305,9 +299,9 @@ const formatTag = (tagId: string | null) => { | |||||||
|   // } |   // } | ||||||
|   for (let i = 0; i < sys_user_tagOptions.value.length; i++) { |   for (let i = 0; i < sys_user_tagOptions.value.length; i++) { | ||||||
|     const element = sys_user_tagOptions.value[i]; |     const element = sys_user_tagOptions.value[i]; | ||||||
|     if (tagId!=null) { |     if (tagId != null) { | ||||||
|       let filteredArray = tagId.split(',').filter((item) => item==element.id); |       let filteredArray = tagId.split(',').filter((item) => item == element.id); | ||||||
|       if (filteredArray.length>0) { |       if (filteredArray.length > 0) { | ||||||
|         tagString += ',' + element.title; |         tagString += ',' + element.title; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @ -386,6 +380,8 @@ const handleSelectionChange = (selection: NotebookVO[]) => { | |||||||
| const handleAdd = () => { | const handleAdd = () => { | ||||||
|   reset(); |   reset(); | ||||||
|   dialog.visible = true; |   dialog.visible = true; | ||||||
|  |   tagvalue.value = ''; | ||||||
|  |   addressvalue.value = ''; | ||||||
|   dialog.title = '添加笔记'; |   dialog.title = '添加笔记'; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -395,8 +391,8 @@ const handleUpdate = async (row?: NotebookVO) => { | |||||||
|   const _id = row?.id || ids.value[0]; |   const _id = row?.id || ids.value[0]; | ||||||
|   const res = await getNotebook(_id); |   const res = await getNotebook(_id); | ||||||
|   Object.assign(form.value, res.data); |   Object.assign(form.value, res.data); | ||||||
|   tagvalue.value = form.value.tagId.split(','); |   tagvalue.value = form.value.tagId && form.value.tagId.split(','); | ||||||
|   addressvalue.value = form.value.location.split(','); |   addressvalue.value = form.value.tagId && form.value.location.split(','); | ||||||
|   dialog.visible = true; |   dialog.visible = true; | ||||||
|   dialog.title = '修改笔记'; |   dialog.title = '修改笔记'; | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -71,7 +71,11 @@ | |||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="订单号" align="center" prop="orderNumber" /> |       <el-table-column label="订单号" align="center" prop="orderNumber" /> | ||||||
|       <el-table-column label="来源" align="center" prop="source" width="80px" /> |       <el-table-column label="来源" align="center" prop="source" width="80px"> | ||||||
|  |         <template #default="scope"> | ||||||
|  |           <dict-tag :options="dy_order_source" :value="scope.row.source" /> | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|       <el-table-column label="商品名称" align="center" prop="productName" /> |       <el-table-column label="商品名称" align="center" prop="productName" /> | ||||||
|       <el-table-column label="商品图片" align="center" prop="productImageUrl" width="100"> |       <el-table-column label="商品图片" align="center" prop="productImageUrl" width="100"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
| @ -86,7 +90,9 @@ | |||||||
|       <el-table-column label="供应商" align="center" prop="vendorId" /> |       <el-table-column label="供应商" align="center" prop="vendorId" /> | ||||||
|       <el-table-column label="订单状态" align="center" prop="orderStatus"> |       <el-table-column label="订单状态" align="center" prop="orderStatus"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <dict-tag :options="dy_order_status" :value="scope.row.orderStatus" /> |           <!-- <dict-tag :options="dy_order_status" :value="scope.row.orderStatus" /> --> | ||||||
|  |           <el-tag v-if="scope.row.orderStatus == 0" type="info">未发货</el-tag> | ||||||
|  |           <el-tag v-if="scope.row.orderStatus == 1" type="primary">已发货</el-tag> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="物流名称" align="center" prop="logisticsName" /> |       <el-table-column label="物流名称" align="center" prop="logisticsName" /> | ||||||
| @ -94,8 +100,8 @@ | |||||||
|       <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-button link type="primary" v-if="scope.row.orderStatus == 0" v-hasPermi="['manage:orders:edit']" |           <el-button link type="primary" v-if="scope.row.orderStatus == 0" v-hasPermi="['manage:orders:edit']" | ||||||
|             @click="handleOrderStatus(scope.row,'1')">发货</el-button> |             @click="handleOrderStatus(scope.row,1)">发货</el-button> | ||||||
|           <el-button link type="primary" @click="handleOrderStatus(scope.row,'0')" v-if="scope.row.orderStatus == 1" |           <el-button link type="primary" @click="handleOrderStatus(scope.row,0)" v-if="scope.row.orderStatus == 1" | ||||||
|             v-hasPermi="['manage:orders:edit']">撤销发货</el-button> |             v-hasPermi="['manage:orders:edit']">撤销发货</el-button> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
| @ -267,9 +273,10 @@ const handleAdd = () => { | |||||||
|  */ |  */ | ||||||
| const handleOrderStatus = async (row: OrdersVO,type:string|number) => { | const handleOrderStatus = async (row: OrdersVO,type:string|number) => { | ||||||
|    await proxy?.$modal.confirm('是否确认' + (type == '0' ? '撤销发货' : '发货') + '商品名称为"' + row.productName + '"的数据项?'); |    await proxy?.$modal.confirm('是否确认' + (type == '0' ? '撤销发货' : '发货') + '商品名称为"' + row.productName + '"的数据项?'); | ||||||
|   row.orderStatus = type; |    Object.assign(form.value, row); | ||||||
|  |    form.value.orderStatus = type; | ||||||
|   buttonLoading.value = true; |   buttonLoading.value = true; | ||||||
|   await updateOrders(row).finally(() => (buttonLoading.value = false)); |   await updateOrders(form.value).finally(() => (buttonLoading.value = false)); | ||||||
|   proxy?.$modal.msgSuccess('操作成功'); |   proxy?.$modal.msgSuccess('操作成功'); | ||||||
|   getList(); |   getList(); | ||||||
| } | } | ||||||
|  | |||||||
| @ -32,7 +32,12 @@ | |||||||
| 
 | 
 | ||||||
|     <el-table v-loading="loading" border :height="autoTableHeight" :data="productList" |     <el-table v-loading="loading" border :height="autoTableHeight" :data="productList" | ||||||
|       @selection-change="handleSelectionChange"> |       @selection-change="handleSelectionChange"> | ||||||
|       <el-table-column label="商品ID" align="center" prop="id" v-if="true" width="180px" /> |       <!-- <el-table-column label="商品ID" align="center" prop="id" v-if="true" width="180px" /> --> | ||||||
|  |       <el-table-column fixed label="序号" align="center" width="80"> | ||||||
|  |         <template #default="scope"> | ||||||
|  |           <span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span> | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|       <el-table-column label="商品名称" align="center" prop="productName" /> |       <el-table-column label="商品名称" align="center" prop="productName" /> | ||||||
|       <el-table-column label="商品类别" align="center" prop="categoryId"> |       <el-table-column label="商品类别" align="center" prop="categoryId"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
| @ -48,7 +53,9 @@ | |||||||
|       <el-table-column label="排序" align="center" prop="sortNum" /> |       <el-table-column label="排序" align="center" prop="sortNum" /> | ||||||
|       <el-table-column label="商品状态" align="center" prop="status"> |       <el-table-column label="商品状态" align="center" prop="status"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <dict-tag :options="sys_shelf_status" :value="scope.row.status" /> |           <!-- <dict-tag :options="sys_shelf_status" :value="scope.row.status" /> --> | ||||||
|  |           <el-tag v-if="scope.row.status == 0" type="info">未上架</el-tag> | ||||||
|  |           <el-tag v-if="scope.row.status == 1" type="primary">已上架</el-tag> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="供应商" align="center" prop="vendorId"> |       <el-table-column label="供应商" align="center" prop="vendorId"> | ||||||
|  | |||||||
| @ -133,7 +133,7 @@ const productCategoryFormRef = ref<ElFormInstance>(); | |||||||
| const wishParams = reactive({ | const wishParams = reactive({ | ||||||
|   pageNum: 1, |   pageNum: 1, | ||||||
|   pageSize: 10, |   pageSize: 10, | ||||||
|   id: undefined, |   productCategoryId: undefined, | ||||||
| }) | }) | ||||||
| const dialog = reactive<DialogOption>({ | const dialog = reactive<DialogOption>({ | ||||||
|   visible: false, |   visible: false, | ||||||
| @ -274,7 +274,7 @@ const handleMakeWish = async (row: ProductCategoryVO) => { | |||||||
|     return |     return | ||||||
|   } |   } | ||||||
|   loading.value = true; |   loading.value = true; | ||||||
|   wishParams.id= row.id; |   wishParams.productCategoryId= row.id; | ||||||
|   getWishUserList(); |   getWishUserList(); | ||||||
|   makeWish.visible = true; |   makeWish.visible = true; | ||||||
| } | } | ||||||
|  | |||||||
| @ -5,20 +5,21 @@ | |||||||
|         <el-card shadow="hover"> |         <el-card shadow="hover"> | ||||||
|           <el-form ref="queryFormRef" :model="queryParams" :inline="true"> |           <el-form ref="queryFormRef" :model="queryParams" :inline="true"> | ||||||
|             <el-form-item label="用户昵称" prop="contentId"> |             <el-form-item label="用户昵称" prop="contentId"> | ||||||
|               <el-input v-model="queryParams.contentId" placeholder="请输入用户昵称" clearable @keyup.enter="handleQuery" /> |               <el-input v-model="queryParams.nickName" placeholder="请输入用户昵称" clearable @keyup.enter="handleQuery" /> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|             <el-form-item label="账号状态" prop="handlingStatus"> |             <el-form-item label=" 状态"> | ||||||
|               <el-select v-model="queryParams.handlingStatus" placeholder="请选择状态" clearable> |               <el-select v-model="queryParams.handlingStatus" placeholder="请选择状态" clearable> | ||||||
|                 <!--                <el-option v-for="dict in dy_banned_handling_status" :key="dict.value" :label="dict.label" :value="dict.value" />--> |                 <el-option label="未处理" value="0" /> | ||||||
|  |                 <el-option label="已处理" value="1" /> | ||||||
|               </el-select> |               </el-select> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|             <el-form-item label="性别" prop="handlingStatus"> |             <el-form-item label="性别"> | ||||||
|               <el-select v-model="queryParams.sex" placeholder="请选择用户性别" clearable> |               <el-select v-model="queryParams.sex" placeholder="请选择用户性别" clearable> | ||||||
|                 <el-option v-for="dict in sys_user_sex" :key="dict.value" :label="dict.label" :value="dict.value" /> |                 <el-option v-for="dict in sys_user_sex" :key="dict.value" :label="dict.label" :value="dict.value" /> | ||||||
|               </el-select> |               </el-select> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|             <el-form-item label="会员等级" prop="handlingStatus"> |             <el-form-item label="会员等级"> | ||||||
|               <el-select v-model="queryParams.handlingStatus" placeholder="请选择状态" clearable> |               <el-select v-model="queryParams.levelId" placeholder="请选择状态" clearable> | ||||||
|                 <el-option v-for="dict in dy_banned_handling_status" :key="dict.id" :label="dict.levelName" :value="dict.id" /> |                 <el-option v-for="dict in dy_banned_handling_status" :key="dict.id" :label="dict.levelName" :value="dict.id" /> | ||||||
|               </el-select> |               </el-select> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
| @ -42,25 +43,25 @@ | |||||||
|       </template> |       </template> | ||||||
| 
 | 
 | ||||||
|       <el-table v-loading="loading" :data="bannedList"> |       <el-table v-loading="loading" :data="bannedList"> | ||||||
|         <el-table-column v-if="queryParams.type == 1" label="笔记名称" align="center" prop="contentId" > |         <el-table-column v-if="queryParams.type == 1" label="笔记名称" align="center" prop="contentId"> | ||||||
|           <template #default="scope"> |           <template #default="scope"> | ||||||
|             <el-button type="primary" link>查看笔记</el-button> |             <el-button type="primary" link>{{ scope.row.contentName }}</el-button> | ||||||
|           </template> |           </template> | ||||||
|         </el-table-column> |         </el-table-column> | ||||||
|         <el-table-column v-if="queryParams.type == 2" label="活动名称" align="center" prop="contentId" > |         <el-table-column v-if="queryParams.type == 2" label="活动名称" align="center" prop="contentId"> | ||||||
|           <template #default="scope"> |           <template #default="scope"> | ||||||
|             <el-button type="primary" link>查看活动</el-button> |             <el-button type="primary" link>{{ scope.row.contentName }}</el-button> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |         <el-table-column v-if="queryParams.type == 3" label="评论内容" align="center" prop="contentId"> | ||||||
|  |           <template #default="scope"> | ||||||
|  |             <el-button type="primary" link>{{ scope.row.contentName }}</el-button> | ||||||
|           </template> |           </template> | ||||||
|         </el-table-column> |         </el-table-column> | ||||||
|           <el-table-column v-if="queryParams.type == 3" label="评论内容" align="center" prop="contentId" > |  | ||||||
|             <template #default="scope"> |  | ||||||
|               <el-button type="primary" link>查看笔记</el-button> |  | ||||||
|             </template> |  | ||||||
|           </el-table-column> |  | ||||||
|         <el-table-column label="用户ID" align="center" prop="reportUserId" /> |         <el-table-column label="用户ID" align="center" prop="reportUserId" /> | ||||||
|         <el-table-column label="会员等级" align="center" prop="userLevel"> |         <el-table-column label="会员等级" align="center" prop="userLevel"> | ||||||
|           <template #default="scope"> |           <template #default="scope"> | ||||||
|             <div>{{formatlevel(scope.row.levelId)}}</div> |             <div>{{ formatlevel(scope.row.levelId) }}</div> | ||||||
|           </template> |           </template> | ||||||
|         </el-table-column> |         </el-table-column> | ||||||
|         <el-table-column label="昵称" align="center" prop="nickName" /> |         <el-table-column label="昵称" align="center" prop="nickName" /> | ||||||
| @ -75,7 +76,7 @@ | |||||||
|         <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="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> | ||||||
|             <el-tag v-if="scope.row.handlingStatus == 1" type="warning">已处理</el-tag> |             <el-tag v-if="scope.row.handlingStatus == 1" type="warning">已处理</el-tag> | ||||||
| @ -84,7 +85,15 @@ | |||||||
|         <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-hasPermi="['manage:report:remove']" link type="primary" @click="handleDelete(scope.row)">删除{{ radio1 }}</el-button> |             <el-button v-if="queryParams.type == 1" v-hasPermi="['manage:report:remove']" link type="primary" @click="handleDelete(scope.row)" | ||||||
|  |               >删除笔记</el-button | ||||||
|  |             > | ||||||
|  |             <el-button v-if="queryParams.type == 2" v-hasPermi="['manage:report:remove']" link type="primary" @click="handleDelete(scope.row)" | ||||||
|  |               >删除活动</el-button | ||||||
|  |             > | ||||||
|  |             <el-button v-if="queryParams.type == 3" v-hasPermi="['manage:report:remove']" link type="primary" @click="handleDelete(scope.row)" | ||||||
|  |               >删除评论</el-button | ||||||
|  |             > | ||||||
|           </template> |           </template> | ||||||
|         </el-table-column> |         </el-table-column> | ||||||
|       </el-table> |       </el-table> | ||||||
| @ -124,6 +133,7 @@ | |||||||
| <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, updateBanned, 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'; | ||||||
| 
 | 
 | ||||||
| const { proxy } = getCurrentInstance() as ComponentInternalInstance; | const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||||
| const { dy_banned_handling_method, sys_user_sex, dy_banned_ban_reason, dy_user_ban_days } = toRefs<any>( | const { dy_banned_handling_method, sys_user_sex, dy_banned_ban_reason, dy_user_ban_days } = toRefs<any>( | ||||||
| @ -171,6 +181,7 @@ const data = reactive<PageData<BannedForm, BannedQuery>>({ | |||||||
|   queryParams: { |   queryParams: { | ||||||
|     pageNum: 1, |     pageNum: 1, | ||||||
|     pageSize: 10, |     pageSize: 10, | ||||||
|  |     nickName: undefined, | ||||||
|     contentId: undefined, |     contentId: undefined, | ||||||
|     reportUserId: undefined, |     reportUserId: undefined, | ||||||
|     reportReason: undefined, |     reportReason: undefined, | ||||||
| @ -229,6 +240,10 @@ const handleQuery = () => { | |||||||
| /** 重置按钮操作 */ | /** 重置按钮操作 */ | ||||||
| const resetQuery = () => { | const resetQuery = () => { | ||||||
|   queryFormRef.value?.resetFields(); |   queryFormRef.value?.resetFields(); | ||||||
|  |   queryParams.value.nickName = ''; | ||||||
|  |   queryParams.value.sex = ''; | ||||||
|  |   queryParams.value.handlingStatus = ''; | ||||||
|  |   queryParams.value.levelId = ''; | ||||||
|   handleQuery(); |   handleQuery(); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -275,9 +290,11 @@ const submitForm = () => { | |||||||
| 
 | 
 | ||||||
| /** 删除按钮操作 */ | /** 删除按钮操作 */ | ||||||
| const handleDelete = async (row?: BannedVO) => { | const handleDelete = async (row?: BannedVO) => { | ||||||
|   const _ids = row?.id || ids.value; |   const _ids = row?.contentId; | ||||||
|   await proxy?.$modal.confirm('是否确认删除举报编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false)); |   const _idsname = row?.contentName; | ||||||
|   await delBanned(_ids); |   const text = queryParams.value.type == 1 ? '笔记名称为“' : queryParams.value.type == 2 ? '活动名称为“' : '评论内容为“'; | ||||||
|  |   await proxy?.$modal.confirm('是否确认删除' + text + _idsname + '"的数据项?').finally(() => (loading.value = false)); | ||||||
|  |   await delNotebook(_ids); | ||||||
|   proxy?.$modal.msgSuccess('删除成功'); |   proxy?.$modal.msgSuccess('删除成功'); | ||||||
|   await getList(); |   await getList(); | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -1,35 +1,34 @@ | |||||||
| <!-- 路线导航管理列表 --> | <!-- 路线导航管理列表 --> | ||||||
| <template> | <template> | ||||||
|   <div class="p-2"> |   <div class="p-2"> | ||||||
|     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" |     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> | ||||||
|       :leave-active-class="proxy?.animate.searchAnimate.leave"> |  | ||||||
|       <div v-show="showSearch" id="search_div" class="mb-[10px]"> |       <div v-show="showSearch" id="search_div" class="mb-[10px]"> | ||||||
|         <el-card shadow="hover"> |         <el-card shadow="hover"> | ||||||
|           <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="70px"> |           <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="70px"> | ||||||
|             <el-form-item label="线路标题" prop=""> |             <el-form-item label="线路标题" prop=""> | ||||||
|               <el-input v-model="queryParams.title" class="inputWidth" placeholder="请输入线路标题" clearable |               <el-input v-model="queryParams.title" class="inputWidth" placeholder="请输入线路标题" clearable @keyup.enter="handleQuery" /> | ||||||
|                 @keyup.enter="handleQuery" /> |  | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|             <el-form-item label="发布状态" prop=""> |             <el-form-item label="发布状态" prop=""> | ||||||
|               <el-select v-model="queryParams.status" class="inputWidth" placeholder="请选择发布状态" clearable> |               <el-select v-model="queryParams.status" class="inputWidth" placeholder="请选择发布状态" clearable> | ||||||
|                 <el-option v-for="dict in note_publish_list" :key="dict.value" :label="dict.label" |                 <el-option v-for="dict in note_publish_list" :key="dict.value" :label="dict.label" :value="dict.value" /> | ||||||
|                   :value="dict.value" /> |  | ||||||
|               </el-select> |               </el-select> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|             <el-form-item> |             <el-form-item> | ||||||
|               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> |               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> | ||||||
|               <el-button icon="Refresh" @click="resetQuery">重置</el-button> |               <el-button icon="Refresh" @click="resetQuery">重置</el-button> | ||||||
|               <el-button v-hasPermi="['system:Route:add']" type="primary" plain icon="Plus" |               <el-button v-hasPermi="['system:Route:add']" type="primary" plain icon="Plus" @click="handleAdd">新增</el-button> | ||||||
|                 @click="handleAdd">新增</el-button> |  | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|           </el-form> |           </el-form> | ||||||
|         </el-card> |         </el-card> | ||||||
|       </div> |       </div> | ||||||
|     </transition> |     </transition> | ||||||
| 
 | 
 | ||||||
|     <el-table v-loading="loading" :height="autoTableHeight" :data="RouteList" border |     <el-table v-loading="loading" :height="autoTableHeight" :data="RouteList" border @selection-change="handleSelectionChange"> | ||||||
|       @selection-change="handleSelectionChange"> |       <el-table-column fixed label="序号" align="center" width="80"> | ||||||
|       <el-table-column label="ID" align="center" prop="id" width="180px" fixed /> |         <template #default="scope"> | ||||||
|  |           <span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span> | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|       <el-table-column label="线路标题" align="center" prop="title" width="150px" show-overflow-tooltip fixed /> |       <el-table-column label="线路标题" align="center" prop="title" width="150px" show-overflow-tooltip fixed /> | ||||||
|       <el-table-column label="线路封面" align="center" prop="" /> |       <el-table-column label="线路封面" align="center" prop="" /> | ||||||
|       <el-table-column label="线路标签" align="center" prop="tagId" width="150px" show-overflow-tooltip> |       <el-table-column label="线路标签" align="center" prop="tagId" width="150px" show-overflow-tooltip> | ||||||
| @ -80,20 +79,40 @@ | |||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160px" fixed="right"> |       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160px" fixed="right"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <el-button v-if="scope.row.status == 0 || scope.row.status == 1" v-hasPermi="['system:Route:edit']" link |           <el-button | ||||||
|             type="primary" @click="handleUpdate(scope.row)">编辑</el-button> |             v-if="scope.row.status == 0 || scope.row.status == 1" | ||||||
|           <el-button v-if="scope.row.status == 0 || scope.row.status == 1" v-hasPermi="['system:Route:remove']" link |             v-hasPermi="['system:Route:edit']" | ||||||
|             type="primary" @click="handleDelete(scope.row)">删除</el-button> |             link | ||||||
|           <el-button v-if="scope.row.status == 0" v-hasPermi="['system:Route:remove']" link type="primary" |             type="primary" | ||||||
|             @click="savelistrow(scope.row)">发布</el-button> |             @click="handleUpdate(scope.row)" | ||||||
|           <el-button v-if="scope.row.status == 3" v-hasPermi="['system:Route:remove']" link type="primary" |             >编辑</el-button | ||||||
|             @click="savelistrow(scope.row)">撤销发布</el-button> |           > | ||||||
|  |           <el-button | ||||||
|  |             v-if="scope.row.status == 0 || scope.row.status == 1" | ||||||
|  |             v-hasPermi="['system:Route:remove']" | ||||||
|  |             link | ||||||
|  |             type="primary" | ||||||
|  |             @click="handleDelete(scope.row)" | ||||||
|  |             >删除</el-button | ||||||
|  |           > | ||||||
|  |           <el-button v-if="scope.row.status == 0" v-hasPermi="['system:Route:remove']" link type="primary" @click="savelistrow(scope.row)" | ||||||
|  |             >发布</el-button | ||||||
|  |           > | ||||||
|  |           <el-button v-if="scope.row.status == 3" v-hasPermi="['system:Route:remove']" link type="primary" @click="savelistrow(scope.row)" | ||||||
|  |             >撤销发布</el-button | ||||||
|  |           > | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|     </el-table> |     </el-table> | ||||||
| 
 | 
 | ||||||
|     <pagination v-show="total > 0" id="table_page" v-model:page="queryParams.pageNum" |     <pagination | ||||||
|       v-model:limit="queryParams.pageSize" :total="total" @pagination="getList" /> |       v-show="total > 0" | ||||||
|  |       id="table_page" | ||||||
|  |       v-model:page="queryParams.pageNum" | ||||||
|  |       v-model:limit="queryParams.pageSize" | ||||||
|  |       :total="total" | ||||||
|  |       @pagination="getList" | ||||||
|  |     /> | ||||||
|     <!-- 添加或修改景点、租赁管理对话框 --> |     <!-- 添加或修改景点、租赁管理对话框 --> | ||||||
|     <el-dialog v-model="dialog.visible" :title="dialog.title" width="60%" append-to-body> |     <el-dialog v-model="dialog.visible" :title="dialog.title" width="60%" append-to-body> | ||||||
|       <el-form ref="RouteFormRef" :model="form" :rules="rules" label-width="120px"> |       <el-form ref="RouteFormRef" :model="form" :rules="rules" label-width="120px"> | ||||||
| @ -110,9 +129,8 @@ | |||||||
|             <el-option v-for="item in sys_user_tagOptions" :key="item.id" :label="item.title" :value="item.id" /> |             <el-option v-for="item in sys_user_tagOptions" :key="item.id" :label="item.title" :value="item.id" /> | ||||||
|           </el-select> |           </el-select> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <el-form-item label="涉及的行政区域" prop="treevalue"> |         <el-form-item label="涉及的行政区域" prop="region"> | ||||||
|           <el-cascader v-model="treevalue" :options="regiontree" :props="props" clearable placeholder="请选择涉及的行政区域" |           <el-cascader v-model="treevalue" :options="regiontree" :props="props" clearable placeholder="请选择涉及的行政区域" style="width: 400px" /> | ||||||
|             style="width: 400px" /> |  | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <div style="display: flex"> |         <div style="display: flex"> | ||||||
|           <el-form-item label="行程天数" prop="routeDays"> |           <el-form-item label="行程天数" prop="routeDays"> | ||||||
| @ -176,15 +194,13 @@ | |||||||
|           <el-input v-model="routeDetailsList.title" placeholder="请输入标题" style="width: 500px" /> |           <el-input v-model="routeDetailsList.title" placeholder="请输入标题" style="width: 500px" /> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <el-form-item label="描述"> |         <el-form-item label="描述"> | ||||||
|           <el-input v-model="routeDetailsList.description" placeholder="请输入描述" style="width: 500px" autosize |           <el-input v-model="routeDetailsList.description" placeholder="请输入描述" style="width: 500px" autosize type="textarea" /> | ||||||
|             type="textarea" /> |  | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <el-form-item label="添加地点"> |         <el-form-item label="添加地点"> | ||||||
|           <el-button type="primary" @click="addjingdain">添加景点</el-button> |           <el-button type="primary" @click="addjingdain">添加景点</el-button> | ||||||
|         </el-form-item> |         </el-form-item> | ||||||
|         <div v-for="(item, index) in routeDetailsList.lowerList" 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%" |           <CircleClose v-if="index != 0" style="width: 2em; height: 2em; position: relative; left: 98%" @click="delLowerList(index)" /> | ||||||
|             @click="delLowerList(index)" /> |  | ||||||
|           <el-form-item label="添加地点"> |           <el-form-item label="添加地点"> | ||||||
|             <el-select v-model="item.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-option v-for="item in sys_user_contentOptions" :key="item.id" :label="item.name" :value="item.id" /> | ||||||
| @ -383,7 +399,7 @@ const data = reactive<PageData<RouteForm, RouteQuery>>({ | |||||||
|     routeDriveHour: [{ required: true, message: '行驶时长', trigger: 'blur' }], |     routeDriveHour: [{ required: true, message: '行驶时长', trigger: 'blur' }], | ||||||
|     routeMileage: [{ required: true, message: '行程里数', trigger: 'blur' }], |     routeMileage: [{ required: true, message: '行程里数', trigger: 'blur' }], | ||||||
|     routeDays: [{ required: true, message: '行程天数', trigger: 'blur' }], |     routeDays: [{ required: true, message: '行程天数', trigger: 'blur' }], | ||||||
|     region: [{ required: true, message: '涉及的行政区', trigger: 'blur' }], |     region: [{ required: true, message: '涉及的行政区不能为空', trigger: 'blur' }], | ||||||
|     tagId: [{ required: true, message: '标签不能为空', trigger: 'blur' }], |     tagId: [{ required: true, message: '标签不能为空', trigger: 'blur' }], | ||||||
|     title: [{ required: true, message: '线路标题', trigger: 'blur' }] |     title: [{ required: true, message: '线路标题', trigger: 'blur' }] | ||||||
|   } |   } | ||||||
| @ -510,9 +526,9 @@ const formatTag = (tagId: string | null) => { | |||||||
|   // } |   // } | ||||||
|   for (let i = 0; i < sys_user_tagOptions.value.length; i++) { |   for (let i = 0; i < sys_user_tagOptions.value.length; i++) { | ||||||
|     const element = sys_user_tagOptions.value[i]; |     const element = sys_user_tagOptions.value[i]; | ||||||
|     if (tagId!=null) { |     if (tagId != null) { | ||||||
|       let filteredArray = tagId.split(',').filter((item) => item==element.id); |       let filteredArray = tagId.split(',').filter((item) => item == element.id); | ||||||
|       if (filteredArray.length>0) { |       if (filteredArray.length > 0) { | ||||||
|         tagString += ',' + element.title; |         tagString += ',' + element.title; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @ -536,7 +552,7 @@ const handleUpdate = async (row?: RouteVO) => { | |||||||
| /** 提交按钮 */ | /** 提交按钮 */ | ||||||
| const submitForm = async (type) => { | const submitForm = async (type) => { | ||||||
|   form.value.tagId = tagvalue?.value.length != 0 ? tagvalue?.value.join(',') : ''; |   form.value.tagId = tagvalue?.value.length != 0 ? tagvalue?.value.join(',') : ''; | ||||||
|   form.value.region = treevalue?.value ? JSON.stringify(treevalue?.value) : ''; |   form.value.region = treevalue?.value.length ==0?'': JSON.stringify(treevalue?.value); | ||||||
|   form.value.status = Number(type); |   form.value.status = Number(type); | ||||||
|   form.value.routeDetailsList = bookrouteDetailsList.value; |   form.value.routeDetailsList = bookrouteDetailsList.value; | ||||||
|   if (type == 1) { |   if (type == 1) { | ||||||
|  | |||||||
| @ -63,6 +63,11 @@ | |||||||
| 
 | 
 | ||||||
|     <el-table :height="autoTableHeight" v-loading="loading" :data="articleList" |     <el-table :height="autoTableHeight" v-loading="loading" :data="articleList" | ||||||
|       @selection-change="handleSelectionChange" border> |       @selection-change="handleSelectionChange" border> | ||||||
|  |       <el-table-column fixed label="序号" align="center" width="80"> | ||||||
|  |         <template #default="scope"> | ||||||
|  |           <span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span> | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|       <el-table-column label="ID" align="center" prop="id" fixed v-if="false" width="50px" /> |       <el-table-column label="ID" align="center" prop="id" fixed v-if="false" width="50px" /> | ||||||
|       <el-table-column label="景点名称" align="center" prop="name" fixed v-if="queryParams.type == '0'" width="180px" /> |       <el-table-column label="景点名称" align="center" prop="name" fixed v-if="queryParams.type == '0'" width="180px" /> | ||||||
|       <el-table-column label="商家名称" align="center" prop="name" fixed v-if="queryParams.type != '0'" width="180px" /> |       <el-table-column label="商家名称" align="center" prop="name" fixed v-if="queryParams.type != '0'" width="180px" /> | ||||||
| @ -105,34 +110,37 @@ | |||||||
|           <el-button link type="primary" @click="handleDetail(scope.row)">查看</el-button> |           <el-button link type="primary" @click="handleDetail(scope.row)">查看</el-button> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="喜欢数量" align="center" prop="likeCount" /> |       <el-table-column label="相关笔记" align="center" prop="recommendNotebookCount"> | ||||||
|       <el-table-column label="收藏数量" align="center" prop="collectionCount" /> |  | ||||||
|       <el-table-column label="相关笔记" align="center" prop="pubNotebookCount"> |  | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <el-button link type="primary" v-if="scope.row.status!==3" @click="handleNote(scope.row)">11{{ |           <el-button link type="primary" v-if="scope.row.status!==3" @click="handleNote(scope.row)">1{{ | ||||||
|             scope.row.noteNumber }}</el-button> |             scope.row.pubNotebookCount }}</el-button> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="笔记评论数" align="center" prop="notebookCommentCount" width="90px"> |       <el-table-column :label="queryParams.type == '0' ?'景点评论数':queryParams.type == '1' ?'租车评论数':'游艇评论数'" align="center" | ||||||
|  |         prop="commentCount" width="90px"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <el-button link type="primary" v-if="scope.row.status!==3" @click="handleNote(scope.row)">11{{ |           <el-button link type="primary" v-if="scope.row.status!==3" @click="handleNote(scope.row)">1{{ | ||||||
|             scope.row.noteNumber }}</el-button> |             scope.row.notebookCommentCount }}</el-button> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="笔记点赞数" align="center" prop="notebookAgreeCount" width="90px"> |       <el-table-column :label="queryParams.type == '0' ?'景点喜欢数':queryParams.type == '1' ?'租车喜欢数':'游艇喜欢数'" align="center" | ||||||
|  |         prop="agreeCount" width="90" /> | ||||||
|  |       <el-table-column :label="queryParams.type == '0' ?'景点收藏数':queryParams.type == '1' ?'租车收藏数':'游艇收藏数'" align="center" | ||||||
|  |         prop="collectionCount" width="90" /> | ||||||
|  |       <!-- <el-table-column label="点赞数" align="center" prop="notebookAgreeCount" width="90px"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <el-button link type="primary" v-if="scope.row.status!==3" @click="handleNote(scope.row)">11{{ |           <el-button link type="primary" v-if="scope.row.status!==3" @click="handleNote(scope.row)">1{{ | ||||||
|             scope.row.noteNumber }}</el-button> |             scope.row.notebookAgreeCount }}</el-button> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> --> | ||||||
|       <!--  0-未发布 1-审核中 2-发布 --> |       <!--  0-未发布 1-审核中 2-发布 --> | ||||||
|       <el-table-column label="发布状态" align="center" prop="status" width="100"> |       <el-table-column label="发布状态" align="center" prop="status" width="100"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <!-- <span>{{ scope.row.status == 0 ? '未发布' : scope.row.status == 1 ? '审核中' : scope.row.status == 2 ? '已发布' : '草稿' }}</span> --> |           <!-- <span>{{ scope.row.status == 0 ? '未发布' : scope.row.status == 1 ? '审核中' : scope.row.status == 2 ? '已发布' : '草稿' }}</span> --> | ||||||
|           <el-tag v-if="scope.row.status == 0" type="info">未发布</el-tag> |           <el-tag v-if="scope.row.status == 0" type="info">未发布</el-tag> | ||||||
|           <el-tag v-if="scope.row.status == 1" type="warning">审核中</el-tag> |           <el-tag v-if="scope.row.status == 1" type="success">审核中</el-tag> | ||||||
|           <el-tag v-if="scope.row.status == 2" type="success">已发布</el-tag> |           <el-tag v-if="scope.row.status == 2" type="primary">已发布</el-tag> | ||||||
|           <el-tag v-if="scope.row.status == 3" type="danger">草稿</el-tag> |           <el-tag v-if="scope.row.status == 3" type="warning">草稿</el-tag> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="操作人" align="center" prop="updateByName" width="120px" /> |       <el-table-column label="操作人" align="center" prop="updateByName" width="120px" /> | ||||||
| @ -226,7 +234,8 @@ | |||||||
|           </el-col> |           </el-col> | ||||||
|           <el-col :span="12"> |           <el-col :span="12"> | ||||||
|             <el-form-item label="标签" prop="tagId_copy"> |             <el-form-item label="标签" prop="tagId_copy"> | ||||||
|               <el-select class="inputWidth" v-model="form.tagId_copy" multiple filterable placeholder="请选择标签" clearable> |               <el-select class="inputWidth" v-model="form.tagId_copy" multiple filterable placeholder="请选择标签" clearable | ||||||
|  |                 @visible-change="getTagList"> | ||||||
|                 <el-option v-for="dict in sys_user_tagOptions" :key="dict.id" :label="dict.title" |                 <el-option v-for="dict in sys_user_tagOptions" :key="dict.id" :label="dict.title" | ||||||
|                   :value="String(dict.id)" /> |                   :value="String(dict.id)" /> | ||||||
|               </el-select> |               </el-select> | ||||||
| @ -244,12 +253,19 @@ | |||||||
|           <el-col :span="24"> |           <el-col :span="24"> | ||||||
|             <el-form-item label="地理位置" prop="introduce"> |             <el-form-item label="地理位置" prop="introduce"> | ||||||
|               <!-- <el-input v-model="searchLocation" type="text" placeholder="请输入地址信息" clearable /> --> |               <!-- <el-input v-model="searchLocation" type="text" placeholder="请输入地址信息" clearable /> --> | ||||||
|               <el-input v-model="searchLocation" placeholder="请输入地址信息" class="input-with-select" |               <!-- <el-input v-model="searchLocation" placeholder="请输入地址信息" class="input-with-select" | ||||||
|                 @keyup.enter="debouncedSearch(searchLocation)"> |                 @keyup.enter="debouncedSearch(searchLocation)"> | ||||||
|                 <template #append> |                 <template #append> | ||||||
|                   <el-button @click="debouncedSearch(searchLocation)" :icon="Search" /> |                   <el-button @click="debouncedSearch(searchLocation)" :icon="Search" /> | ||||||
|                 </template> |                 </template> | ||||||
|               </el-input> |               </el-input> --> | ||||||
|  |               <el-select v-model="searchLocation" filterable remote reserve-keyword clearable placeholder="请输入地址信息" | ||||||
|  |                 @change="selectChnange" :remote-method="remoteMethod"> | ||||||
|  |                 <el-option v-for="item in locationOptions" :key="item.id" | ||||||
|  |                   :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 style="margin-left: 80px" ref="map" api-key="	 |             <tlbs-map style="margin-left: 80px" ref="map" api-key="	 | ||||||
| 6XFBZ-SAVLT-JGIX2-VOLMK-6S2H3-XUBGO" :center="center" :zoom="zoom" :control="control" @click="onClick"> | 6XFBZ-SAVLT-JGIX2-VOLMK-6S2H3-XUBGO" :center="center" :zoom="zoom" :control="control" @click="onClick"> | ||||||
| @ -398,9 +414,12 @@ | |||||||
|       </template> |       </template> | ||||||
|     </el-dialog> |     </el-dialog> | ||||||
|     <!-- 相关笔记 --> |     <!-- 相关笔记 --> | ||||||
|     <el-dialog title="相关笔记" v-model="noteBookVisible" width="1200px" append-to-body> |     <el-dialog title="相关笔记" v-model="noteListDialog.visible" width="1200px" append-to-body> | ||||||
|       <noteList :autoTableHeight="300" :sys_user_tagOptions="sys_user_tagOptions" :noteBookTagIds="noteBookTagIds" |       <noteList :autoTableHeight="300" :sys_user_tagOptions="sys_user_tagOptions" parentName="scenic" | ||||||
|         parentName="scenic" :type="queryParams.type" :id="form.id"></noteList> |         :articleList="noteListDialog.articleList" :type="queryParams.type" :id="form.id"></noteList> | ||||||
|  |       <pagination v-show="noteListDialog.total > 0" :total="noteListDialog.total" | ||||||
|  |         v-model:page="noteListDialog.params.pageNum" v-model:limit="noteListDialog.params.pageSize" | ||||||
|  |         @pagination="handleNote" /> | ||||||
|       <template #footer> |       <template #footer> | ||||||
|         <div class="dialog-footer"> |         <div class="dialog-footer"> | ||||||
|           <el-button @click="cancel('noteBookVisible')">关 闭</el-button> |           <el-button @click="cancel('noteBookVisible')">关 闭</el-button> | ||||||
| @ -412,7 +431,7 @@ | |||||||
| 
 | 
 | ||||||
| <script setup name="Article" lang="ts"> | <script setup name="Article" lang="ts"> | ||||||
| import { listTag,tagAll } from '@/api/manage/tag'; | import { listTag,tagAll } from '@/api/manage/tag'; | ||||||
| import { listArticle, getArticle, delArticle, addArticle, updateArticle, listByTagIdNotebook } from '@/api/manage/scenic'; | import { listArticle, getArticle, delArticle, addArticle, updateArticle, listByTagIdNotebook,recommend } from '@/api/manage/scenic'; | ||||||
| import { ArticleVO, ArticleQuery, ArticleForm } from '@/api/manage/scenic/types'; | import { ArticleVO, ArticleQuery, ArticleForm } from '@/api/manage/scenic/types'; | ||||||
| import { useRouter } from 'vue-router'; | import { useRouter } from 'vue-router'; | ||||||
| import { getToken } from '@/utils/auth'; | import { getToken } from '@/utils/auth'; | ||||||
| @ -442,6 +461,7 @@ const dialog = reactive<DialogOption>({ | |||||||
|   title: '', |   title: '', | ||||||
|   type:'' |   type:'' | ||||||
| }); | }); | ||||||
|  | const locationOptions = ref([]); //腾讯地图返回的搜索地址列表 | ||||||
| const noteLists = ref([]); // 相关笔记列表 | const noteLists = ref([]); // 相关笔记列表 | ||||||
| const previewRef = ref(null); | const previewRef = ref(null); | ||||||
| const previewVisible = ref(false); //预览弹层 | const previewVisible = ref(false); //预览弹层 | ||||||
| @ -602,6 +622,37 @@ const getTag = async () => { | |||||||
|   const res = await tagAll(); |   const res = await tagAll(); | ||||||
|   sys_user_tagOptions.value = res; //标签库 |   sys_user_tagOptions.value = res; //标签库 | ||||||
| }; | }; | ||||||
|  | const getTagList = async (visible: boolean) => { | ||||||
|  |   if (visible) { | ||||||
|  |     getTag(); //标签库 | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | // 地理位置 输入实时搜索 | ||||||
|  | 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) => { | ||||||
|   // 这里简单模拟延迟,模拟真实的异步请求耗时 |   // 这里简单模拟延迟,模拟真实的异步请求耗时 | ||||||
| @ -610,29 +661,28 @@ const performSearch = async (text) => { | |||||||
|   if (text === '') { |   if (text === '') { | ||||||
|     console.log('搜索内容为空'); |     console.log('搜索内容为空'); | ||||||
|   } else { |   } else { | ||||||
|     console.log('搜索内容为:', text); |     // console.log('搜索内容为:', text); | ||||||
|     // 调用腾讯地图API进行搜索,并展示在地图上 |     // 调用腾讯地图API进行搜索,并展示在地图上 | ||||||
|     // geocoder(text).then((result) => { |     // geocoder(text).then((result) => { | ||||||
|     //   console.log(result); |     //   console.log(result); | ||||||
|     // }); |     // }); | ||||||
|     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) { | ||||||
|         center.value.lat = data.result.location.lat; |  | ||||||
|         center.value.lng = data.result.location.lng; |  | ||||||
|         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; | ||||||
|         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.province = data.result.address_components.province; |         // form.value.province = data.result.address_components.province; | ||||||
|         // 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 }; | ||||||
|         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 } }]; | ||||||
|       } else if (data.status == 348) { |       } else if (data.status == 348) { | ||||||
|         //地址信息不明确,需弹出提示 |         //地址信息不明确,需弹出提示 | ||||||
| @ -662,9 +712,8 @@ const onClick = (e: any) => { | |||||||
|         // 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; //行政区划编码 | ||||||
|         center.value.lat = data.result.location.lat; |         center.value = { lat: data.result.location.lat, lng: data.result.location.lng }; | ||||||
|         center.value.lng = data.result.location.lng; |         searchLocation.value = data.result.formatted_addresses?.recommend; | ||||||
|         searchLocation.value = data.result.formatted_addresses.recommend; |  | ||||||
|         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 } }]; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @ -679,6 +728,7 @@ const getList = async () => { | |||||||
|     queryParams.value.tagId = queryParams.value.tagId.toString(); |     queryParams.value.tagId = queryParams.value.tagId.toString(); | ||||||
|   } |   } | ||||||
|   const res = await listArticle(queryParams.value).finally(() => (loading.value = false)); |   const res = await listArticle(queryParams.value).finally(() => (loading.value = false)); | ||||||
|  |   articleList.value=[]; | ||||||
|   res.rows.forEach((element: any) => { |   res.rows.forEach((element: any) => { | ||||||
|     if (element.region == null) { |     if (element.region == null) { | ||||||
|       element.region = element.city; |       element.region = element.city; | ||||||
| @ -702,6 +752,8 @@ const cancel = (type: string) => { | |||||||
|   dialog.visible = false; |   dialog.visible = false; | ||||||
|   noteBookVisible.value = false; |   noteBookVisible.value = false; | ||||||
|   noteBookTagIds.value = ''; // 清空标签 |   noteBookTagIds.value = ''; // 清空标签 | ||||||
|  |   noteListDialog.visible = false; | ||||||
|  |   noteListDialog.params.pageNum=1; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /** 表单重置 */ | /** 表单重置 */ | ||||||
| @ -832,11 +884,26 @@ const handleDetail = async (row?: ArticleVO) => { | |||||||
|  */ |  */ | ||||||
| const noteBookVisible = ref(false); | const noteBookVisible = ref(false); | ||||||
| const noteBookTagIds = ref(''); //相关笔记的标签id | const noteBookTagIds = ref(''); //相关笔记的标签id | ||||||
|  | const noteListDialog = reactive({ | ||||||
|  |   visible: false, | ||||||
|  |   total: 0, | ||||||
|  |   articleList:[], | ||||||
|  |   params:{ | ||||||
|  |     articleId: null, | ||||||
|  |     pageNum: 1, | ||||||
|  |     pageSize: 10, | ||||||
|  |   } | ||||||
|  | }); | ||||||
|  | // 相关笔记  请求列表 | ||||||
| const handleNote = async (row?: ArticleVO) => { | const handleNote = async (row?: ArticleVO) => { | ||||||
|   noteBookTagIds.value = ''; |   // noteBookTagIds.value = ''; | ||||||
|   noteBookTagIds.value = row?.tagId as string; |   // noteBookTagIds.value = row?.tagId as string; | ||||||
|   noteBookVisible.value = true; |   if (row.id) { | ||||||
|   console.log(row.tagId); |     noteListDialog.params.articleId = row?.id; | ||||||
|  |   } | ||||||
|  |   let res = await recommend(noteListDialog.params); | ||||||
|  |   noteListDialog.articleList=res.rows; | ||||||
|  |   noteListDialog.visible = true; | ||||||
| }; | }; | ||||||
| /** 新增景点,商家提交按钮 */ | /** 新增景点,商家提交按钮 */ | ||||||
| const submitForm = async (type: string) => { | const submitForm = async (type: string) => { | ||||||
| @ -853,7 +920,8 @@ const submitForm = async (type: string) => { | |||||||
|     if (form.value.id) { |     if (form.value.id) { | ||||||
|       await updateArticle(form.value).finally(() => (buttonLoading.value = false)); |       await updateArticle(form.value).finally(() => (buttonLoading.value = false)); | ||||||
|     } else { |     } else { | ||||||
|       await addArticle(form.value).finally(() => (buttonLoading.value = false)); |       let res = await addArticle(form.value).finally(() => (buttonLoading.value = false)); | ||||||
|  |       form.value.id = res.msg; | ||||||
|     } |     } | ||||||
|     proxy?.$modal.msgSuccess('操作成功'); |     proxy?.$modal.msgSuccess('操作成功'); | ||||||
|     // dialog.visible = false; |     // dialog.visible = false; | ||||||
|  | |||||||
| @ -29,6 +29,11 @@ | |||||||
| 
 | 
 | ||||||
|     <el-table v-loading="loading" :height="autoTableHeight" :data="tagList" @selection-change="handleSelectionChange"> |     <el-table v-loading="loading" :height="autoTableHeight" :data="tagList" @selection-change="handleSelectionChange"> | ||||||
|       <!-- <el-table-column type="selection" width="55" align="center" /> --> |       <!-- <el-table-column type="selection" width="55" align="center" /> --> | ||||||
|  |       <el-table-column fixed label="序号" align="center" width="80"> | ||||||
|  |         <template #default="scope"> | ||||||
|  |           <span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span> | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|       <el-table-column label="标签ID" align="center" prop="id" v-if="false" width="70px" /> |       <el-table-column label="标签ID" align="center" prop="id" v-if="false" width="70px" /> | ||||||
|       <el-table-column label="标签名称" align="center" prop="title" /> |       <el-table-column label="标签名称" align="center" prop="title" /> | ||||||
|       <el-table-column label="排序" align="center" prop="sort" /> |       <el-table-column label="排序" align="center" prop="sort" /> | ||||||
| @ -96,7 +101,8 @@ const tagFormRef = ref<ElFormInstance>(); | |||||||
| 
 | 
 | ||||||
| const dialog = reactive<DialogOption>({ | const dialog = reactive<DialogOption>({ | ||||||
|   visible: false, |   visible: false, | ||||||
|   title: '' |   title: '', | ||||||
|  |   type:'' | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| const initFormData: TagForm = { | const initFormData: TagForm = { | ||||||
| @ -108,7 +114,7 @@ const data = reactive<PageData<TagForm, TagQuery>>({ | |||||||
|   form: { ...initFormData }, |   form: { ...initFormData }, | ||||||
|   queryParams: { |   queryParams: { | ||||||
|     pageNum: 1, |     pageNum: 1, | ||||||
|     pageSize: 10, |     pageSize: 20, | ||||||
|     title: undefined, |     title: undefined, | ||||||
|     sort: undefined, |     sort: undefined, | ||||||
|     params: {} |     params: {} | ||||||
|  | |||||||
| @ -52,7 +52,9 @@ | |||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <el-table-column label="状态" align="center" prop="status"> |       <el-table-column label="状态" align="center" prop="status"> | ||||||
|         <template #default="scope"> |         <template #default="scope"> | ||||||
|           <dict-tag :options="dy_user_level_status" :value="scope.row.status" /> |           <!-- <dict-tag :options="dy_user_level_status" :value="scope.row.status" /> --> | ||||||
|  |           <el-tag v-if="scope.row.status == 0" type="info">未发布</el-tag> | ||||||
|  |           <el-tag v-if="scope.row.status == 1" type="primary">已发布</el-tag> | ||||||
|         </template> |         </template> | ||||||
|       </el-table-column> |       </el-table-column> | ||||||
|       <!-- <el-table-column label="等级名称" align="center" prop="levelName" /> |       <!-- <el-table-column label="等级名称" align="center" prop="levelName" /> | ||||||
| @ -142,7 +144,7 @@ const data = reactive<PageData<UserLevelForm, UserLevelQuery>>({ | |||||||
|   form: { ...initFormData }, |   form: { ...initFormData }, | ||||||
|   queryParams: { |   queryParams: { | ||||||
|     pageNum: 1, |     pageNum: 1, | ||||||
|     pageSize: 10, |     pageSize: 20, | ||||||
|     levelName: undefined, |     levelName: undefined, | ||||||
|     status: undefined, |     status: undefined, | ||||||
|     score: undefined, |     score: undefined, | ||||||
|  | |||||||
| @ -1,3 +1,4 @@ | |||||||
|  | <!-- 积分记录 --> | ||||||
| <template> | <template> | ||||||
|   <div class="p-2"> |   <div class="p-2"> | ||||||
|     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" |     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" | ||||||
| @ -37,30 +38,28 @@ | |||||||
|       </div> |       </div> | ||||||
|     </transition> |     </transition> | ||||||
| 
 | 
 | ||||||
|     <el-card shadow="never"> |     <el-table v-loading="loading" :height="autoTableHeight" :data="userScoreList" | ||||||
|       <el-table v-loading="loading" :height="autoTableHeight" :data="userScoreList" |       @selection-change="handleSelectionChange"> | ||||||
|         @selection-change="handleSelectionChange"> |       <el-table-column type="selection" width="55" align="center" /> | ||||||
|         <el-table-column type="selection" width="55" align="center" /> |       <el-table-column label="用户昵称" align="center" prop="nickName" /> | ||||||
|         <el-table-column label="用户昵称" align="center" prop="nickName" /> |       <el-table-column label="积分获得时间" align="center" prop="updateTime" /> | ||||||
|         <el-table-column label="积分获得时间" align="center" prop="updateTime" /> |       <el-table-column label="获得类型" align="center" prop="bizType"> | ||||||
|         <el-table-column label="获得类型" align="center" prop="bizType"> |         <template #default="scope"> | ||||||
|           <template #default="scope"> |           <dict-tag :options="dy_source" :value="scope.row.bizType" /> | ||||||
|             <dict-tag :options="dy_source" :value="scope.row.bizType" /> |         </template> | ||||||
|           </template> |       </el-table-column> | ||||||
|         </el-table-column> |       <el-table-column label="操作内容" align="center" prop="bizName" /> | ||||||
|         <el-table-column label="操作内容" align="center" prop="bizName" /> |       <!-- <el-table-column label="业务id" align="center" prop="sourceId" /> --> | ||||||
|         <!-- <el-table-column label="业务id" align="center" prop="sourceId" /> --> |       <!-- <el-table-column label="来源类型(0=签到 1=发笔记 2=扔瓶子 3=评论 4=点赞 5=分享 6=收藏 7=地图点亮) " align="center" prop="source" /> --> | ||||||
|         <!-- <el-table-column label="来源类型(0=签到 1=发笔记 2=扔瓶子 3=评论 4=点赞 5=分享 6=收藏 7=地图点亮) " align="center" prop="source" /> --> |       <el-table-column label="积分" align="center" prop="score"> | ||||||
|         <el-table-column label="积分" align="center" prop="score"> |         <template #default="scope"> | ||||||
|           <template #default="scope"> |           <span>{{ scope.row.score > 0 ? '+' + scope.row.score+' 积分' : scope.row.score}}</span> | ||||||
|             <span>{{ scope.row.score > 0 ? '+' + scope.row.score+' 积分' : scope.row.score}}</span> |         </template> | ||||||
|           </template> |       </el-table-column> | ||||||
|         </el-table-column> |     </el-table> | ||||||
|       </el-table> |  | ||||||
| 
 | 
 | ||||||
|       <pagination v-show="total > 0" id="table_page" :total="total" v-model:page="queryParams.pageNum" |     <pagination v-show="total > 0" id="table_page" :total="total" v-model:page="queryParams.pageNum" | ||||||
|         v-model:limit="queryParams.pageSize" @pagination="getList" /> |       v-model:limit="queryParams.pageSize" @pagination="getList" /> | ||||||
|     </el-card> |  | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -72,21 +72,21 @@ | |||||||
|                   删除 |                   删除 | ||||||
|                 </el-button> |                 </el-button> | ||||||
|               </el-col> |               </el-col> | ||||||
|               <el-col :span="1.5"> |               <!--              <el-col :span="1.5">--> | ||||||
|                 <el-dropdown class="mt-[1px]"> |               <!--                <el-dropdown class="mt-[1px]">--> | ||||||
|                   <el-button plain type="info"> |               <!--                  <el-button plain type="info">--> | ||||||
|                     更多 |               <!--                    更多--> | ||||||
|                     <el-icon class="el-icon--right"><arrow-down /></el-icon |               <!--                    <el-icon class="el-icon--right"><arrow-down /></el-icon--> | ||||||
|                   ></el-button> |               <!--                  ></el-button>--> | ||||||
|                   <template #dropdown> |               <!--                  <template #dropdown>--> | ||||||
|                     <el-dropdown-menu> |               <!--                    <el-dropdown-menu>--> | ||||||
|                       <el-dropdown-item icon="Download" @click="importTemplate">下载模板</el-dropdown-item> |               <!--                      <el-dropdown-item icon="Download" @click="importTemplate">下载模板</el-dropdown-item>--> | ||||||
|                       <el-dropdown-item icon="Top" @click="handleImport"> 导入数据</el-dropdown-item> |               <!--                      <el-dropdown-item icon="Top" @click="handleImport"> 导入数据</el-dropdown-item>--> | ||||||
|                       <el-dropdown-item icon="Download" @click="handleExport"> 导出数据</el-dropdown-item> |               <!--                      <el-dropdown-item icon="Download" @click="handleExport"> 导出数据</el-dropdown-item>--> | ||||||
|                     </el-dropdown-menu> |               <!--                    </el-dropdown-menu>--> | ||||||
|                   </template> |               <!--                  </template>--> | ||||||
|                 </el-dropdown> |               <!--                </el-dropdown>--> | ||||||
|               </el-col> |               <!--              </el-col>--> | ||||||
|               <right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @query-table="getList"></right-toolbar> |               <right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @query-table="getList"></right-toolbar> | ||||||
|             </el-row> |             </el-row> | ||||||
|           </template> |           </template> | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user