完成总体的sql数据库创建
This commit is contained in:
@@ -1,3 +0,0 @@
|
||||
Name: devproject-api
|
||||
Host: 0.0.0.0
|
||||
Port: 8888
|
||||
@@ -4,23 +4,41 @@
|
||||
package devproject
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/JACKYMYPERSON/hldrCenter/config"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/internal/logic/devproject"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/internal/svc"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/internal/model"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/internal/types"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
)
|
||||
|
||||
func GetDevProjectHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
func GetDevProjectHandler(cfg *config.Config) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.GetDevProjectReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
httpx.ErrorCtx(r.Context(), w, err)
|
||||
return
|
||||
}
|
||||
mysqlCfg := cfg.MySQL
|
||||
dsn := fmt.Sprintf(
|
||||
"%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=true&loc=Local",
|
||||
mysqlCfg.Username,
|
||||
mysqlCfg.Password,
|
||||
mysqlCfg.Host,
|
||||
mysqlCfg.Port,
|
||||
mysqlCfg.Database,
|
||||
mysqlCfg.Charset,
|
||||
)
|
||||
fmt.Println("接收到articlePost请求")
|
||||
|
||||
l := devproject.NewGetDevProjectLogic(r.Context(), svcCtx)
|
||||
conn := sqlx.NewSqlConn("mysql", dsn)
|
||||
|
||||
DevProjectModel := model.NewDevprojectModel(conn)
|
||||
|
||||
l := devproject.NewGetDevProjectLogic(r.Context(), cfg, DevProjectModel)
|
||||
resp, err := l.GetDevProject(&req)
|
||||
if err != nil {
|
||||
httpx.ErrorCtx(r.Context(), w, err)
|
||||
@@ -4,23 +4,40 @@
|
||||
package devproject
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/JACKYMYPERSON/hldrCenter/config"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/internal/logic/devproject"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/internal/svc"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/internal/model"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/internal/types"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
"github.com/zeromicro/go-zero/rest/httpx"
|
||||
)
|
||||
|
||||
func SaveDevProjectHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
func SaveDevProjectHandler(cfg *config.Config) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var req types.SaveDevProjectReq
|
||||
if err := httpx.Parse(r, &req); err != nil {
|
||||
httpx.ErrorCtx(r.Context(), w, err)
|
||||
return
|
||||
}
|
||||
mysqlCfg := cfg.MySQL
|
||||
dsn := fmt.Sprintf(
|
||||
"%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=true&loc=Local",
|
||||
mysqlCfg.Username,
|
||||
mysqlCfg.Password,
|
||||
mysqlCfg.Host,
|
||||
mysqlCfg.Port,
|
||||
mysqlCfg.Database,
|
||||
mysqlCfg.Charset,
|
||||
)
|
||||
fmt.Println("接收到articlePost请求")
|
||||
|
||||
l := devproject.NewSaveDevProjectLogic(r.Context(), svcCtx)
|
||||
conn := sqlx.NewSqlConn("mysql", dsn)
|
||||
DevProjectModel := model.NewDevprojectModel(conn)
|
||||
|
||||
l := devproject.NewSaveDevProjectLogic(r.Context(), cfg, DevProjectModel)
|
||||
resp, err := l.SaveDevProject(&req)
|
||||
if err != nil {
|
||||
httpx.ErrorCtx(r.Context(), w, err)
|
||||
@@ -1,10 +0,0 @@
|
||||
// Code scaffolded by goctl. Safe to edit.
|
||||
// goctl 1.9.2
|
||||
|
||||
package config
|
||||
|
||||
import "github.com/zeromicro/go-zero/rest"
|
||||
|
||||
type Config struct {
|
||||
rest.RestConf
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
// Code generated by goctl. DO NOT EDIT.
|
||||
// goctl 1.9.2
|
||||
|
||||
package handler
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
devproject "github.com/JACKYMYPERSON/hldrCenter/internal/devproject/internal/handler/devproject"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/internal/svc"
|
||||
|
||||
"github.com/zeromicro/go-zero/rest"
|
||||
)
|
||||
|
||||
func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
|
||||
server.AddRoutes(
|
||||
[]rest.Route{
|
||||
{
|
||||
Method: http.MethodGet,
|
||||
Path: "/devproject/get",
|
||||
Handler: devproject.GetDevProjectHandler(serverCtx),
|
||||
},
|
||||
{
|
||||
Method: http.MethodPost,
|
||||
Path: "/devproject/save",
|
||||
Handler: devproject.SaveDevProjectHandler(serverCtx),
|
||||
},
|
||||
},
|
||||
rest.WithPrefix("/api/devproject"),
|
||||
)
|
||||
}
|
||||
@@ -6,7 +6,8 @@ package devproject
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/internal/svc"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/config"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/internal/model"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/internal/types"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
@@ -14,20 +15,45 @@ import (
|
||||
|
||||
type GetDevProjectLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
ctx context.Context
|
||||
cfg *config.Config
|
||||
model model.DevprojectModel
|
||||
}
|
||||
|
||||
func NewGetDevProjectLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetDevProjectLogic {
|
||||
func NewGetDevProjectLogic(ctx context.Context, cfg *config.Config, model model.DevprojectModel) *GetDevProjectLogic {
|
||||
return &GetDevProjectLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
cfg: cfg,
|
||||
model: model,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *GetDevProjectLogic) GetDevProject(req *types.GetDevProjectReq) (resp *types.GetDevProjectResp, err error) {
|
||||
// todo: add your logic here and delete this line
|
||||
project, err := l.model.FindOne(l.ctx, 1)
|
||||
if err != nil {
|
||||
// 处理"记录不存在"错误(id=1可能未创建)
|
||||
if err == model.ErrNotFound {
|
||||
return &types.GetDevProjectResp{
|
||||
DevProject: types.DevProject{}, // 返回空结构体
|
||||
Msg: "未找到id=1的基地开放项目",
|
||||
}, nil
|
||||
}
|
||||
// 其他数据库错误(如连接失败)返回错误
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return
|
||||
// 组装响应:映射模型数据到API响应结构体
|
||||
resp = &types.GetDevProjectResp{
|
||||
DevProject: types.DevProject{
|
||||
Id: project.Id, // 实际返回的是id=1的数据
|
||||
BasicDevProjectManagementSystem: project.BasicDevProjectManagementSystem.String,
|
||||
BasicDevProjectInitiationResult: project.BasicDevProjectInitiationResult.String,
|
||||
BasicDevProjectMidtermInspection: project.BasicDevProjectMidtermInspection.String,
|
||||
BasicDevProjectAchievements: project.BasicDevProjectAchievements.String,
|
||||
},
|
||||
Msg: "查询成功",
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
@@ -5,8 +5,11 @@ package devproject
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"strconv"
|
||||
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/internal/svc"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/config"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/internal/model"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/internal/types"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
@@ -14,20 +17,88 @@ import (
|
||||
|
||||
type SaveDevProjectLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
ctx context.Context
|
||||
cfg *config.Config
|
||||
model model.DevprojectModel
|
||||
}
|
||||
|
||||
func NewSaveDevProjectLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SaveDevProjectLogic {
|
||||
func NewSaveDevProjectLogic(ctx context.Context, cfg *config.Config, model model.DevprojectModel) *SaveDevProjectLogic {
|
||||
return &SaveDevProjectLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
cfg: cfg,
|
||||
model: model,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *SaveDevProjectLogic) SaveDevProject(req *types.SaveDevProjectReq) (resp *types.SaveDevProjectResp, err error) {
|
||||
// todo: add your logic here and delete this line
|
||||
// 固定操作 id=1,无需前端传递id
|
||||
fixedId := int64(1)
|
||||
|
||||
return
|
||||
// 1. 检查 id=1 的记录是否存在(存在则更新,不存在则新增)
|
||||
existProject, err := l.model.FindOne(l.ctx, fixedId)
|
||||
if err != nil && err != model.ErrNotFound {
|
||||
// 排除"记录不存在"的其他错误(如数据库连接失败)
|
||||
return &types.SaveDevProjectResp{
|
||||
Success: false,
|
||||
Msg: "查询项目失败:" + err.Error(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// 2. 构造模型数据(统一转换为 sql.NullString)
|
||||
projectData := &model.Devproject{
|
||||
Id: fixedId,
|
||||
BasicDevProjectManagementSystem: sql.NullString{String: req.BasicDevProjectManagementSystem, Valid: req.BasicDevProjectManagementSystem != ""},
|
||||
BasicDevProjectInitiationResult: sql.NullString{String: req.BasicDevProjectInitiationResult, Valid: req.BasicDevProjectInitiationResult != ""},
|
||||
BasicDevProjectMidtermInspection: sql.NullString{String: req.BasicDevProjectMidtermInspection, Valid: req.BasicDevProjectMidtermInspection != ""},
|
||||
BasicDevProjectAchievements: sql.NullString{String: req.BasicDevProjectAchievements, Valid: req.BasicDevProjectAchievements != ""},
|
||||
}
|
||||
|
||||
// 3. 记录存在则更新,不存在则新增
|
||||
if existProject != nil {
|
||||
// 更新逻辑
|
||||
err = l.model.Update(l.ctx, projectData)
|
||||
if err != nil {
|
||||
return &types.SaveDevProjectResp{
|
||||
Success: false,
|
||||
Msg: "更新 id=1 的项目失败:" + err.Error(),
|
||||
}, nil
|
||||
}
|
||||
return &types.SaveDevProjectResp{
|
||||
Success: true,
|
||||
Msg: "更新 id=1 的项目成功",
|
||||
Id: fixedId,
|
||||
}, nil
|
||||
} else {
|
||||
// 新增逻辑(插入 id=1 的记录)
|
||||
// 注意:需确保模型层 Insert 方法支持手动指定 id(而非仅自增)
|
||||
result, err := l.model.Insert(l.ctx, projectData)
|
||||
if err != nil {
|
||||
return &types.SaveDevProjectResp{
|
||||
Success: false,
|
||||
Msg: "新增 id=1 的项目失败:" + err.Error(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// 验证插入后的 id 是否为 1(可选,确保数据正确性)
|
||||
lastId, err := result.LastInsertId()
|
||||
if err != nil {
|
||||
return &types.SaveDevProjectResp{
|
||||
Success: false,
|
||||
Msg: "新增项目成功,但验证ID失败:" + err.Error(),
|
||||
}, nil
|
||||
}
|
||||
if lastId != fixedId {
|
||||
return &types.SaveDevProjectResp{
|
||||
Success: false,
|
||||
Msg: "新增项目ID异常,预期 id=1,实际 id=" + strconv.FormatInt(lastId, 10),
|
||||
}, nil
|
||||
}
|
||||
|
||||
return &types.SaveDevProjectResp{
|
||||
Success: true,
|
||||
Msg: "新增 id=1 的项目成功",
|
||||
Id: fixedId,
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
29
server/internal/devproject/internal/model/devprojectmodel.go
Normal file
29
server/internal/devproject/internal/model/devprojectmodel.go
Normal file
@@ -0,0 +1,29 @@
|
||||
package model
|
||||
|
||||
import "github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
|
||||
var _ DevprojectModel = (*customDevprojectModel)(nil)
|
||||
|
||||
type (
|
||||
// DevprojectModel is an interface to be customized, add more methods here,
|
||||
// and implement the added methods in customDevprojectModel.
|
||||
DevprojectModel interface {
|
||||
devprojectModel
|
||||
withSession(session sqlx.Session) DevprojectModel
|
||||
}
|
||||
|
||||
customDevprojectModel struct {
|
||||
*defaultDevprojectModel
|
||||
}
|
||||
)
|
||||
|
||||
// NewDevprojectModel returns a model for the database table.
|
||||
func NewDevprojectModel(conn sqlx.SqlConn) DevprojectModel {
|
||||
return &customDevprojectModel{
|
||||
defaultDevprojectModel: newDevprojectModel(conn),
|
||||
}
|
||||
}
|
||||
|
||||
func (m *customDevprojectModel) withSession(session sqlx.Session) DevprojectModel {
|
||||
return NewDevprojectModel(sqlx.NewSqlConnFromSession(session))
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
// Code generated by goctl. DO NOT EDIT.
|
||||
// versions:
|
||||
// goctl version: 1.9.2
|
||||
|
||||
package model
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/stores/builder"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
"github.com/zeromicro/go-zero/core/stringx"
|
||||
)
|
||||
|
||||
var (
|
||||
devprojectFieldNames = builder.RawFieldNames(&Devproject{})
|
||||
devprojectRows = strings.Join(devprojectFieldNames, ",")
|
||||
devprojectRowsExpectAutoSet = strings.Join(stringx.Remove(devprojectFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",")
|
||||
devprojectRowsWithPlaceHolder = strings.Join(stringx.Remove(devprojectFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?"
|
||||
)
|
||||
|
||||
type (
|
||||
devprojectModel interface {
|
||||
Insert(ctx context.Context, data *Devproject) (sql.Result, error)
|
||||
FindOne(ctx context.Context, id int64) (*Devproject, error)
|
||||
Update(ctx context.Context, data *Devproject) error
|
||||
Delete(ctx context.Context, id int64) error
|
||||
}
|
||||
|
||||
defaultDevprojectModel struct {
|
||||
conn sqlx.SqlConn
|
||||
table string
|
||||
}
|
||||
|
||||
Devproject struct {
|
||||
Id int64 `db:"id"` // 基地开放项目ID
|
||||
BasicDevProjectManagementSystem sql.NullString `db:"basic_dev_project_management_system"` // 基础开发项目管理制度
|
||||
BasicDevProjectInitiationResult sql.NullString `db:"basic_dev_project_initiation_result"` // 基础开发项目立项结果
|
||||
BasicDevProjectMidtermInspection sql.NullString `db:"basic_dev_project_midterm_inspection"` // 基础开发项目中期检查
|
||||
BasicDevProjectAchievements sql.NullString `db:"basic_dev_project_achievements"` // 基础开发项目成果
|
||||
}
|
||||
)
|
||||
|
||||
func newDevprojectModel(conn sqlx.SqlConn) *defaultDevprojectModel {
|
||||
return &defaultDevprojectModel{
|
||||
conn: conn,
|
||||
table: "`devproject`",
|
||||
}
|
||||
}
|
||||
|
||||
func (m *defaultDevprojectModel) Delete(ctx context.Context, id int64) error {
|
||||
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
|
||||
_, err := m.conn.ExecCtx(ctx, query, id)
|
||||
return err
|
||||
}
|
||||
|
||||
func (m *defaultDevprojectModel) FindOne(ctx context.Context, id int64) (*Devproject, error) {
|
||||
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", devprojectRows, m.table)
|
||||
var resp Devproject
|
||||
err := m.conn.QueryRowCtx(ctx, &resp, query, id)
|
||||
switch err {
|
||||
case nil:
|
||||
return &resp, nil
|
||||
case sqlx.ErrNotFound:
|
||||
return nil, ErrNotFound
|
||||
default:
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
func (m *defaultDevprojectModel) Insert(ctx context.Context, data *Devproject) (sql.Result, error) {
|
||||
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?)", m.table, devprojectRowsExpectAutoSet)
|
||||
ret, err := m.conn.ExecCtx(ctx, query, data.BasicDevProjectManagementSystem, data.BasicDevProjectInitiationResult, data.BasicDevProjectMidtermInspection, data.BasicDevProjectAchievements)
|
||||
return ret, err
|
||||
}
|
||||
|
||||
func (m *defaultDevprojectModel) Update(ctx context.Context, data *Devproject) error {
|
||||
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, devprojectRowsWithPlaceHolder)
|
||||
_, err := m.conn.ExecCtx(ctx, query, data.BasicDevProjectManagementSystem, data.BasicDevProjectInitiationResult, data.BasicDevProjectMidtermInspection, data.BasicDevProjectAchievements, data.Id)
|
||||
return err
|
||||
}
|
||||
|
||||
func (m *defaultDevprojectModel) tableName() string {
|
||||
return m.table
|
||||
}
|
||||
5
server/internal/devproject/internal/model/vars.go
Normal file
5
server/internal/devproject/internal/model/vars.go
Normal file
@@ -0,0 +1,5 @@
|
||||
package model
|
||||
|
||||
import "github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
|
||||
var ErrNotFound = sqlx.ErrNotFound
|
||||
@@ -1,18 +0,0 @@
|
||||
// Code scaffolded by goctl. Safe to edit.
|
||||
// goctl 1.9.2
|
||||
|
||||
package svc
|
||||
|
||||
import (
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/internal/config"
|
||||
)
|
||||
|
||||
type ServiceContext struct {
|
||||
Config config.Config
|
||||
}
|
||||
|
||||
func NewServiceContext(c config.Config) *ServiceContext {
|
||||
return &ServiceContext{
|
||||
Config: c,
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,7 @@ type DevProject struct {
|
||||
}
|
||||
|
||||
type GetDevProjectReq struct {
|
||||
Id int64 `json:"id" form:"id" validate:"required"` // 基地开放项目ID(必传)
|
||||
//Id int64 `json:"id" form:"id" validate:"required"`
|
||||
}
|
||||
|
||||
type GetDevProjectResp struct {
|
||||
@@ -21,7 +21,6 @@ type GetDevProjectResp struct {
|
||||
}
|
||||
|
||||
type SaveDevProjectReq struct {
|
||||
Id int64 `json:"id,omitempty"` // 可选:更新时需传入ID
|
||||
BasicDevProjectManagementSystem string `json:"basic_dev_project_management_system"` // 基础开发项目管理制度
|
||||
BasicDevProjectInitiationResult string `json:"basic_dev_project_initiation_result"` // 基础开发项目立项结果
|
||||
BasicDevProjectMidtermInspection string `json:"basic_dev_project_midterm_inspection"` // 基础开发项目中期检查
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"github.com/JACKYMYPERSON/hldrCenter/config"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/article/handler/article"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/baseoverview/handler/baseOverview"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/handler/devproject"
|
||||
ping "github.com/JACKYMYPERSON/hldrCenter/internal/ping/handler/ping"
|
||||
uploadimg "github.com/JACKYMYPERSON/hldrCenter/internal/upload/handler/upload"
|
||||
"github.com/JACKYMYPERSON/hldrCenter/middleware"
|
||||
@@ -49,6 +50,15 @@ func SetupRouter(cfg *config.Config) *gin.Engine {
|
||||
// 部分更新基地概况(对应 service 中的 PATCH /)
|
||||
baseOverviewapi.PATCH("", gin.WrapH(baseOverview.UpdateBaseOverviewPartialHandler(cfg)))
|
||||
}
|
||||
|
||||
devprojects := api.Group("/devproject")
|
||||
{
|
||||
// 新增或修改项目(POST /api/devproject/save)
|
||||
devprojects.POST("/save", gin.WrapH(devproject.SaveDevProjectHandler(cfg)))
|
||||
|
||||
// 查询项目详情(GET /api/devproject/get)
|
||||
devprojects.GET("/get", gin.WrapH(devproject.GetDevProjectHandler(cfg)))
|
||||
}
|
||||
}
|
||||
|
||||
return r
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
create table devproject
|
||||
(
|
||||
id int not null auto_increment comment '基地开放项目ID', -- 建议加auto_increment(主键自增)
|
||||
basic_dev_project_management_system text null comment '基础开发项目管理制度',
|
||||
basic_dev_project_initiation_result text null comment '基础开发项目立项结果',
|
||||
basic_dev_project_midterm_inspection text null comment '基础开发项目中期检查',
|
||||
basic_dev_project_achievements text null comment '基础开发项目成果',
|
||||
primary key (id) -- 独立显式声明主键
|
||||
)
|
||||
comment '基地开放项目表';
|
||||
56
web/package-lock.json
generated
56
web/package-lock.json
generated
@@ -63,6 +63,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.28.4.tgz",
|
||||
"integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.27.1",
|
||||
"@babel/generator": "^7.28.3",
|
||||
@@ -1596,6 +1597,7 @@
|
||||
"version": "4.17.12",
|
||||
"resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz",
|
||||
"integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@types/lodash": "*"
|
||||
}
|
||||
@@ -1605,6 +1607,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/@types/node/-/node-22.18.8.tgz",
|
||||
"integrity": "sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"undici-types": "~6.21.0"
|
||||
}
|
||||
@@ -1657,6 +1660,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-8.45.0.tgz",
|
||||
"integrity": "sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@typescript-eslint/scope-manager": "8.45.0",
|
||||
"@typescript-eslint/types": "8.45.0",
|
||||
@@ -2305,6 +2309,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.15.0.tgz",
|
||||
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
},
|
||||
@@ -2447,6 +2452,7 @@
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"baseline-browser-mapping": "^2.8.9",
|
||||
"caniuse-lite": "^1.0.30001746",
|
||||
@@ -2787,6 +2793,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/eslint/-/eslint-9.36.0.tgz",
|
||||
"integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.8.0",
|
||||
"@eslint-community/regexpp": "^4.12.1",
|
||||
@@ -2847,6 +2854,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz",
|
||||
"integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"eslint-config-prettier": "bin/cli.js"
|
||||
},
|
||||
@@ -2892,6 +2900,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-10.4.0.tgz",
|
||||
"integrity": "sha512-K6tP0dW8FJVZLQxa2S7LcE1lLw3X8VvB3t887Q6CLrFVxHYBXGANbXvwNzYIu6Ughx1bSJ5BDT0YB3ybPT39lw==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.4.0",
|
||||
"natural-compare": "^1.4.0",
|
||||
@@ -3475,6 +3484,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/jiti/-/jiti-2.6.1.tgz",
|
||||
"integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"jiti": "lib/jiti-cli.mjs"
|
||||
}
|
||||
@@ -3594,12 +3604,14 @@
|
||||
"node_modules/lodash": {
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/lodash-es": {
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",
|
||||
"integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
|
||||
"integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/lodash-unified": {
|
||||
"version": "1.0.3",
|
||||
@@ -4113,6 +4125,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.6.2.tgz",
|
||||
"integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"prettier": "bin/prettier.cjs"
|
||||
},
|
||||
@@ -4479,6 +4492,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz",
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
@@ -4536,6 +4550,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz",
|
||||
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
@@ -4664,6 +4679,7 @@
|
||||
"integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"esbuild": "^0.25.0",
|
||||
"fdir": "^6.5.0",
|
||||
@@ -4891,6 +4907,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz",
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
@@ -4908,6 +4925,7 @@
|
||||
"version": "3.5.22",
|
||||
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.22.tgz",
|
||||
"integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@vue/compiler-dom": "3.5.22",
|
||||
"@vue/compiler-sfc": "3.5.22",
|
||||
@@ -5096,6 +5114,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.28.4.tgz",
|
||||
"integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.27.1",
|
||||
"@babel/generator": "^7.28.3",
|
||||
@@ -6047,6 +6066,7 @@
|
||||
"version": "4.17.12",
|
||||
"resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz",
|
||||
"integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@types/lodash": "*"
|
||||
}
|
||||
@@ -6056,6 +6076,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/@types/node/-/node-22.18.8.tgz",
|
||||
"integrity": "sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"undici-types": "~6.21.0"
|
||||
}
|
||||
@@ -6095,6 +6116,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-8.45.0.tgz",
|
||||
"integrity": "sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@typescript-eslint/scope-manager": "8.45.0",
|
||||
"@typescript-eslint/types": "8.45.0",
|
||||
@@ -6535,7 +6557,8 @@
|
||||
"version": "8.15.0",
|
||||
"resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.15.0.tgz",
|
||||
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"peer": true
|
||||
},
|
||||
"acorn-jsx": {
|
||||
"version": "5.3.2",
|
||||
@@ -6634,6 +6657,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.26.3.tgz",
|
||||
"integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"baseline-browser-mapping": "^2.8.9",
|
||||
"caniuse-lite": "^1.0.30001746",
|
||||
@@ -6867,6 +6891,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/eslint/-/eslint-9.36.0.tgz",
|
||||
"integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@eslint-community/eslint-utils": "^4.8.0",
|
||||
"@eslint-community/regexpp": "^4.12.1",
|
||||
@@ -6937,6 +6962,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz",
|
||||
"integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {}
|
||||
},
|
||||
"eslint-plugin-prettier": {
|
||||
@@ -6954,6 +6980,7 @@
|
||||
"resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-10.4.0.tgz",
|
||||
"integrity": "sha512-K6tP0dW8FJVZLQxa2S7LcE1lLw3X8VvB3t887Q6CLrFVxHYBXGANbXvwNzYIu6Ughx1bSJ5BDT0YB3ybPT39lw==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@eslint-community/eslint-utils": "^4.4.0",
|
||||
"natural-compare": "^1.4.0",
|
||||
@@ -7324,7 +7351,8 @@
|
||||
"version": "2.6.1",
|
||||
"resolved": "https://registry.npmmirror.com/jiti/-/jiti-2.6.1.tgz",
|
||||
"integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"peer": true
|
||||
},
|
||||
"js-tokens": {
|
||||
"version": "4.0.0",
|
||||
@@ -7414,12 +7442,14 @@
|
||||
"lodash": {
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||
"peer": true
|
||||
},
|
||||
"lodash-es": {
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",
|
||||
"integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
|
||||
"integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
|
||||
"peer": true
|
||||
},
|
||||
"lodash-unified": {
|
||||
"version": "1.0.3",
|
||||
@@ -7763,7 +7793,8 @@
|
||||
"version": "3.6.2",
|
||||
"resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.6.2.tgz",
|
||||
"integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"peer": true
|
||||
},
|
||||
"prettier-linter-helpers": {
|
||||
"version": "1.0.0",
|
||||
@@ -7982,7 +8013,8 @@
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz",
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"peer": true
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -8021,7 +8053,8 @@
|
||||
"version": "5.9.3",
|
||||
"resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz",
|
||||
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
||||
"devOptional": true
|
||||
"devOptional": true,
|
||||
"peer": true
|
||||
},
|
||||
"typescript-eslint": {
|
||||
"version": "8.45.0",
|
||||
@@ -8095,6 +8128,7 @@
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-7.1.12.tgz",
|
||||
"integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"esbuild": "^0.25.0",
|
||||
"fdir": "^6.5.0",
|
||||
@@ -8116,7 +8150,8 @@
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz",
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"peer": true
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -8236,6 +8271,7 @@
|
||||
"version": "3.5.22",
|
||||
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.22.tgz",
|
||||
"integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@vue/compiler-dom": "3.5.22",
|
||||
"@vue/compiler-sfc": "3.5.22",
|
||||
|
||||
Reference in New Issue
Block a user