diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..9fc2c6f --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,38 @@ +# Contributing to Froggy's Service + +:+1::tada: 首先,感謝所有關心這個專案的朋友,希望我們能一起透過改善這個專案來讓政治變得更好! :tada::+1: + +我們目前亟欲各位的跳坑,因團隊開發人員都各有工作,經驗也稍嫌不足,這個專案舉凡視覺、界面、功能上都有許多尚待改進的地方。 + +## 參與的形式 +現階段建議藉由Github Issue來發起與討論,由Pull Request來貢獻代碼,您可以: + +* 回報及協助修正錯誤 +* 建議與新增新的功能 +* 建議或改善現有功能 + +## 待做事項 + +**功能面** + +* [強化案件清單的使用者界面](https://github.com/FroggyTaipei/froggy-service/issues/225) +* [強化案件分享與討論機制](https://github.com/FroggyTaipei/froggy-service/issues/181) +* [案件資料視覺化](https://github.com/FroggyTaipei/froggy-service/issues/231) + +**網站視覺與使用者體驗** + +若您跟我一樣,覺得目前的網站視覺還是稍嫌陽春,有任何想法或想幫我們改版,都非常歡迎! + +## 未來展望 + +**擴大應用** + +我們不久後將會在g0v黑客松持續提案,以此專案為試金石,將公開透明市民服務這個理念擴大應用至全國市議會。 + +我們無意要取代1999或其他既有的陳情系統,而是希望以**立法**面向出發,改善現有行政客服的不便,更重要的是作到**公開透明**。 + +當然,現有的這個專案像是呱吉的個人網站,所以擴大應用**不會**基於此專案。期待您的加入一起討論出更適合的形式! + +## 聯絡方式 + +若有任何疑問,歡迎透過servant@65535studio.com與我們聯繫 diff --git a/README.md b/README.md index c7f6cf7..ee66e59 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,12 @@ # Froggy's service +![travis-ci](https://travis-ci.org/FroggyTaipei/froggy-service.svg?branch=master) + Project setup using [cookiecutter-django-vue](https://github.com/vchaptsev/cookiecutter-django-vue) +### Contribution + +See our [contributing guide](CONTRIBUTING.md). + ### Development Create your own `.env` file at root, e.g. using `.env.example`: @@ -20,13 +26,13 @@ $ docker-compose down -v Run production: ``` -$ docker-compose -f docker-compose-prod.yml up --build -$ docker-compose -f docker-compose-prod.yml down -v +$ docker-compose -f docker-compose-prod.yml up +$ docker-compose -f docker-compose-prod.yml down ``` Base on your operating system, **missing bindings** might happen: ``` -$ docker-compose up --build +$ docker-compose up ... Node Sass could not find a binding for your current environment: Linux/musl 64-bit with Node.js 10.x ``` @@ -88,12 +94,18 @@ $ kubectl delete --all deployments --namespace=app $ kubectl delete --all secrets --namespace=app ``` - ### Architecture ![Architecture diagram](architecture.png) -### Licence +### Licenses * Copyright (C) 2019 - 2019 台北市議員邱威傑辦公室. All rights reserved. * Distributed under the GNU AGPL v3.0 + +Media +* Distributed under the CC0 1.0 Universal + +Data +* Try our API via [Swagger](https://service.froggychiu.com/api/swagger/) +* Distributed under the CC BY 4.0 diff --git a/backend/apps/cases/views.py b/backend/apps/cases/views.py index 36b9f4b..e3c0dca 100644 --- a/backend/apps/cases/views.py +++ b/backend/apps/cases/views.py @@ -2,6 +2,8 @@ from rest_framework.viewsets import ModelViewSet, ReadOnlyModelViewSet from rest_framework.decorators import action from rest_framework.response import Response +from rest_framework.pagination import LimitOffsetPagination +from rest_framework.filters import OrderingFilter, SearchFilter from rest_framework import status from rest_framework.permissions import IsAuthenticatedOrReadOnly @@ -43,6 +45,11 @@ class CaseViewSet(ModelViewSet): serializer_class = CaseSerializer permission_classes = [IsAuthenticatedOrReadOnly] http_method_names = ['get', 'post', 'retrieve'] + pagination_class = LimitOffsetPagination + filter_backends = (OrderingFilter, SearchFilter) + search_fields = ('id', 'number', 'type__name', 'location', 'title', 'content', + 'disapprove_info', 'arranges__title', 'arranges__content') + ordering_fields = ('id', 'number', 'type') def get_serializer_class(self): if self.action in ['create', 'update']: @@ -94,7 +101,6 @@ def vuetable(self, request): | Q(content__icontains=query) | Q(location__icontains=query) | Q(type__name__icontains=query) - | Q(region__name__icontains=query) | Q(state__icontains=query) | Q(disapprove_info__icontains=query) | Q(arranges__id__in=arrange_ids)).distinct() diff --git a/frontend/src/components/CaseList.vue b/frontend/src/components/CaseList.vue index b3f3ad6..a21f83a 100644 --- a/frontend/src/components/CaseList.vue +++ b/frontend/src/components/CaseList.vue @@ -30,11 +30,11 @@ el-container.page2 .arranges-title 案件處理進度: br .case-content-arranges(v-for="arrange,index in reverseCaseProcess") + hr(v-if="index > 0") div.arrange-title 處理主旨: {{ arrange.title }} div.arrange-time 處理時間: {{arrange.arrange_time}} div.arrange-content(v-html="arrange.content") - hr - div(style="text-align: center; display:block") ---------- End ---------- + div(style="text-align: center; display:block") .dialog-footer(slot='footer') .footer-block .content-status 處理進度:{{ selectedCaseDetails.state }}