Giter Site home page Giter Site logo

equipment-management-system's Introduction

Equipment-management-system

Version develop Version develop Github All Releases Version develop Styleci status Travis-ci

Table of Contents

Requirement

  • PHP >= 7.1.3
    • OpenSSL PHP Extension
    • PDO PHP Extension
    • Mbstring PHP Extension
    • Tokenizer PHP Extension
    • XML PHP Extension
    • ZipArchive PHP Extension
    • ext-curl PHP Extension
  • npm >= 3.10.0
  • Yarn

Installation

以下為 開發環境 安裝指南,欲部署到正式機,請至 Deployment

  1. 從 Github Clone 到本機。
git clone [email protected]:s9801077/Equipment-management-system.git
cd Equipment-management-system
  1. 複製 .env.example.env
cp .env.example .env
  1. .env 設定資料庫登入資訊,請將以下設定依照開發環境修改。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
  1. 安裝 PHP 與 Node 相依套件。
composer install
yarn install
  1. 產生 App Key。
php artisan key:generate
  1. 產生資料表與假資料,如果不想產生假資料,請移掉 --seed 參數。
php artisan migrate --seed

可用以下指令建立操作類別(無建立假資料)

php artisan db:seed --class=SystemLogTypeTableSeeder
  1. 編譯前端資源與執行內建的開發用伺服器
yarn run watch
php artisan serve

到這裡就完成安裝。

Font-End Build Command

yarn run dev     # run dev mode
yarn run watch   # run watch mode
yarn run prod    # run deploy

Usage

使用瀏覽器開啟 http://127.0.0.1:8000 就會看到登入畫面,預設的帳號密碼如下:

Account: [email protected]
Password: admin12345

Deployment

部署流程跟 Installation 差不多,只有以下幾點要注意。

  1. 請將網頁伺服器虛擬主機跟目錄指向專案跟目錄中的 public

  2. 網頁伺服器務必設定好 Rewrite

  3. 如果不要有假資料,請於執行 php artisan migrate 不要加上 --seed

  4. 設定資料夾權限

chmod 777 -R storage bootstrap/cache
  1. 前端資源編譯指令改使用這個
yarn run prod

Deploy with Envoy

詳細使用方式可以參考 Laravel 官網說明

設定

請先至 .env 進行環境參數設定

Slack_HOOK_URL // 支援 slack 通知,可以在 deploy 完成傳送 slack web hook
SLACK_CHANNEL // 設定通知的 slack channel
SERVER_NAME // 設定要 deploy 的 server 格式可以是 [email protected] or xxx.xxx.com
  • Deploy production: envoy run production-cms --branch=master
  • Deploy testing: envoy run testing-cms --branch=develop

Note:

  • 記得設定排程。
  • 記得執行 Queue 的處理指令。

Configuration

設定排程

請將以下設定修改路徑後新增至 Cron

*/1 * 	* * *   root    php /home/ems/test/artisan schedule:run >> /dev/null 2>&1

設定 Queue

  1. .env 中的 QUEUE_DRIVER 設定修改為 database

  2. 執行 Queue 指令 如果你是本機要用,可以直接執行 php artisan queue:listen 如果是正式機要用, 可以使用以下指令:

screen -S ems php artisan queue:listen

screen 是一個管理背景執行的套件。

Setting Telegram Bot

  1. 在 .env 設定 TELEGRAM_TOKENBOT_WEB_HOOK_HASH (BOT_WEB_HOOK_HASH 請自行設定隨機字串,此字串將用於給 Telegram 呼叫的 web hook)
  2. 執行 php artisan ems:set-telegram-hook 將 web hook 設定到 Telegram

Telegram Bot 指令清單

標示 [private] 的為僅允許在個人頻道使用。

  • saveId: 儲存頻道 ID
  • whoAmI: 顯示自己的 ID [private]

詳細 Telegram bot 說明可洽 WIKI

Contributing

請遵照 Git Flow 流程,從 develop 創建一個分支、提交變更並開 Pull Request。

PHP 注意事項

請遵守 PSR-2 的規範,以統一專案內程式碼的風格,雖然我們有設定 StyleCI 修正錯誤的格式,但請將它當作最後防線。

Vue 注意事項

  1. 任何 .vue 的組件檔案名稱大寫駝峰式。
  2. 獨立一個頁面一個資料夾且名稱為小寫駝峰,每個獨立頁面的根組件與其上層資料夾同名。
  3. 路由名稱與頁面資料夾名稱相同。
  4. 為於 components 資料夾內的組件會自動註冊,各別頁面所切出來的請自行於各別的根組件註冊。

使用 Makefile 建立整個專案 (使用 docker)

  • 建立環境:
make run-dev
  • watch mode:
make run-watch
  • build dev:
make run-build-dev
  • install js packages:
make run-yarn-install

or just run yarn install

  • 建立資料庫 table
make run-migrate
  • 建立假資料
make run-seed
  • 清除 docker
make stop-dev

使用 Docker 建立整個專案

說明

  • docker-compose 用於建立整個專案的前後端環境、資料庫、網頁伺服器

  • Dockerfile 用於後端 PHP 部署

  • url: http:localhost:81

步驟

  1. 安裝 php composer 相關套件
composer install
  1. 啟用 docker-compose
docker-compose up -d --build
  1. 建立資料庫 table
docker-compose exec php sh -c "php artisan migrate"
  1. 建立假資料
docker-compose exec php sh -c "php artisan db:seed"
  1. 結束 docker-compose
docker-compose down
  1. 完整清除 docker
docker-compose down -v

前端:

  • install packages:
docker-compose exec node sh -c "yarn install"

or just run yarn install

  • watch mode:
docker-compose exec node sh -c "yarn run watch"
  • build dev:
docker-compose exec node sh -c "yarn run dev"

License

The MIT License (MIT). Please see License File for more information.

equipment-management-system's People

Contributors

a8264347 avatar chi-chi-chi-chita avatar dependabot[bot] avatar fwcloud916 avatar ggaa-dev avatar hashman avatar jedy05097952 avatar keith222 avatar puckwang avatar tzuhui avatar unciax avatar xwang0929 avatar yuuuna avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

equipment-management-system's Issues

調整贊助商 / 講者前台 form 頁面錯誤訊息不會消失

#126 圖的呈現可以看到錯誤訊息,經測試發現這個錯誤訊息不會消失,另外是成功上傳的訊息也不會消失,這樣會讓使用者不確定是否新的 request 已經發送出去或是是否有正常的上傳新的資料,這邊請前端調整一下

[贊助商前台] KKBOX Feedback

今天我們家姑娘在使用的時候產生一些疑惑,先講一下我們的使用情境。
我們從贊助組的來信中得到一份附件叫做「素材規格書」、CMS 的帳號密碼,登入後面對以下問題:

  1. CMS 上的欄位名稱與素材規格書中不符
  2. 因為系統上的欄位沒有素材規格,需要在規格書上一個一個找、一個一個比對
  3. 有些欄位會需要上傳多份檔案,但是系統只能上傳一份,例如:產品或服務照片
  4. 如果系統上的欄位在規格書上找不到,會不知道用途,就無法確定應該要上傳什麼內容,例如:產品或服務照片(這是在粉專貼文上會用到嗎?)

System log 目前系統操作需新增紀錄的地方統計

每項 Log 的訊息都要放入該次操作相關的資料,例如編輯使用者要記錄編輯了哪位;刷條碼出借要記錄條碼、物品名稱與 ID,至少讓人可以分辨。

操作種類及需新增 Log 的操作

  1. 工人管理
    • 新增
    • 編輯
    • 刪除
  2. 群組管理
    • 新增
    • 編輯
    • 刪除
  3. 器材管理
    • 新增
    • 編輯
    • 刪除
  4. 器材條碼管理
    • 編輯
  5. 募集物資管理
    • 新增
    • 編輯
    • 刪除
    • 已收到操作
    • 已歸還操作
  6. 借還操作
    • 出借
    • 歸還
    • 歸還 (於 批量管理 的操作)
  7. 訊息管理
    • 發送即時訊息
    • 發送排程訊息
  8. 頻道管理
    • 新增
    • 編輯
    • 刪除
  9. 學生驗票 (這部分請 @hashman 來列)
  10. 使用者管理
    • 新增
    • 編輯
    • 刪除
    • 修改密碼
  11. 匯入匯出
    • 工人資料匯入
    • 工人資料匯出
    • 器材資料匯入
    • 器材資料匯出

Telegram 發送功能功能擴充

公關組那邊希望在發送 Telegram 訊息的時候可以選擇「公告群組」進行發送,目前現況來說「公告群組」因為人數較少,所以還是會同時在「聊天群組」 Po 與「公告群組」一樣的貼文,但因為目前 Telegram 發送訊息功能只能發送到「聊天群組」所以他們會再將同樣的 Po 文在 Telegram APP 另外 Po 到「公告群組」上,需求如下

  1. 讓 Telegram 發送訊息功能可以之原野發送到「公告群組」
  2. 目前希望大家可以多多分享粉絲專業的貼文,所以他們希望在發送訊息到「聊天群組」的時候也能夠發送 slack 訊息到 #general 這邊

這邊再麻煩 EMS Team 幫忙

[贊助商前後台] 新增檔案上傳可填寫雲端硬碟連結

前台於各項檔案上傳欄位後方加入選填連結欄位
提示文字:或提供雲端硬碟檔案連結 (適用檔案超過20M或2個以上檔案)
呈現範例
https://i.imgur.com/CHNQSMZ.jpg
目前有檔案上傳的題目:
◆企業 Logo
◆社群粉絲貼文搭配圖片
◆場間投影片廣告
◆電子看板
◆ICCK 大門口兩側廣告柱
◆報到處全版廣告空間 ( Truss 架廣告)
◆演講廳旗幟
◆主動線旗幟廣告
後台查看詳細頁,增加上述欄位文字輸入內容並可點選連結

增加欄位副標:
社群粉絲貼文搭配圖片 | 可為產品或服務照片(多檔案請使用雲端連結,最多不超過4張)

Telegram Bot 功能增強計畫

起因

目前 EMS 中 Telegram Bot 的僅用於發送訊息,並無其他功用。

目標

首先會將使用的 Bot 框架改為 BotMan且保留原功能,並嘗試新增一下新功能:

  • 發送 Attachments (圖片、文件、貼圖)
  • 客製化互動功能 (問議程 ...etc)

先這樣,想到什麼功能再補上

Issue List

  • 改用 BotMan 並保持現有功能 #46
  • 問題修復 #38
  • 新增讓 Bot 離開 Chat 的命令 #52

依序往下做,有新的再補上

實作學生驗證功能前端頁面

目前前端頁面大致上已經刻好了,可以直接到 kktix 上面下載去年的學生訂單來進行使用測試,前端需要幾點幫忙

需求

  1. 點選「 Upload 」按鈕透過 api/student/upload 進行載入動作,載入前端
  2. 點選驗證通過會呼叫 post api/student傳入 row 的資料進行儲存 or 更新
  3. 購票日期、姓名、 Email 、學校名稱、備註欄位皆可以進行更新
  4. 增加刪除按鈕將這個存在的 record 移除資料庫

這個可以晚一點,我目前只有開出刪除的 api 還沒有將資料上傳的時候與資料庫進行比對

  1. 圖片支援可以滑過放大 or 點選另開新頁
  2. PDF 看看有沒有 library 可以支援直接 Preview 如果沒有就一樣另開新頁就好

資料庫欄位說明

  • id int auto_increment
  • verify_year smallint 驗證年, like 2017, 2018 等
  • verify_user_id int 驗證使用者,對應到 users table 的 id
  • order_id int kktix 提供的訂單編號
  • register_no int kktix 提供的報名序號
  • purchase_date varchar 購票日期
  • name varchar 姓名
  • email varchar
  • school_name text 學校名稱
  • file_link text kktix 提供的檔案網址
  • comment text 審核者備註

Telegram 發送訊息後如果出錯不會顯示任何錯誤

BotManService 中, $this->botman->say($message, $chatID, TelegramDriver::class); 這段在執行時如果遇到 api 回傳錯誤,並不會出現任何訊息,須自行判斷。

附上他回傳的物件

Symfony\Component\HttpFoundation\Response {#3157
  +headers: Symfony\Component\HttpFoundation\ResponseHeaderBag {#3154
    #computedCacheControl: array:2 [
      "no-cache" => true
      "private" => true
    ]
    #cookies: []
    #headerNames: array:2 [
      "cache-control" => "Cache-Control"
      "date" => "Date"
    ]
    #headers: array:2 [
      "cache-control" => array:1 [
        0 => "no-cache, private"
      ]
      "date" => array:1 [
        0 => "Wed, 28 Aug 2019 21:50:57 GMT"
      ]
    ]
    #cacheControl: []
  }
  #content: "{"ok":true,"result":{"message_id":127,"from":{"id":658999347,"is_bot":true,"first_name":"PuckBot","username":"puckwang_bot"},"chat":{"id":-262574024,"title":"Puck Bot Group Test","type":"group","all_members_are_administrators":true},"date":1567000257,"text":"Test"}}"
  #version: "1.0"
  #statusCode: 200
  #statusText: "OK"
  #charset: null
}

[贊助商前台]增加圖檔支援度

  • ICCK 大門口兩側廣告柱
  • 報到處全版廣告空間 ( Truss 架廣告)
  • 演講廳旗幟
  • 主動線旗幟廣告
    上述這幾個欄位要支援.ai檔與.psd
    感謝

User 新增 Role 與 ACL

預計將使用 laravel-permission 來去完成這個功能。

前端相關

新增 Role 與擴充 User 頁面。

在 Role 頁面中,可讓使用者新增新的 Role,並可編輯所擁有的權限。權限編輯方式為用 CheckBox 列出全部權限讓使用者勾選。

在 User 頁面中,新增設定 User Role 的地方,支援一個 User 可擁有多個 Role。

後端相關

DB

直接採用 laravel-permission 所設計的 Table,但於 permission 中新增 description 用於說明該權限用處使用。

權限命名方式

格式:"Controller Name-Method Name"

範例:UserController@store = "user-store"

涵蓋範圍

所有 Controller 內的所有 public 方法都要有相對應的權限。

確認權限位置

在此有兩中方法實作,都先列出來,再來討論哪種比較適合。

方法一:於 Request 驗證

class IndexRequest
{
    public function authorize()
    {
        $user = Auth::user();

        return $user->hasPermissionTo('pemissionName');
    }
}

方法二:於 Middleware 驗證

簡單來說就相下面這樣。

class RoleController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    function __construct()
    {
         $this->middleware('permission:role-list');
         $this->middleware('permission:role-create', ['only' => ['create','store']]);
         $this->middleware('permission:role-edit', ['only' => ['edit','update']]);
         $this->middleware('permission:role-delete', ['only' => ['destroy']]);
    }
}

我目前是傾向用『方法二』,因為『方法一』手續比較多,檔案也會變多。

UnAuthorized Handler

新增於 app/Exceptions/Handler.php

public function render($request, Exception $exception)
{
    if ($exception instanceof AuthorizationException) {
        return $this->unauthorized($request, $exception);
    }

    return parent::render($request, $exception);
}

private function unauthorized($request, Exception $exception)
{
    if ($request->expectsJson()) {
        return response()->json(['error' => $exception->getMessage()], 403);
    }

    flash()->warning($exception->getMessage());
    return redirect('/login');
}

再麻煩 @hashman 看看有沒有問題或需要補充的地方。

贊助商 部分欄位改為非必填

1.Logo
2.產品或服務照片
3.場間投影片
4.電子看板
上述可能會分次編修無法一次湊齊,
故改成非必填選項(前端要同步把*移除)

新增 System log 功能

目的

  1. 紀錄使用者於 EMS 上所有操作,方便查詢用 e.g. "編輯使用者 Puck 的資料"。

Issue list

  1. DB規劃 #39
  2. 查詢介面相關 #40
  3. 目前系統操作需新增紀錄的地方統計 #41

進入 Speaker form 如果找不到 access_key 會噴 error

這邊有兩個問題

  1. 如果 speaker 不存在,就不會有 setHidden 的 function 可以使用,所以就會噴 error 出來
  2. 需要針對 url 錯誤給個統一的回傳方式,像是 401 或是直接回到首頁之類的

https://github.com/MOPCON/Equipment-management-system/blob/develop/app/Http/Controllers/SpeakerController.php#L235

https://github.com/MOPCON/Equipment-management-system/blob/develop/app/Http/Controllers/SpeakerController.php#L249

[贊助商前台] Server error

截圖:http://prntscr.com/ow4ojf

表單:https://cms.mopcon.org/sponsor/form/d487b2b2-7bf1-4211-b431-14b978b4ac48
表單密碼:KAwrRfE9avxpHjnT8L2T

親測一下有可能是"公司簡介"或"產品及服務介紹"這個欄位
填入下述測試內容,會看到字數統計還在250字內,但送出會出現error訊息

"策略無限 致力於機器人理財平台及程式交易研究,以台指期 21 年超過 4 億筆 tick 大數據資料為基礎,架構策略開發回測系統,建立 Tick 級高速且精準的回測機制,並能界接 AI 決策訊號進行深度回測,使用多種 AI 演算法研發近兩百隻的智慧下單策略,並透過策略管理機制有效降低策略風暴比,並完善整體資金風險管理系統,希望打破一般大眾對期貨的印象,跳脫舊市場框架思維,充分運用人工智慧、大數據等科技,提升產品效能及使用者體驗,提供完善的機器人理財服務。"

(我也不確定是否字數導致,只是如果上述欄位隨便key個單字,表單倒可以正常送出。)

補文件計畫

目前是將所有說明文件都集中在 README.md ,考慮未來擴充,預計將提取至 /doc ,並補齊各項所需文件,讓 README.md 僅留下簡單的介紹就好。

[講者前/後台] 增加新表單狀態

後台除原本待確認/已確認/已下架等狀態外增加增加新狀態【議程組已確認】
(僅可由後台手動修改)
此狀態情況下,前台表單可進入但無法編輯,
進入時於上方顯示提醒
「您的資料已由Mopcon確認完畢,僅供檢視,若須修改請聯繫議程組工作人員。」
並移除下方驗證與送出按鈕。

System log 查詢介面相關

於 EMS 上新增一個頁面去顯示所有的 Log

顯示欄位

  • 操作類型
  • 使用者名稱
  • 操作內容
  • Device
  • IP
  • Browser
  • 操作時間

其他需求

  • 需分頁,每 25 筆一頁。
  • 預設依照時間排序。
  • 可使用下拉式選單選擇要顯示的『操作類型』的資料
  • 可依照『使用者名稱』、『操作內容』作模糊查詢。

調整贊助商 / 講者發送 Request 錯誤會看到的錯誤訊息

如 issue #126 上面看到的錯誤訊息,目前 Request 沒有設定 custom message 所以會將欄位所設定的 key name 直接回傳在前端上面,但是這個名稱對於使用者是沒有意義的也不直覺,這邊希望可以調整成顯示可讀的名稱方便更快速的判斷問題所在點

這個 issue Speaker 與 Sponsor 都需要調整,這個 issue 就麻煩 @FWcloud916@xwang0929 幫忙了

新增籌備期間器材借用申請表

新增一個公開的頁面,讓欲借器材的組員來填寫。

前台申請表單,欄位如下:

  • 組別: 列出 EMS 存在的組別供選擇
  • 借用人: 接續上一個欄位,提供該組成員供選擇
  • 借用器材清單: 列出所有可借用器材,讓使用者選取並填寫數量,須提供過濾功能。
  • 預計歸還日期: 填寫日期格式。

後台管理介面:

  • 新增 處理人、狀態、歸還日期欄位。
  • Admin 可以去管理申請。

System log DB規劃

screenshot 2019-05-06 下午4 20 35

目前規劃如下
https://dbdiagram.io/d/5ccfdba1f7c5bb70c72fe102

Table system_logs {
  id integer [pk]
  user_id integer [ref: > users.id]
  type_id integer [ref: > system_log_types.id]//操作類型 e.g.器材相關,工人相關這類的。
  content varchar //操作內容 
  ip varchar
  device varchar
  browser varchar
  created_at datetime
}

Table system_log_types {
  id integer [pk]
  name varchar
  created_at datetime
}

Table users { //現有的 User table
  id integer [primary key]
  name varchar
  email varchar
  "..." varchar
}

Telegram 訊息發送已知問題

  • 排程發訊息中,schedule 將訊息送入 Queue 後尚未改狀態,導致可能出現重複寄信。
  • 新增訊息的視窗,沒有輸入時間時無法發送。
  • .env telegram 設定未設定初始值,導致 composer install 會噴錯。

Telegram bot feature

Feature

  • 可於 EMS 上發送訊息,並可指定時間與頻道
  • 可在 EMS 上檢視訊息發送歷史紀錄

資料庫欄位

  • telegram_messages
    • 發言人 (integer)
    • 排程時間 (date)
    • 頻道 ID (integer)
    • 廣播名稱
    • 內容
    • 是否已發送(?)
  • telegram_channels
    • 頻道名稱
    • 頻道 id
      • 私訊 (Private) 為正數 (例如 109780439)
      • 頻道 (Channel) 為負數 (例如 -1001068773197) ,也可以用 @頻道名 (例如 @HiNetNotify)
      • 群組 (Group) 為負數 (例如 -248855446)
      • 超級群組 (Supergroup) 跟 Channel 完全相同 (聽說是從 channel 改來的功能)

移除未使用到的頁面

目前看到 resources/js/pages/form/Speaker/index.vue 好像是沒有用到的頁面,請幫我看看還有沒有其他頁面也是沒用到的,將它們列出來並移除。

感謝!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.