添加基地后端handler和logic
This commit is contained in:
1
server/.idea/data_source_mapping.xml
generated
1
server/.idea/data_source_mapping.xml
generated
@@ -2,6 +2,5 @@
|
|||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="DataSourcePerFileMappings">
|
<component name="DataSourcePerFileMappings">
|
||||||
<file url="file://$APPLICATION_CONFIG_DIR$/consoles/db/18f4a5e8-f31d-49fa-a902-41671f91f04b/console.sql" value="18f4a5e8-f31d-49fa-a902-41671f91f04b" />
|
<file url="file://$APPLICATION_CONFIG_DIR$/consoles/db/18f4a5e8-f31d-49fa-a902-41671f91f04b/console.sql" value="18f4a5e8-f31d-49fa-a902-41671f91f04b" />
|
||||||
<file url="file://$APPLICATION_CONFIG_DIR$/consoles/db/18f4a5e8-f31d-49fa-a902-41671f91f04b/console_2.sql" value="18f4a5e8-f31d-49fa-a902-41671f91f04b" />
|
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
53
server/api/baseoverview.api
Normal file
53
server/api/baseoverview.api
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
type (
|
||||||
|
// BaseOverview 基础结构(完全映射数据表字段)
|
||||||
|
BaseOverview {
|
||||||
|
Introduction string `json:"introduction"` // 基地简介
|
||||||
|
Regulations string `json:"regulations"` // 规章制度
|
||||||
|
Address string `json:"address"` // 联系地址
|
||||||
|
Phone string `json:"phone"` // 联系电话
|
||||||
|
Email string `json:"email"` // 联系邮箱
|
||||||
|
Website string `json:"website"` // 官方网站
|
||||||
|
Director string `json:"director"` // 主任姓名
|
||||||
|
DeputyDirector string `json:"deputy_director"` // 副主任姓名
|
||||||
|
Researchers string `json:"researchers"` // 研究人员(逗号分隔)
|
||||||
|
}
|
||||||
|
// 获取基地概况详情:请求(无参数,因只有一条核心记录)
|
||||||
|
GetBaseOverviewReq {}
|
||||||
|
// 获取基地概况详情:响应
|
||||||
|
GetBaseOverviewResp {
|
||||||
|
Data BaseOverview `json:"data"` // 基地概况详情
|
||||||
|
Success bool `json:"success"` // 操作是否成功
|
||||||
|
}
|
||||||
|
// 部分更新基地概况:请求(支持按需更新部分字段)
|
||||||
|
UpdateBaseOverviewPartialReq {
|
||||||
|
Introduction string `json:"introduction,optional"` // 可选更新
|
||||||
|
Regulations string `json:"regulations,optional"` // 可选更新
|
||||||
|
Address string `json:"address,optional"` // 可选更新
|
||||||
|
Phone string `json:"phone,optional"` // 可选更新
|
||||||
|
Email string `json:"email,optional"` // 可选更新
|
||||||
|
Website string `json:"website,optional"` // 可选更新
|
||||||
|
Director string `json:"director,optional"` // 可选更新
|
||||||
|
DeputyDirector string `json:"deputy_director,optional"` // 可选更新
|
||||||
|
Researchers string `json:"researchers,optional"` // 可选更新
|
||||||
|
}
|
||||||
|
// 部分更新基地概况:响应
|
||||||
|
UpdateBaseOverviewPartialResp {
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Msg string `json:"msg,omitempty"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
@server (
|
||||||
|
group: baseOverview
|
||||||
|
prefix: /api/base-overview
|
||||||
|
)
|
||||||
|
// 修改这里:将 base-overview-api 改为 base_overview_api 或 baseoverviewapi
|
||||||
|
service base_overview_api {
|
||||||
|
@handler GetBaseOverviewHandler
|
||||||
|
get / (GetBaseOverviewReq) returns (GetBaseOverviewResp)
|
||||||
|
|
||||||
|
// 部分更新基地概况(PATCH,按需更新部分字段,更符合 REST 规范)
|
||||||
|
@handler UpdateBaseOverviewPartialHandler
|
||||||
|
patch / (UpdateBaseOverviewPartialReq) returns (UpdateBaseOverviewPartialResp)
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
// Code scaffolded by goctl. Safe to edit.
|
||||||
|
// goctl 1.9.2
|
||||||
|
|
||||||
|
package baseOverview
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/config"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/baseoverview/internal/logic/baseOverview"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/baseoverview/internal/types"
|
||||||
|
"github.com/zeromicro/go-zero/rest/httpx"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetBaseOverviewHandler(cfg *config.Config) http.HandlerFunc {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var req types.GetBaseOverviewReq
|
||||||
|
if err := httpx.Parse(r, &req); err != nil {
|
||||||
|
httpx.ErrorCtx(r.Context(), w, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
l := baseOverview.NewGetBaseOverviewLogic(r.Context(), cfg)
|
||||||
|
resp, err := l.GetBaseOverview(&req)
|
||||||
|
if err != nil {
|
||||||
|
httpx.ErrorCtx(r.Context(), w, err)
|
||||||
|
} else {
|
||||||
|
httpx.OkJsonCtx(r.Context(), w, resp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
// Code scaffolded by goctl. Safe to edit.
|
||||||
|
// goctl 1.9.2
|
||||||
|
|
||||||
|
package baseOverview
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/config"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/baseoverview/internal/logic/baseOverview"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/baseoverview/internal/types"
|
||||||
|
"github.com/zeromicro/go-zero/rest/httpx"
|
||||||
|
)
|
||||||
|
|
||||||
|
func UpdateBaseOverviewPartialHandler(cfg *config.Config) http.HandlerFunc {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var req types.UpdateBaseOverviewPartialReq
|
||||||
|
if err := httpx.Parse(r, &req); err != nil {
|
||||||
|
httpx.ErrorCtx(r.Context(), w, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
l := baseOverview.NewUpdateBaseOverviewPartialLogic(r.Context(), cfg)
|
||||||
|
resp, err := l.UpdateBaseOverviewPartial(&req)
|
||||||
|
if err != nil {
|
||||||
|
httpx.ErrorCtx(r.Context(), w, err)
|
||||||
|
} else {
|
||||||
|
httpx.OkJsonCtx(r.Context(), w, resp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
// Code scaffolded by goctl. Safe to edit.
|
||||||
|
// goctl 1.9.2
|
||||||
|
|
||||||
|
package baseOverview
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/config"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/baseoverview/internal/logic/baseOverview"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/baseoverview/internal/types"
|
||||||
|
"github.com/zeromicro/go-zero/rest/httpx"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetBaseOverviewHandler(cfg *config.Config) http.HandlerFunc {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var req types.GetBaseOverviewReq
|
||||||
|
if err := httpx.Parse(r, &req); err != nil {
|
||||||
|
httpx.ErrorCtx(r.Context(), w, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
l := baseOverview.NewGetBaseOverviewLogic(r.Context(), cfg)
|
||||||
|
resp, err := l.GetBaseOverview(&req)
|
||||||
|
if err != nil {
|
||||||
|
httpx.ErrorCtx(r.Context(), w, err)
|
||||||
|
} else {
|
||||||
|
httpx.OkJsonCtx(r.Context(), w, resp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
// Code scaffolded by goctl. Safe to edit.
|
||||||
|
// goctl 1.9.2
|
||||||
|
|
||||||
|
package baseOverview
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/config"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/baseoverview/internal/logic/baseOverview"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/baseoverview/internal/types"
|
||||||
|
"github.com/zeromicro/go-zero/rest/httpx"
|
||||||
|
)
|
||||||
|
|
||||||
|
func UpdateBaseOverviewPartialHandler(cfg *config.Config) http.HandlerFunc {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var req types.UpdateBaseOverviewPartialReq
|
||||||
|
if err := httpx.Parse(r, &req); err != nil {
|
||||||
|
httpx.ErrorCtx(r.Context(), w, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
l := baseOverview.NewUpdateBaseOverviewPartialLogic(r.Context(), cfg)
|
||||||
|
resp, err := l.UpdateBaseOverviewPartial(&req)
|
||||||
|
if err != nil {
|
||||||
|
httpx.ErrorCtx(r.Context(), w, err)
|
||||||
|
} else {
|
||||||
|
httpx.OkJsonCtx(r.Context(), w, resp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
// Code scaffolded by goctl. Safe to edit.
|
||||||
|
// goctl 1.9.2
|
||||||
|
|
||||||
|
package baseOverview
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/config"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/baseoverview/internal/types"
|
||||||
|
|
||||||
|
"github.com/zeromicro/go-zero/core/logx"
|
||||||
|
)
|
||||||
|
|
||||||
|
type GetBaseOverviewLogic struct {
|
||||||
|
logx.Logger
|
||||||
|
ctx context.Context
|
||||||
|
cfg *config.Config
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewGetBaseOverviewLogic(ctx context.Context, cfg *config.Config) *GetBaseOverviewLogic {
|
||||||
|
return &GetBaseOverviewLogic{
|
||||||
|
Logger: logx.WithContext(ctx),
|
||||||
|
ctx: ctx,
|
||||||
|
cfg: cfg,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *GetBaseOverviewLogic) GetBaseOverview(req *types.GetBaseOverviewReq) (resp *types.GetBaseOverviewResp, err error) {
|
||||||
|
// todo: add your logic here and delete this line
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
// Code scaffolded by goctl. Safe to edit.
|
||||||
|
// goctl 1.9.2
|
||||||
|
|
||||||
|
package baseOverview
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/config"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/baseoverview/internal/types"
|
||||||
|
|
||||||
|
"github.com/zeromicro/go-zero/core/logx"
|
||||||
|
)
|
||||||
|
|
||||||
|
type UpdateBaseOverviewPartialLogic struct {
|
||||||
|
logx.Logger
|
||||||
|
ctx context.Context
|
||||||
|
cfg *config.Config
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewUpdateBaseOverviewPartialLogic(ctx context.Context, cfg *config.Config) *UpdateBaseOverviewPartialLogic {
|
||||||
|
return &UpdateBaseOverviewPartialLogic{
|
||||||
|
Logger: logx.WithContext(ctx),
|
||||||
|
ctx: ctx,
|
||||||
|
cfg: cfg,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *UpdateBaseOverviewPartialLogic) UpdateBaseOverviewPartial(req *types.UpdateBaseOverviewPartialReq) (resp *types.UpdateBaseOverviewPartialResp, err error) {
|
||||||
|
// todo: add your logic here and delete this line
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package model
|
||||||
|
|
||||||
|
import "github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||||
|
|
||||||
|
var _ BaseoverviewModel = (*customBaseoverviewModel)(nil)
|
||||||
|
|
||||||
|
type (
|
||||||
|
// BaseoverviewModel is an interface to be customized, add more methods here,
|
||||||
|
// and implement the added methods in customBaseoverviewModel.
|
||||||
|
BaseoverviewModel interface {
|
||||||
|
baseoverviewModel
|
||||||
|
withSession(session sqlx.Session) BaseoverviewModel
|
||||||
|
}
|
||||||
|
|
||||||
|
customBaseoverviewModel struct {
|
||||||
|
*defaultBaseoverviewModel
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// NewBaseoverviewModel returns a model for the database table.
|
||||||
|
func NewBaseoverviewModel(conn sqlx.SqlConn) BaseoverviewModel {
|
||||||
|
return &customBaseoverviewModel{
|
||||||
|
defaultBaseoverviewModel: newBaseoverviewModel(conn),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *customBaseoverviewModel) withSession(session sqlx.Session) BaseoverviewModel {
|
||||||
|
return NewBaseoverviewModel(sqlx.NewSqlConnFromSession(session))
|
||||||
|
}
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
// 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 (
|
||||||
|
baseoverviewFieldNames = builder.RawFieldNames(&Baseoverview{})
|
||||||
|
baseoverviewRows = strings.Join(baseoverviewFieldNames, ",")
|
||||||
|
baseoverviewRowsExpectAutoSet = strings.Join(stringx.Remove(baseoverviewFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",")
|
||||||
|
baseoverviewRowsWithPlaceHolder = strings.Join(stringx.Remove(baseoverviewFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?"
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
baseoverviewModel interface {
|
||||||
|
Insert(ctx context.Context, data *Baseoverview) (sql.Result, error)
|
||||||
|
FindOne(ctx context.Context, id int64) (*Baseoverview, error)
|
||||||
|
Update(ctx context.Context, data *Baseoverview) error
|
||||||
|
Delete(ctx context.Context, id int64) error
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultBaseoverviewModel struct {
|
||||||
|
conn sqlx.SqlConn
|
||||||
|
table string
|
||||||
|
}
|
||||||
|
|
||||||
|
Baseoverview struct {
|
||||||
|
Id int64 `db:"id"`
|
||||||
|
Introduction sql.NullString `db:"introduction"`
|
||||||
|
Regulations sql.NullString `db:"regulations"`
|
||||||
|
Address sql.NullString `db:"address"`
|
||||||
|
Phone sql.NullString `db:"phone"`
|
||||||
|
Email sql.NullString `db:"email"`
|
||||||
|
Website sql.NullString `db:"website"`
|
||||||
|
Director sql.NullString `db:"director"`
|
||||||
|
DeputyDirector sql.NullString `db:"deputy_director"`
|
||||||
|
Researchers sql.NullString `db:"researchers"`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func newBaseoverviewModel(conn sqlx.SqlConn) *defaultBaseoverviewModel {
|
||||||
|
return &defaultBaseoverviewModel{
|
||||||
|
conn: conn,
|
||||||
|
table: "`baseoverview`",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *defaultBaseoverviewModel) 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 *defaultBaseoverviewModel) FindOne(ctx context.Context, id int64) (*Baseoverview, error) {
|
||||||
|
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", baseoverviewRows, m.table)
|
||||||
|
var resp Baseoverview
|
||||||
|
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 *defaultBaseoverviewModel) Insert(ctx context.Context, data *Baseoverview) (sql.Result, error) {
|
||||||
|
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, baseoverviewRowsExpectAutoSet)
|
||||||
|
ret, err := m.conn.ExecCtx(ctx, query, data.Introduction, data.Regulations, data.Address, data.Phone, data.Email, data.Website, data.Director, data.DeputyDirector, data.Researchers)
|
||||||
|
return ret, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *defaultBaseoverviewModel) Update(ctx context.Context, data *Baseoverview) error {
|
||||||
|
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, baseoverviewRowsWithPlaceHolder)
|
||||||
|
_, err := m.conn.ExecCtx(ctx, query, data.Introduction, data.Regulations, data.Address, data.Phone, data.Email, data.Website, data.Director, data.DeputyDirector, data.Researchers, data.Id)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *defaultBaseoverviewModel) tableName() string {
|
||||||
|
return m.table
|
||||||
|
}
|
||||||
5
server/internal/baseoverview/internal/model/vars.go
Normal file
5
server/internal/baseoverview/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
|
||||||
43
server/internal/baseoverview/internal/types/types.go
Normal file
43
server/internal/baseoverview/internal/types/types.go
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
// Code generated by goctl. DO NOT EDIT.
|
||||||
|
// goctl 1.9.2
|
||||||
|
|
||||||
|
package types
|
||||||
|
|
||||||
|
type BaseOverview struct {
|
||||||
|
Id int64 `json:"id"`
|
||||||
|
Introduction string `json:"introduction"` // 基地简介
|
||||||
|
Regulations string `json:"regulations"` // 规章制度
|
||||||
|
Address string `json:"address"` // 联系地址
|
||||||
|
Phone string `json:"phone"` // 联系电话
|
||||||
|
Email string `json:"email"` // 联系邮箱
|
||||||
|
Website string `json:"website"` // 官方网站
|
||||||
|
Director string `json:"director"` // 主任姓名
|
||||||
|
DeputyDirector string `json:"deputy_director"` // 副主任姓名
|
||||||
|
Researchers string `json:"researchers"` // 研究人员(逗号分隔)
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetBaseOverviewReq struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetBaseOverviewResp struct {
|
||||||
|
Data BaseOverview `json:"data"` // 基地概况详情
|
||||||
|
Success bool `json:"success"` // 操作是否成功
|
||||||
|
}
|
||||||
|
|
||||||
|
type UpdateBaseOverviewPartialReq struct {
|
||||||
|
Id int64 `json:"id"`
|
||||||
|
Introduction string `json:"introduction,optional"` // 可选更新
|
||||||
|
Regulations string `json:"regulations,optional"` // 可选更新
|
||||||
|
Address string `json:"address,optional"` // 可选更新
|
||||||
|
Phone string `json:"phone,optional"` // 可选更新
|
||||||
|
Email string `json:"email,optional"` // 可选更新
|
||||||
|
Website string `json:"website,optional"` // 可选更新
|
||||||
|
Director string `json:"director,optional"` // 可选更新
|
||||||
|
DeputyDirector string `json:"deputy_director,optional"` // 可选更新
|
||||||
|
Researchers string `json:"researchers,optional"` // 可选更新
|
||||||
|
}
|
||||||
|
|
||||||
|
type UpdateBaseOverviewPartialResp struct {
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Msg string `json:"msg,omitempty"`
|
||||||
|
}
|
||||||
13
server/sql/baseoverview.sql
Normal file
13
server/sql/baseoverview.sql
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
CREATE TABLE baseoverview (
|
||||||
|
id INT NOT NULL AUTO_INCREMENT,
|
||||||
|
introduction longtext,
|
||||||
|
regulations longtext,
|
||||||
|
address varchar(255),
|
||||||
|
phone varchar(20),
|
||||||
|
email varchar(100),
|
||||||
|
website varchar(100),
|
||||||
|
director varchar(255),
|
||||||
|
deputy_director varchar(255),
|
||||||
|
researchers varchar(255),
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
);
|
||||||
Reference in New Issue
Block a user