Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/components/Vsider.vue
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
template(slot='title')
i.el-icon-edit
| 文章列表
el-menu-item(index='/posts/add')
template(slot='title')
i.el-icon-edit
| 添加文章
el-menu-item(index='/translate/check')
template(slot='title')
i.el-icon-information
Expand Down
4 changes: 1 addition & 3 deletions src/config/config.example.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
default: &default
development:
host: 'http://127.0.0.1:4000'
ws: 'ws://127.0.0.1:4000/ws'
development:
<<: *default
production:
host: 'http://127.0.0.1:4000'
ws: 'ws://127.0.0.1:4000/ws'
<<: *default
6 changes: 6 additions & 0 deletions src/routers.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import Login from './views/Login.vue'

import Posts from './views/posts/Posts.vue'
import EditPost from './views/posts/EditPost.vue'
import AddPost from './views/posts/AddPost.vue'

import Accesses from './views/logs/Accesses.vue'
import TranslateLog from './views/logs/TranslateLog.vue'
Expand Down Expand Up @@ -66,6 +67,11 @@ const router = new VueRouter({
component: EditPost,
meta: {title: '编辑文章'}
},
{ path: '/posts/add',
name: 'posts-add',
component: AddPost,
meta: {title: '增加文章'}
},

{ path: '*',
component: Errors,
Expand Down
85 changes: 85 additions & 0 deletions src/views/posts/AddPost.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
<template lang="jade">
#add-post.admin
.title
el-form(ref='form', :model='form', label-width='80px', label-position='top')
el-form-item(label='标题', required)
el-input(placeholder='请输入标题', v-model='form.edited_title')
el-form-item(label='URL', required)
el-input(placeholder='请输入链接URL', v-model='form.url')
el-form-item(label='来源', required)
el-input(placeholder='请输入来源', v-model='form.source')
el-form-item(label='语言', required)
el-radio(class="radio" v-model="form.is_cn" label="true") 中文
el-radio(class="radio" v-model="form.is_cn" label="false") 英文
el-form-item(label='摘要', required)
el-input(type='textarea' placeholder='请输入摘要', v-model='form.summary')
el-form-item
veditor#veditor
el-form-item.actions(label='')
p 提交后是已发布状态, 请谨慎操作
p URL 请确保完整, 否则会出错
el-button(type='primary', @click='onSubmit') 发布
el-button(type='danger', @click="close") 关闭窗口
</template>

<script>
import api from '../../stores/api'
import qs from 'qs'
export default {
data: function () {
return {
form: {
edited_title: '',
edited_content: '',
summary: '',
url: '',
source: '',
is_cn: 'true'
}
}
},
methods: {
onSubmit () {
createPost(this)
},
close () {
window.close()
}
}
}

function getContent (_this) {
_this.form.edited_content = _this.$store.state.Editor.txt.html()
}

function createPost (_this) {
getContent(_this)
if (_this.form.edited_title.trim() === '' ||
_this.form.edited_content.trim() === '' ||
_this.form.edited_content.trim() === '<p><br></p>' ||
_this.form.summary.trim() === '' ||
_this.form.url.trim() === '' ||
_this.form.source.trim() === '') {
_this.$notify.error('请填写完整')
return false
}
api.post(`admin/articles`, qs.stringify(_this.form), {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
.then((result) => {
_this.$notify.success('success')
// setTimeout(() => { _this.router.push }, 1000)
}).catch((err) => {
console.log(err)
_this.$notify.error('err')
})
}
</script>

<style lang="stylus">
#add-post
padding-left 10px
padding-right 10px
</style>
24 changes: 11 additions & 13 deletions src/views/posts/EditPost.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
.title
h1(v-if='!fullPage') {{$route.meta.title}}
el-button.full(@click='fullPage = !fullPage') 全屏编辑
el-button.full(@click='isIframe = !isIframe') 启动iFrame
el-button.translate(type='info', @click='handleTranslate', v-if='!form.is_cn && !fullPage') {{translateText}}
el-button.full(@click='isUrlContent = !isUrlContent' v-if='!fullPage') 看不到正文?
el-form(ref='form', :model='form', label-width='80px', :rules="rules", label-position='top')
el-form-item(label='URL', v-if='!fullPage')
a(:href='form.url', target='_blank') {{form.url}}
Expand All @@ -18,15 +18,15 @@
.cn.content(v-html='form.origin_content')
veditor#veditor(v-if='!form.is_cn')
.rereference-content-iframe(v-else)
iframe(:src='form.url.replace("http://", "https://")' width="100%" height="100%", style="position: absolute; top:0;left:0; height: 100; z-index: 100;", v-if='isUrlContent')
div(v-else, v-html='urlcontent').urlcontent

iframe(v-if='isIframe', :src='form.url.replace("http://", "https://")' width="100%" height="100%", style="position: absolute; top:0;left:0; height: 100; z-index: 100;")
div(v-html='urlcontent', v-else).urlcontent
el-form-item(label='机器翻译', required, v-if='!fullPage')
el-input(placeholder='请输入标题 必填', v-model='form.trans_title', :disabled="true")
el-form-item(label='机器翻译', required, v-if='!fullPage')
p.trans_content(v-html='form.trans_content', v-if='!fullPage')
el-form-item(label='摘要', v-if='!fullPage')
el-form-item.summary(label='摘要', v-if='!fullPage')
el-input(type='textarea', placeholder='', v-model='form.summary')
span(style='float: right; margin-right: 10px;') {{form.summary ? form.summary.length: 0}} 个字
el-form-item(label='Source', required, v-if='!fullPage')
el-input(placeholder='', v-model='form.source')
el-form-item(label='状态', required, v-if='!fullPage')
Expand All @@ -44,6 +44,7 @@ import mousetrap from 'mousetrap'
export default {
data () {
return {
isIframe: false,
form: {
edited_title: '',
origin_title: 'nothing',
Expand Down Expand Up @@ -171,11 +172,6 @@ function getPost (_this) {
data.edited_title = data.origin_title
data.edited_content = ''
}
if (data.summary === '' || data.summary === null || data.summary === undefined) {
const content = delHtmlTag(data.edited_content)
data.summary = content.length >= 100 ? content.substring(0, 100) : content
}
console.log(data)
Object.keys(_this.form).forEach(key => {
_this.form[key] = data[key]
})
Expand Down Expand Up @@ -214,12 +210,14 @@ function ws (_this) {
}
}

function delHtmlTag (str) {
return str.replace(/<[^>]+>/g, '')
}
// function delHtmlTag (str) {
// return str.replace(/<[^>]+>/g, '')
// }
</script>

<style lang="stylus">
.summary textarea
min-height 100px
.w-e-text-container
height 370px !important
#edit-post
Expand Down
9 changes: 7 additions & 2 deletions src/views/posts/Posts.vue
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
el-button(@click='clearOptions').clear 重置
el-radio(class="radio", v-model="is_cn_display", label="0") 英文显示
el-radio(class="radio", v-model="is_cn_display", label="1") 中文显示
el-radio(class="radio", v-model="params.sortby", label="published") 发布时间
el-radio(class="radio", v-model="params.sortby", label="createdAt") 爬取时间

el-table(:data='listData.data', :row-class-name="tableRowClassName", @selection-change="handleSelectionChange", border)
el-table-column(type="selection", width="55")
Expand All @@ -43,7 +45,9 @@
el-table-column(label='锁定', width="70")
template(scope='scope')
span(v-if='scope.row.lock') 🔓
el-table-column(prop='publishe_at', label='创建时间', width="170")
el-table-column(label='时间', width="180")
template(scope='scope')
span {{params.sortby === "published" ? tools.utc(scope.row.published) : tools.moment(scope.row.createdAt)}}
el-table-column(label='操作', width='190')
template(scope='scope')
el-button(size='small',
Expand Down Expand Up @@ -80,12 +84,14 @@ const defaultData = {
language: 'all',
state: 'all',
count: 20,
sortby: 'published',
timerange: []
}

export default {
data () {
return {
tools: tools,
params: defaultData,
listData: {
data: [],
Expand Down Expand Up @@ -257,7 +263,6 @@ export default {
} else if (el.state === 'deleted') {
el.state = '❌'
}
el.publishe_at = tools.utc(el.published)
})
},
'$route.query': function () {
Expand Down