Spring Boot + Vue 構築の武漢観光情報サイト(フロントエンド・バックエンド分離版)

本システムは、武漢の観光情報をテーマにしたオリジナルプロジェクトです。フロントエンドとバックエンドを分離したアーキテクチャを採用し、2023年に開発されました。コードは整然としており、構造が明確なため、観光情報サイトや旅行プランサイト、あるいはフロントエンド・バックエンド分離型の観光システムなどのテーマに適しています。バックエンドには Spring Boot と MyBatis、フロントエンドには Vue.js と Element UI を使用しています。

主な機能

  • 旅行プラン情報の公開:管理者がプランを登録・更新し、ユーザーは地域別に旅行プランを閲覧できます。
  • ホテル予約:ユーザーは空室状況を確認し、希望の部屋を予約できます。
  • 観光スポット詳細:各観光地やスポットの詳細情報を表示。管理者はスポット情報の追加・変更・削除を管理画面から行えます。
  • 画像管理:観光地の写真をタイプ別に分類して表示。管理者は画像のアップロード・変更・削除が可能です。
  • 交通情報検索:目的地への航空便と最適なドライブルートを検索できます。
  • ユーザーからのフィードバック:ユーザーは管理者にメッセージを送信でき、管理者は管理画面で返信・管理を行います。

使用技術

  • バックエンド:Spring Boot, MyBatis
  • フロントエンド:Vue.js, Element UI, JavaScript, CSS
  • 開発ツール:IntelliJ IDEA / VSCode
  • データベース:MySQL 5.7
  • JDK:1.8

画面イメージ(一部)

トップページ:観光スポットや旅行プランを表示します。

旅行プラン一覧

プラン詳細

スポットおすすめ

ルート検索

ログインページ

ユーザー管理

スポットおすすめ管理

ルート管理

主要コード例

ホテル情報のCRUD操作(バックエンドコントローラ)

/**
 * ページネーション検索
 */
@PostMapping("selectAll")
public PageInfo<Hotel> selectAll(@RequestBody Map<String, String> params) {
    PageHelper.startPage(
        Integer.parseInt(params.get("currentPage")),
        Integer.parseInt(params.get("pageSize"))
    );
    List<Hotel> list = hotelService.queryAllByLimit(params);
    return new PageInfo<Hotel>(list);
}

/**
 * 更新処理
 */
@RequestMapping("edit")
public String edit(@RequestBody Hotel hotel) {
    try {
        hotelService.update(hotel);
        return "200";
    } catch (Exception e) {
        e.printStackTrace();
        return "201";
    }
}

/**
 * 新規登録
 */
@RequestMapping("add")
public String add(@RequestBody Hotel hotel) {
    try {
        hotel.setCreateTime(new Date());
        hotelService.insert(hotel);
        return "200";
    } catch (Exception e) {
        e.printStackTrace();
        return "201";
    }
}

/**
 * IDによる1件取得
 */
@GetMapping("selectOne")
public Hotel selectOne(Integer id) {
    return hotelService.queryById(id);
}

/**
 * IDによる削除
 */
@GetMapping("deleteById")
public String deleteById(Integer id) {
    try {
        hotelService.deleteById(id);
        return "200";
    } catch (Exception e) {
        e.printStackTrace();
        return "201";
    }
}

/**
 * Excelエクスポート
 */
@RequestMapping("/downExcel")
public List<Hotel> downExcel() {
    return hotelService.queryCondition(new Hotel());
}

画像アップロード処理

@RequestMapping("/imgUpload")
public Map<String, Object> yunUploadFile(@RequestParam("file") MultipartFile file) {
    Map<String, Object> result = new HashMap<>();
    try {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String timestamp = sdf.format(new Date());
        // 拡張子を取得
        String ext = FilenameUtils.getExtension(file.getOriginalFilename());
        // 絶対パスで保存
        file.transferTo(new File(uploadDir + "/" + timestamp + "." + ext));
        result.put("imgUrl", "/api/upload/" + timestamp + "." + ext);
        result.put("url", "http://127.0.0.1:8080/api/upload/" + timestamp + "." + ext);
        result.put("message", "画像のアップロードに成功しました");
        result.put("result", "true");
    } catch (IOException e) {
        e.printStackTrace();
        result.put("result", "false");
        result.put("message", "画像のアップロードに失敗しました。再試行してください");
    }
    return result;
}

タグ: Spring Boot MyBatis vue.js Element UI MySQL

5月28日 08:31 投稿