Bladeren bron

20220914 後台更新

LuluFJ.Ho 2 jaren geleden
bovenliggende
commit
ee067818e4

+ 28
- 3
app/Http/Controllers/Backend/DataManagement/SignupManagementController.php Bestand weergeven

@@ -45,17 +45,42 @@ class SignupManagementController extends Controller
45 45
         $searchValue = $param["search"]["value"];
46 46
         //客製化搜尋欄位
47 47
         $keyword = $param["columns"][1]["search"]["value"];
48
-
48
+        $createDateStart = $param["columns"][2]["search"]["value"];
49
+        $createDateFinal = $param["columns"][3]["search"]["value"];
50
+        
51
+        // \Log::info('createDateStart: '.$createDateStart);
52
+        // \Log::info('createDateFinal: '.$createDateFinal);
49 53
         // 驗證
50 54
         if ($keyword != filter_var($keyword, FILTER_SANITIZE_SPECIAL_CHARS)) $keyword = "___CANNOT_FIND_STRING___";
51 55
         if (!$this->checkParamSv->LenMToN($keyword, 0, 50)) $keyword = "___CANNOT_FIND_STRING___";
56
+        if ($createDateStart != filter_var($createDateStart, FILTER_SANITIZE_SPECIAL_CHARS)) $createDateStart = "___CANNOT_FIND_STRING___";
57
+        if (!$this->checkParamSv->LenMToN($createDateStart, 0, 50)) $createDateStart = "___CANNOT_FIND_STRING___";
58
+        if ($createDateFinal != filter_var($createDateFinal, FILTER_SANITIZE_SPECIAL_CHARS)) $createDateFinal = "___CANNOT_FIND_STRING___";
59
+        if (!$this->checkParamSv->LenMToN($createDateFinal, 0, 50)) $createDateFinal = "___CANNOT_FIND_STRING___";
60
+        
61
+        if ($createDateStart&&$createDateFinal&&$createDateStart>$createDateFinal) {
62
+            Session::flash('msg', '請填入正確起訖日!');
63
+            return redirect()->back();
64
+        }
65
+        if (!$createDateStart) {
66
+            $createDateStart = "2022-09-10 00:00:00";
67
+        } else {
68
+            $createDateStart = $createDateStart." 00:00:00";
69
+        }
70
+        
71
+        if (!$createDateFinal) {
72
+            $createDateFinal = date('Y-m-d H:i:s');
73
+        } else {
74
+            $createDateFinal = $createDateFinal." 23:59:59";
75
+        }
76
+        
52 77
         
53 78
         //資料庫
54 79
         $recordsTotal = 0;
55 80
         if ($keyword) {
56
-            $result=$this->signupManagementSv->getList($recordsTotal, $orderColumn, $orderDir, $start, $length, $searchValue, $this->safeEncrypt(($keyword), 'arm'));
81
+            $result=$this->signupManagementSv->getList($recordsTotal, $orderColumn, $orderDir, $start, $length, $searchValue, $this->safeEncrypt(($keyword), 'arm'), $createDateStart, $createDateFinal);
57 82
         } else {
58
-            $result=$this->signupManagementSv->getList($recordsTotal, $orderColumn, $orderDir, $start, $length, $searchValue, '');
83
+            $result=$this->signupManagementSv->getList($recordsTotal, $orderColumn, $orderDir, $start, $length, $searchValue, '', $createDateStart, $createDateFinal);
59 84
         }
60 85
         
61 86
         // 外部短網址系統串接

+ 62
- 127
app/Http/Controllers/Backend/DataManagement/TrackManagementController.php Bestand weergeven

@@ -22,12 +22,14 @@ class TrackManagementController extends Controller
22 22
         $this->checkParamSv=new CheckParamService();
23 23
         $this->trackManagementSv = new TrackManagementService();
24 24
     }
25
+
25 26
     public function index()
26 27
     {
27 28
         // 渲染
28 29
         return view('admin.DataManagement.TrackManagement');
29 30
 
30 31
     }
32
+
31 33
     public function grid()
32 34
     {
33 35
         // 取得參數
@@ -82,54 +84,16 @@ class TrackManagementController extends Controller
82 84
         return json_decode(json_encode($json), true);
83 85
     }
84 86
 
85
-    /**
86
-     * 新增訊息頁面
87
-     *   本端點非 API,直接到 view
88
-     * @return array:          返回渲染頁
89
-     */
90 87
     public function create()
91 88
     {
92
-        // 取得參數與驗證
93
-        // 服務層取得資料(以及實現各種業務上的邏輯)
94
-        
95
-        $tagUnassign = $this->tagManagementSv->getTagByReferral("", false);
96
-        //有一個referral 貼多個標的情況
97
-        $tagUnassign_uniques = array();
98
-        foreach ($tagUnassign as $c) {
99
-            $tagUnassign_uniques[$c["id"].'-'.$c["tagName"]] = $c; // Get unique country by code.
100
-        }
101
-        
102
-        $tagAssigned = $this->tagManagementSv->getTagByReferral("", true);
103
-        //有一個referral 貼多個標的情況
104
-        $tagAssigned_uniques = array();
105
-        foreach ($tagAssigned as $c) {
106
-            $tagAssigned_uniques[$c["id"].'-'.$c["tagName"]] = $c; // Get unique country by code.
107
-        }
108
-        $referralList = $this->referralSv->getReferral();
109
-        $referral=array();
110
-        foreach($referralList as $data)
111
-        {
112
-            array_push($referral,$data["referral"]);
113
-        }
89
+
114 90
         // 渲染
115
-        return view('admin.DataManagement.ReferralManagementEdit', [
116
-            'operdata'        => "",
117
-            'richmenuId'         => 0,
118
-            'richmenus'          => $this->richmenuManagementSv->getRichmenuList(),
119
-            'tagUnassign'        => $tagUnassign_uniques, 
120
-            'tagAssigned'        => $tagAssigned_uniques,
121
-            'existReferral'        => $referral,
91
+        return view('admin.DataManagement.TrackManagementEdit', [
92
+            'operdata'      => '',
93
+            'id'            => '',
122 94
         ]);
123 95
     }
124 96
 
125
-    /**
126
-     * 編輯訊息頁面
127
-     *   本端點非 API,依照變量取得資料後,渲染到 view
128
-     *
129
-     * @param integer $id :    訊息的序號
130
-     *
131
-     * @return array:          返回渲染頁
132
-     */
133 97
     public function edit($id)
134 98
     {
135 99
         // 取得參數與驗證
@@ -143,97 +107,68 @@ class TrackManagementController extends Controller
143 107
         ]);
144 108
     }
145 109
     
146
-    /**
147
-     * 新增或編輯標籤的端點
148
-     *   本端點非 API,依照參數新增或修改資料後,跳轉到既有的 view
149
-     *
150
-     * @param Request $request :  整包參數
151
-     *
152
-     * @return array:             返回跳轉渲染頁的資訊
153
-     */
154 110
     public function store(Request $request)
155 111
     {
156 112
         // 取得參數(由於是內部系統因此不做後端驗證)
157
-        \Log::info($request->all());
158
-        // return;
159
-        $mode = $request->operateMode;
160
-        $trackNo = $request->trackNo;
161
-        $trackTitle = $request->trackTitle;
162
-        $trackLimit = $request->trackLimit;
163
-        // $id = ($request->mode == 'insert') ? '' : $request->id;
164
-        // $name = $request->name;
165
-        // $referral = $request->referral;
166
-        // $orlCode = $request->orlCode;
167
-        // $richmenuId = $request->richmenuId;
168
-        // $hidTag = $request->hidTag;
169
-        // $folderS3 = 'urlQRCode'; //要儲存到S3上的folder名稱
170
-        /**
171
-         * picsee短網址
172
-         */
173
-        // 服務層設置(以及實現各種業務上的邏輯)
174
-        if ($mode='insert') {
175
-            // 新增模式
176
-            // 直接創建一組短網址
177
-            //$orlCode = $this->insertOrl($name, env('LINE_LIFF_URL').'/'.env('LIFF_PAGE_LOGIN').'?referral='.$referral.'&liffId='.env('LIFF_PAGE_LOGIN'), $name);
178
-            // $orlCode = $this->insertOrl($name, env('APP_URL').'/web/referrallogin/'.$referral, $name);
179
-            /**
180
-             * 改掉以往存到ORL的方式,改以透過Picsee來產生短網址
181
-             * 增加儲存欄位
182
-             * @picseeCode 短網址存取碼
183
-             * @picseeUrl 短網址
184
-             * @qRCode_pic
185
-             */
186
-            //新的新增至PICSEE
187
-            // $picseeData = $this->insertPicsee(env("APP_FRONTEND_URL").'/web/referrallogin/'.$referral);
188
-
189
-            // $picseeUrl = str_replace(env("PICSEE_SERCH_DOMAIN"),env("PICSEE_REPLACE_DOMAIN"),$picseeData->picseeUrl);
190
-            // $explodeGetCode = explode("/",$picseeUrl);
191
-            // $picseeCode = end($explodeGetCode);
192
-            // $qRCode = $this->makeQRCode($picseeCode,$picseeUrl,$folderS3);
193
-            // $id = $this->trackManagementSv->insertReferral(
194
-            //     $name,
195
-            //     $referral,
196
-            //     $richmenuId,
197
-            //     $picseeCode,
198
-            //     $picseeUrl,
199
-            //     $qRCode,
200
-            //     $orlCode
201
-            // );
202
-        } elseif ($mode=='edit') {
203
-//             $referralData = $this->referralSv->getReferralById($id);
204
-//             // 編輯模式
205
-//             if ($orlCode != 0) {
206
-//                 $this->updateOrl($orlCode, $name, $name);
207
-//             } else {
208
-//                 // 針對導入短網址服務之後,但又已經存在的紀錄,開放只要編輯過就可以取得短網址
209
-//                 //$orlCode = $this->insertOrl($name, env('LINE_LIFF_URL').'/'.env('LIFF_PAGE_LOGIN').'?referral='.$referral.'&liffId='.env('LIFF_PAGE_LOGIN'), $name);
210
-// //                $orlCode = $this->insertOrl($name, env('APP_URL').'/web/referrallogin/'.$referral, $name);
211
-//                 //此段取得短網址的功能調整指向picsee流程
212
-//                 if($referralData["picseeCode"] == ""){
213
-//                     $picseeData = $this->insertPicsee(env("APP_URL").'/web/referrallogin/'.$referral);
214
-//                     $picseeUrl = str_replace(env("PICSEE_SERCH_DOMAIN"),env("PICSEE_REPLACE_DOMAIN"),$picseeData->picseeUrl);
215
-//                     $explodeGetCode = explode("/",$picseeUrl);
216
-//                     $picseeCode = end($explodeGetCode);
217
-//                     $qRCode = $this->makeQRCode($picseeCode,$picseeUrl,$folderS3);
218
-//                     $this->referralSv->modifyReferralPicsee(
219
-//                         $id,
220
-//                         $picseeCode,
221
-//                         $picseeUrl,
222
-//                         $qRCode
223
-//                     );
224
-//                 }
225
-//             }
226
-            $this->trackManagementSv->store(
227
-                $id,
228
-                $trackNo,
229
-                $trackTitle,
230
-                $trackLimit,
231
-            );
113
+        
114
+        try {
115
+            $mode = $request->operateMode;
116
+            $id = $request->id ?? null;
117
+            $trackNo = $request->trackNo;
118
+            $trackTitle = $request->trackTitle;
119
+            $trackLimit = $request->trackLimit;
120
+
121
+            \DB::beginTransaction();
122
+            
123
+            // 服務層設置(以及實現各種業務上的邏輯)
124
+            if ($mode=='insert') {
125
+
126
+                $this->trackManagementSv->insert(
127
+                    $trackNo,
128
+                    $trackTitle,
129
+                    $trackLimit,
130
+                );
131
+                
132
+            } elseif ($mode=='edit') {
133
+    
134
+                $this->trackManagementSv->store(
135
+                    $id,
136
+                    $trackNo,
137
+                    $trackTitle,
138
+                    $trackLimit,
139
+                );
140
+                
141
+            }
142
+
143
+            \DB::commit();
144
+
145
+            return response()->json([
146
+                'code' => 0,
147
+                'message' => 'ok',
148
+                'data' => [],
149
+            ]);
150
+        } catch (\Exception $e) {
151
+            \DB::rollBack();
152
+
153
+            return response()->json([
154
+                'code' => 99,
155
+                'message' => $e->getMessage().'/'.$e->getLine().'/'.$e->getFile(),
156
+                'data' => [],
157
+            ]);
232 158
         }
159
+
233 160
         // $this->referralTagManagementSv->modifyreferralTagByReferralAndTagIds($id, $hidTag);
234
-    
235 161
         // 跳轉
236 162
         return redirect('/backend/dataManagement/track');
237 163
     }
238
-    
164
+
165
+    public function delete($id)
166
+    {
167
+        // 取得參數與驗證
168
+        // 服務層取得資料(以及實現各種業務上的邏輯)
169
+        $this->trackManagementSv->deleteDataById($id);
170
+
171
+        // 跳轉
172
+        return redirect('/backend/dataManagement/track');
173
+    }
239 174
 }

+ 6
- 3
app/Http/Services/Backend/DataManagement/SignupManagementService.php Bestand weergeven

@@ -19,13 +19,13 @@ class SignupManagementService
19 19
         // 建構 model 調用器
20 20
         $this->signupDb=new SignupData();
21 21
     }
22
-    public function getList(&$cnt = 0, $orderColumn, $orderDir, $start, $length, $searchValue, $keyword)
22
+    public function getList(&$cnt = 0, $orderColumn, $orderDir, $start, $length, $searchValue, $keyword, $createDateStart, $createDateFinal)
23 23
     {
24 24
         // 調用資料庫(或者其他業務邏輯)
25 25
         $res = $this->signupDb
26 26
             ->select('*');
27 27
             
28
-        if ($keyword != ""){
28
+        if ($keyword){
29 29
 
30 30
             $res->where('firstName', $keyword)
31 31
                 ->orWhere('lastName', $keyword)
@@ -39,7 +39,10 @@ class SignupManagementService
39 39
                 ->orWhere('typeOfJob', $keyword)
40 40
                 ->orWhere('jobTitle', $keyword);
41 41
         }
42
-            
42
+
43
+        $res->where('createDate', '>', $createDateStart)
44
+            ->where('createDate', '<', $createDateFinal);
45
+                        
43 46
         // 取總筆數
44 47
         $cnt = $res->count();
45 48
         // 排序

+ 38
- 3
app/Http/Services/Backend/DataManagement/TrackManagementService.php Bestand weergeven

@@ -86,12 +86,47 @@ class TrackManagementService
86 86
         $res=$this->referralDB->where("id",$id)->update(["picseeCnt"=>$picseeCnt,"last_call"=>$last_call]);
87 87
         return $res;
88 88
     }
89
-    public function insertReferral($name,$referral,$richmenuId,$picseeCode,$picseeUrl,$qRCode,$orlCode=0)
89
+    
90
+    public function insert($trackNo, $trackTitle, $trackLimit)
91
+    {
92
+        
93
+        $this->trackDataDb
94
+            ->insert([
95
+                'trackNo'       => $trackNo,
96
+                'trackTitle'    => $trackTitle,
97
+                'trackLimit'    => $trackLimit,
98
+                'createDate'    => date("Y-m-d H:i:s"),
99
+            ]);
100
+
101
+        return ;
102
+    }
103
+    
104
+    public function store($id, $trackNo, $trackTitle, $trackLimit)
90 105
     {
91
-        $res=$this->referralDB->insert(["name"=>$name,"referral"=>$referral,"richmenuId"=>$richmenuId,"picseeCode"=>$picseeCode,"shortUrl"=>$picseeUrl,"qRCode"=>$qRCode,"orlCode"=>$orlCode]);
92
-        $id = \DB::getPdo()->lastInsertId();
106
+        $this->trackDataDb
107
+                ->where('id', $id)
108
+                ->update([
109
+                    'trackNo'       => $trackNo,
110
+                    'trackTitle'    => $trackTitle,
111
+                    'trackLimit'    => $trackLimit,
112
+                    'updateDate'    => date("Y-m-d H:i:s"),
113
+                ]);
114
+                
93 115
         return $id;
94 116
     }
117
+
118
+    public function deleteDataById($id)
119
+    {
120
+        // 取得參數
121
+        // 調用資料庫(或者其他業務邏輯)
122
+        $res = $this->trackDataDb
123
+            ->where('id', $id)
124
+            ->delete();
125
+        
126
+        // 整理返回值並返回
127
+        return $res;
128
+    }
129
+
95 130
     public function getExportList($keyword)
96 131
     {
97 132
         $res = $this->signupDb

+ 16
- 1
resources/views/admin/DataManagement/SignupManagement.blade.php Bestand weergeven

@@ -30,6 +30,19 @@
30 30
                                     <label for="keyword">關鍵字(可搜尋欄位:first name, last name, company name, company email, backup email, phone number)</label>
31 31
                                     <input type="text" class="form-control input-sm" id="keyword" name="keyword" maxlength="50">
32 32
                                 </div>
33
+                                <!-- 起 -->
34
+                                <div class="form-group _form-group col-sm-12 col-md-6 col-xl-2">
35
+                                    <label for="createDateStart">建立時間(起)</label>
36
+                                    <input type="text" class="form-control input-sm" id="createDateStart"
37
+                                           maxlength="10">
38
+                                </div>
39
+                                <!-- 訖 -->
40
+                                <div class="form-group _form-group col-sm-12 col-md-6 col-xl-2">
41
+                                    <label for="createDateFinal">建立時間(迄)</label>
42
+                                    <input type="text" class="form-control input-sm" id="createDateFinal"
43
+                                           maxlength="10">
44
+                                </div>
45
+                                
33 46
                                 <!-- Search -->
34 47
                                 <div class="form-group _form-group col-sm-12 col-md-12 col-xl-12">
35 48
                                     <a class="btn btn-success btn-sm _fz-12" onclick="javascript: custom_search();">
@@ -105,10 +118,12 @@
105 118
         function custom_search() {
106 119
             $('#GridView1').DataTable()
107 120
                 .column(1).search($('#keyword').val())
121
+                .column(2).search($('#createDateStart').val())
122
+                .column(3).search($('#createDateFinal').val())
108 123
             ;
109 124
             $('#GridView1').dataTable().fnDraw(true);
110 125
         }
111
-        
126
+
112 127
         function forceDownload(url, fileName){
113 128
             var xhr = new XMLHttpRequest();
114 129
             xhr.withCredentials = true;

+ 6
- 2
resources/views/admin/DataManagement/TrackManagement.blade.php Bestand weergeven

@@ -5,7 +5,7 @@
5 5
         <div class="col-lg-12">
6 6
             <div class="contentpanel">
7 7
                 <!--<form id="listForm" method="post">-->
8
-                <form id='searchForm' action="{{ route('signup.export') }}" method="POST">
8
+                <form id='searchForm' action="{{ route('track.create') }}" method="POST">
9 9
                     @csrf
10 10
                     <!-- 功能按鈕(新增/批量處理等等) -->
11 11
                     <div class="row" style="margin-bottom: 5px;">
@@ -100,6 +100,10 @@
100 100
             $('#GridView1').dataTable().fnDraw(true);
101 101
         }
102 102
         
103
-
103
+        function delWarning() {
104
+            if(!confirm("您確定要將此筆資料永久刪除嗎?"))
105
+            event.preventDefault();
106
+        }
107
+        
104 108
     </script>
105 109
 @endsection

+ 5
- 644
resources/views/admin/DataManagement/TrackManagementEdit.blade.php Bestand weergeven

@@ -14,10 +14,10 @@
14 14
                         <div>
15 15
                             <table class="table" style="border-collapse:collapse;">
16 16
                                 <tbody class="msgTbody">
17
-                                <input type="hidden" id="operateMode" value="edit"/>
17
+
18 18
                                 <input type="hidden" id="id" value="{{$id}}"/>
19 19
                                 
20
-                                <!-- 欄位:圖文頭貼設定 -->
20
+                                <!-- 欄位:議程資料設定 -->
21 21
                                 <tr class="msgTemplate">
22 22
                                     <td class="header-require col-xl-2">議程資料設定</td>
23 23
                                     <td>
@@ -32,10 +32,10 @@
32 32
                                                 <!-- 序號 -->
33 33
                                                 @if ($operdata == "")
34 34
                                                     <!-- Insert Mode -->
35
-                                                    <input type="hidden" name="mode" value="insert"/>
35
+                                                    <input type="hidden" name="mode" id="mode" value="insert"/>
36 36
                                                 @else
37 37
                                                     <!-- Edit Mode -->
38
-                                                    <input type="hidden" name="mode" value="edit"/>
38
+                                                    <input type="hidden" name="mode" id="mode" value="edit"/>
39 39
                                                     <tr>
40 40
                                                         <td class="col-xl-2">序號</td>
41 41
                                                         <td>
@@ -286,85 +286,10 @@
286 286
                 location.href = '/backend/dataManagement/track';
287 287
             });
288 288
 
289
-            // 註冊事件
290
-            eventImagemap();
291
-            eventUriAction();
292
-
293 289
         });
294 290
 
295
-        function restoreMsgInfo(msgInfo) {
296
-            // 初始化
297
-            var tabId = 'tab1';
298
-            var menuInfoObj = JSON.parse(msgInfo).menuInfo;
299
-            // console.log(menuInfoObj);
300
-
301
-            // var menuFlag = menuInfoObj.menuFlag;
302
-            // var modelType = menuInfoObj.modelType;
303
-            // var chatBarText = menuInfoObj.chatBarText;
304
-            // var displayByDefault = menuInfoObj.displayByDefault;
305
-            var imgUrl = menuInfoObj.imgUrl;
306
-            // var imgSize = menuInfoObj.imgSize;
307
-            // var imagemapActions = menuInfoObj.actions;
308
-
309
-            // 還原內容
310
-            $('#'+tabId+'MenuFlag').val(menuFlag);
311
-            $("#"+tabId+"ImagemapModelType").val(modelType);
312
-            $("#chatBarText").val(chatBarText);
313
-            if (!displayByDefault) {
314
-                $("input[name='displayByDefault']").filter('[value="0"]').prop('checked', true);
315
-            }
316
-            $("img[data-target='"+tabId+"-image-preview-imagemapImg']").attr("src", imgUrl);
317
-
318
-            // 點擊 選擇的版型
319
-            // trigger: $('.imagemap-model-small').click()
320
-            var $chosen_model = $("#imgmapcontent-"+tabId).find('.imagemap-model-small').filter("[data-model_type='"+modelType+"']");
321
-            if (modelType === 'mcustom') {
322
-                $chosen_model.trigger('click', [menuInfoObj]);
323
-            } else {
324
-                $chosen_model.click();
325
-            }
326
-
327
-            if (modelType == 'mjson') {
328
-                // todo 重新組合 ImagemapJson
329
-                var imagemapJson = '';
330
-                $("#"+tabId+"ImagemapJson").val(imagemapJson);
331
-            } else {
332
-                // 還原 每個按鈕的值
333
-                $.each(imagemapActions, function(i, actionObj) {
334
-                    var btnNum = i + 1;
335
-                    $("#"+tabId+"Imagemapbtn"+btnNum+"Act").val(actionObj.type);
336
-                    $("#"+tabId+"Imagemapbtn"+btnNum+"Act").trigger('change'); // 觸發事件切換按鈕N動作
337
-                    $("#"+tabId+"Imagemapbtn"+btnNum+"Content").val(actionObj.content);
338
-
339
-                    // 前往選單
340
-                    if (actionObj.type == 'richmenu') {
341
-                        $("#"+tabId+"Imagemapbtn"+btnNum+"Submenu").val(actionObj.content);
342
-                        $("#"+tabId+"Imagemapbtn"+btnNum+"Submenu").trigger('change');
343
-
344
-                        if ('keywordValue' in actionObj) {
345
-                            $("#"+tabId+"Imagemapbtn"+btnNum+"Content").attr('data-keyword_value', actionObj.keywordValue);
346
-                        }
347
-                    }
348
-
349
-                    // 貼標 (開啟連結)
350
-                    if ('tags' in actionObj) {
351
-                        $("#"+tabId+"Imagemapbtn"+btnNum+"Tags").val(actionObj.tags);
352
-                        $("#"+tabId+"Imagemapbtn"+btnNum+"Tags").trigger('change');
353
-                    }
354
-                });
355
-            }
356
-        }
357
-        
358 291
         // 完成編輯
359 292
         function finishEdit() {
360
-            var msgInfoObj = msgInfo();
361
-            // console.log(msgInfoObj);
362
-            // return;
363
-
364
-            if ('err' in msgInfoObj) {
365
-                alert("有錯誤:\n" + msgInfoObj.err.join("\n"));
366
-                return;
367
-            }
368 293
 
369 294
             $.blockUI({
370 295
                 message: $('#ajax-spinner'),
@@ -378,7 +303,7 @@
378 303
                 type: "POST",
379 304
                 url: '/backend/dataManagement/track/store',
380 305
                 data: {
381
-                    "operateMode": $("#operateMode").val(),
306
+                    "operateMode": $("#mode").val(),
382 307
                     "trackNo": $("#trackNo").val(),
383 308
                     "trackTitle": $("#trackTitle").val(),
384 309
                     "trackLimit": $("#trackLimit").val(),
@@ -393,7 +318,6 @@
393 318
                         location.href = '/backend/dataManagement/track';
394 319
                     } else {
395 320
                         alert(result.message);
396
-                        alert('123');
397 321
                     }
398 322
                 },
399 323
                 fail: function(jqXHR, textStatus) {
@@ -406,568 +330,5 @@
406 330
             });
407 331
         }
408 332
 
409
-        function eventImagemap() {
410
-            // 選擇版型
411
-            $('.imagemap-model-small').unbind("click");
412
-            $('.imagemap-model-small').click(function (event, imagemapContent) {
413
-                var $model_small = $(this);
414
-                var $model_small_container = $model_small.parent('.imagemap-model-small-container');
415
-                var $imagemap_content = $model_small.closest('div[id^="imgmapcontent-tab"]');
416
-                var $imagemap_btns = $imagemap_content.children('.imagemap-btn'); // 此頁籤下所有按鈕區域
417
-
418
-                var tabNum = 1;
419
-                var tabId = 'tab'+tabNum;
420
-                var modelType = $model_small.attr('data-model_type');
421
-                var imgSizeObj = JSON.parse($('#'+tabId+'ImagemapImgSize').val());
422
-
423
-                // 三種版型類型的容器
424
-                var $imagemap_model = $imagemap_content.find('.imagemap-model');
425
-                var $custom_container = $('#'+tabId+'ImagemapBoxContainer');
426
-                var $json_container = $('#'+tabId+'ImagemapJson').closest('div.row');
427
-
428
-                if ($model_small.hasClass('active')) {
429
-                    return;
430
-                }
431
-
432
-                // 設定選擇的 active
433
-                $model_small_container.find('.imagemap-model-small').removeClass('active');
434
-                $model_small.addClass('active');
435
-
436
-                // 設定 model type
437
-                $('#'+tabId+'ImagemapModelType').val(modelType);
438
-
439
-                imagemapClearBtns($imagemap_btns, tabId);
440
-
441
-                if (modelType == 'mjson') {
442
-                    $imagemap_model.hide();
443
-                    $custom_container.hide();
444
-                    $json_container.show();
445
-                    $imagemap_btns.hide();
446
-                }
447
-                else if (modelType == 'mcustom') {
448
-                    $imagemap_model.hide();
449
-                    $custom_container.show();
450
-                    $json_container.hide();
451
-
452
-                    var boxNum = 1; // ImagemapBox1
453
-                    // 要等 ImagemapBox HTML 完全顯示才能繪製,所以等 300ms 才初始化
454
-                    setTimeout(function() {
455
-                        imagemapInitBox(tabNum, boxNum, imgSizeObj, imagemapContent);
456
-
457
-                        // 設定背景圖案 (initImagemapBox 後才能設定)
458
-                        var imagemapUrl = $('img[data-target="'+tabId+'-image-preview-imagemapImg"]').attr('src');
459
-                        $('#ImagemapBox'+boxNum).css('background-image', 'url(' + imagemapUrl + ')');
460
-                    }, 300);
461
-                }
462
-                else {
463
-                    $imagemap_model.show();
464
-                    $custom_container.hide();
465
-                    $json_container.hide();
466
-
467
-                    // 建立對應的 imagemap-model
468
-                    $imagemap_model.children('.table').remove();
469
-                    $model_small.children('.table').clone(false).appendTo($imagemap_model);
470
-                    $imagemap_model.find('td').each(function (index) {
471
-                        var btnNum = index + 1;
472
-                        if (btnNum === 1) $(this).addClass('active');
473
-                        $(this).html('按鈕'+btnNum);
474
-                        $(this).attr('data-btn', btnNum);
475
-                    });
476
-                }
477
-            });
478
-
479
-            // 編輯按鈕區域
480
-            $('.imagemap-model').unbind("click");
481
-            $('.imagemap-model').on('click', 'td', function () {
482
-                var $clicked_td = $(this);
483
-                var $table = $clicked_td.closest('.table');
484
-                var $imagemap_content = $clicked_td.closest('div[id^="imgmapcontent-tab"]');
485
-                var tabNum = '1';
486
-                var btnNum = $clicked_td.attr('data-btn');
487
-
488
-                // 設定選擇的 active
489
-                $table.find('td').removeClass('active');
490
-                $clicked_td.addClass('active');
491
-
492
-                // 顯示對應按鈕
493
-                $imagemap_content.find('.imagemap-btn').hide();
494
-                $('#tab'+'1'+'Imagemapbtn'+btnNum).show();
495
-            });
496
-
497
-            // 切換 按鈕N動作
498
-            $('.imagemap-btn').find('select.imagemapBtnAct').unbind("change");
499
-            $('.imagemap-btn').find('select.imagemapBtnAct').change(function () {
500
-                var tabNum = 1;
501
-                var btnNum = $(this).attr('id').split('Imagemapbtn')[1].replace(/\D/g, ''); // tab1Imagemapbtn1Act
502
-                var type = $(this).val();
503
-
504
-                var $btnContent = $('#tab1Imagemapbtn'+btnNum+'Content');
505
-                var $btnSubmenu = $('#tab1Imagemapbtn'+btnNum+'Submenu');
506
-                var $btnTags = $('#tab1Imagemapbtn'+btnNum+'Tags');
507
-
508
-                // 清空
509
-                $btnContent.val('');
510
-                $btnSubmenu.val(0);
511
-                $btnTags.val(null).trigger('change');
512
-
513
-                // 顯示按鈕對應的元件
514
-                imagemapShowBtnInputsByAction(type, $btnContent, $btnTags, $btnSubmenu);
515
-            });
516
-        }
517
-
518
-        function eventUriAction() {
519
-            $('.js-example-basic-multiple').select2({
520
-                placeholder: '請選擇或輸入以搜尋標籤'
521
-            });
522
-        }
523
-
524
-        function msgInfo() {
525
-            var result = {
526
-                menuInfo: {},
527
-                err: []
528
-            };
529
-
530
-            var msgObj = {};
531
-            var tabNum = '1';
532
-            var tabId = 'tab' + tabNum;
533
-
534
-            // 取資料
535
-            var menuFlag = $('#'+tabId+'MenuFlag').val();
536
-            var modelType = $("#"+tabId+"ImagemapModelType").val();
537
-            var imgUrl = $("img[data-target$='"+tabId+"-image-preview-imagemapImg']").attr("src");
538
-            var json = $("#"+tabId+"ImagemapJson").val();
539
-            var menuTitle = $("#menuTitle").val();
540
-            var chatBarText = $("#chatBarText").val();
541
-            var displayByDefault = $("input[name='displayByDefault']:checked").val();
542
-
543
-            // 檢查
544
-            if (menuTitle === '') result.err.push('標題內容為空');
545
-            if (imgUrl === '/assets/images/placeholder_upload_380_260.png') result.err.push('圖片沒上傳');
546
-            if (modelType == 'mjson' && json === '') result.err.push('JSON內容為空');
547
-            if (chatBarText === '') result.err.push('選單顯示名稱為空');
548
-
549
-            var imagemapActions = '';
550
-            if (modelType == 'mjson') {
551
-                // todo msgInfoImagemapActionsFromJson(json)
552
-                imagemapActions = '';
553
-            } else if (modelType == 'mcustom') {
554
-                imagemapActions = msgInfoImagemapActions(tabNum, modelType, result);
555
-            } else { // 預設版型
556
-                imagemapActions = msgInfoImagemapActions(tabNum, modelType, result);
557
-            }
558
-
559
-            msgObj = {
560
-                // menuFlag: menuFlag,
561
-                // modelType: modelType,
562
-                // name: menuTitle,
563
-                // chatBarText: chatBarText,
564
-                // displayByDefault: !!parseInt(displayByDefault),
565
-                imgUrl: imgUrl,
566
-                // imgSize: {
567
-                //     "width": 800,
568
-                //     "height": 800
569
-                // },
570
-                // actions: imagemapActions,
571
-            };
572
-
573
-            result.menuInfo = msgObj;
574
-
575
-            if (result.err.length === 0) {
576
-                delete result.err;
577
-            }
578
-
579
-            return result;
580
-        }
581
-
582
-        function msgInfoImagemapActions(tabNum, modelType, result) {
583
-            var tabId = 'tab'+tabNum;
584
-
585
-            var areas = [];
586
-            if (modelType == 'mcustom') {
587
-                areas = imagemapBoxes[tabNum].getResultPos();
588
-            } else if (modelType != 'mjson') {
589
-                // 樣板按鈕區域定義 (依照頁面顯示的按鈕順序)
590
-                var modelAreaMap = {
591
-                    "m1": [
592
-                        {"x": 0, "y": 0, "width": 833, "height": 843},
593
-                        {"x": 833, "y": 0, "width": 833, "height": 843},
594
-                        {"x": 1666, "y": 0, "width": 834, "height": 843},
595
-                        {"x": 0, "y": 843, "width": 833, "height": 843},
596
-                        {"x": 833, "y": 843, "width": 833, "height": 843},
597
-                        {"x": 1666, "y": 843, "width": 834, "height": 843},
598
-                    ],
599
-                    "m2": [
600
-                        {"x": 0, "y": 0, "width": 1250, "height": 843},
601
-                        {"x": 1250, "y": 0, "width": 1250, "height": 843},
602
-                        {"x": 0, "y": 843, "width": 1250, "height": 843},
603
-                        {"x": 1250, "y": 843, "width": 1250, "height": 843},
604
-                    ],
605
-                    "m3": [
606
-                        {"x": 0, "y": 0, "width": 2500, "height": 843},
607
-                        {"x": 0, "y": 843, "width": 833, "height": 843},
608
-                        {"x": 833, "y": 843, "width": 833, "height": 843},
609
-                        {"x": 1666, "y": 843, "width": 834, "height": 843},
610
-                    ],
611
-                    "m4": [
612
-                        {"x": 0, "y": 0, "width": 1250, "height": 1686},
613
-                        {"x": 1250, "y": 0, "width": 1250, "height": 843},
614
-                        {"x": 1250, "y": 843, "width": 1250, "height": 843},
615
-                    ],
616
-                    "m5": [
617
-                        {"x": 0, "y": 0, "width": 2500, "height": 843},
618
-                        {"x": 0, "y": 843, "width": 2500, "height": 843},
619
-                    ],
620
-                    "m6": [
621
-                        {"x": 0, "y": 0, "width": 1250, "height": 1686},
622
-                        {"x": 1250, "y": 0, "width": 1250, "height": 1686},
623
-                    ],
624
-                    "m7": [
625
-                        {"x": 0, "y": 0, "width": 2500, "height": 1686},
626
-                    ]
627
-                };
628
-                areas = modelAreaMap[modelType];
629
-            }
630
-
631
-            var actions = [];
632
-            for (var btnNum = 1; btnNum <= areas.length; btnNum++) {
633
-                var btnId = 'btn'+btnNum;
634
-                var type = $("#"+tabId+"Imagemap"+btnId+"Act").val();
635
-                var content = $("#"+tabId+"Imagemap"+btnId+"Content").val();
636
-                var submenuId = $("#"+tabId+"Imagemap"+btnId+"Submenu").val();
637
-                var tagsData = $("#"+tabId+"Imagemap"+btnId+"Tags").select2('data');
638
-                var area = areas[btnNum-1];
639
-
640
-                if (type != 'richmenu' && content === '') result.err.push('按鈕'+btnNum+'的內容為空');
641
-                if (type == 'uri'
642
-                    && !content.startsWith('https://')
643
-                    && !content.startsWith('tel:')
644
-                    && !content.startsWith('line://')
645
-                ) {
646
-                    result.err.push('按鈕'+btnNum+'的連結網址須為 https:// 或 tel:// 或 line://');
647
-                }
648
-
649
-                var action = {
650
-                    "type": type,
651
-                    "content": content,
652
-                    "area": {
653
-                        "x": area.x,
654
-                        "y": area.y,
655
-                        "width": area.width,
656
-                        "height": area.height
657
-                    }
658
-                };
659
-
660
-                if (type == 'uri' && tagsData.length !== 0) { // uri 貼標
661
-                    var tags = [];
662
-                    $.each(tagsData, function(i, item) {
663
-                        tags.push(item.id);
664
-                    });
665
-                    action.tags = tags;
666
-                } else if (type == 'richmenu') { // 前往子選單
667
-                    action.content = submenuId;
668
-
669
-                    var keywordValue = $("#"+tabId+"Imagemapbtn"+btnNum+"Content").attr('data-keyword_value');
670
-                    if (typeof keywordValue === 'undefined') {
671
-                        var menuFlag = $('#tab1MenuFlag').val();
672
-                        keywordValue = 'richmenu-' + menuFlag.replace(/menu-/g, '') + '-' + Date.now();
673
-                    }
674
-                    action.keywordValue = keywordValue;
675
-                }
676
-
677
-                actions.push(action);
678
-            }
679
-            // console.log(actions);
680
-
681
-            return actions
682
-        }
683
-
684
-        function generateFlag(length) {
685
-            var result = '';
686
-            var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
687
-            var charactersLength = characters.length;
688
-            for ( var i = 0; i < length; i++ ) {
689
-                result += characters.charAt(Math.floor(Math.random() * charactersLength));
690
-            }
691
-            return result;
692
-        }
693
-
694
-        function imagemapInitBox(tabNum, boxNum, imgSizeObj, imagemapContent) {
695
-            let imagemapBox;
696
-            var mapData = null;
697
-
698
-            // console.log(imagemapContent);
699
-            if (typeof imagemapContent !== 'undefined') {
700
-                mapData = imagemapContent;
701
-            }
702
-
703
-            imagemapBox = new resizer({
704
-                container: '#ImagemapBox'+boxNum,
705
-                wrap: imgSizeObj,
706
-                wrapperWidth: 380,
707
-                itemDefaultSize: 380,
708
-                add: '#AddImagemapBox'+boxNum,
709
-                delete: {
710
-                    selector: '#DeleteImagemapBox'+boxNum,
711
-                    getDelete: function(res) {
712
-                        // console.log(res);
713
-                        var btnNum = res.index + 1;
714
-                        var tabId = 'tab'+tabNum;
715
-
716
-                        // 重設按鈕的值 (從刪除的下一個的開始往前遞補)
717
-                        for (btnNum; btnNum < 12; btnNum++) {
718
-                            var nextNum = btnNum + 1;
719
-
720
-                            var $currentAct = $('#'+tabId+'Imagemapbtn'+btnNum+'Act');
721
-                            var $currentContent = $('#'+tabId+'Imagemapbtn'+btnNum+'Content');
722
-                            var $currentSubmenu = $('#'+tabId+'Imagemapbtn'+btnNum+'Submenu');
723
-                            var $currentTags = $('#'+tabId+'Imagemapbtn'+btnNum+'Tags');
724
-
725
-                            var $nextAct = $('#'+tabId+'Imagemapbtn'+nextNum+'Act');
726
-                            var $nextContent = $('#'+tabId+'Imagemapbtn'+nextNum+'Content');
727
-                            var $nextSubmenu = $('#'+tabId+'Imagemapbtn'+nextNum+'Submenu');
728
-                            var $nextTags = $('#'+tabId+'Imagemapbtn'+nextNum+'Tags');
729
-
730
-                            // 內容
731
-                            $currentAct.val($nextAct.val());
732
-                            $currentContent.val($nextContent.val());
733
-                            $currentSubmenu.val($nextSubmenu.val());
734
-                            // 標籤
735
-                            var nextTagsData = $nextTags.select2('data');
736
-                            if (nextTagsData.length !== 0) {
737
-                                var nextTags = [];
738
-                                $.each(nextTagsData, function(i, item) {
739
-                                    nextTags.push(item.id);
740
-                                });
741
-                                $currentTags.val(nextTags);
742
-                                $currentTags.trigger('change');
743
-                            }
744
-
745
-                            // 顯示按鈕對應的元件
746
-                            imagemapShowBtnInputsByAction($currentAct.val(), $currentContent, $currentTags, $currentSubmenu);
747
-                        }
748
-
749
-                        // 清除最後一個按鈕
750
-                        $('#'+tabId+'Imagemapbtn12Act').val('postback'); // richmenu 預設
751
-                        $('#'+tabId+'Imagemapbtn12Content').val('');
752
-                        $('#'+tabId+'Imagemapbtn12Submenu').val(0);
753
-                        $('#'+tabId+'Imagemapbtn12Tags').val(null).trigger('change');
754
-
755
-                        // 顯示最後一個按鈕對應的元件
756
-                        imagemapShowBtnInputsByAction('postback', $('#'+tabId+'Imagemapbtn12Content'), $('#'+tabId+'Imagemapbtn12Tags'), $('#'+tabId+'Imagemapbtn12Submenu'));
757
-                    }
758
-                },
759
-                get: '#GetImagemapBox'+boxNum,
760
-                map: mapData,
761
-                getActive: function(res) {
762
-                    // console.log(res);
763
-                    var $imagemapContent = $('#imgmapcontent-tab'+tabNum);
764
-                    var btnNum = res.index + 1;
765
-
766
-                    // 顯示對應按鈕
767
-                    $imagemapContent.find('.imagemap-btn').hide();
768
-                    $('#tab'+tabNum+'Imagemapbtn'+btnNum).show();
769
-                }
770
-            });
771
-
772
-            imagemapBoxes[tabNum] = imagemapBox;
773
-        }
774
-
775
-        function imagemapShowBtnInputsByAction(action, $btnContent, $btnTags, $btnSubmenu) {
776
-            if (action == 'uri') {
777
-                $btnContent.closest('div[class="row"]').show();
778
-                $btnTags.closest('div[class="row"]').show();
779
-                $btnSubmenu.closest('div[class="row"]').hide();
780
-            } else if (action == 'richmenu') {
781
-                $btnContent.closest('div[class="row"]').hide();
782
-                $btnTags.closest('div[class="row"]').hide();
783
-                $btnSubmenu.closest('div[class="row"]').show();
784
-            } else {
785
-                $btnContent.closest('div[class="row"]').show();
786
-                $btnTags.closest('div[class="row"]').hide();
787
-                $btnSubmenu.closest('div[class="row"]').hide();
788
-            }
789
-        }
790
-
791
-        function imagemapClearBtns($imagemap_btns, tabId) {
792
-            var $btnContents = $imagemap_btns.find('.imagemapBtnContent');
793
-            var $btnActs = $imagemap_btns.find('.imagemapBtnAct');
794
-            var $btnSubmenus = $imagemap_btns.find('select.imagemapBtnSubmenu');
795
-            var $btnTags = $imagemap_btns.find('.imagemapBtnTags');
796
-
797
-            // 清除按鈕區域內容
798
-            $btnContents.val('');
799
-            $btnActs.val('postback'); // richmenu 預設
800
-            $btnSubmenus.val(0)
801
-            $btnTags.val(null).trigger('change');
802
-
803
-            // 顯示按鈕對應的元件 (這邊是一次設定所有按鈕下所有元件)
804
-            imagemapShowBtnInputsByAction('postback', $btnContents, $btnTags, $btnSubmenus);
805
-
806
-            // 顯示按鈕1
807
-            $imagemap_btns.hide();
808
-            $('#'+tabId+'Imagemapbtn1').show();
809
-        }
810
-
811
-        // AJAX 上傳圖片/影片
812
-        // http://arsee88.blogspot.com/2020_09_20_archive.html
813
-        var imagePreview = [];
814
-        var spinner = [];
815
-        var fileUploader = [];
816
-        // 註冊上傳圖片的功能(可以重複註冊)
817
-        var imagemapImgId = 'imagemapImg' + '1';
818
-        imagePreview[imagemapImgId] = document.querySelector('[data-target="tab'+'1'+'-image-preview-imagemapImg"]');
819
-        spinner[imagemapImgId] = document.querySelector('[data-target="tab'+'1'+'-spinner-imagemapImg"]');
820
-        fileUploader[imagemapImgId] = document.querySelector('[data-target="tab'+'1'+'-file-uploader-imagemapImg"]');
821
-        fileUploader[imagemapImgId].addEventListener("change", handleFileUpload);
822
-        // File input 上傳檔案時綁定的處理函式
823
-        async function handleFileUpload(e) {
824
-            e.preventDefault();
825
-
826
-            var $file_uploader = $(this);
827
-            var splitItems = $file_uploader.attr('id').split('-');
828
-            // tab1-file-uploader-imagemapImg
829
-            var msgType = splitItems[splitItems.length-1]; // lastItem
830
-            console.log(msgType);
831
-
832
-            var msgNum = '1';
833
-            var itemId = msgType + msgNum;
834
-            console.log(itemId);
835
-
836
-            try {
837
-                const file = e.target.files[0];
838
-                if (!file) {
839
-                    return;
840
-                }
841
-
842
-                setUploading(true, itemId);
843
-
844
-                // 檢查
845
-                const beforeUploadCheck = await checkBeforeUpload(file, msgType, msgNum);
846
-                if (!beforeUploadCheck.isValid) throw beforeUploadCheck.errorMessages;
847
-
848
-                // 上傳
849
-                const arrayBuffer = await getArrayBuffer(file);
850
-                var response = await uploadFileAJAX(arrayBuffer);
851
-                alert("上傳成功");
852
-                setUploading(false, itemId);
853
-                showPreviewImage(response.url, itemId);
854
-
855
-                // 更新 ImagemapBox
856
-                var $imgPreview = $(imagePreview[itemId]);
857
-                if ($imgPreview.attr('data-target').indexOf('imagemap') !== -1) {
858
-                    $imgPreview.closest('#imgmapcontent-tab1').find('.imagemapBox').css('background-image', 'url(' + response.url + ')');
859
-                }
860
-            } catch (error) {
861
-                setUploading(false, itemId);
862
-                alert(error);
863
-                console.log("上傳失敗: ", error);
864
-            } finally {
865
-                e.target.value = '';
866
-            }
867
-        }
868
-        // If you prefer Base64 image, use "FileReader.readAsDataURL"
869
-        function showPreviewImage(url, itemId) {
870
-            imagePreview[itemId].src = url;
871
-        }
872
-        // Change file object into ArrayBuffer
873
-        function getArrayBuffer(fileObj) {
874
-            return new Promise((resolve, reject) => {
875
-                const reader = new FileReader();
876
-                // Get ArrayBuffer when FileReader on load
877
-                reader.addEventListener("load", () => {
878
-                    resolve(reader.result);
879
-                });
880
-
881
-                // Get Error when FileReader on error
882
-                reader.addEventListener("error", () => {
883
-                    reject("error occurred in getArrayBuffer");
884
-                });
885
-
886
-                // read the blob object as ArrayBuffer
887
-                // if you nedd Base64, use reader.readAsDataURL
888
-                reader.readAsArrayBuffer(fileObj);
889
-            });
890
-        }
891
-        // Use "new Uint8Array()"" to change ArrayBuffer into TypedArray (TypedArray is not a truly Array)
892
-        // Use "Array.from()" to change it into Array
893
-        function uploadFileAJAX(arrayBuffer) {
894
-            return fetch("{{ env('APP_URL') }}/backend/dataManagement/eLecturerTeachersList/saveImg", {
895
-                headers: {
896
-                    version: 1,
897
-                    "content-type": "application/json"
898
-                },
899
-                method: "POST",
900
-                body: JSON.stringify({
901
-                    image: Array.from(new Uint8Array(arrayBuffer))
902
-                })
903
-            })
904
-                .then(res => {
905
-                    if (!res.ok) {
906
-                        throw res.statusText;
907
-                    }
908
-                    return res.json();
909
-                })
910
-                .then(data => data)
911
-                .catch(err => console.log("err", err));
912
-        }
913
-        function checkBeforeUpload(fileObject, msgType, msgNum) {
914
-            return new Promise(resolve => {
915
-                let errorMessages = [];
916
-
917
-                // isValidFileType
918
-                const validFileTypes = ["image/jpeg", "image/png" ];
919
-                const isValidFileType = validFileTypes.includes(fileObject.type);
920
-                if (!isValidFileType) {
921
-                    errorMessages.push("只支援 JPG / PNG 格式圖片");
922
-                    resolve({
923
-                        isValid: isValidFileType,
924
-                        errorMessages: errorMessages.join("\n")
925
-                    });
926
-                    return;
927
-                }
928
-
929
-                // isValidFileSize
930
-                const isValidFileSize = (fileObject.size / 1024 / 1024) < 1; // 1 MB
931
-                if (!isValidFileSize) {
932
-                    errorMessages.push("圖片最大 1MB");
933
-                }
934
-                
935
-                // isValidDimension
936
-                var isValidDimension = true;
937
-                const dim = Promise.resolve(getImageSize(fileObject));
938
-                dim.then(function(result) {
939
-                    switch (msgType)
940
-                    {
941
-                        case "imagemapImg":
942
-                            if (result.width != 800 || result.height != 800) {
943
-                                errorMessages.push("圖片尺寸必須為 800x800");
944
-                                isValidDimension = false;
945
-                            }
946
-                            break;
947
-                    }
948
-
949
-                    resolve({
950
-                        isValid: isValidFileType && isValidFileSize && isValidDimension,
951
-                        errorMessages: errorMessages.join("\n")
952
-                    });
953
-                });
954
-            });
955
-        }
956
-        function setUploading(isUploading, itemId) {
957
-            if (isUploading === true) {
958
-                spinner[itemId].classList.add("opacity-1");
959
-            } else {
960
-                spinner[itemId].classList.remove("opacity-1");
961
-            }
962
-        }
963
-        function getImageSize(file) {
964
-            return new Promise((resolve, reject) => {
965
-                var _URL = window.URL || window.webkitURL;
966
-                var img = new Image();
967
-                img.onload = () => resolve({ height: img.height, width: img.width });
968
-                img.onerror = reject;
969
-                img.src = _URL.createObjectURL(file);
970
-            });
971
-        }
972 333
     </script>
973 334
 @endsection

+ 2
- 2
routes/web.php Bestand weergeven

@@ -89,10 +89,10 @@ Route::prefix('backend')->group(function () {
89 89
         Route::controller(TrackManagementController::class)->prefix('dataManagement/track')->group(function () {
90 90
             Route::get('/', 'index');
91 91
             Route::get('/grid', 'grid');
92
-            Route::get('/create', 'create');
92
+            Route::post('/create', 'create')->name('track.create');
93 93
             Route::get('/edit/{id}', 'edit');
94 94
             Route::post('/store', 'store');
95
-            Route::delete('/{id}', 'delete');
95
+            Route::get('/delete/{id}', 'delete');
96 96
         });
97 97
 
98 98
     });