LoginSignup
15
1

More than 1 year has passed since last update.

迅速開発GoAdminでマスタ管理

Last updated at Posted at 2022-12-14

はじめに

これは 株式会社 RetailAI X Advent Calendar 2022 の 15 日目の記事です。

昨日は @Mikey さんの記事でした。NFTはなぜ難しいのだろう?
本日は、『迅速開発GoAdminでマスタ管理』について書いています。

この記事の目的

go-adminの使い方法をまとめます:

サンプルコード:https://github.com/GoAdminGroup/example

GoAdminのコマンドラインツールをインストールします。



GO111MODULE=on GOPROXY=https://goproxy.cn go install github.com/GoAdminGroup/go-admin/adm

インストールした後、versionを確認できます。

> adm -V
GoAdmin CLI v1.2.7

GoAdminに必要なsqlファイルをデータベースに導入します。

image.png

データモデルファイルを生成

プロジェックトしたに以下のコメンドを実行する:

> adm generate

image.png
image.png
image.png
image.png
image.png
image.png

以下のファイルを作成しました

image.png

*注意、自動作成したのコードでGetInfoのHideFilterArea()を使っています。これは削除が必要です。削除しない場合、エラーが発生します。

正しいのは

info := stores.GetInfo()

自動作成したのコード:
image.png

main.goを書きます:

package main

import (
	"context"
	"io/ioutil"
	"log"
	"net/http"
	"os"
	"os/signal"
	"time"

	_ "github.com/GoAdminGroup/go-admin/adapter/gin"                 // web framework adapter
	_ "github.com/GoAdminGroup/go-admin/modules/db/drivers/postgres" // sql driver
	_ "github.com/GoAdminGroup/themes/adminlte"                      // ui theme

	"github.com/GoAdminGroup/example/pages"
	"github.com/GoAdminGroup/example/tables"
	"github.com/GoAdminGroup/go-admin/engine"
	"github.com/GoAdminGroup/go-admin/template"
	"github.com/GoAdminGroup/go-admin/template/chartjs"
	"github.com/gin-gonic/gin"
)

func main() {
	startServer()
}

func startServer() {
	gin.SetMode(gin.ReleaseMode)
	gin.DefaultWriter = ioutil.Discard

	r := gin.Default()

	eng := engine.Default()

	template.AddComp(chartjs.NewChart())

	if err := eng.AddConfigFromJSON("./config.json").
		AddGenerators(tables.Generators).
		AddGenerator("external", tables.GetExternalTable).
		Use(r); err != nil {
		panic(err)
	}

	r.Static("/uploads", "./uploads")

	eng.HTML("GET", "/admin", pages.DashboardPage)
	eng.HTML("GET", "/admin/form", pages.GetFormContent)
	eng.HTML("GET", "/admin/table", pages.GetTableContent)
	eng.HTMLFile("GET", "/admin/hello", "./html/hello.tmpl", map[string]interface{}{
		"msg": "Hello world",
	})

	srv := &http.Server{
		Addr:    ":9033",
		Handler: r,
	}

	go func() {
		if err := srv.ListenAndServe(); err != nil {
			log.Printf("listen: %s\n", err)
		}
	}()

	quit := make(chan os.Signal, 1)
	signal.Notify(quit, os.Interrupt)
	<-quit

	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()
	if err := srv.Shutdown(ctx); err != nil {
		log.Fatal("Server Shutdown:", err)
	}
	log.Println("Server exiting")
	
}

実行してみます:

> go run .

http://localhost:9033/admin/login
image.png

パスワード:admin

最後メニュー設定します:

image.png
画面を刷新して、メニューをクリックして、画面を入ります。:v:
image.png

追記機能:

1.指定列で検索

FieldFilterable()

例:店舗番号で検索

info.AddField("店舗番号", "store_cd", db.Int4).
    FieldFilterable()

2.名前で曖昧検索

FieldFilterable(types.FilterType{Operator: types.FilterOperatorLike})

例:店舗名で曖昧検索

info.AddField("商品名", "name", db.Varchar).
		FieldFilterable(types.FilterType{Operator: types.FilterOperatorLike})

3.登録日、更新日はDefault現在の日時

formList.AddField("登録日時", "created_at", db.Timestamptz, form.Datetime).
    FieldNotAllowAdd().FieldDisableWhenUpdate()

formList.AddField("更新日時", "updated_at", db.Timestamptz, form.Text).
    FieldNow().FieldNotAllowAdd().FieldHideWhenUpdate()

4.必須項目

FieldMust()

例:データを新規追加/更新する時、店舗名は必須項目場合

formList.AddField("店舗名", "name", db.Varchar, form.Text).FieldMust()

5.更新できない項目

FieldNotAllowEdit()

例:
店舗情報を更新するとき、店舗番号を更新できないように

formList.AddField("店舗番号", "store_cd", db.Int4, form.Text).FieldNotAllowEdit()

6.ボタン追加

info.AddButton("納品書出力", icon.Save, action.PopUp("/admin/delivery", "", func(ctx *context.Context) (success bool, msg string, data interface{}) {
		XXXXXXロジックXXXXXX
		return true, "", ""
	}), "yellow")

ドキュメント資料:

終わりに

最後まで読んでいただき、ありがとうございました!
次回は@takudooonさんの記事です。
お楽しみください!

15
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
1