diff --git a/account/migrations/0001_initial.py b/account/migrations/0001_initial.py
new file mode 100644
index 00000000..03d55846
--- /dev/null
+++ b/account/migrations/0001_initial.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+import account.models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='User',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('password', models.CharField(max_length=128, verbose_name='password')),
+ ('last_login', models.DateTimeField(null=True, verbose_name='last login', blank=True)),
+ ('username', models.CharField(unique=True, max_length=30)),
+ ('real_name', models.CharField(max_length=30, null=True, blank=True)),
+ ('email', models.EmailField(max_length=254, null=True, blank=True)),
+ ('create_time', models.DateTimeField(auto_now_add=True)),
+ ('admin_type', models.IntegerField(default=0)),
+ ],
+ options={
+ 'db_table': 'user',
+ },
+ managers=[
+ ('objects', account.models.UserManager()),
+ ],
+ ),
+ migrations.CreateModel(
+ name='AdminGroup',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ],
+ ),
+ ]
diff --git a/account/migrations/__init__.py b/account/migrations/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/admin/views.py b/admin/views.py
index b37d22d1..78762c02 100644
--- a/admin/views.py
+++ b/admin/views.py
@@ -11,4 +11,4 @@ class AdminTemplateView(APIView):
try:
return HttpResponse(open(path).read(), content_type="text/html")
except IOError:
- return HttpResponse(u"模板不存在", content_type="text/html")
+ raise Http404
diff --git a/static/src/css/global.css b/static/src/css/global.css
index c55a0bb3..17826003 100644
--- a/static/src/css/global.css
+++ b/static/src/css/global.css
@@ -24,4 +24,8 @@ img {
label {
font-size: 16px;
+}
+
+[ms-controller] {
+ display: none
}
\ No newline at end of file
diff --git a/static/src/js/app/admin/announcement/announcement.js b/static/src/js/app/admin/announcement/announcement.js
index 1d3cc28d..f356ac1d 100644
--- a/static/src/js/app/admin/announcement/announcement.js
+++ b/static/src/js/app/admin/announcement/announcement.js
@@ -1,17 +1,23 @@
require(["jquery", "avalon", "csrf", "bs_alert", "editor", "validation"], function ($, avalon, csrfHeader, bs_alert, editor) {
announcementEditor = editor("#editor"); //创建新建公告的内容编辑器
- editAnnouncementEditor = null;
+ editAnnouncementEditor = editor("#editAnnouncementEditor");
- if (!avalon.vmodels.announcement) // 防止模式重新定义
- {
- // avalon:定义模式 announcement
- vm = avalon.define({
+ avalon.vmodels.announcement = null;
+
+ // avalon:定义模式 announcement
+ avalon.ready(function () {
+ var vm = avalon.define({
$id: "announcement",
- announcement: [], // 公告列表数据项
- previous_page: 0, // 之前的页数
- next_page: 0, // 之后的页数
- page: 1, // 当前页数
- isEditing: 0, // 正在编辑的公告的ID, 为零说明未在编辑
+ //通用变量
+ announcement: [], // 公告列表数据项
+ previous_page: 0, // 之前的页数
+ next_page: 0, // 之后的页数
+ page: 1, // 当前页数
+ isEditing: 0, // 正在编辑的公告的ID, 为零说明未在编辑
+ page_count: 1, // 总页数
+ visableOnly: false, //仅显示可见公告
+ // 编辑
+ announcementVisible: 0,
getState: function (el) { //获取公告当前状态,显示
if (el.visible)
return "可见";
@@ -21,14 +27,14 @@ require(["jquery", "avalon", "csrf", "bs_alert", "editor", "validation"], functi
getNext: function (el) {
if (!vm.next_page)
return;
- getPageData(++(vm.page));
+ getPageData(vm.page + 1);
},
getPrevious: function (el) {
if (!vm.previous_page)
return;
- getPageData(--(vm.page));
+ getPageData(vm.page - 1);
},
- getBtnClass: function (btn) {
+ getBtnClass: function (btn) { //上一页/下一页按钮启用禁用逻辑
if (btn) {
return vm.next_page ? "btn btn-primary" : "btn btn-primary disabled";
}
@@ -37,13 +43,10 @@ require(["jquery", "avalon", "csrf", "bs_alert", "editor", "validation"], functi
}
},
- enEdit: function (el) { //点击编辑按钮的事件,显示/隐藏编辑区
+ enEdit: function (el) { //点击编辑按钮的事件,显示/隐藏编辑区
$("#newTitle").val(el.title);
- if (!editAnnouncementEditor) //初始化编辑器
- editAnnouncementEditor = editor("#editAnnouncementEditor");
editAnnouncementEditor.setValue(el.content);
- if (el.visible == false)
- $("#hidden").attr("checked", true);
+ vm.announcementVisible = el.visible;
if (vm.isEditing == el.id)
vm.isEditing = 0;
else
@@ -54,21 +57,25 @@ require(["jquery", "avalon", "csrf", "bs_alert", "editor", "validation"], functi
vm.isEditing = 0;
},
submitChange: function () { // 处理编辑公告提交事件,顺便验证字段为空
- var title = $("#newTitle").val(), content = editAnnouncementEditor.getValue(), visible = true;
- if ($("#hidden").attr("checked") == true)
- visible = false;
+ var title = $("#newTitle").val(), content = editAnnouncementEditor.getValue();
if (title != "") {
if (content != "") {
$.ajax({ //发送修改公告请求
beforeSend: csrfHeader,
- url: "/api/edit_announcements/",
+ url: "/api/admin/announcement/",
dataType: "json",
- method: "post",
- data: {id: vm.isEditing, title: title, content: content, visible: visible},
+ method: "put",
+ data: {
+ id: vm.isEditing,
+ title: title,
+ content: content,
+ visible: vm.announcementVisible
+ },
success: function (data) {
if (!data.code) {
bs_alert("修改成功");
vm.isEditing = 0;
+ getPageData(1);
}
else {
bs_alert(data.data);
@@ -83,72 +90,81 @@ require(["jquery", "avalon", "csrf", "bs_alert", "editor", "validation"], functi
bs_alert("公告标题不能为空");
}
});
- }
-
- avalon.scan();
- getPageData(1); //公告列表初始化
- vm.page = 1;
- vm.isEditing = 0;
- //Ajax get数据
- function getPageData(page) {
- $.ajax({
- beforeSend: csrfHeader,
- url: "/api/announcements/?paging=true&page=" + page + "&page_size=10",
- dataType: "json",
- method: "get",
- success: function (data) {
- if (!data.code) {
- vm.announcement = data.data.results;
- vm.previous_page = data.data.previous_page;
- vm.next_page = data.data.next_page;
- }
- else {
- bs_alert(data.data);
- }
- }
+ vm.$watch("visableOnly", function () {
+ getPageData(1);
});
- }
- //新建公告表单验证与数据提交
- $("#announcement-form")
- .formValidation({
- framework: "bootstrap",
- fields: {
- title: {
- validators: {
- notEmpty: {
- message: "请填写公告标题"
+ avalon.scan();
+
+ getPageData(1); //公告列表初始化
+
+ //Ajax get数据
+ function getPageData(page) {
+ var visible = '';
+ if (vm.visableOnly == true)
+ visible = "&visible=true";
+ $.ajax({
+ beforeSend: csrfHeader,
+ url: "/api/announcements/?paging=true&page=" + page + "&page_size=10" + visible,
+ dataType: "json",
+ method: "get",
+ success: function (data) {
+ if (!data.code) {
+ vm.announcement = data.data.results;
+ vm.page_count = data.data.total_page;
+ vm.previous_page = data.data.previous_page;
+ vm.next_page = data.data.next_page;
+ vm.page = page;
+ }
+ else {
+ bs_alert(data.data);
+ }
+ }
+ });
+ }
+
+ //新建公告表单验证与数据提交
+ $("#announcement-form")
+ .formValidation({
+ framework: "bootstrap",
+ fields: {
+ title: {
+ validators: {
+ notEmpty: {
+ message: "请填写公告标题"
+ }
}
}
}
}
- }
- ).on('success.form.fv', function (e) {
- e.preventDefault();
- var title = $("#title").val();
- var content = announcementEditor.getValue();
- if (content == "") {
- bs_alert("请填写公告内容");
- return;
- }
- $.ajax({
- beforeSend: csrfHeader,
- url: "/api/admin/announcement/",
- data: {title: title, content: content},
- dataType: "json",
- method: "post",
- success: function (data) {
- if (!data.code) {
- bs_alert("提交成功!");
- $("#title").val("");
- announcementEditor.setValue("");
- getPageData(1, function (data) {
- });
- } else {
- bs_alert(data.data);
- }
+ ).on('success.form.fv', function (e) {
+ e.preventDefault();
+ var title = $("#title").val();
+ var content = announcementEditor.getValue();
+ if (content == "") {
+ bs_alert("请填写公告内容");
+ return;
}
- })
- });
+ $.ajax({
+ beforeSend: csrfHeader,
+ url: "/api/admin/announcement/",
+ data: {title: title, content: content},
+ dataType: "json",
+ method: "post",
+ success: function (data) {
+ if (!data.code) {
+ bs_alert("提交成功!");
+ $("#title").val("");
+ announcementEditor.setValue("");
+ getPageData(1, function (data) {
+ });
+ } else {
+ bs_alert(data.data);
+ }
+ }
+ })
+ });
+ });
+
});
\ No newline at end of file
diff --git a/template/admin/admin.html b/template/admin/admin.html
index e3bc97bf..1d70998f 100644
--- a/template/admin/admin.html
+++ b/template/admin/admin.html
@@ -103,7 +103,7 @@
-
| 编号 | +标题 | +创建时间 | +更新时间 | +创建者 | +状态 | +操作 | +
|---|---|---|---|---|---|---|
| {{el.id}} | +{{el.title}} | +{{el.create_time|date("yyyy-MM-dd HH:mm:ss")}} | +{{el.last_update_time|date("yyyy-MM-dd HH:mm:ss")}} | +{{el.created_by.username}} | +{{getState(el)}} | ++ + | +