modify:新增小程序
This commit is contained in:
413
Sale/pages/index/index.js
Normal file
413
Sale/pages/index/index.js
Normal file
@@ -0,0 +1,413 @@
|
||||
// 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'
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user