|
|
@@ -72,21 +72,96 @@ const pavilionLoading = ref(false)
|
|
|
const artistOptions = ref([])
|
|
|
const artistLoading = ref(false)
|
|
|
|
|
|
-// 地址相关状态
|
|
|
-const addressOptions = ref([])
|
|
|
-const addressLoading = ref(false)
|
|
|
-
|
|
|
-// 富文本编辑器相关 - 移到组件内部
|
|
|
-// const editorRef = ref(null)
|
|
|
-// const toolbarConfig = ref({})
|
|
|
-// const editorConfig = ref({})
|
|
|
-
|
|
|
// 图片上传相关状态
|
|
|
const imgList = ref({
|
|
|
cover: [],
|
|
|
share: [],
|
|
|
})
|
|
|
+const {
|
|
|
+ modalForm,
|
|
|
+ modalAction,
|
|
|
+ handleDelete,
|
|
|
+ handleOpen: originalHandleOpen,
|
|
|
+} = useCrud({
|
|
|
+ name: '线上展会',
|
|
|
+ initForm: {
|
|
|
+ display: true,
|
|
|
+ setTop: false,
|
|
|
+ isBomb: false,
|
|
|
+ hot: false,
|
|
|
+ dateRange: null,
|
|
|
+ startTime: null,
|
|
|
+ endTime: null,
|
|
|
+ statusText: '',
|
|
|
+ artistId: [],
|
|
|
+ address: '',
|
|
|
+ description: '',
|
|
|
+ coverImageUrl: '',
|
|
|
+ shareImageUrl: '',
|
|
|
+ latitude: 0,
|
|
|
+ longitude: 0,
|
|
|
+ city: '',
|
|
|
+ },
|
|
|
+ doCreate: (formData) => {
|
|
|
+ // 格式化展览日期
|
|
|
+ let openTime = ''
|
|
|
+ if (formData.dateRange && formData.dateRange.length === 2) {
|
|
|
+ const startDate = new Date(formData.dateRange[0]).toISOString().split('T')[0]
|
|
|
+ const endDate = new Date(formData.dateRange[1]).toISOString().split('T')[0]
|
|
|
+ openTime = `${startDate} - ${endDate}`
|
|
|
+ }
|
|
|
+
|
|
|
+ const apiData = {
|
|
|
+ address: formData.address || '',
|
|
|
+ artistIdList: Array.isArray(formData.artistId) ? formData.artistId : (formData.artistId ? [formData.artistId] : []),
|
|
|
+ city: formData.city || '',
|
|
|
+ description: formData.description || '',
|
|
|
+ imageUrl: formData.coverImageUrl || '',
|
|
|
+ latitude: formData.latitude || 0,
|
|
|
+ longitude: formData.longitude || 0,
|
|
|
+ name: formData.name || '',
|
|
|
+ online: 0,
|
|
|
+ openTime,
|
|
|
+ openTimeDetail: formData.openTimeDetail || '',
|
|
|
+ pavilionId: formData.pavilionId || 0,
|
|
|
+ setHot: formData.hot ? 1 : 0,
|
|
|
+ setTop: formData.setTop ? 'A' : 'I',
|
|
|
+ statusText: formData.statusText || '',
|
|
|
+ }
|
|
|
+ return api.create(apiData)
|
|
|
+ },
|
|
|
+ doDelete: api.delete,
|
|
|
+ doUpdate: (formData) => {
|
|
|
+ // 格式化展览日期
|
|
|
+ let openTime = ''
|
|
|
+ if (formData.dateRange && formData.dateRange.length === 2) {
|
|
|
+ const startDate = new Date(formData.dateRange[0]).toISOString().split('T')[0]
|
|
|
+ const endDate = new Date(formData.dateRange[1]).toISOString().split('T')[0]
|
|
|
+ openTime = `${startDate} - ${endDate}`
|
|
|
+ }
|
|
|
|
|
|
+ const apiData = {
|
|
|
+ id: formData.id,
|
|
|
+ address: formData.address || '',
|
|
|
+ artistIdList: Array.isArray(formData.artistId) ? formData.artistId : (formData.artistId ? [formData.artistId] : []),
|
|
|
+ city: formData.city || '',
|
|
|
+ description: formData.description || '',
|
|
|
+ imageUrl: formData.coverImageUrl || '',
|
|
|
+ latitude: formData.latitude || 0,
|
|
|
+ longitude: formData.longitude || 0,
|
|
|
+ name: formData.name || '',
|
|
|
+ online: 0,
|
|
|
+ openTime,
|
|
|
+ openTimeDetail: formData.openTimeDetail || '',
|
|
|
+ pavilionId: formData.pavilionId || 0,
|
|
|
+ setHot: formData.hot ? 1 : 0,
|
|
|
+ setTop: formData.setTop ? 'A' : 'I',
|
|
|
+ statusText: formData.statusText || '',
|
|
|
+ }
|
|
|
+ return api.update(apiData)
|
|
|
+ },
|
|
|
+ refresh: () => $table.value?.handleSearch(),
|
|
|
+})
|
|
|
// 防抖搜索展馆
|
|
|
let searchTimer = null
|
|
|
function handlePavilionSearch(query) {
|
|
|
@@ -109,16 +184,16 @@ function handleArtistSearch(query) {
|
|
|
}, 300)
|
|
|
}
|
|
|
|
|
|
-// 防抖搜索地址
|
|
|
-let addressSearchTimer = null
|
|
|
-function handleAddressSearch(query) {
|
|
|
- if (addressSearchTimer) {
|
|
|
- clearTimeout(addressSearchTimer)
|
|
|
- }
|
|
|
- addressSearchTimer = setTimeout(() => {
|
|
|
- loadAddressOptions(query)
|
|
|
- }, 300)
|
|
|
-}
|
|
|
+// // 防抖搜索地址
|
|
|
+// let addressSearchTimer = null
|
|
|
+// function handleAddressSearch(query) {
|
|
|
+// if (addressSearchTimer) {
|
|
|
+// clearTimeout(addressSearchTimer)
|
|
|
+// }
|
|
|
+// addressSearchTimer = setTimeout(() => {
|
|
|
+// loadAddressOptions(query)
|
|
|
+// }, 300)
|
|
|
+// }
|
|
|
|
|
|
// 加载展馆选项
|
|
|
async function loadPavilionOptions(name = '') {
|
|
|
@@ -129,7 +204,7 @@ async function loadPavilionOptions(name = '') {
|
|
|
pageNo: 1,
|
|
|
}
|
|
|
if (name) {
|
|
|
- params.name = name,
|
|
|
+ params.name = name
|
|
|
params.pageSize = 100
|
|
|
}
|
|
|
const { data } = await pavilionApi.read(params)
|
|
|
@@ -228,8 +303,6 @@ function initMap() {
|
|
|
position: new TMap.LatLng(39.908823, 116.397470),
|
|
|
}],
|
|
|
})
|
|
|
-
|
|
|
- console.log('地图初始化成功')
|
|
|
}
|
|
|
catch (error) {
|
|
|
console.error('地图初始化失败:', error)
|
|
|
@@ -307,6 +380,7 @@ function handleAddressSelect(locationData) {
|
|
|
}
|
|
|
else {
|
|
|
// 如果没有坐标,可以进行地址解析
|
|
|
+
|
|
|
console.log('需要进行地址解析:', locationData.address)
|
|
|
}
|
|
|
}
|
|
|
@@ -341,7 +415,6 @@ function loadTencentMapSDK() {
|
|
|
const script = document.createElement('script')
|
|
|
script.src = 'https://map.qq.com/api/gljs?v=1.exp&key=YCABZ-AFPRX-VD54O-TL3VN-TL7A3-KPBQJ'
|
|
|
script.onload = () => {
|
|
|
- console.log('腾讯地图SDK加载成功')
|
|
|
resolve()
|
|
|
}
|
|
|
script.onerror = () => {
|
|
|
@@ -352,15 +425,6 @@ function loadTencentMapSDK() {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
-// 上传前验证
|
|
|
-function onBeforeUpload({ file }) {
|
|
|
- if (!file.file?.type.startsWith('image/')) {
|
|
|
- $message.error('只能上传图片')
|
|
|
- return false
|
|
|
- }
|
|
|
- return true
|
|
|
-}
|
|
|
-
|
|
|
// 处理文件上传
|
|
|
async function handleUpload(options, type) {
|
|
|
const { file } = options
|
|
|
@@ -423,95 +487,6 @@ onMounted(async () => {
|
|
|
}
|
|
|
})
|
|
|
|
|
|
-const {
|
|
|
- modalRef,
|
|
|
- modalFormRef,
|
|
|
- modalForm,
|
|
|
- modalAction,
|
|
|
- handleDelete,
|
|
|
- handleOpen: originalHandleOpen,
|
|
|
- handleSave,
|
|
|
-} = useCrud({
|
|
|
- name: '线上展会',
|
|
|
- initForm: {
|
|
|
- display: true,
|
|
|
- setTop: false,
|
|
|
- isBomb: false,
|
|
|
- hot: false,
|
|
|
- dateRange: null,
|
|
|
- startTime: null,
|
|
|
- endTime: null,
|
|
|
- statusText: '',
|
|
|
- artistId: [],
|
|
|
- address: '',
|
|
|
- description: '',
|
|
|
- coverImageUrl: '',
|
|
|
- shareImageUrl: '',
|
|
|
- latitude: 0,
|
|
|
- longitude: 0,
|
|
|
- city: '',
|
|
|
- },
|
|
|
- doCreate: (formData) => {
|
|
|
- // 格式化展览日期
|
|
|
- let openTime = ''
|
|
|
- if (formData.dateRange && formData.dateRange.length === 2) {
|
|
|
- const startDate = new Date(formData.dateRange[0]).toISOString().split('T')[0]
|
|
|
- const endDate = new Date(formData.dateRange[1]).toISOString().split('T')[0]
|
|
|
- openTime = `${startDate} - ${endDate}`
|
|
|
- }
|
|
|
-
|
|
|
- const apiData = {
|
|
|
- address: formData.address || '',
|
|
|
- artistIdList: Array.isArray(formData.artistId) ? formData.artistId : (formData.artistId ? [formData.artistId] : []),
|
|
|
- city: formData.city || '',
|
|
|
- description: formData.description || '',
|
|
|
- imageUrl: formData.coverImageUrl || '',
|
|
|
- latitude: formData.latitude || 0,
|
|
|
- longitude: formData.longitude || 0,
|
|
|
- name: formData.name || '',
|
|
|
- online: 0,
|
|
|
- openTime,
|
|
|
- openTimeDetail: formData.openTimeDetail || '',
|
|
|
- pavilionId: formData.pavilionId || 0,
|
|
|
- setHot: formData.hot ? 1 : 0,
|
|
|
- setTop: formData.setTop ? 'A' : 'I',
|
|
|
- statusText: formData.statusText || '',
|
|
|
- }
|
|
|
- return api.create(apiData)
|
|
|
- },
|
|
|
- doDelete: api.delete,
|
|
|
- doUpdate: (formData) => {
|
|
|
- // 格式化展览日期
|
|
|
- let openTime = ''
|
|
|
- if (formData.dateRange && formData.dateRange.length === 2) {
|
|
|
- const startDate = new Date(formData.dateRange[0]).toISOString().split('T')[0]
|
|
|
- const endDate = new Date(formData.dateRange[1]).toISOString().split('T')[0]
|
|
|
- openTime = `${startDate} - ${endDate}`
|
|
|
- }
|
|
|
-
|
|
|
- const apiData = {
|
|
|
- id: formData.id,
|
|
|
- address: formData.address || '',
|
|
|
- artistIdList: Array.isArray(formData.artistId) ? formData.artistId : (formData.artistId ? [formData.artistId] : []),
|
|
|
- city: formData.city || '',
|
|
|
- description: formData.description || '',
|
|
|
- imageUrl: formData.coverImageUrl || '',
|
|
|
- latitude: formData.latitude || 0,
|
|
|
- longitude: formData.longitude || 0,
|
|
|
- name: formData.name || '',
|
|
|
- online: 0,
|
|
|
- openTime,
|
|
|
- openTimeDetail: formData.openTimeDetail || '',
|
|
|
- pavilionId: formData.pavilionId || 0,
|
|
|
- setHot: formData.hot ? 1 : 0,
|
|
|
- setTop: formData.setTop ? 'A' : 'I',
|
|
|
- statusText: formData.statusText || '',
|
|
|
- }
|
|
|
- return api.update(apiData)
|
|
|
- },
|
|
|
- refresh: () => $table.value?.handleSearch(),
|
|
|
-})
|
|
|
-
|
|
|
// 重写handleAdd方法,切换到表单视图
|
|
|
function handleAdd() {
|
|
|
// 重置表单数据
|
|
|
@@ -634,6 +609,7 @@ async function handleOpen(options) {
|
|
|
if (dateRangeParts.length === 2) {
|
|
|
const startDate = new Date(dateRangeParts[0])
|
|
|
const endDate = new Date(dateRangeParts[1])
|
|
|
+ // eslint-disable-next-line unicorn/prefer-number-properties
|
|
|
if (!isNaN(startDate.getTime()) && !isNaN(endDate.getTime())) {
|
|
|
dateRange = [startDate.getTime(), endDate.getTime()]
|
|
|
}
|
|
|
@@ -726,7 +702,7 @@ const columns = [
|
|
|
key: 'setTop',
|
|
|
width: 120,
|
|
|
render: ({ setTop }) => {
|
|
|
- return setTop == 'I' ? '是' : '否'
|
|
|
+ return setTop === 'I' ? '是' : '否'
|
|
|
},
|
|
|
},
|
|
|
{
|
|
|
@@ -767,18 +743,4 @@ const columns = [
|
|
|
},
|
|
|
},
|
|
|
]
|
|
|
-
|
|
|
-async function handleOnline(row) {
|
|
|
- row.onlineLoading = true
|
|
|
- try {
|
|
|
- await api.update({ id: row.id })
|
|
|
- row.onlineLoading = false
|
|
|
- $message.success('操作成功')
|
|
|
- $table.value?.handleSearch()
|
|
|
- }
|
|
|
- catch (error) {
|
|
|
- console.error(error)
|
|
|
- row.onlineLoading = false
|
|
|
- }
|
|
|
-}
|
|
|
</script>
|