feat(web): 添加动态模板和表单编辑功能

- 新增 dynamic.go 文件处理 HTML 模板请求
- 实现模板函数 intVal用于字符串到整数转换
- 添加 edit.html 模板支持产品数据编辑- 创建 forms.go 处理表单提交和数据更新
- 新增静态文件服务支持 /static/ 路径访问
- 添加 products.html 模板显示产品列表
- 实现 JSON 数据接口 /json 返回产品列表
- 添加 Bootstrap 样式支持改善界面显示- 实现产品编辑链接和表单提交功能
- 添加输入验证和错误处理机制
This commit is contained in:
2025-10-25 22:01:00 +08:00
parent f413315fae
commit 24f394e79f
9 changed files with 235 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pro go</title>
<link href="/static/bootstrap.min.css" rel="stylesheet"/>
</head>
<body>
{{ $index := intVal (index (index .Request.URL.Query "index") 0) }}
{{ if lt $index (len .Data) }}
{{ with index .Data $index }}
<h3 class="bg-primary text-white text-center p-2 m-2">Product</h3>
<form method="POST" action="/forms/edit">
<div class="form-group">
<label>Index</label>
<input name="index" type="text" value="{{ $index }}" class="form-control" disabled/>
<input name="index" value="{{ $index }}" type="hidden"/>
</div>
<div class="form-group">
<label>Name</label>
<input name="name" type="text" value="{{ .Name }}" class="form-control"/>
</div>
<div class="form-group">
<label>Category</label>
<input name="category" type="text" value="{{ .Category }}" class="form-control"/>
</div>
<div class="form-group">
<label>Price</label>
<input name="price" type="text" value="{{ .Price }}" class="form-control"/>
</div>
<div class="mt-2">
<button type="submit" class="btn btn-primary">Save</button>
<a href="/templates/" class="btn btn-secondary">Cancel</a>
</div>
</form>
{{ end }}
{{ else }}
<h3 class="bg-danger text-white text-center p-2">
No Product At Specified Index
</h3>
{{ end }}
</body>
</html>

View File

@@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Pro Go</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/static/bootstrap.min.css" rel="stylesheet"/>
</head>
<body>
<div class="m-1 p-2 bg-primary text-white h2 text-center">
Products
</div>
<table class="table table-sm table-bordered table-striped">
<thead>
<tr>
<th>Index</th>
<th>Name</th>
<th>Category</th>
<th class="text-end">Price</th>
<th class="text-center">Description</th>
</tr>
</thead>
<tbody>
{{ range $index,$product := .Data }}
<tr>
<td>{{ $index }}</td>
<td>{{ $product.Name }}</td>
<td>{{ $product.Category }}</td>
<td class="text-end">{{ printf "$%.2f" $product.Price }}</td>
<th class="text-center"><a href="edit.html/index{{ $index }}">Edit</a></th>
</tr>
{{ end }}
</tbody>
</table>
</body>
</html>