name: "web-dev-best-practices"
@DateTimeFormat(pattern = "yyyy-MM-dd")@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date planTimeStart;
// 前端日期解析和格式化
const parsedDate = new Date(dateString);
if (!isNaN(parsedDate.getTime())) {
// 格式化为所需格式
return `${year}-${month}-${day} ${hours}:${minutes}`;
}
import zhCn from 'element-plus/es/locale/lang/zh-cn'
app.use(ElementPlus, {
locale: zhCn
})
COALESCE 函数处理空值判断@Query("SELECT new com.example.dto(...) " +
"FROM ... " +
"WHERE ... AND (COALESCE(:query, '') = '' OR ...) ")
Page<SearchResult> searchWithPage(@Param("query") String query, Pageable pageable);
COMMON → tugboatcommonBRANCH → liandatugboatmispublic enum DataSourceType {
COMMON("common"), // tugboatcommon: 系统公共库
BRANCH("branch"); // liandatugboatmis: 分支机构业务库
}
<el-select
v-model="value"
filterable
remote
popper-class="custom-popper"
:remote-method="searchMethod">
<div v-if="loadingMore" class="loading">加载中...</div>
<el-option
v-for="item in options"
:key="item.id"
:label="item.displayField" <!-- 显示字段 -->
:value="item.valueField"> <!-- 值字段 -->
</el-option>
</el-select>
在所有触发后台操作的前端事件中添加进度条和防重复点击机制。
<template>
<el-button
:loading="loading"
@click="handleAction"
:disabled="loading">
{{ loading ? '处理中...' : '提交' }}
</el-button>
</template>
<script>
export default {
data() {
return {
loading: false
}
},
methods: {
async handleAction() {
if (this.loading) return; // 防止重复点击
this.loading = true;
try {
// 执行后台操作
await this.apiCall();
} finally {
this.loading = false; // 确保无论成功失败都恢复状态
}
}
}
}
</script>
注解使用场景:
@DateTimeFormat 用于请求参数绑定@JsonFormat 用于JSON序列化/反序列化命名规范:
数据一致性:
性能考虑:
在开发新页面功能、调试常见Web应用问题、处理日期时间、配置数据源、优化前端组件时使用此技能。