完成留言模块

This commit is contained in:
HelloWorld 2020-03-26 10:49:50 +08:00
parent dd8741ebd6
commit 1d3b72ed2f
6 changed files with 92 additions and 154 deletions

View File

@ -140,4 +140,25 @@ module.exports = class extends Base {
}
}
// 新增留言
async addAdviceAction() {
let advice = this.post();
advice.userId = this.ctx.state.user.id;
try {
let res = await this.model("advices").add(advice);
this.json({ code: 0, data: res, msg: `留言 添加成功` });
} catch (error) {
this.json({ code: 1, data: '', msg: error.toString() });
}
}
// 获取所有留言
async getAdvicesAction() {
try {
let data = await this.model("advices").order("createdAt DESC").select();
this.json({ code: 0, data });
} catch (error) {
this.json({ code: 1, data: '', msg: error.toString() });
}
}
};

View File

@ -17,7 +17,7 @@ function get(url, params) {
function post(url, params) {
return new Promise((resolve, reject) => {
axios.post(url, params)
axios.post(url, params || {})
.then(res => {
resolve(res);
})

View File

@ -4,16 +4,21 @@ app.controller('adviceCtr', ['$scope', '$state', '$timeout', 'bookmarkService',
$window.location = "http://m.mybookmark.cn/#/tags";
return;
}
var maxSelections = 3;
$scope.comment = '';
$scope.advices = [];
$scope.category = ["功能", "BUG", "其他"];
$scope.user = {};
get('own').then(user => $scope.user = user);
get('own').then(user => {
$scope.user = user;
pubSubService.publish('Common.menuActive', {
login: true,
index: dataService.LoginIndexAdvice
});
});
getAdvices();
$scope.ok = function () {
$scope.ok = async function () {
if ($scope.comment == '') {
toastr.error('留言失败内容不能为空', "错误");
return;
@ -22,61 +27,21 @@ app.controller('adviceCtr', ['$scope', '$state', '$timeout', 'bookmarkService',
toastr.error('test用户不允许留言!', "错误");
return;
}
var advice = {
category: $('.ui.dropdown.js-categorys').dropdown('get value'),
await post('addAdvice', {
comment: $scope.comment,
};
console.log(advice);
bookmarkService.addAdvice(advice)
.then((data) => {
if (data.retCode == 0) {
toastr.success('留言成功', "提示");
$scope.comment = "";
getAdvices({});
} else {
toastr.error('留言失败。错误信息:' + data.msg, "错误");
}
})
.catch((err) => {
toastr.error('留言失败:' + JSON.stringify(err), "错误");
});
}
function getAdvices(params) {
bookmarkService.getAdvices(params)
.then((data) => {
if ($scope.advices.length == 0) {
transition();
}
data.forEach(element => {
element.imgData = new Identicon(md5(element.username)).toString();
});
$scope.advices = data;
pubSubService.publish('Common.menuActive', {
login: true,
index: dataService.LoginIndexAdvice
});
})
.catch((err) => dataService.netErrorHandle(err, $state));
}
setTimeout(function () {
$('.ui.dropdown.js-categorys').dropdown({
onChange: function (value, text, $choice) { }
});
getAdvices({});
}, 100)
await getAdvices();
}
$('.js-segment-advice').transition('hide');
function transition() {
var className = 'js-segment-advice';
$('.' + className).transition('hide');
$('.' + className).transition({
animation: dataService.animation(),
duration: 500,
async function getAdvices() {
let data = await post("getAdvices");
data.forEach(element => {
element.imgData = new Identicon(md5(element.username)).toString();
});
$scope.comment = "";
$timeout(function () {
$scope.advices = data;
});
}
}]);

View File

@ -9,20 +9,15 @@ app.controller('tagsCtr', ['$scope', '$filter', '$state', '$window', '$statePara
await getTags();
})()
// getTags({});
var dialog = null;
var forbidTransition = false;
var addBookmarkId = -1;
$scope.hoverBookmark = null;
$scope.showType = "createdAt";
$scope.loadBookmarks = false;
$scope.loading = false;
$scope.loadTags = false;
$scope.tags = []; // 书签数据
$scope.tagsIndex = []; // 书签索引
$scope.bookmarkClicked = false;
$scope.bookmarksByTag = [];
$scope.bookmarks = [];
$scope.bookmarkCount = 0;
$scope.totalPages = 0;
$scope.currentPage = 1;
$scope.inputPage = '';
@ -32,21 +27,7 @@ app.controller('tagsCtr', ['$scope', '$filter', '$state', '$window', '$statePara
$scope.newTag = '';
$scope.waitDelTag = {};
$scope.waitDelBookmark = {};
$scope.bookmarkData = {};
$scope.bookmarkNormalHover = false;
$scope.costomTag = {
id: -1,
bookmarkCount: 50,
bookmarkClicked: false,
name: '个人定制',
}
$scope.costomAllUsersTag = {
id: -1,
bookmarkCount: 50,
bookmarkClicked: false,
name: '全站定制',
}
var timeagoInstance = timeago();
pubSubService.subscribe('MenuCtr.tags', $scope, function (event, data) {
@ -57,27 +38,17 @@ app.controller('tagsCtr', ['$scope', '$filter', '$state', '$window', '$statePara
$scope.getBookmarks = async function (tagId, page, showType) {
console.log(tagId, page, showType);
$scope.bookmarkClicked = true;
$scope.bookmarks = [];
tagId && ($scope.currentTagId = tagId);
page && ($scope.currentPage = page);
showType && ($scope.showType = showType);
if (!forbidTransition) {
$scope.loadBookmarks = true;
}
$scope.costomTag.bookmarkClicked = false;
$scope.costomAllUsersTag.bookmarkClicked = false;
$scope.loading = true;
let pageSize = ($scope.showMode == 'item') ? 50 : 20;
$scope.tags.forEach(function (tag) {
tag.bookmarkClicked = false;
if (tag.id == $scope.currentTagId) {
tag.bookmarkClicked = true;
}
});
for (let tag of $scope.tags) {
tag.bookmarkClicked = (tag.id == $scope.currentTagId);
}
var params = {
tagId: $scope.currentTagId,
@ -85,24 +56,23 @@ app.controller('tagsCtr', ['$scope', '$filter', '$state', '$window', '$statePara
pageSize,
showType: $scope.showType
};
if (!forbidTransition) {
$($scope.showMode == 'item' ? '.js-tag-costomTag' : '.js-tags-table').transition('hide');
}
let reply = await get('getBookmarksByTag', params);
$scope.bookmarks = reply.data;
$scope.totalPages = reply.totalPages;
$scope.inputPage = '';
$scope.loadBookmarks = false;
$scope.bookmarkCount = reply.count;
$scope.loading = false;
for (let tag of $scope.tags) {
if (tag.id == $scope.currentTagId) {
tag.bookmarkCount = reply.count;
}
}
pubSubService.publish('Common.menuActive', {
login: true,
index: dataService.LoginIndexTags
});
if (!forbidTransition) {
dataService.transition($scope.showMode == 'item' ? '.js-tag-costomTag' : '.js-tags-table');
}
$timeout(function () {
dataService.transition('#' + addBookmarkId, {
@ -110,7 +80,6 @@ app.controller('tagsCtr', ['$scope', '$filter', '$state', '$window', '$statePara
});
addBookmarkId = -1;
}, 1000);
forbidTransition = false;
};
$scope.changeCurrentPage = function (currentPage) {
@ -128,7 +97,7 @@ app.controller('tagsCtr', ['$scope', '$filter', '$state', '$window', '$statePara
bookmarkService.clickBookmark({
id: id
});
$scope.bookmarkData.bookmarks.forEach(function (bookmark, index) {
$scope.bookmarks.forEach(function (bookmark, index) {
if (bookmark.id == id) {
bookmark.click_count += 1;
bookmark.last_click = $filter("date")(new Date(), "yyyy-MM-dd HH:mm:ss");
@ -485,7 +454,7 @@ app.controller('tagsCtr', ['$scope', '$filter', '$state', '$window', '$statePara
var menusScope = $('div[ng-controller="menuCtr"]').scope();
if (menusScope.login && menusScope.selectLoginIndex == 1) {
var find = false;
$scope.bookmarkData.bookmarks.forEach((bookmark) => {
$scope.bookmarks.forEach((bookmark) => {
if (bookmark.id == data.id) {
bookmark.title = data.title;
bookmark.url = data.url;
@ -502,7 +471,6 @@ app.controller('tagsCtr', ['$scope', '$filter', '$state', '$window', '$statePara
if (!find) {
if (data.tags.map((tag) => tag.id).indexOf($scope.currentTagId) >= 0) {
if (!$scope.editMode) {
forbidTransition = true;
$scope.getBookmarks(null, null, null);
}
addBookmarkId = data.id;

View File

@ -1,18 +1,5 @@
<div class="ui segment js-segment-advice">
<div class="ui form">
<div class="required field">
<label>留言分类</label>
<div class="ui selection dropdown js-categorys">
<input name="gender" type="hidden" value="0" />
<i class="dropdown icon"></i>
<div class="text">功能</div>
<div class="menu">
<div class="item" data-value="0">功能</div>
<div class="item" data-value="1">BUG</div>
<div class="item" data-value="2">其他</div>
</div>
</div>
</div>
<div class="required field">
<label>留言内容</label>
<textarea rows="4" placeholder="" ng-model="comment"></textarea>
@ -36,9 +23,6 @@
<div class="metadata">
<span class="date">{{ advice.created_at }}</span>
</div>
<div class="metadata">
<span class="category">{{ category[advice.category] }}</span>
</div>
<div class="text">{{ advice.comment }}</div>
</div>
</div>

View File

@ -50,10 +50,10 @@
</div>
</div>
</div>
<div class="ui huge text centered inline loader" ng-class="{active:loadBookmarks, disabled: !loadBookmarks}">
<div class="ui huge text centered inline loader" ng-class="{active:loading, disabled: !loading}">
正在加载中...
</div>
<table class="ui selectable sortable celled table js-tags-table" ng-if="bookmarkCount > 0 && showMode=='table'" style="margin-top:-15px;" ng-show="!loadBookmarks && !editMode">
<table class="ui selectable sortable celled table js-tags-table" ng-if="showMode=='table'" style="margin-top:-15px;" ng-show="!loading && !editMode">
<thead>
<tr>
<th class="forbid_sorted">标题</th>
@ -103,7 +103,7 @@
</tr>
</tfoot>
</table>
<div class="ui segment js-tag-costomTag" ng-if="bookmarkCount > 0 && showMode=='item'" style="margin-top:-15px;" ng-show="!loadBookmarks && !editMode">
<div class="ui segment js-tag-costomTag" ng-if="showMode=='item'" style="margin-top:-15px;" ng-show="!loading && !editMode">
<div class="ui five column grid">
<div ng-repeat="bookmark in bookmarks" class="column js-costomTag-item" ng-class="{bookmarkNormalHover:bookmarkNormalHover, bookmark:(!bookmarkNormalHover)}" ng-mouseover="bookmarkNormalHover=true; setHoverBookmark(bookmark)" ng-mouseleave="bookmarkNormalHover=false; setHoverBookmark(null)" ng-click="jumpToUrl(bookmark.url, bookmark.id)" title="{{ bookmark.title }}" id="{{bookmark.id}}">
<img class="ui ui middle aligned tiny image bookmarkInfo" ng-src="http://favicon.luchenqun.com/?url={{bookmark.url}}" err-src="./images/default.ico" style="width:16px;height:16px;" ng-click="detailBookmark(bookmark);$event.stopPropagation()" />
@ -129,7 +129,7 @@
</div>
</div>
<div class="eleven wide column">
<pagination ng-show="!costomTag.bookmarkClicked && !costomAllUsersTag.bookmarkClicked"></pagination>
<pagination></pagination>
</div>
</div>
</div>