ソースを参照

feature:
增加下载多语言

chenjunkai 6 年 前
コミット
552a03e26d
4 ファイル変更99 行追加11 行削除
  1. 54 3
      controller/LangArea.py
  2. 1 0
      langer/urls.py
  3. 2 2
      web/js/jqhttpsdk.js
  4. 42 6
      web/langTab.html

+ 54 - 3
controller/LangArea.py

@@ -20,7 +20,7 @@ from django.views.decorators.csrf import csrf_exempt
 from django.utils.decorators import method_decorator
 from object.ResponseObject import ResponseObject
 from django.contrib.auth.hashers import make_password, check_password
-from model.models import UserModel, LangSetModel, LangAreaModel
+from model.models import UserModel, LangSetModel, LangAreaModel, LangValModel, LangKeyModel
 import time
 from object.TokenObject import TokenObject
 
@@ -53,6 +53,8 @@ class LangAreaView(TemplateView):
                 return self.do_delete(request_dict, response)
             elif operation == 'query':
                 return self.do_query(request_dict, response, userID)
+            elif operation == 'export':
+                return self.do_export(request_dict, response, userID)
             else:
                 return response.json(414)
         else:
@@ -101,5 +103,54 @@ class LangAreaView(TemplateView):
             return response.json(0)
 
     def do_query(self, request_dict, response, userID):
-        la_qs = LangAreaModel.objects.filter().values('lang','id')
-        return response.json(0, list(la_qs))
+        la_qs = LangAreaModel.objects.filter().values('lang', 'id')
+        return response.json(0, list(la_qs))
+
+    def do_export(self, request_dict, response, userID):
+        id = request_dict.get('id', None)
+        type = request_dict.get('type', None)
+        # key_list = LangKeyModel.objects.filter().values_list('word_key', flat=True)
+        en_qs = LangKeyModel.objects.filter(langvalmodel__la__id=9).values('word_key', 'langvalmodel__word_val')
+        en_kv = {}
+        for e in en_qs:
+            en_kv[e['word_key']] = e['langvalmodel__word_val']
+        res_qs = LangKeyModel.objects.filter(langvalmodel__la__id=id).values('word_key', 'langvalmodel__word_val')
+        res = {}
+        for r in res_qs:
+            res[r['word_key']] = r['langvalmodel__word_val'] if r['langvalmodel__word_val'] else en_kv[r['word_key']]
+        content = ''
+        if type == 'ios':
+            for l in res:
+                content = content + '"' + l + '"="' + res[l] + '";\n'
+        elif type == 'android':
+            for l in res:
+                content = content + '<string name="' + l + '">' + res[l] + '</string>\n'
+        from django.http import StreamingHttpResponse
+        response = StreamingHttpResponse(content)
+        response['Content-Type'] = 'application/octet-stream'
+        response['Content-Disposition'] = 'attachment;filename="lang.txt"'
+        return response
+        return response.json(0, res)
+
+
+from django.http import StreamingHttpResponse
+
+
+class exportLangView(TemplateView):
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = json.loads(request.body.decode('utf-8'))
+        return self.validate(request_dict)
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.GET
+        return self.validate(request_dict)
+
+    def validate(self, request_dict):
+        # 得到即将下载文件的路径和名称
+
+        response = StreamingHttpResponse('123l4kjlkfjlksadjlfksdajlf')
+        response['Content-Type'] = 'application/octet-stream'
+        response['Content-Disposition'] = 'attachment;filename="lang.txt"'
+        return response

+ 1 - 0
langer/urls.py

@@ -12,4 +12,5 @@ urlpatterns = [
     re_path('langSet/(?P<operation>.*)', LangSet.LangSetView.as_view()),
     re_path('langWord/(?P<operation>.*)', LangWord.LangWordView.as_view()),
     re_path('langArea/(?P<operation>.*)', LangArea.LangAreaView.as_view()),
+    path('exportLang',LangArea.exportLangView.as_view())
 ]

+ 2 - 2
web/js/jqhttpsdk.js

@@ -5,9 +5,9 @@
 // var http_ip_prot = 'http://192.168.136.40:4696/'
 let domain = document.domain;
 
-// let http_ip_prot = 'http://192.168.136.40:7724/';
+let http_ip_prot = 'http://192.168.136.40:7724/';
     //生产环境
-let http_ip_prot = 'http://47.107.129.126:7724/';
+// let http_ip_prot = 'http://47.107.129.126:7724/';
 
 $.GetJSON = function (url, data, callback) {
     $.ajax({

+ 42 - 6
web/langTab.html

@@ -85,11 +85,11 @@
                     <div class="col-md-12">
                         <table class="table table-bordered table-hover">
                             <thead id="tabLangHead">
-                           <tr>
-                               <th>编号</th>
-                               <th>语言</th>
-                               <th>操作</th>
-                           </tr>
+                            <tr>
+                                <th>编号</th>
+                                <th>语言</th>
+                                <th>操作</th>
+                            </tr>
                             </thead>
                             <tbody id="tabLangBody"></tbody>
                         </table>
@@ -162,10 +162,14 @@
 
     function addLangAreaTable(data) {
         let body_html = ''
+
         $.each(data, function (idx, obj) {
             let edit_btn = '<a href="#" title="Edit" onclick="editFunc(\'' + obj['id'] + '\')"><i class="fa fa-edit"></i></a>';
             let del_btn = '<a href="#" title="Delete" onclick="delArea(\'' + obj['id'] + '\')"><i class="fa fa-ban"></i></a>';
-            body_html += '<tr><td>' + obj['id'] + '</td><td>' + obj['lang'] + '</td><td>' + edit_btn + '&nbsp;&nbsp;&nbsp;' + del_btn + '</td></tr>'
+            let idw_btn = 'IOS:<a href="#" title="ios" onclick="dlFunc(\'' + obj['id'] + '\',1)"><i class="fa fa-download"></i></a>';
+            let adw_btn = '安卓:<a href="#" title="android" onclick="dlFunc(\'' + obj['id'] + '\',2)"><i class="fa fa-download"></i></a>';
+            let np = '&nbsp;&nbsp;&nbsp;'
+            body_html += '<tr><td>' + obj['id'] + '</td><td>' + obj['lang'] + '</td><td>' + edit_btn + np + del_btn + np + idw_btn + np + adw_btn + '</td></tr>'
         })
         $('#tabLangBody').html(body_html)
     }
@@ -262,6 +266,38 @@
             alert('none')
         }
     }
+
+    function dlFunc(id, type) {
+        let post_type = ''
+        if (type == 1) {
+            post_type = 'ios'
+        } else if (type == 2) {
+            post_type = 'android'
+        }
+        let post_data = {
+            'token': $.cookie('access_token'),
+            'id': id
+        }
+        window.location.href = http_ip_prot + 'langArea/export?id=' + id + '&token=' + post_data['token'] + '&type=' + post_type
+        return
+        window.location.href = 'http://192.168.136.40:7724/exportLang'
+        return
+        let cr = confirm('export it ?')
+        if (cr) {
+            $.postJSON(
+                http_ip_prot + 'langArea/export', JSON.stringify(post_data),
+                function (data) {
+                    if (data['code'] == 0) {
+                        console.log(data)
+                        // alert(data['msg'])
+                        // window.location.reload()
+                    } else {
+                        alert(data['msg'])
+                    }
+                }
+            );
+        }
+    }
 </script>
 </body>
 </html>