huaisianhuang 4 vuotta sitten
vanhempi
commit
b38554ecba

+ 2 - 0
backstage/__init__.py

@@ -12,11 +12,13 @@ def create_app():
     from backstage.home.routes import home_app
     from backstage.room_planner.routes import room_planner_app
     from backstage.blogs.routes import blogs_app
+    from backstage.store_locations.routes import store_locations_app
 
     app.register_blueprint(collections_app)
     app.register_blueprint(editor_app)
     app.register_blueprint(home_app)
     app.register_blueprint(blogs_app)
     app.register_blueprint(room_planner_app)
+    app.register_blueprint(store_locations_app)
 
     return app

+ 5 - 1
backstage/home/routes.py

@@ -19,5 +19,9 @@ def home():
 
 @home_app.route('/backstage/home/update', methods=['POST'])
 def update():
-    update_manage_table(request.form, request.args, request.files, 'home2')
+    update_manage_table(request.form.getlist('data'),
+                        request.form.getlist('element'),
+                        request.args,
+                        request.files.getlist('image'),
+                        'home2')
     return redirect(url_for('home.home'))

+ 5 - 1
backstage/room_planner/routes.py

@@ -18,5 +18,9 @@ def main():
 
 @room_planner_app.route('/backstage/room_planner/update', methods=['POST'])
 def update():
-    update_manage_table(request.form, request.args, request.files, 'room_planner2')
+    update_manage_table(request.form.getlist('data'),
+                        request.form.getlist('element'),
+                        request.args,
+                        request.files.getlist('image'),
+                        'room_planner2')
     return redirect(url_for('room_planner.main'))

+ 73 - 0
backstage/store_locations/routes.py

@@ -0,0 +1,73 @@
+from flask import render_template, Blueprint, request, redirect, url_for, flash
+import requests
+from os import path
+from time import sleep
+from backstage.utils import translate
+from backstage.config import PORTAL_SERVER
+from backstage.utils.routes import remove_content
+
+store_locations_app = Blueprint('store_locations', __name__)
+
+
+@store_locations_app.route('/backstage/store_location')
+def main():
+    response = requests.get('{}store_locations'.format(PORTAL_SERVER))
+    return render_template('store_location.html',
+                           title='門市據點',
+                           page='store_location',
+                           stores_data=response.json())
+
+
+@store_locations_app.route('/backstage/store_locations/create', methods=['POST'])
+def create():
+    def get_imgs():
+        imgs = []
+        for img_src in request.form.getlist('img-{}'.format(idx)):
+            imgs.append(img_src)
+        for f_img in request.files.getlist('image-{}'.format(idx)):
+            img_src = '/img/{}/{}'.format(type_, f_img.filename)
+            requests.post('{}statics/img?type={}&filename={}'.format(
+                PORTAL_SERVER, type_, f_img.filename), files={'image': f_img})
+            imgs.append(img_src)
+        return imgs
+
+    def get_district_name():
+        return translate(title.replace('門市', '')).lower().replace(' ', '_')
+
+    result = []
+    idx = 1
+    for title, type_, store, hour, phone, location, parking in zip(
+        request.form.getlist('title'), request.form.getlist('type'), request.form.getlist('store'),
+        request.form.getlist('hour'), request.form.getlist('phone'),
+        request.form.getlist('location'), request.form.getlist('parking')
+    ):
+        result.append({
+            'title': title, 'type': type_, 'imgs': list(get_imgs()), 'store': store,
+            'hour': hour, 'phone': phone, 'location': location, 'parking': parking,
+            'url': '/{}/bhouse_store_in_{}_city'.format(type_, get_district_name())
+        })
+        idx += 1
+    response = requests.post('{}store_locations'.format(PORTAL_SERVER), json=result)
+    if response.status_code == 200:
+        sleep(1)  # waiting for API upload image successfully.
+        flash('提交成功', 'success')
+    else:
+        flash('提交失敗', 'danger')
+    return redirect(url_for('store_locations.main'))
+
+
+@store_locations_app.route('/backstage/store_locations/remove_img', methods=['GET'])
+def remove_img():
+    response = requests.delete('{}statics/img?type={}&filename={}'.format(
+        PORTAL_SERVER, request.args.get('type'), path.basename(request.args.get('src'))))
+    if response.status_code == 200:
+        flash('移除照片成功', 'success')
+    else:
+        flash('移除照片失敗', 'danger')
+    return redirect(url_for('store_locations.main'))
+
+
+@store_locations_app.route('/backstage/store_locations/remove', methods=['POST'])
+def remove():
+    remove_content()
+    return redirect(url_for('store_locations.main'))

+ 2 - 2
backstage/templates/about.html

@@ -1,4 +1,4 @@
 {% extends "layout.html" %}
-{% block content %}
+{% block main %}
     <h1>Collection</h1>
-{% endblock content %}
+{% endblock main %}

+ 2 - 2
backstage/templates/activity.html

@@ -1,4 +1,4 @@
 {% extends "layout.html" %}
-{% block content %}
+{% block main %}
     <h1>Activity</h1>
-{% endblock content %}
+{% endblock main %}

+ 2 - 2
backstage/templates/frequently_asked_questions.html

@@ -1,4 +1,4 @@
 {% extends "layout.html" %}
-{% block content %}
+{% block main %}
     <h1>frequently_asked_questions</h1>
-{% endblock content %}
+{% endblock main %}

+ 2 - 2
backstage/templates/layout.html

@@ -17,6 +17,7 @@
   
   <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
   <script src="https://unpkg.com/axios/dist/axios.min.js"></script> 
+  <script src='https://code.jquery.com/jquery-3.2.1.slim.min.js'></script>
 
   <style>
     .outerDiv {
@@ -61,7 +62,7 @@
               <span class="menu-collapsed">規劃作品</span>    
             </div>
           </a>
-          <a href="#" class="bg-dark list-group-item list-group-item-action">
+          <a href="{{ url_for('store_locations.main') }}" class="bg-dark list-group-item list-group-item-action">
             <div class="d-flex w-100 justify-content-start align-items-center">
               <i class="fas fa-location-arrow mr-3"></i>
               <span class="menu-collapsed">門市據點</span>    
@@ -123,7 +124,6 @@
   </div><!-- container -->
   </div>
   <!-- partial -->
-  <script src='https://code.jquery.com/jquery-3.2.1.slim.min.js'></script>
   <script src='https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js'></script>
   <script src='https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js'></script>
   <script type="text/javascript" src="{{url_for('static', filename='js/sidebar.js')}}"></script>

+ 2 - 2
backstage/templates/solid_wood_furniture.html

@@ -1,4 +1,4 @@
 {% extends "layout.html" %}
-{% block content %}
+{% block main %}
     <h1>solid_wood_furniture</h1>
-{% endblock content %}
+{% endblock main %}

+ 158 - 0
backstage/templates/store_location.html

@@ -0,0 +1,158 @@
+{% extends "layout.html" %}
+{% block main %}
+<h1 class="h3"><i class="fas fa-pen mr-2"></i>{{ title }}</h1>
+{% for part, stores in stores_data.items() %}
+<div>
+  <form action="{{ url_for('store_locations.create') }}" method="POST" enctype="multipart/form-data">
+    {% if part == "north" %}
+      <h2>北部門市</h2>
+    {% elif part == "central" %}
+      <h2>中部門市</h2>
+    {% elif part == "south" %}
+      <h2>南部門市</h2>
+    {% elif part == "east" %}
+      <h2>東部門市</h2>
+    {% endif %}
+    <table id="store_locations_table" class="table table__content mb-0" cellspacing="0" width="60%">
+      <thead>
+        <tr>
+          <th class="table__head">數量</th>
+          <th class="table__head">區域</th>
+          <th class="table__head">門市</th>
+          <th class="table__head">營業時間</th>
+          <th class="table__head">門市電話</th>
+          <th class="table__head">門市地點</th>
+          <th class="table__head">停車資訊</th>
+          <th class="table__head">輪播照片</th>
+          <th style="text-align:center;width:100px;">
+            <button type="button" class="btn__add m-1" data-toggle="modal" data-target="#createModal">
+              <i class="fas fa-plus"></i>
+            </button>
+          </th>
+        </tr>
+      </thead>
+      {% for store in stores %}
+        {% set store_idx = loop.index %}
+        <tbody>
+          <tr>
+            <td class="table__data">{{ loop.index }}</td>
+            <td class="table__data">{{ store.title }}</td>
+            <td class="table__data">{{ store.store }}</td>
+            <td class="table__data">{{ store.hour }}</td>
+            <td class="table__data">{{ store.phone }}</td>
+            <td class="table__data">{{ store.location }}</td>
+            <td class="table__data">{{ store.parking }}</td>
+            <td class="table__data">
+              {% for img_src in store.imgs %}
+                <img src="http://127.0.0.1:1313/{{ img_src }}" width="80px" height="50px">
+                <input name="img-{{ store_idx }}" type='hidden' value="{{ img_src }}">
+                <a class="btn btn-secondary btn-sm m-1" href="{{ url_for('store_locations.remove_img', type=store.type, src=img_src) }}">
+                  移除
+                </a>
+              {% endfor %} 
+            </td>
+            <td>
+              <div class="d-flex justify-content-center">
+                <button type="button" class="btn__edit  m-2">
+                  <i class="fas fa-edit"></i>
+                </button>
+                <form action="{{ url_for('store_locations.remove', url=store.url) }}" method="POST">
+                  <button class="btn__delete m-1" type="submit" value="delete"><i class="fas fa-trash-alt"></i></button>
+                </form>
+                <div class="modal fade" id="updateModal" tabindex="-1" role="dialog" aria-labelledby="updateModalLabel" aria-hidden="true">
+                  <div class="modal-dialog" role="document">
+                    <div class="modal-content">
+                      <div class="modal-header border-0">
+                        <h5 class="modal-title modal__title" id="createModalLabel">新增據點</h5>
+                        <button type="button" class="close modal__close" data-dismiss="modal" aria-label="Close">
+                          <span class="modal__close__back">
+                            <span aria-hidden="true">&times;</span>
+                          </span>
+                        </button>
+                      </div>
+                      <div class="modal-body">
+                        <input name="type" type="hidden" value="{{ store.type }}" readonly>
+                        <label for="title">區域</label>
+                        <input name="title" class="form-control form-control-lg" value="{{ store.title }}">
+                        <label for="store">門市</label>
+                        <input name="store" class="form-control form-control-lg" value="{{ store.store }}">
+                        <label for="hour">營業時間</label>
+                        <input name="hour" class="form-control form-control-lg" value="{{ store.hour }}">
+                        <label for="phone">門市電話</label>
+                        <input name="phone" class="form-control form-control-lg" value="{{ store.phone }}">
+                        <label for="location">門市地點</label>
+                        <input name="location" class="form-control form-control-lg" value="{{ store.location }}">
+                        <label for="parking">停車資訊</label>
+                        <input name="parking" class="form-control form-control-lg" value="{{ store.parking }}">
+                        <label for="image">輪播照片上傳</label>
+                        <input type="file" name="image-{{ store_idx }}" accept="image/*" multiple>
+                        <div class="modal-footer pb-0 border-0">
+                          <button type="button" class="btn btn__cancel" data-dismiss="modal">取消</button>
+                          <input class="btn btn__submitadd" type="submit" value="完成">
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </td>
+          </tr>
+        </tbody>
+      {% endfor %}
+    </table>
+  </form>
+</div>
+{% endfor %}
+<!-- Modal -->
+<div class="modal fade" id="createModal" tabindex="-1" role="dialog" aria-labelledby="createModalLabel" aria-hidden="true">
+  <div class="modal-dialog" role="document">
+    <div class="modal-content">
+      <div class="modal-header border-0">
+        <h5 class="modal-title modal__title" id="createModalLabel">新增據點</h5>
+        <button type="button" class="close modal__close" data-dismiss="modal" aria-label="Close">
+          <span class="modal__close__back">
+            <span aria-hidden="true">&times;</span>
+          </span>
+        </button>
+      </div>
+      <div class="modal-body">
+        <form action="{{ url_for('store_locations.create') }}" method="POST" enctype="multipart/form-data">
+          <label for="type">分佈</label>
+          <br/><select id="type" name="type">
+            <option value="store_north">北部</option>
+            <option value="store_central">中部</option>
+            <option value="store_south">南部</option>
+            <option value="store_east">東部</option>
+          </select> <br/>
+          <label for="title">區域</label>
+          <input name="title" class="form-control form-control-lg">
+          <label for="store">門市</label>
+          <input name="store" class="form-control form-control-lg">
+          <label for="hour">營業時間</label>
+          <input name="hour" class="form-control form-control-lg">
+          <label for="phone">門市電話</label>
+          <input name="phone" class="form-control form-control-lg">
+          <label for="location">門市地點</label>
+          <input name="location" class="form-control form-control-lg">
+          <label for="parking">停車資訊</label>
+          <input name="parking" class="form-control form-control-lg">
+          <label for="image">輪播照片上傳</label>
+          <input type="file" name="image-1" accept="image/*" multiple>
+          <div class="modal-footer pb-0 border-0">
+            <button type="button" class="btn btn__cancel" data-dismiss="modal">取消</button>
+            <input class="btn btn__submitadd" type="submit" value="完成">
+          </div>
+        </form>
+      </div>
+    </div>
+  </div>
+</div>
+<script>
+  for (const tbody of document.querySelectorAll('tbody')) {
+    const btn = tbody.querySelector(".m-2")
+    btn.onclick = function() {
+      $(tbody).find('#updateModal').modal("toggle");
+    }
+  }
+</script>
+{% endblock main %}

+ 2 - 2
backstage/templates/system_furniture.html

@@ -1,4 +1,4 @@
 {% extends "layout.html" %}
-{% block content %}
+{% block main %}
     <h1>system_furniture</h1>
-{% endblock content %}
+{% endblock main %}

+ 92 - 62
backstage/templates/tables/manage_table.html

@@ -5,9 +5,8 @@
   <div class="table__block">
     <h4 class="h4 mb-0">區塊{{ loop.index }}</h4>
     <span class="btn__opentab"><i class="fas fa-chevron-down"></i></span>
-    <form action="{{ url_for(form_url, page=page, section_class=content.sectionClass) }}" method="POST" enctype="multipart/form-data" class="form__action">
-      {% set tabidx = loop.index %}
-      <table id="example" class="table table__content mb-0">
+    <form action="{{ url_for(form_url, page=page, section_class=content.sectionClass) }}" method="POST" enctype="multipart/form-data" class="form__action">      
+      <table id="manage_table" class="table table__content mb-0">
         <thead>
           <tr>
             <th class="table__head" width="80">順序</th>
@@ -22,96 +21,119 @@
             {% for data in value %}
               <tbody>
                 <tr>
+                  <input name="element" type="hidden" value="{{ key }}">
                   <td class="table__data">{{ loop.index }}</td>
                   {% if key == "img" %}
                     <td class="table__data"><span class="badge badge-pill badge__img">圖片</span></td>
                     <td class="table__data" style="display:flex;justify-content:center">
                       <div class="img__table"><img src="http://127.0.0.1:1313/{{ data['src'] }}" width="100%" height="100%"></div>
                     </td>
-                    <div class="modal fade" id="{{ tabidx }}-{{ key }}-{{ loop.index }}" tabindex="-1" role="dialog" aria-labelledby="{{ key }}-{{ loop.index }}Label" aria-hidden="true">
-                      <div class="modal-dialog" role="document">
-                        <div class="modal-content">
-                          <div class="modal-header border-0">
-                            <h5 class="modal-title modal__title" id="exampleModalLabel">編輯</h5>
-                            <button type="button" class="close modal__close" data-dismiss="modal" aria-label="Close">
-                              <span class="modal__close__back">
-                                <span aria-hidden="true">&times;</span>
-                              </span>
-                            </button>
-                          </div>
-                          <div class="modal-body">
-                            <input id="image" name="image-{{ loop.index }}" type="file" value="{{ data['src'] }}">
-                            <input name="{{ tabidx }}-{{ key }}-{{ loop.index }}" type="hidden" value="{{ data }}">
-                            <div class="modal__img"><img src="http://127.0.0.1:1313/{{ data['src'] }}"></div>
-                            <div class="modal-footer pb-0 border-0">
-                              <button type="button" class="btn btn__cancel" data-dismiss="modal">取消</button>
-                              <input class="btn btn__submitadd" type="submit" value="完成">
+                    <td class="table__data">
+                      <div class="d-flex justify-content-center">
+                        <button type="button" class="btn__edit  m-1">
+                          <i class="fas fa-edit"></i>
+                        </button>
+                        <div class="modal fade" id="manage_modal" tabindex="-1" role="dialog" aria-labelledby="Label" aria-hidden="true">
+                          <div class="modal-dialog" role="document">
+                            <div class="modal-content">
+                              <div class="modal-header border-0">
+                                <h5 class="modal-title modal__title" id="exampleModalLabel">編輯</h5>
+                                <button type="button" class="close modal__close" data-dismiss="modal" aria-label="Close">
+                                  <span class="modal__close__back">
+                                    <span aria-hidden="true">&times;</span>
+                                  </span>
+                                </button>
+                              </div>
+                              <div class="modal-body">
+                                <input id="image" name="image" type="file" value="{{ data['src'] }}">
+                                <input name="data" type="hidden" value="{{ data }}">
+                                <div class="modal__img"><img src="http://127.0.0.1:1313/{{ data['src'] }}"></div>
+                                <div class="modal-footer pb-0 border-0">
+                                  <button type="button" class="btn btn__cancel" data-dismiss="modal">取消</button>
+                                  <input class="btn btn__submitadd" type="submit" value="完成">
+                                </div>
+                              </div>
                             </div>
                           </div>
                         </div>
+                        <form action="#" method="POST">
+                          <button class="btn__delete m-1" type="submit" value="delete"><i class="fas fa-trash-alt"></i></button>
+                        </form>
                       </div>
-                    </div>
+                    </td>
                   {% elif key == "yt_video" %}
                     <td class="table__data"><span class="badge badge-pill badge__video">影片</span></td>
                     <td class="table__data">
                       {{ data['videoid'] }}
                     </td>
-                    <div class="modal fade" id="{{ tabidx }}-{{ key }}-{{ loop.index }}" tabindex="-1" role="dialog" aria-labelledby="{{ key }}-{{ loop.index }}Label" aria-hidden="true">
-                      <div class="modal-dialog" role="document">
-                        <div class="modal-content">
-                          <div class="modal-header border-0">
-                            <h5 class="modal-title modal__title" id="exampleModalLabel">編輯</h5>
-                            <button type="button" class="close modal__close" data-dismiss="modal" aria-label="Close">
-                              <span class="modal__close__back">
-                                <span aria-hidden="true">&times;</span>
-                              </span>
-                            </button>
-                          </div>
-                          <div class="modal-body">
-                            <input name="{{ tabidx }}-{{ key }}-{{ loop.index }}" class="form-control form-control-lg " value="{{ data }}">
-                            <div class="modal-footer pb-0 border-0">
-                              <button type="button" class="btn btn__cancel" data-dismiss="modal">取消</button>
-                              <input class="btn btn__submitadd" type="submit" value="完成">
+                    <td class="table__data">
+                      <div class="d-flex justify-content-center">
+                        <button type="button" class="btn__edit  m-1">
+                          <i class="fas fa-edit"></i>
+                        </button>
+                        <div class="modal fade" id="manage_modal" tabindex="-1" role="dialog" aria-labelledby="Label" aria-hidden="true">
+                          <div class="modal-dialog" role="document">
+                            <div class="modal-content">
+                              <div class="modal-header border-0">
+                                <h5 class="modal-title modal__title" id="exampleModalLabel">編輯</h5>
+                                <button type="button" class="close modal__close" data-dismiss="modal" aria-label="Close">
+                                  <span class="modal__close__back">
+                                    <span aria-hidden="true">&times;</span>
+                                  </span>
+                                </button>
+                              </div>
+                              <div class="modal-body">
+                                <input name="data" class="form-control form-control-lg " value="{{ data }}">
+                                <div class="modal-footer pb-0 border-0">
+                                  <button type="button" class="btn btn__cancel" data-dismiss="modal">取消</button>
+                                  <input class="btn btn__submitadd" type="submit" value="完成">
+                                </div>
+                              </div>
                             </div>
                           </div>
                         </div>
+                        <form action="#" method="POST">
+                          <button class="btn__delete m-1" type="submit" value="delete"><i class="fas fa-trash-alt"></i></button>
+                        </form>
                       </div>
-                    </div>
+                    </td>
                   {% else %}
                   <td class="table__data"><span class="badge badge-pill badge__txt">文字</span></td>
                   <td class="table__data txt__cut">
-                    {{ data }}
+                    <div>{{ data }}</div>
                   </td>
-                  <div class="modal fade" id="{{ tabidx }}-{{ key }}-{{ loop.index }}" tabindex="-1" role="dialog" aria-labelledby="{{ key }}-{{ loop.index }}Label" aria-hidden="true">
-                    <div class="modal-dialog" role="document">
-                      <div class="modal-content">
-                        <div class="modal-header border-0">
-                          <h5 class="modal-title modal__title" id="exampleModalLabel">編輯</h5>
-                          <button type="button" class="close modal__close" data-dismiss="modal" aria-label="Close">
-                            <span class="modal__close__back">
-                              <span aria-hidden="true">&times;</span>
-                            </span>
-                          </button>
-                        </div>
-                        <div class="modal-body">
-                          <input name="{{ tabidx }}-{{ key }}-{{ loop.index }}" class="form-control form-control-lg modal__text__input" value="{{ data }}">
-                          <div class="modal-footer pb-0 border-0">
-                            <button type="button" class="btn btn__cancel" data-dismiss="modal">取消</button>
-                            <input class="btn btn__submitadd" type="submit" value="完成">
+                  <td class="table__data">
+                    <div class="d-flex justify-content-center">
+                      <button data_element="{{ key }}" data="{{ data }}" type="button" class="btn__edit  m-1">
+                        <i class="fas fa-edit"></i>
+                      </button>
+                      <div class="modal fade" id="manage_modal" tabindex="-1" role="dialog" aria-labelledby="Label" aria-hidden="true">
+                        <div class="modal-dialog" role="document">
+                          <div class="modal-content">
+                            <div class="modal-header border-0">
+                              <h5 class="modal-title modal__title" id="exampleModalLabel">編輯</h5>
+                              <button type="button" class="close modal__close" data-dismiss="modal" aria-label="Close">
+                                <span class="modal__close__back">
+                                  <span aria-hidden="true">&times;</span>
+                                </span>
+                              </button>
+                            </div>
+                            <div class="modal-body">
+                              <input name="data" class="form-control form-control-lg modal__text__input" value="{{ data }}">
+                              <div class="modal-footer pb-0 border-0">
+                                <button type="button" class="btn btn__cancel" data-dismiss="modal">取消</button>
+                                <input class="btn btn__submitadd" type="submit" value="完成">
+                              </div>
+                            </div>
                           </div>
                         </div>
                       </div>
-                    </div>
-                  </div>
-                  {% endif %}
-                  <td class="table__data">
-                    <div class="d-flex justify-content-center">
-                      <button type="button" class="btn__edit  m-1" data-toggle="modal" data-target="#{{ tabidx }}-{{ key }}-{{ loop.index }}"><i class="fas fa-edit"></i></button>
                       <form action="#" method="POST">
                         <button class="btn__delete m-1" type="submit" value="delete"><i class="fas fa-trash-alt"></i></button>
                       </form>
                     </div>
                   </td>
+                  {% endif %}
                 </tr>
               </tbody>
             {% endfor %}
@@ -121,4 +143,12 @@
     </form>
   </div>
 {% endfor %}
+<script>
+  for (const tbody of document.querySelectorAll('tbody')) {
+    const btn = tbody.querySelector(".m-1")
+    btn.onclick = function() {
+      $(tbody).find('#manage_modal').modal("toggle");
+    }
+  }
+</script>
 {% endblock main %}

+ 9 - 11
backstage/utils/routes.py

@@ -37,22 +37,21 @@ def get_trans_title_url_name(title):
     return translate(title).replace(' ', '_')
 
 
-def update_manage_table(forms, req_args, files, img_type):
+def update_manage_table(data, elements, req_args, files, img_type):
     def allow_file(filename):
         return '.' in filename and \
            filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
     ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif', 'webp'}
     update_data = defaultdict(list)
-    for key, value in forms.items():
-        element_type = key.split('-')[0]
-        if element_type == 'img':
+    for element, value in zip(elements, data):
+        if element == 'img':
             value = eval(value)
-        elif element_type == 'yt_video':
+        elif element == 'yt_video':
             value = {'videoid': str(value)}
         else:
             value = str(value)
-        update_data[element_type].append(value)
-    for f_key, f_value in files.items():
+        update_data[element].append(value)
+    for idx, f_value in enumerate(files):
         if not f_value or f_value.filename == '':
             continue
         if not allow_file(f_value.filename):
@@ -61,14 +60,13 @@ def update_manage_table(forms, req_args, files, img_type):
         requests.post(
             '{}upload/static/img?type={}&filename={}'.format(
                 PORTAL_SERVER, img_type, f_value.filename), files={'image': f_value})
-        img_index = int(f_key.split('-')[-1])-1
-        update_data['img'][img_index]['src'] = path.join(
-            path.split(update_data['img'][img_index]['src'])[0], f_value.filename)
+        update_data['img'][idx]['src'] = path.join(
+            path.split(update_data['img'][idx]['src'])[0], f_value.filename)
     response = requests.post(
         '{}manages/data?page={}&section={}'.format(
             PORTAL_SERVER, req_args.get('page'), req_args.get('section_class')), json=update_data)
     if response.status_code == 200:
-        sleep(1) # waiting for API upload image successfully.
+        sleep(1)  # waiting for API upload image successfully.
         flash('修改成功', 'success')
     else:
         flash('修改失敗', 'danger')