414 lines
11 KiB
JavaScript
414 lines
11 KiB
JavaScript
// pages/index/index.js
|
|
const api = require('../../utils/request')
|
|
|
|
Page({
|
|
data: {
|
|
// 地区选项 (对象格式)
|
|
regions: [
|
|
{ label: '昆明', value: '昆明' },
|
|
{ label: '玉溪', value: '玉溪' },
|
|
{ label: '楚雄', value: '楚雄' },
|
|
{ label: '大理', value: '大理' },
|
|
{ label: '曲靖', value: '曲靖' },
|
|
{ label: '红河', value: '红河' },
|
|
{ label: '文山', value: '文山' },
|
|
{ label: '重庆', value: '重庆' },
|
|
{ label: '成都', value: '成都' },
|
|
{ label: '广州', value: '广州' },
|
|
{ label: '南宁', value: '南宁' }
|
|
],
|
|
// 材质选项 (对象格式)
|
|
materials: [
|
|
{ label: '全部', value: '' },
|
|
{ label: 'HPB300', value: 'HPB300' },
|
|
{ label: 'HRB400', value: 'HRB400' },
|
|
{ label: 'HRB400E', value: 'HRB400E' },
|
|
{ label: 'HRB500', value: 'HRB500' },
|
|
{ label: 'HRB500E', value: 'HRB500E' },
|
|
{ label: 'HRB600', value: 'HRB600' },
|
|
{ label: 'CRB550', value: 'CRB550' },
|
|
{ label: 'Q235', value: 'Q235' },
|
|
{ label: 'Q345', value: 'Q345' },
|
|
{ label: 'Q355', value: 'Q355' }
|
|
],
|
|
// 品名选项 (对象格式)
|
|
partsnames: [
|
|
{ label: '全部', value: '' },
|
|
{ label: '高线', value: '高线' },
|
|
{ label: '螺纹钢', value: '螺纹钢' },
|
|
{ label: '盘螺', value: '盘螺' },
|
|
{ label: '工字钢', value: '工字钢' },
|
|
{ label: '槽钢', value: '槽钢' },
|
|
{ label: '角钢', value: '角钢' },
|
|
{ label: 'H型钢', value: 'H型钢' },
|
|
{ label: '钢板', value: '钢板' },
|
|
{ label: '卷板', value: '卷板' },
|
|
{ label: '中厚板', value: '中厚板' }
|
|
],
|
|
// 选中的值
|
|
selectedRegion: '',
|
|
selectedMaterial: '',
|
|
selectedPartsname: '',
|
|
// 显示的文本
|
|
regionText: '请选择地区',
|
|
materialText: '请选择材质 (可选)',
|
|
partsnameText: '全部',
|
|
// 选中的日期
|
|
selectedDate: '',
|
|
// 今天日期
|
|
today: '',
|
|
// 加载状态
|
|
loading: false,
|
|
// 是否已搜索
|
|
searched: false,
|
|
// 查询结果
|
|
priceList: [],
|
|
total: 0,
|
|
// 统计信息
|
|
stats: null,
|
|
// Picker 显示状态
|
|
regionPickerVisible: false,
|
|
materialPickerVisible: false,
|
|
partsnamePickerVisible: false,
|
|
datePickerVisible: false,
|
|
// Picker value (数组形式)
|
|
regionPickerValue: [],
|
|
materialPickerValue: [],
|
|
partsnamePickerValue: []
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面加载
|
|
*/
|
|
onLoad(options) {
|
|
// 设置今天日期
|
|
const today = this.formatDate(new Date())
|
|
this.setData({ today })
|
|
|
|
// 测试 API 连接
|
|
this.testApiConnection()
|
|
},
|
|
|
|
/**
|
|
* 测试 API 连接
|
|
*/
|
|
async testApiConnection() {
|
|
try {
|
|
const res = await api.checkHealth()
|
|
console.log('API 连接成功:', res)
|
|
} catch (error) {
|
|
console.error('API 连接失败:', error)
|
|
api.showError('API 服务连接失败,请确保后端服务已启动')
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 显示地区选择器
|
|
*/
|
|
showRegionPicker() {
|
|
this.setData({ regionPickerVisible: true })
|
|
},
|
|
|
|
/**
|
|
* 显示材质选择器
|
|
*/
|
|
showMaterialPicker() {
|
|
this.setData({ materialPickerVisible: true })
|
|
},
|
|
|
|
/**
|
|
* 显示品名选择器
|
|
*/
|
|
showPartsnamePicker() {
|
|
this.setData({ partsnamePickerVisible: true })
|
|
},
|
|
|
|
/**
|
|
* 显示日期选择器
|
|
*/
|
|
showDatePicker() {
|
|
this.setData({ datePickerVisible: true })
|
|
},
|
|
|
|
/**
|
|
* Picker 选择改变
|
|
*/
|
|
onPickerChange(e) {
|
|
const { key } = e.currentTarget.dataset
|
|
const { value } = e.detail
|
|
|
|
console.log('Picker change:', { key, value })
|
|
|
|
// 根据 key 设置对应的文本和值
|
|
if (key === 'region') {
|
|
const region = this.data.regions.find(item => item.value === value[0])
|
|
this.setData({
|
|
regionPickerVisible: false,
|
|
regionPickerValue: value,
|
|
selectedRegion: value[0] || '',
|
|
regionText: region ? region.label : '请选择地区'
|
|
})
|
|
} else if (key === 'material') {
|
|
const material = this.data.materials.find(item => item.value === value[0])
|
|
this.setData({
|
|
materialPickerVisible: false,
|
|
materialPickerValue: value,
|
|
selectedMaterial: value[0] || '',
|
|
materialText: material ? material.label : '请选择材质 (可选)'
|
|
})
|
|
} else if (key === 'partsname') {
|
|
const partsname = this.data.partsnames.find(item => item.value === value[0])
|
|
this.setData({
|
|
partsnamePickerVisible: false,
|
|
partsnamePickerValue: value,
|
|
selectedPartsname: value[0] || '',
|
|
partsnameText: partsname ? partsname.label : '全部'
|
|
})
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Picker 取消选择
|
|
*/
|
|
onPickerCancel(e) {
|
|
const { key } = e.currentTarget.dataset
|
|
console.log('Picker cancel:', key)
|
|
|
|
if (key === 'region') {
|
|
this.setData({ regionPickerVisible: false })
|
|
} else if (key === 'material') {
|
|
this.setData({ materialPickerVisible: false })
|
|
} else if (key === 'partsname') {
|
|
this.setData({ partsnamePickerVisible: false })
|
|
} else if (key === 'date') {
|
|
this.setData({ datePickerVisible: false })
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 日期选择确认
|
|
*/
|
|
onDateConfirm(e) {
|
|
const { value } = e.detail
|
|
this.setData({
|
|
selectedDate: value,
|
|
datePickerVisible: false
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 日期选择取消
|
|
*/
|
|
onDatePickerCancel() {
|
|
this.setData({
|
|
datePickerVisible: false
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 查询价格
|
|
*/
|
|
async onSearch() {
|
|
const {
|
|
selectedRegion,
|
|
selectedMaterial,
|
|
selectedPartsname,
|
|
selectedDate
|
|
} = this.data
|
|
|
|
// 验证必填项
|
|
if (!selectedRegion) {
|
|
api.showError('请选择地区')
|
|
return
|
|
}
|
|
|
|
// 开始加载
|
|
this.setData({
|
|
loading: true,
|
|
searched: false
|
|
})
|
|
|
|
try {
|
|
// 构建搜索参数
|
|
const searchParams = {
|
|
region: selectedRegion,
|
|
pageSize: 100
|
|
}
|
|
|
|
// 添加可选参数
|
|
if (selectedMaterial) searchParams.material = selectedMaterial
|
|
if (selectedPartsname) searchParams.partsname = selectedPartsname
|
|
if (selectedDate) searchParams.startDate = selectedDate
|
|
|
|
// 如果选择了日期,设置结束日期
|
|
if (selectedDate) {
|
|
searchParams.endDate = selectedDate
|
|
}
|
|
|
|
console.log('查询参数:', searchParams)
|
|
|
|
// 调用搜索接口
|
|
const searchResult = await api.searchPrices(searchParams)
|
|
|
|
console.log('查询结果:', searchResult)
|
|
|
|
// 获取统计数据
|
|
const statsParams = {
|
|
region: selectedRegion,
|
|
material: selectedMaterial
|
|
}
|
|
if (selectedDate) {
|
|
statsParams.startDate = selectedDate
|
|
statsParams.endDate = selectedDate
|
|
} else {
|
|
statsParams.days = 30
|
|
}
|
|
|
|
const statsResult = await api.getPriceStats(statsParams)
|
|
console.log('==================== 统计结果 ====================')
|
|
console.log('完整响应:', statsResult)
|
|
console.log('success:', statsResult.success)
|
|
console.log('data:', statsResult.data)
|
|
console.log('data 类型:', typeof statsResult.data)
|
|
console.log('data 字段:', Object.keys(statsResult.data || {}))
|
|
console.log('JSON 数据:', JSON.stringify(statsResult.data, null, 2))
|
|
console.log('====================================================')
|
|
|
|
// 更新数据
|
|
const priceList = searchResult.data || []
|
|
const total = searchResult.total || searchResult.pagination?.total || priceList.length || 0
|
|
|
|
// 格式化日期字段
|
|
const formattedList = priceList.map(item => {
|
|
let dateStr = ''
|
|
if (item.price_date) {
|
|
const date = new Date(item.price_date)
|
|
dateStr = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`
|
|
}
|
|
return {
|
|
...item,
|
|
price_date_str: dateStr
|
|
}
|
|
})
|
|
|
|
this.setData({
|
|
priceList: formattedList,
|
|
total,
|
|
stats: statsResult.data || null,
|
|
searched: true,
|
|
loading: false
|
|
})
|
|
|
|
// 显示结果提示
|
|
if (searchResult.data && searchResult.data.length > 0) {
|
|
api.showSuccess(`查询成功,共找到 ${searchResult.data.length} 条数据`)
|
|
}
|
|
|
|
} catch (error) {
|
|
console.error('查询失败:', error)
|
|
this.setData({
|
|
loading: false,
|
|
searched: true,
|
|
priceList: [],
|
|
total: 0,
|
|
stats: null
|
|
})
|
|
// API 错误已在 request.js 中处理
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 重置表单
|
|
*/
|
|
onReset() {
|
|
this.setData({
|
|
selectedRegion: '',
|
|
selectedMaterial: '',
|
|
selectedPartsname: '',
|
|
regionText: '请选择地区',
|
|
materialText: '请选择材质 (可选)',
|
|
partsnameText: '全部',
|
|
regionPickerValue: [],
|
|
materialPickerValue: [],
|
|
partsnamePickerValue: [],
|
|
selectedDate: '',
|
|
searched: false,
|
|
priceList: [],
|
|
total: 0,
|
|
stats: null
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 查看价格详情
|
|
*/
|
|
onPriceDetail(e) {
|
|
const item = e.currentTarget.dataset.item
|
|
|
|
// 格式化日期
|
|
const formatDate = (dateStr) => {
|
|
if (!dateStr) return '-'
|
|
const date = new Date(dateStr)
|
|
return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`
|
|
}
|
|
|
|
// 构建详情信息
|
|
let detail = `地区:${item.price_region || '-'}\n`
|
|
detail += `品名:${item.partsname_name || '-'}\n`
|
|
detail += `材质:${item.goods_material || '-'}\n`
|
|
if (item.goods_spec) {
|
|
detail += `规格:${item.goods_spec}\n`
|
|
}
|
|
const price = item.hang_price || item.make_price || '-'
|
|
detail += `价格:¥${price}\n`
|
|
detail += `日期:${formatDate(item.price_date)}\n`
|
|
if (item.price_source) {
|
|
detail += `来源:${item.price_source}\n`
|
|
}
|
|
if (item.productarea_name) {
|
|
detail += `产地:${item.productarea_name}\n`
|
|
}
|
|
detail += `单位:元/吨`
|
|
|
|
wx.showModal({
|
|
title: '价格详情',
|
|
content: detail,
|
|
showCancel: false,
|
|
confirmText: '关闭'
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 格式化日期为 YYYY-MM-DD
|
|
*/
|
|
formatDate(date) {
|
|
const year = date.getFullYear()
|
|
const month = String(date.getMonth() + 1).padStart(2, '0')
|
|
const day = String(date.getDate()).padStart(2, '0')
|
|
return `${year}-${month}-${day}`
|
|
},
|
|
|
|
/**
|
|
* TabBar 切换
|
|
*/
|
|
onTabChange(e) {
|
|
const value = e.detail.value
|
|
console.log('TabBar 切换:', value, '类型:', typeof value)
|
|
|
|
// value 可能是字符串或数字,统一处理
|
|
const tabIndex = parseInt(value)
|
|
|
|
if (tabIndex === 0) {
|
|
// 当前页,不做处理
|
|
console.log('已在当前页,不跳转')
|
|
return
|
|
} else if (tabIndex === 1) {
|
|
// 跳转到价格趋势页
|
|
console.log('跳转到价格趋势页')
|
|
wx.navigateTo({
|
|
url: '/pages/trend/trend'
|
|
})
|
|
}
|
|
}
|
|
})
|