Skip to content

Commit 0085ddd

Browse files
author
root
committed
支持python2.X,sqlite,优化内网使用删除外网访问代码,添加上周周报保存和显示字段,修复登录的无提示问题
1 parent bf76950 commit 0085ddd

File tree

18 files changed

+123
-35
lines changed

18 files changed

+123
-35
lines changed

deploy/app/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from flask_login import LoginManager
88
from flask_sqlalchemy import SQLAlchemy
99
from .json_encoder import JSONEncoder
10+
from utils import get_last_week_content
1011

1112

1213
bootstrap = Bootstrap()
@@ -60,4 +61,6 @@ def create_app(config_file):
6061

6162
# lazy_gettext Json Error Fix
6263
app.json_encoder = JSONEncoder
64+
65+
app.add_template_filter(get_last_week_content, 'get_last_week_content')
6366
return app

deploy/app/auth/forms.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#coding:utf-8
12
from flask_babelex import lazy_gettext as _
23
from flask_wtf import FlaskForm
34
from wtforms.fields.html5 import EmailField

deploy/app/auth/views.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#coding:utf-8
12
from flask import render_template, redirect, url_for, \
23
flash, current_app, request
34
from flask_babelex import lazy_gettext as _
@@ -17,11 +18,11 @@ def login():
1718
user = User.query.filter_by(email=form.email.data).first()
1819
if user and user.verify_password(form.password.data):
1920
login_user(user, form.remember_me.data)
20-
2121
current_app.logger.info(
2222
'{} login'.format(current_user.email))
23-
2423
return redirect(url_for('main.index'))
24+
else:
25+
flash(_('Account or password is wrong'))
2526
return render_template('auth/login.html', form=form)
2627

2728

deploy/app/email.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#coding:utf-8
12
from threading import Thread
23
from flask import current_app, render_template
34
from flask_mail import Message

deploy/app/main/errors.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#coding:utf-8
12
from flask import render_template, current_app, request, redirect, url_for
23
from flask_login import current_user
34
from . import main

deploy/app/main/views.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#coding:utf-8
12
from datetime import date
23
from flask import request, Response, redirect, url_for, current_app
34
from flask_admin.model import typefmt
@@ -106,20 +107,24 @@ class DepartmentAdminView(WeeklyReportModelView):
106107

107108

108109
class ReportAdminView(WeeklyReportModelView):
109-
column_labels = dict(year='年份', week_count='周次',
110-
created_at='创建时间', content='内容',
111-
author='员工邮箱', department='部门')
112-
column_list = ('author', 'department', 'year', 'week_count',
110+
column_labels = dict(year=u'年份', week_count=u'周次',
111+
created_at=u'创建时间', last_content=u'上周计划', content=u'内容',
112+
author=u'员工', department=u'部门')
113+
column_list = ('author', 'department', 'year', 'week_count', 'last_content',
113114
'content', 'created_at')
114115
column_default_sort = ('created_at', True)
115116
form_columns = ['created_at', 'week_count', 'year', 'content']
116117
list_template = '/admin/model/report_list_template.html'
117118
can_edit = True
118119
can_export = True
120+
export_types=['xls']
119121
form_widget_args = {
120122
'year': {
121123
'readonly': True
122124
},
125+
'last_content': {
126+
'readonly': True
127+
},
123128
'created_at': {
124129
'readonly': True
125130
},

deploy/app/models.py

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#coding:utf-8
12
from datetime import datetime
23
from werkzeug.security import generate_password_hash, check_password_hash
34
from flask import current_app
@@ -36,9 +37,9 @@ def insert_roles():
3637
'ADMINISTRATOR': 0xff,
3738
}
3839
for r in roles:
39-
role = Role.query.filter_by(name=r).first()
40+
role = Role.query.filter_by(name=unicode(r)).first()
4041
if role is None:
41-
role = Role(name=r,
42+
role = Role(name=unicode(r),
4243
permissions=roles[r])
4344
db.session.add(role)
4445
db.session.commit()
@@ -56,10 +57,18 @@ class Department(db.Model):
5657
@staticmethod
5758
def insert_departments():
5859
for dept in current_app.config['DEPARTMENTS']:
59-
if not Department.query.filter_by(name=dept).first():
60-
dept = Department(name=dept)
61-
db.session.add(dept)
62-
db.session.commit()
60+
if not Department.query.filter_by(name=unicode(dept)).first():
61+
dept = Department(name=unicode(dept))
62+
db.session.add(dept)
63+
db.session.commit()
64+
65+
@staticmethod
66+
def delete_departments():
67+
dept="1"
68+
dept= Department.query.filter_by(name=unicode(dept)).first()
69+
if dept:
70+
db.session.delete(dept)
71+
db.session.commit()
6372

6473
def __str__(self):
6574
return self.name
@@ -124,7 +133,7 @@ def is_authenticated(self):
124133
return self.can(Permission.WRITE_REPORT)
125134

126135
def __str__(self):
127-
return self.email
136+
return self.username
128137

129138

130139
class AnonymousUser(AnonymousUserMixin):
@@ -151,6 +160,7 @@ class Report(db.Model):
151160
created_at = db.Column(db.DateTime, index=True, default=datetime.now)
152161
author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
153162
content = db.Column(db.Text)
163+
last_content = db.Column(db.Text)
154164
week_count = db.Column(db.Integer)
155165
year = db.Column(db.Integer)
156166

@@ -175,6 +185,12 @@ def is_of_last_week(self):
175185
and self.year == get_last_week().year:
176186
return True
177187
return False
188+
189+
@staticmethod
190+
def get_last_report(author_id, week_count):
191+
report = Report.query.filter_by(author_id=author_id,week_count=week_count).first()
192+
if report:
193+
return report
178194

179195
def __str__(self):
180196
return 'Posted by {} at {}'.format(
@@ -183,7 +199,7 @@ def __str__(self):
183199

184200
@login_manager.user_loader
185201
def load_user(user_id):
186-
assert type(user_id) == str
202+
#assert type(user_id) == str
187203
return User.query.get(int(user_id))
188204

189205

deploy/app/report/forms.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1+
#coding:utf-8
12
from flask_babelex import lazy_gettext as _
23
from flask_wtf import FlaskForm
34
from wtforms.validators import DataRequired
4-
from wtforms import SubmitField, TextAreaField, SelectField
5+
from wtforms import SubmitField, TextAreaField, SelectField, HiddenField
56
from wtforms.fields.html5 import DateField
67

78

89
class WriteForm(FlaskForm):
910
body = TextAreaField(_("This week's work content and plan of next week"),
1011
validators=[DataRequired()])
12+
last_content = HiddenField(_("This week's work content and plan of last week"))
1113
submit = SubmitField(_('Submit'))
1214

1315

deploy/app/report/views.py

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#coding:utf-8
12
from flask import render_template, redirect,request, url_for, \
23
current_app, flash, Markup
34
from flask_babelex import lazy_gettext as _
@@ -10,21 +11,30 @@
1011
from ..email import send_email
1112
from ..models import Permission, User, Report, Department
1213
from ..utils import get_week_count, permission_required, get_this_monday, \
13-
get_last_week, get_last_week_start_at, get_last_week_end_at
14+
get_last_week, get_last_week_start_at, get_last_week_end_at, get_last_week_content
1415

1516

1617
@report.route('/write/', methods=['GET', 'POST'])
1718
@permission_required(Permission.WRITE_REPORT)
1819
def write():
1920
form = WriteForm()
21+
last_content_display = ""
2022
report = Report.query.filter_by(
2123
author_id=current_user.id,
2224
week_count=get_week_count(),
2325
year=datetime.today().year
2426
).first()
27+
28+
last_report = Report.query.filter_by(
29+
author_id=current_user.id,
30+
week_count=get_week_count() - 1,
31+
year=datetime.today().year
32+
).first()
33+
2534
if form.submit.data and form.validate_on_submit():
2635
if report:
2736
report.content = form.body.data.replace('<br>', '')
37+
report.last_content = form.last_content.data.replace('<br>', '')
2838
db.session.add(report)
2939
else:
3040
report = Report(
@@ -45,27 +55,39 @@ def write():
4555
form.body.data = report.content
4656
else:
4757
form.body.data = current_app.config['DEFAULT_CONTENT']
58+
59+
if last_report:
60+
form.last_content.data = last_report.content
61+
last_content_display = get_last_week_content(last_report.content)
4862

4963
return render_template('report/write.html',
5064
form=form,
5165
week_count=get_week_count(),
5266
start_at=get_this_monday(),
53-
end_at=get_this_monday()+timedelta(days=6))
67+
end_at=get_this_monday()+timedelta(days=6),
68+
last_content_display=last_content_display)
5469

5570

5671
@report.route('/write/last_week', methods=['GET', 'POST'])
5772
@permission_required(Permission.WRITE_REPORT)
5873
def write_last_week():
5974
form = WriteForm()
60-
75+
last_content_display = ""
76+
6177
report = Report.query.filter_by(
6278
author_id=current_user.id,
6379
week_count=get_week_count(get_last_week()),
6480
year=get_last_week().year).first()
81+
82+
last_report = Report.query.filter_by(
83+
author_id=current_user.id,
84+
week_count=get_week_count(get_last_week()) - 1,
85+
year=get_last_week().year).first()
6586

6687
if form.submit.data and form.validate_on_submit():
6788
if report:
6889
report.content = form.body.data.replace('<br>', '')
90+
report.last_content = form.last_content.data.replace('<br>', '')
6991
else:
7092
report = Report(
7193
content=form.body.data.replace('<br>', ''),
@@ -85,11 +107,17 @@ def write_last_week():
85107
form.body.data = report.content
86108
else:
87109
form.body.data = current_app.config['DEFAULT_CONTENT']
110+
111+
if last_report:
112+
form.last_content.data = last_report.content
113+
last_content_display = get_last_week_content(last_report.content)
114+
88115
return render_template('report/write.html',
89116
form=form,
90117
week_count=get_week_count(get_last_week()),
91118
start_at=get_last_week_start_at(),
92-
end_at=get_last_week_end_at() - timedelta(days=1))
119+
end_at=get_last_week_end_at() - timedelta(days=1),
120+
last_content_display=last_content_display)
93121

94122

95123
@report.route('/read/', methods=['GET'])

deploy/app/static/wangEditor/js/wangEditor.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/app/templates/admin/model/report_list_template.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,8 @@
143143
{% else %}
144144
{% if c=='content' %}
145145
{{ get_value(row, c) |safe}}
146+
{% elif c =='last_content'%}
147+
{{ get_value(row, c) |safe | get_last_week_content}}
146148
{% else %}
147149
{{ get_value(row, c) }}
148150
{% endif %}

deploy/app/templates/base.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
<link href="{{url_for('static',filename='css/bootstrap.css')}}" rel="stylesheet">
99
<!-- Theme CSS -->
1010
<link href="{{url_for('static',filename='css/style.css')}}" rel="stylesheet">
11-
<!-- Custom Fonts -->
11+
<!-- Custom Fonts
1212
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
1313
<link href="//fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic" rel="stylesheet" type="text/css">
14-
<link href="//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" rel="stylesheet" type="text/css">
14+
<link href="//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" rel="stylesheet" type="text/css"> -->
1515
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
1616
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
1717
<!--[if lt IE 9]>

deploy/app/templates/report/statistics_crew.html

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@
2121
{% endif %}
2222
</div>
2323
<div class="panel-body">
24-
{% column_chart contrast %}
24+
{% for key, value in contrast.iteritems() %}
25+
<a>{{ key }}:</a>{{value}}
26+
<br/>
27+
{% endfor %}
2528
</div>
2629
</div>
2730

@@ -54,6 +57,8 @@
5457

5558
</div>
5659

60+
{#
5761
{{ wtf.quick_form(form) }}
62+
#}
5863

5964
{% endblock %}

deploy/app/templates/report/write.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ <h3>第{{ week_count }}周({{start_at}}至{{end_at}})工作周报</h3>
1919
{{ form.csrf_token }}
2020
{{ form.hidden_tag() }}
2121
{{ wtf.form_errors(form, hiddens="only") }}
22-
22+
<h4>上周工作计划</h4>
23+
{{ last_content_display|safe }}
2324
{{ form.body(class='wangEditor') }}
25+
{{ form.last_content }}
2426
<hr style="height:10pt; visibility:hidden;" />
2527

2628
{{ wtf.form_field(form.submit) }}

deploy/app/translations/zh_Hans_CN/LC_MESSAGES/messages.po

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,27 +108,27 @@ msgstr "未知密码"
108108
msgid "Confirm New password"
109109
msgstr "确认新密码"
110110

111-
#: auth/views.py:32
111+
#: auth/views.py:33
112112
msgid "You have been logged out"
113113
msgstr "您已注销"
114114

115-
#: auth/views.py:57
115+
#: auth/views.py:61
116116
msgid "Successfully Registered, Please Login"
117117
msgstr "成功注册,请登录"
118118

119-
#: auth/views.py:74
119+
#: auth/views.py:78
120120
msgid "Your password has been updated"
121121
msgstr "您的密码已更新"
122122

123-
#: auth/views.py:91
123+
#: auth/views.py:95
124124
msgid "Your username has been updated"
125125
msgstr "您的用户名已更新"
126126

127-
#: auth/views.py:118
127+
#: auth/views.py:122
128128
msgid "An email with instructions to reset your password has been sent to "
129129
msgstr "密码重置邮件已发送到您的邮箱 "
130130

131-
#: auth/views.py:138
131+
#: auth/views.py:142
132132
msgid "Your password has been updated."
133133
msgstr "您的密码已更新"
134134

@@ -253,3 +253,6 @@ msgstr "年份"
253253
msgid "Edit"
254254
msgstr "编辑"
255255

256+
#: auth/views.py:25
257+
msgid "Account or password is wrong"
258+
msgstr "邮箱或密码错误"

deploy/app/utils.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#coding:utf-8
12
import datetime
23
from functools import wraps
34
from flask import abort
@@ -41,3 +42,9 @@ def get_last_week_start_at():
4142

4243
def get_last_week_end_at():
4344
return get_this_monday()
45+
46+
def get_last_week_content(last_week_content):
47+
content_index = last_week_content.find("next_week")
48+
if content_index != -1:
49+
return last_week_content[content_index+31:]
50+
return ""

0 commit comments

Comments
 (0)