chore: upgrade vue cli to 5.0 (#417)

Signed-off-by: Ryan Wang <i@ryanc.cc>
pull/418/head
Ryan Wang 2022-01-21 16:50:23 +08:00 committed by GitHub
parent 483577f447
commit 01a9e45e1a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
61 changed files with 3152 additions and 7156 deletions

View File

@ -3,12 +3,24 @@ module.exports = {
env: { env: {
node: true node: true
}, },
extends: ['plugin:vue/essential', 'eslint:recommended', '@vue/prettier'], extends: ['plugin:vue/essential', 'eslint:recommended', 'plugin:prettier/recommended'],
parserOptions: { parserOptions: {
parser: 'babel-eslint' parser: '@babel/eslint-parser'
}, },
rules: { rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off' 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'vue/no-mutating-props': 0,
'vue/multi-word-component-names': 0,
'prettier/prettier': [
'error',
{
printWidth: 120,
semi: false,
singleQuote: true,
trailingComma: 'none',
arrowParens: 'avoid'
}
]
} }
} }

View File

@ -1,5 +1,7 @@
{ {
"printWidth": 120, "printWidth": 120,
"semi": false, "semi": false,
"singleQuote": true "singleQuote": true,
"trailingComma": "none",
"arrowParens": "avoid"
} }

View File

@ -1,11 +1,3 @@
module.exports = { module.exports = {
presets: [ presets: ['@vue/cli-plugin-babel/preset']
'@vue/app',
[
'@babel/preset-env',
{
useBuiltIns: 'entry'
}
]
]
} }

View File

@ -21,10 +21,10 @@
"test:unit": "vue-cli-service test:unit" "test:unit": "vue-cli-service test:unit"
}, },
"dependencies": { "dependencies": {
"@codemirror/basic-setup": "^0.19.0", "@codemirror/basic-setup": "^0.19.1",
"@codemirror/lang-html": "^0.19.3", "@codemirror/lang-html": "^0.19.4",
"@codemirror/lang-java": "^0.19.1", "@codemirror/lang-java": "^0.19.1",
"@halo-dev/admin-api": "^1.0.0-alpha.46", "@halo-dev/admin-api": "^1.0.0-alpha.47",
"ant-design-vue": "^1.7.8", "ant-design-vue": "^1.7.8",
"dayjs": "^1.10.7", "dayjs": "^1.10.7",
"enquire.js": "^2.1.6", "enquire.js": "^2.1.6",
@ -33,6 +33,7 @@
"filepond-plugin-image-preview": "^4.6.10", "filepond-plugin-image-preview": "^4.6.10",
"halo-editor": "^2.8.3", "halo-editor": "^2.8.3",
"marked": "^4.0.10", "marked": "^4.0.10",
"md5.js": "^1.3.5",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"tiny-pinyin": "^1.3.2", "tiny-pinyin": "^1.3.2",
"verte": "^0.0.12", "verte": "^0.0.12",
@ -48,26 +49,22 @@
"vuex": "^3.6.2" "vuex": "^3.6.2"
}, },
"devDependencies": { "devDependencies": {
"@babel/polyfill": "^7.12.1", "@babel/core": "^7.16.10",
"@vue/cli-plugin-babel": "^3.12.1", "@babel/eslint-parser": "^7.16.5",
"@vue/cli-plugin-eslint": "^4.5.15", "@vue/cli-plugin-babel": "~5.0.0-rc.2",
"@vue/cli-plugin-unit-jest": "^4.5.15", "@vue/cli-plugin-eslint": "~5.0.0-rc.2",
"@vue/cli-service": "^4.5.15", "@vue/cli-plugin-router": "~5.0.0-rc.2",
"@vue/eslint-config-prettier": "^6.0.0", "@vue/cli-plugin-vuex": "~5.0.0-rc.2",
"@vue/test-utils": "^1.2.2", "@vue/cli-service": "~5.0.0-rc.2",
"babel-core": "7.0.0-bridge.0", "eslint": "^7.32.0",
"babel-eslint": "^10.1.0", "eslint-config-prettier": "^8.3.0",
"babel-jest": "^26.6.3", "eslint-plugin-prettier": "^4.0.0",
"babel-plugin-import": "^1.13.3", "eslint-plugin-vue": "^8.3.0",
"eslint": "^6.8.0",
"eslint-plugin-html": "^6.2.0",
"eslint-plugin-prettier": "^3.4.1",
"eslint-plugin-vue": "^6.2.2",
"husky": "^6.0.0", "husky": "^6.0.0",
"less": "^3.13.1", "less": "^3.13.1",
"less-loader": "^5.0.0", "less-loader": "^5.0.0",
"lint-staged": "^10.5.4", "lint-staged": "^11.2.6",
"prettier": "^1.19.1", "prettier": "^2.5.1",
"tailwindcss": "^1.9.6", "tailwindcss": "^1.9.6",
"vue-template-compiler": "^2.6.14" "vue-template-compiler": "^2.6.14"
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,8 @@
<template> <template>
<div class="footer text-center" style="padding: 0 16px;margin: 48px 0 0;"> <div class="footer text-center" style="padding: 0 16px; margin: 48px 0 0">
<div class="copyright" style="color: rgba(0, 0, 0, 0.45);font-size: 14px;"> <div class="copyright" style="color: rgba(0, 0, 0, 0.45); font-size: 14px">
Proudly power by Proudly power by
<router-link :to="{ name: 'About' }"> <router-link :to="{ name: 'About' }"> Halo </router-link>
Halo
</router-link>
</div> </div>
</div> </div>
</template> </template>

View File

@ -7,7 +7,7 @@
fixedHeader && 'ant-header-fixedHeader', fixedHeader && 'ant-header-fixedHeader',
sidebarOpened ? 'ant-header-side-opened' : 'ant-header-side-closed' sidebarOpened ? 'ant-header-side-opened' : 'ant-header-side-closed'
]" ]"
style="padding:0" style="padding: 0"
> >
<div v-if="mode === 'sidemenu'" class="header"> <div v-if="mode === 'sidemenu'" class="header">
<a-icon <a-icon

View File

@ -9,17 +9,17 @@
> >
<a-form-model-item v-if="!form.needAuthCode" prop="username"> <a-form-model-item v-if="!form.needAuthCode" prop="username">
<a-input v-model="form.model.username" placeholder="用户名/邮箱"> <a-input v-model="form.model.username" placeholder="用户名/邮箱">
<a-icon slot="prefix" style="color: rgba(0,0,0,.25)" type="user" /> <a-icon slot="prefix" style="color: rgba(0, 0, 0, 0.25)" type="user" />
</a-input> </a-input>
</a-form-model-item> </a-form-model-item>
<a-form-model-item v-if="!form.needAuthCode" prop="password"> <a-form-model-item v-if="!form.needAuthCode" prop="password">
<a-input v-model="form.model.password" placeholder="密码" type="password"> <a-input v-model="form.model.password" placeholder="密码" type="password">
<a-icon slot="prefix" style="color: rgba(0,0,0,.25)" type="lock" /> <a-icon slot="prefix" style="color: rgba(0, 0, 0, 0.25)" type="lock" />
</a-input> </a-input>
</a-form-model-item> </a-form-model-item>
<a-form-model-item v-if="form.needAuthCode" prop="authcode"> <a-form-model-item v-if="form.needAuthCode" prop="authcode">
<a-input v-model="form.model.authcode" :maxLength="6" placeholder="两步验证码"> <a-input v-model="form.model.authcode" :maxLength="6" placeholder="两步验证码">
<a-icon slot="prefix" style="color: rgba(0,0,0,.25)" type="safety-certificate" /> <a-icon slot="prefix" style="color: rgba(0, 0, 0, 0.25)" type="safety-certificate" />
</a-input> </a-input>
</a-form-model-item> </a-form-model-item>
<a-form-model-item> <a-form-model-item>

View File

@ -12,7 +12,7 @@
:menu="menus" :menu="menus"
:mode="mode" :mode="mode"
:theme="theme" :theme="theme"
style="padding: 16px 0px;" style="padding: 16px 0px"
@select="onSelect" @select="onSelect"
></s-menu> ></s-menu>
</a-layout-sider> </a-layout-sider>

View File

@ -50,7 +50,7 @@ export default {
this.openKeys = this.cachedOpenKeys this.openKeys = this.cachedOpenKeys
} }
}, },
$route: function() { $route: function () {
this.updateMenu() this.updateMenu()
} }
}, },

View File

@ -52,12 +52,12 @@ export default {
this.openKeys = this.cachedOpenKeys this.openKeys = this.cachedOpenKeys
} }
}, },
$route: function() { $route: function () {
this.updateMenu() this.updateMenu()
} }
}, },
methods: { methods: {
renderIcon: function(h, icon) { renderIcon: function (h, icon) {
if (icon === 'none' || icon === undefined) { if (icon === 'none' || icon === undefined) {
return null return null
} }
@ -65,7 +65,7 @@ export default {
typeof icon === 'object' ? (props.component = icon) : (props.type = icon) typeof icon === 'object' ? (props.component = icon) : (props.type = icon)
return h(Icon, { props: { ...props } }) return h(Icon, { props: { ...props } })
}, },
renderMenuItem: function(h, menu, pIndex, index) { renderMenuItem: function (h, menu, pIndex, index) {
const target = menu.meta.target || null const target = menu.meta.target || null
return h(Item, { key: menu.path ? menu.path : 'item_' + pIndex + '_' + index }, [ return h(Item, { key: menu.path ? menu.path : 'item_' + pIndex + '_' + index }, [
h('router-link', { attrs: { to: { name: menu.name }, target: target } }, [ h('router-link', { attrs: { to: { name: menu.name }, target: target } }, [
@ -74,30 +74,30 @@ export default {
]) ])
]) ])
}, },
renderSubMenu: function(h, menu, pIndex, index) { renderSubMenu: function (h, menu, pIndex, index) {
const this2_ = this const this2_ = this
const subItem = [h('span', { slot: 'title' }, [this.renderIcon(h, menu.meta.icon), h('span', [menu.meta.title])])] const subItem = [h('span', { slot: 'title' }, [this.renderIcon(h, menu.meta.icon), h('span', [menu.meta.title])])]
const itemArr = [] const itemArr = []
const pIndex_ = pIndex + '_' + index const pIndex_ = pIndex + '_' + index
this.$log.debug('menu', menu) this.$log.debug('menu', menu)
if (!menu.hideChildrenInMenu) { if (!menu.hideChildrenInMenu) {
menu.children.forEach(function(item, i) { menu.children.forEach(function (item, i) {
itemArr.push(this2_.renderItem(h, item, pIndex_, i)) itemArr.push(this2_.renderItem(h, item, pIndex_, i))
}) })
} }
return h(SubMenu, { key: menu.path ? menu.path : 'submenu_' + pIndex + '_' + index }, subItem.concat(itemArr)) return h(SubMenu, { key: menu.path ? menu.path : 'submenu_' + pIndex + '_' + index }, subItem.concat(itemArr))
}, },
renderItem: function(h, menu, pIndex, index) { renderItem: function (h, menu, pIndex, index) {
if (!menu.hidden) { if (!menu.hidden) {
return menu.children && !menu.hideChildrenInMenu return menu.children && !menu.hideChildrenInMenu
? this.renderSubMenu(h, menu, pIndex, index) ? this.renderSubMenu(h, menu, pIndex, index)
: this.renderMenuItem(h, menu, pIndex, index) : this.renderMenuItem(h, menu, pIndex, index)
} }
}, },
renderMenu: function(h, menuTree) { renderMenu: function (h, menuTree) {
const this2_ = this const this2_ = this
const menuArr = [] const menuArr = []
menuTree.forEach(function(menu, i) { menuTree.forEach(function (menu, i) {
if (!menu.hidden) { if (!menu.hidden) {
menuArr.push(this2_.renderItem(h, menu, '0', i)) menuArr.push(this2_.renderItem(h, menu, '0', i))
} }

View File

@ -45,7 +45,7 @@ export default {
target: { target: {
type: String, type: String,
default: 'post', default: 'post',
validator: function(value) { validator: function (value) {
return ['post', 'sheet'].indexOf(value) !== -1 return ['post', 'sheet'].indexOf(value) !== -1
} }
}, },

View File

@ -63,13 +63,11 @@
<a-list :split="false"> <a-list :split="false">
<a-list-item> <a-list-item>
<a-tooltip slot="actions"> <a-tooltip slot="actions">
<template slot="title"> <template slot="title"> 该设定仅 [顶部栏导航] 时有效 </template>
该设定仅 [顶部栏导航] 时有效
</template>
<a-select <a-select
:defaultValue="contentWidth" :defaultValue="contentWidth"
size="small" size="small"
style="width: 80px;" style="width: 80px"
@change="handleContentWidthChange" @change="handleContentWidthChange"
> >
<a-select-option value="Fixed">固定</a-select-option> <a-select-option value="Fixed">固定</a-select-option>

View File

@ -98,7 +98,7 @@ export default {
return 1 return 1
} }
}, },
data: function() { data: function () {
return { return {
server: { server: {
process: (fieldName, file, metadata, load, error, progress, abort) => { process: (fieldName, file, metadata, load, error, progress, abort) => {

View File

@ -7,25 +7,25 @@ import { timeAgo } from '@/utils/datetime'
dayjs.locale('zh-cn') dayjs.locale('zh-cn')
Vue.filter('moment', function(dataStr, pattern = 'YYYY-MM-DD HH:mm') { Vue.filter('moment', function (dataStr, pattern = 'YYYY-MM-DD HH:mm') {
return dayjs(dataStr).format(pattern) return dayjs(dataStr).format(pattern)
}) })
Vue.filter('moment_post_date', function(dataStr, pattern = '/YYYY/MM/') { Vue.filter('moment_post_date', function (dataStr, pattern = '/YYYY/MM/') {
return dayjs(dataStr).format(pattern) return dayjs(dataStr).format(pattern)
}) })
Vue.filter('moment_post_year', function(dataStr, pattern = '/YYYY/') { Vue.filter('moment_post_year', function (dataStr, pattern = '/YYYY/') {
return dayjs(dataStr).format(pattern) return dayjs(dataStr).format(pattern)
}) })
Vue.filter('moment_post_day', function(dataStr, pattern = '/YYYY/MM/DD/') { Vue.filter('moment_post_day', function (dataStr, pattern = '/YYYY/MM/DD/') {
return dayjs(dataStr).format(pattern) return dayjs(dataStr).format(pattern)
}) })
Vue.filter('timeAgo', timeAgo) Vue.filter('timeAgo', timeAgo)
Vue.filter('fileSizeFormat', function(value) { Vue.filter('fileSizeFormat', function (value) {
if (!value) { if (!value) {
return '0 Bytes' return '0 Bytes'
} }
@ -37,7 +37,7 @@ Vue.filter('fileSizeFormat', function(value) {
return size + ' ' + unitArr[index] return size + ' ' + unitArr[index]
}) })
Vue.filter('dayTime', function(value) { Vue.filter('dayTime', function (value) {
const days = Math.floor(value / 86400) const days = Math.floor(value / 86400)
const hours = Math.floor((value % 86400) / 3600) const hours = Math.floor((value % 86400) / 3600)
const minutes = Math.floor(((value % 86400) % 3600) / 60) const minutes = Math.floor(((value % 86400) % 3600) / 60)

View File

@ -10,10 +10,10 @@ import './core/lazy_use'
import '@/router/guard/' import '@/router/guard/'
import '@/filters/filter' // global filter import '@/filters/filter' // global filter
import './components' import './components'
import { version } from '../package.json' import pkg from '../package.json'
Vue.config.productionTip = false Vue.config.productionTip = false
Vue.prototype.VERSION = version Vue.prototype.VERSION = pkg.version
Vue.use(router) Vue.use(router)
Vue.use(Contextmenu) Vue.use(Contextmenu)

View File

@ -61,12 +61,14 @@ const mixinPostEdit = {
const toolbarHeight = 64 const toolbarHeight = 64
const contentMarginTop = 24 const contentMarginTop = 24
const titleInputHeight = 40 const titleInputHeight = 40
return `calc(100vh - ${toolbarHeight + return `calc(100vh - ${
toolbarHeight +
contentMarginTop + contentMarginTop +
titleInputHeight + titleInputHeight +
this.viewMetas.pageHeaderHeight + this.viewMetas.pageHeaderHeight +
this.viewMetas.pageFooterHeight + this.viewMetas.pageFooterHeight +
10}px - 1rem)` 10
}px - 1rem)`
} }
}, },
mounted() { mounted() {

View File

@ -22,7 +22,6 @@ haloRestApiClient.interceptors.request.use(
return config return config
}, },
error => { error => {
console.log('request error', error)
return Promise.reject(error) return Promise.reject(error)
} }
) )

View File

@ -6,7 +6,7 @@ export const DEVICE_TYPE = {
MOBILE: 'mobile' MOBILE: 'mobile'
} }
export const deviceEnquire = function(callback) { export const deviceEnquire = function (callback) {
const matchDesktop = { const matchDesktop = {
match: () => { match: () => {
callback && callback(DEVICE_TYPE.DESKTOP) callback && callback(DEVICE_TYPE.DESKTOP)

View File

@ -1,4 +1,4 @@
export const setDocumentTitle = function(title) { export const setDocumentTitle = function (title) {
document.title = title document.title = title
const ua = navigator.userAgent const ua = navigator.userAgent
// eslint-disable-next-line // eslint-disable-next-line
@ -7,8 +7,8 @@ export const setDocumentTitle = function(title) {
const i = document.createElement('iframe') const i = document.createElement('iframe')
i.src = '/favicon.ico' i.src = '/favicon.ico'
i.style.display = 'none' i.style.display = 'none'
i.onload = function() { i.onload = function () {
setTimeout(function() { setTimeout(function () {
i.remove() i.remove()
}, 9) }, 9)
} }

View File

@ -240,7 +240,7 @@ export default {
} }
}, },
isImage() { isImage() {
return function(attachment) { return function (attachment) {
if (!attachment || !attachment.mediaType) { if (!attachment || !attachment.mediaType) {
return false return false
} }

View File

@ -11,7 +11,7 @@
</a-col> </a-col>
<a-col :lg="15" :md="24" :sm="24" :xl="15" :xs="24"> <a-col :lg="15" :md="24" :sm="24" :xl="15" :xs="24">
<a-list itemLayout="horizontal"> <a-list itemLayout="horizontal">
<a-list-item style="padding-top: 0;"> <a-list-item style="padding-top: 0">
<a-list-item-meta> <a-list-item-meta>
<template v-if="editable" slot="description"> <template v-if="editable" slot="description">
<a-input ref="nameInput" v-model="attachment.name" @blur="handleUpdateName" /> <a-input ref="nameInput" v-model="attachment.name" @blur="handleUpdateName" />

View File

@ -35,19 +35,13 @@
<a-dropdown v-show="list.params.status != null && list.params.status !== '' && !isMobile()"> <a-dropdown v-show="list.params.status != null && list.params.status !== '' && !isMobile()">
<a-menu slot="overlay"> <a-menu slot="overlay">
<a-menu-item v-if="list.params.status === 'AUDITING'" key="1"> <a-menu-item v-if="list.params.status === 'AUDITING'" key="1">
<a href="javascript:void(0);" @click="handleEditStatusMore(commentStatus.PUBLISHED.value)"> <a href="javascript:void(0);" @click="handleEditStatusMore(commentStatus.PUBLISHED.value)"> </a>
通过
</a>
</a-menu-item> </a-menu-item>
<a-menu-item v-if="list.params.status === 'PUBLISHED' || list.params.status === 'AUDITING'" key="2"> <a-menu-item v-if="list.params.status === 'PUBLISHED' || list.params.status === 'AUDITING'" key="2">
<a href="javascript:void(0);" @click="handleEditStatusMore(commentStatus.RECYCLE.value)"> <a href="javascript:void(0);" @click="handleEditStatusMore(commentStatus.RECYCLE.value)"> </a>
移到回收站
</a>
</a-menu-item> </a-menu-item>
<a-menu-item v-if="list.params.status === 'RECYCLE'" key="3"> <a-menu-item v-if="list.params.status === 'RECYCLE'" key="3">
<a href="javascript:void(0);" @click="handleDeleteMore"> <a href="javascript:void(0);" @click="handleDeleteMore"> </a>
永久删除
</a>
</a-menu-item> </a-menu-item>
</a-menu> </a-menu>
<a-button> <a-button>
@ -130,19 +124,19 @@
<span <span
v-if="item.authorUrl" v-if="item.authorUrl"
slot="title" slot="title"
style="max-width: 300px;display: block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;" style="max-width: 300px; display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis"
> >
<a-icon v-if="item.isAdmin" style="margin-right: 3px;" type="user" />&nbsp; <a-icon v-if="item.isAdmin" style="margin-right: 3px" type="user" />&nbsp;
<a :href="item.authorUrl" target="_blank">{{ item.author }}</a> <a :href="item.authorUrl" target="_blank">{{ item.author }}</a>
&nbsp;<small style="color:rgba(0, 0, 0, 0.45)">{{ item.createTime | timeAgo }}</small> &nbsp;<small style="color: rgba(0, 0, 0, 0.45)">{{ item.createTime | timeAgo }}</small>
</span> </span>
<span <span
v-else v-else
slot="title" slot="title"
style="max-width: 300px;display: block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;" style="max-width: 300px; display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis"
> >
<a-icon v-if="item.isAdmin" style="margin-right: 3px;" type="user" />&nbsp;{{ item.author }}&nbsp;<small <a-icon v-if="item.isAdmin" style="margin-right: 3px" type="user" />&nbsp;{{ item.author }}&nbsp;<small
style="color:rgba(0, 0, 0, 0.45)" style="color: rgba(0, 0, 0, 0.45)"
> >
{{ item.createTime | timeAgo }} {{ item.createTime | timeAgo }}
</small> </small>
@ -167,7 +161,7 @@
scrollToFirstRowOnChange scrollToFirstRowOnChange
> >
<template slot="author" slot-scope="text, record"> <template slot="author" slot-scope="text, record">
<a-icon v-if="record.isAdmin" style="margin-right: 3px;" type="user" /> <a-icon v-if="record.isAdmin" style="margin-right: 3px" type="user" />
<a v-if="record.authorUrl" :href="record.authorUrl" target="_blank">{{ text }}</a> <a v-if="record.authorUrl" :href="record.authorUrl" target="_blank">{{ text }}</a>
<span v-else>{{ text }}</span> <span v-else>{{ text }}</span>
</template> </template>
@ -396,7 +390,7 @@ export default {
type: String, type: String,
required: false, required: false,
default: 'posts', default: 'posts',
validator: function(value) { validator: function (value) {
return ['posts', 'sheets', 'journals'].indexOf(value) !== -1 return ['posts', 'sheets', 'journals'].indexOf(value) !== -1
} }
} }

View File

@ -41,7 +41,7 @@
</a-popconfirm> </a-popconfirm>
</template> </template>
<a slot="author" :href="comment.authorUrl" target="_blank"> <a slot="author" :href="comment.authorUrl" target="_blank">
<a-icon v-if="comment.isAdmin" style="margin-right: 3px;" type="user" /> <a-icon v-if="comment.isAdmin" style="margin-right: 3px" type="user" />
{{ comment.author }} {{ comment.author }}
</a> </a>
<a-avatar slot="avatar" :alt="comment.author" :src="comment.avatar" size="large" /> <a-avatar slot="avatar" :alt="comment.author" :src="comment.avatar" size="large" />

View File

@ -222,7 +222,7 @@ export default {
}) })
} }
}, },
destroyed: function() { destroyed: function () {
if (this.logListDrawerVisible) { if (this.logListDrawerVisible) {
this.logListDrawerVisible = false this.logListDrawerVisible = false
} }

View File

@ -49,7 +49,7 @@ export default {
} }
}, },
watch: { watch: {
number: function(newValue, oldValue) { number: function (newValue, oldValue) {
this.startNumber = oldValue this.startNumber = oldValue
} }
} }

View File

@ -54,7 +54,7 @@ export default {
type: String, type: String,
required: false, required: false,
default: 'posts', default: 'posts',
validator: function(value) { validator: function (value) {
return ['posts', 'sheets', 'journals'].indexOf(value) !== -1 return ['posts', 'sheets', 'journals'].indexOf(value) !== -1
} }
} }

View File

@ -49,16 +49,12 @@
<a-form-model-item prop="team"> <a-form-model-item prop="team">
<a-input v-model="teams.form.model.team" autoFocus /> <a-input v-model="teams.form.model.team" autoFocus />
</a-form-model-item> </a-form-model-item>
<a-form-model-item style="margin-bottom:0"> <a-form-model-item style="margin-bottom: 0">
<a-button type="primary" @click="handleCreateTeam"> <a-button type="primary" @click="handleCreateTeam"> </a-button>
新增
</a-button>
</a-form-model-item> </a-form-model-item>
</a-form-model> </a-form-model>
</template> </template>
<a-button block class="mt-3" type="primary"> <a-button block class="mt-3" type="primary"> 新增分组 </a-button>
新增分组
</a-button>
</a-popover> </a-popover>
</a-card> </a-card>
</a-col> </a-col>
@ -88,20 +84,12 @@
@callback="formBatch.errored = false" @callback="formBatch.errored = false"
@click="handleUpdateBatch" @click="handleUpdateBatch"
></ReactiveButton> ></ReactiveButton>
<a-button v-if="!form.visible" ghost type="primary" @click="handleOpenCreateMenuForm()"> <a-button v-if="!form.visible" ghost type="primary" @click="handleOpenCreateMenuForm()"> </a-button>
新增 <a-button v-else type="default" @click="handleCloseCreateMenuForm()"> </a-button>
</a-button>
<a-button v-else type="default" @click="handleCloseCreateMenuForm()">
取消新增
</a-button>
<a-dropdown :trigger="['click']"> <a-dropdown :trigger="['click']">
<a-menu slot="overlay"> <a-menu slot="overlay">
<a-menu-item @click="menuInternalLinkSelector.visible = true"> <a-menu-item @click="menuInternalLinkSelector.visible = true"> 从系统预设链接添加 </a-menu-item>
从系统预设链接添加 <a-menu-item @click="handleDeleteBatch"> </a-menu-item>
</a-menu-item>
<a-menu-item @click="handleDeleteBatch">
删除当前组
</a-menu-item>
</a-menu> </a-menu>
<a-button> <a-button>
其他 其他

View File

@ -1,12 +1,8 @@
<template> <template>
<page-view :title="activatedTheme ? activatedTheme.name : '无'" affix subTitle="当前启用"> <page-view :title="activatedTheme ? activatedTheme.name : '无'" affix subTitle="当前启用">
<template slot="extra"> <template slot="extra">
<a-button :loading="list.loading" icon="reload" @click="handleRefreshThemesCache"> <a-button :loading="list.loading" icon="reload" @click="handleRefreshThemesCache"> </a-button>
刷新 <a-button icon="plus" type="primary" @click="installModal.visible = true"> 安装</a-button>
</a-button>
<a-button icon="plus" type="primary" @click="installModal.visible = true">
安装
</a-button>
</template> </template>
<a-row :gutter="12" align="middle" type="flex"> <a-row :gutter="12" align="middle" type="flex">
<a-col :span="24"> <a-col :span="24">
@ -20,35 +16,35 @@
<div class="theme-screenshot"> <div class="theme-screenshot">
<img :alt="item.name" :src="item.screenshots || '/images/placeholder.jpg'" loading="lazy" /> <img :alt="item.name" :src="item.screenshots || '/images/placeholder.jpg'" loading="lazy" />
</div> </div>
<template slot="actions" class="ant-card-actions"> <template slot="actions">
<div v-if="item.activated"> <div v-if="item.activated">
<a-icon style="margin-right:3px" theme="twoTone" type="unlock" /> <a-icon style="margin-right: 3px" theme="twoTone" type="unlock" />
已启用 已启用
</div> </div>
<div v-else @click="handleActiveTheme(item)"> <div v-else @click="handleActiveTheme(item)">
<a-icon style="margin-right:3px" type="lock" /> <a-icon style="margin-right: 3px" type="lock" />
启用 启用
</div> </div>
<div @click="handleRouteToThemeSetting(item)"> <div @click="handleRouteToThemeSetting(item)">
<a-icon style="margin-right:3px" type="setting" /> <a-icon style="margin-right: 3px" type="setting" />
设置 设置
</div> </div>
<a-dropdown :trigger="['click']" placement="topCenter"> <a-dropdown :trigger="['click']" placement="topCenter">
<a class="ant-dropdown-link" href="#"> <a class="ant-dropdown-link" href="#">
<a-icon style="margin-right:3px" type="ellipsis" /> <a-icon style="margin-right: 3px" type="ellipsis" />
更多 更多
</a> </a>
<a-menu slot="overlay"> <a-menu slot="overlay">
<a-menu-item :key="1" :disabled="item.activated" @click="handleOpenThemeDeleteModal(item)"> <a-menu-item :key="1" :disabled="item.activated" @click="handleOpenThemeDeleteModal(item)">
<a-icon style="margin-right:3px" type="delete" /> <a-icon style="margin-right: 3px" type="delete" />
删除 删除
</a-menu-item> </a-menu-item>
<a-menu-item v-if="item.repo" :key="2" @click="handleConfirmRemoteUpdate(item)"> <a-menu-item v-if="item.repo" :key="2" @click="handleConfirmRemoteUpdate(item)">
<a-icon style="margin-right:3px" type="cloud" /> <a-icon style="margin-right: 3px" type="cloud" />
在线更新 在线更新
</a-menu-item> </a-menu-item>
<a-menu-item :key="3" @click="handleOpenLocalUpdateModal(item)"> <a-menu-item :key="3" @click="handleOpenLocalUpdateModal(item)">
<a-icon style="margin-right:3px" type="file" /> <a-icon style="margin-right: 3px" type="file" />
本地更新 本地更新
</a-menu-item> </a-menu-item>
</a-menu> </a-menu>

View File

@ -111,7 +111,7 @@
:defaultValue="item.defaultValue" :defaultValue="item.defaultValue"
model="hex" model="hex"
picker="square" picker="square"
style="display: inline-block;height: 24px;" style="display: inline-block; height: 24px"
></verte> ></verte>
<AttachmentInput <AttachmentInput
v-else-if="item.type === 'ATTACHMENT'" v-else-if="item.type === 'ATTACHMENT'"
@ -123,7 +123,7 @@
v-else-if="item.type === 'NUMBER'" v-else-if="item.type === 'NUMBER'"
v-model="theme.settings[item.name]" v-model="theme.settings[item.name]"
:defaultValue="item.defaultValue" :defaultValue="item.defaultValue"
style="width:100%" style="width: 100%"
/> />
<a-switch <a-switch
v-else-if="item.type === 'SWITCH'" v-else-if="item.type === 'SWITCH'"

View File

@ -1,9 +1,7 @@
<template> <template>
<a-modal v-model="visible" :bodyStyle="{ padding: '0 24px 24px' }" :width="1024" title="从系统预设链接添加菜单"> <a-modal v-model="visible" :bodyStyle="{ padding: '0 24px 24px' }" :width="1024" title="从系统预设链接添加菜单">
<template slot="footer"> <template slot="footer">
<a-button @click="handleCancel"> <a-button @click="handleCancel"> </a-button>
取消
</a-button>
<ReactiveButton <ReactiveButton
:disabled="menus && menus.length <= 0" :disabled="menus && menus.length <= 0"
:errored="saveErrored" :errored="saveErrored"

View File

@ -28,12 +28,8 @@
</span> </span>
</a-list-item-meta> </a-list-item-meta>
<template slot="actions"> <template slot="actions">
<a v-if="!item.formVisible" href="javascript:void(0);" @click="handleOpenEditForm(item)"> <a v-if="!item.formVisible" href="javascript:void(0);" @click="handleOpenEditForm(item)"> </a>
编辑 <a v-else href="javascript:void(0);" @click="handleCloseCreateMenuForm(item)"> </a>
</a>
<a v-else href="javascript:void(0);" @click="handleCloseCreateMenuForm(item)">
取消编辑
</a>
</template> </template>
<template slot="actions"> <template slot="actions">
<a href="javascript:void(0);" @click="handleDelete(item.id)"></a> <a href="javascript:void(0);" @click="handleDelete(item.id)"></a>
@ -65,7 +61,7 @@
@cancel="handleCloseCreateMenuForm(item)" @cancel="handleCloseCreateMenuForm(item)"
@succeed="handleUpdateMenuSucceed(item)" @succeed="handleUpdateMenuSucceed(item)"
/> />
<div class="a-list-nested" style="margin-left: 44px;"> <div class="a-list-nested" style="margin-left: 44px">
<MenuTreeNode :excludedTeams="excludedTeams" :list="item.children" @reload="onReloadEmit" /> <MenuTreeNode :excludedTeams="excludedTeams" :list="item.children" @reload="onReloadEmit" />
</div> </div>
</div> </div>

View File

@ -1,9 +1,7 @@
<template> <template>
<a-modal v-model="modalVisible" :afterClose="onAfterClose" :closable="false" :width="416" destroyOnClose title="提示"> <a-modal v-model="modalVisible" :afterClose="onAfterClose" :closable="false" :width="416" destroyOnClose title="提示">
<template slot="footer"> <template slot="footer">
<a-button @click="modalVisible = false"> <a-button @click="modalVisible = false"> 取消 </a-button>
取消
</a-button>
<ReactiveButton <ReactiveButton
:errored="deleteErrored" :errored="deleteErrored"
:loading="deleting" :loading="deleting"
@ -15,9 +13,7 @@
></ReactiveButton> ></ReactiveButton>
</template> </template>
<p>确定删除{{ theme.name }}主题</p> <p>确定删除{{ theme.name }}主题</p>
<a-checkbox v-model="deleteSettings"> <a-checkbox v-model="deleteSettings"> </a-checkbox>
同时删除主题配置
</a-checkbox>
</a-modal> </a-modal>
</template> </template>
<script> <script>

View File

@ -36,7 +36,7 @@ export default {
isLeaf: file.isFile isLeaf: file.isFile
}, },
nativeOn: { nativeOn: {
click: function() { click: function () {
_this.handleSelectFile(file) _this.handleSelectFile(file)
} }
} }

View File

@ -22,7 +22,7 @@
</a-card-meta> </a-card-meta>
</a-card> </a-card>
</a-col> </a-col>
<a-col :lg="formColValue" :md="formColValue" :sm="24" :xl="formColValue" :xs="24" style="padding-bottom: 50px;"> <a-col :lg="formColValue" :md="formColValue" :sm="24" :xl="formColValue" :xs="24" style="padding-bottom: 50px">
<a-spin :spinning="settingLoading"> <a-spin :spinning="settingLoading">
<div v-if="themeConfigurations.length > 0" class="card-container"> <div v-if="themeConfigurations.length > 0" class="card-container">
<a-tabs defaultActiveKey="0" type="card"> <a-tabs defaultActiveKey="0" type="card">
@ -68,7 +68,7 @@
:defaultValue="item.defaultValue" :defaultValue="item.defaultValue"
model="hex" model="hex"
picker="square" picker="square"
style="display: inline-block;height: 24px;" style="display: inline-block; height: 24px"
></verte> ></verte>
<a-input <a-input
v-else-if="item.type === 'ATTACHMENT'" v-else-if="item.type === 'ATTACHMENT'"
@ -83,7 +83,7 @@
v-else-if="item.type === 'NUMBER'" v-else-if="item.type === 'NUMBER'"
v-model="themeSettings[item.name]" v-model="themeSettings[item.name]"
:defaultValue="item.defaultValue" :defaultValue="item.defaultValue"
style="width:100%" style="width: 100%"
/> />
<a-switch <a-switch
v-else-if="item.type === 'SWITCH'" v-else-if="item.type === 'SWITCH'"
@ -105,7 +105,7 @@
</a-spin> </a-spin>
</a-col> </a-col>
<a-col v-if="viewMode" :lg="20" :md="20" :sm="24" :xl="20" :xs="24" style="padding-bottom: 50px;"> <a-col v-if="viewMode" :lg="20" :md="20" :sm="24" :xl="20" :xs="24" style="padding-bottom: 50px">
<a-card :bodyStyle="{ padding: 0 }" :bordered="true"> <a-card :bodyStyle="{ padding: 0 }" :bordered="true">
<iframe <iframe
id="themeViewIframe" id="themeViewIframe"

View File

@ -95,7 +95,13 @@
</template> </template>
<span <span
slot="title" slot="title"
style="max-width: 300px;display: block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;" style="
max-width: 300px;
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
"
> >
{{ item.name }}{{ item.password ? '(加密)' : '' }} {{ item.name }}{{ item.password ? '(加密)' : '' }}
</span></a-list-item-meta </span></a-list-item-meta

View File

@ -112,7 +112,7 @@ export default {
} }
}, },
mounted() { mounted() {
window.onbeforeunload = function(e) { window.onbeforeunload = function (e) {
e = e || window.event e = e || window.event
if (e) { if (e) {
e.returnValue = '当前页面数据未保存,确定要离开吗?' e.returnValue = '当前页面数据未保存,确定要离开吗?'

View File

@ -156,11 +156,11 @@
</template> </template>
<span <span
slot="title" slot="title"
style="max-width: 300px;display: block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;" style="max-width: 300px; display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis"
> >
<a-icon <a-icon
v-if="item.topPriority !== 0" v-if="item.topPriority !== 0"
style="margin-right: 3px;" style="margin-right: 3px"
theme="twoTone" theme="twoTone"
twoToneColor="red" twoToneColor="red"
type="pushpin" type="pushpin"
@ -226,7 +226,7 @@
<span slot="postTitle" slot-scope="text, record"> <span slot="postTitle" slot-scope="text, record">
<a-icon <a-icon
v-if="record.topPriority !== 0" v-if="record.topPriority !== 0"
style="margin-right: 3px;" style="margin-right: 3px"
theme="twoTone" theme="twoTone"
twoToneColor="red" twoToneColor="red"
type="pushpin" type="pushpin"
@ -260,7 +260,7 @@
v-for="(category, index) in categoriesOfPost" v-for="(category, index) in categoriesOfPost"
:key="index" :key="index"
color="blue" color="blue"
style="margin-bottom: 8px;cursor:pointer" style="margin-bottom: 8px; cursor: pointer"
@click="handleSelectCategory(category)" @click="handleSelectCategory(category)"
> >
{{ category.name }} {{ category.name }}
@ -276,7 +276,7 @@
<span <span
slot="commentCount" slot="commentCount"
slot-scope="text, record" slot-scope="text, record"
style="cursor: pointer;" style="cursor: pointer"
@click="handleShowPostComments(record)" @click="handleShowPostComments(record)"
> >
<a-badge <a-badge
@ -373,12 +373,8 @@
@onClose="selectedPost = {}" @onClose="selectedPost = {}"
> >
<template #extraFooter> <template #extraFooter>
<a-button :disabled="selectPreviousButtonDisabled" @click="handleSelectPrevious"> <a-button :disabled="selectPreviousButtonDisabled" @click="handleSelectPrevious"> </a-button>
上一篇 <a-button :disabled="selectNextButtonDisabled" @click="handleSelectNext"> </a-button>
</a-button>
<a-button :disabled="selectNextButtonDisabled" @click="handleSelectNext">
下一篇
</a-button>
</template> </template>
</PostSettingModal> </PostSettingModal>
@ -560,7 +556,7 @@ export default {
watch: { watch: {
'list.params': { 'list.params': {
deep: true, deep: true,
handler: function(newVal) { handler: function (newVal) {
if (newVal) { if (newVal) {
const params = JSON.parse(JSON.stringify(this.list.params)) const params = JSON.parse(JSON.stringify(this.list.params))
const path = this.$router.history.current.path const path = this.$router.history.current.path

View File

@ -66,7 +66,7 @@
<template slot="title"> <template slot="title">
<span>{{ tag.postCount }} 篇文章</span> <span>{{ tag.postCount }} 篇文章</span>
</template> </template>
<post-tag :tag="tag" style="margin-bottom: 8px;cursor:pointer;" @click.native="form.model = tag" /> <post-tag :tag="tag" style="margin-bottom: 8px; cursor: pointer" @click.native="form.model = tag" />
</a-tooltip> </a-tooltip>
</a-spin> </a-spin>
</a-card> </a-card>

View File

@ -122,9 +122,7 @@
</div> </div>
<template slot="footer"> <template slot="footer">
<slot name="extraFooter" /> <slot name="extraFooter" />
<a-button :disabled="loading" @click="modalVisible = false"> <a-button :disabled="loading" @click="modalVisible = false"> 关闭 </a-button>
关闭
</a-button>
<ReactiveButton <ReactiveButton
v-if="!form.model.id" v-if="!form.model.id"
:errored="form.draftSaveErrored" :errored="form.draftSaveErrored"

View File

@ -84,7 +84,7 @@ export default {
} }
}) })
}, },
destroyed: function() { destroyed: function () {
if (this.sheetSettingVisible) { if (this.sheetSettingVisible) {
this.sheetSettingVisible = false this.sheetSettingVisible = false
} }
@ -118,7 +118,7 @@ export default {
} }
}, },
mounted() { mounted() {
window.onbeforeunload = function(e) { window.onbeforeunload = function (e) {
e = e || window.event e = e || window.event
if (e) { if (e) {
e.returnValue = '当前页面数据未保存,确定要离开吗?' e.returnValue = '当前页面数据未保存,确定要离开吗?'

View File

@ -74,7 +74,7 @@
</template> </template>
<span <span
slot="title" slot="title"
style="max-width: 300px;display: block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;" style="max-width: 300px; display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis"
> >
<a v-if="item.status === 'PUBLISHED'" :href="item.fullPath" class="no-underline" target="_blank"> <a v-if="item.status === 'PUBLISHED'" :href="item.fullPath" class="no-underline" target="_blank">
<a-tooltip :title="'点击访问【' + item.title + '】'" placement="top">{{ item.title }}</a-tooltip> <a-tooltip :title="'点击访问【' + item.title + '】'" placement="top">{{ item.title }}</a-tooltip>
@ -218,12 +218,8 @@
@onClose="selectedSheet = {}" @onClose="selectedSheet = {}"
> >
<template #extraFooter> <template #extraFooter>
<a-button :disabled="selectPreviousButtonDisabled" @click="handleSelectPrevious"> <a-button :disabled="selectPreviousButtonDisabled" @click="handleSelectPrevious"> </a-button>
上一篇 <a-button :disabled="selectNextButtonDisabled" @click="handleSelectNext"> </a-button>
</a-button>
<a-button :disabled="selectNextButtonDisabled" @click="handleSelectNext">
下一篇
</a-button>
</template> </template>
</SheetSettingModal> </SheetSettingModal>
<TargetCommentDrawer <TargetCommentDrawer

View File

@ -29,7 +29,7 @@
<a-list-item-meta> <a-list-item-meta>
<span <span
slot="title" slot="title"
style="max-width: 300px;display: block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;" style="max-width: 300px; display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis"
> >
<a v-if="item.available" :href="item.fullPath" target="_blank">{{ item.title }}</a> <a v-if="item.available" :href="item.fullPath" target="_blank">{{ item.title }}</a>
<a v-else :href="item.fullPath" disabled target="_blank">{{ item.title }}</a> <a v-else :href="item.fullPath" disabled target="_blank">{{ item.title }}</a>

View File

@ -110,9 +110,7 @@
</div> </div>
<template slot="footer"> <template slot="footer">
<slot name="extraFooter" /> <slot name="extraFooter" />
<a-button :disabled="loading" @click="modalVisible = false"> <a-button :disabled="loading" @click="modalVisible = false"> 关闭 </a-button>
关闭
</a-button>
<ReactiveButton <ReactiveButton
v-if="!form.model.id" v-if="!form.model.id"
:errored="form.draftSaveErrored" :errored="form.draftSaveErrored"

View File

@ -103,7 +103,7 @@
</a-col> </a-col>
</a-row> </a-row>
<div style="position: fixed;bottom: 30px;right: 30px;"> <div style="position: fixed; bottom: 30px; right: 30px">
<a-button <a-button
icon="setting" icon="setting"
shape="circle" shape="circle"
@ -121,7 +121,7 @@
<a-input v-model="optionModal.options.journals_title" /> <a-input v-model="optionModal.options.journals_title" />
</a-form-item> </a-form-item>
<a-form-item label="每页显示条数:"> <a-form-item label="每页显示条数:">
<a-input-number v-model="optionModal.options.journals_page_size" style="width:100%" /> <a-input-number v-model="optionModal.options.journals_page_size" style="width: 100%" />
</a-form-item> </a-form-item>
</a-form> </a-form>
</a-modal> </a-modal>

View File

@ -17,7 +17,7 @@
<a-auto-complete v-model="form.model.team" :dataSource="computedTeams" allowClear /> <a-auto-complete v-model="form.model.team" :dataSource="computedTeams" allowClear />
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="排序编号:" prop="priority"> <a-form-model-item label="排序编号:" prop="priority">
<a-input-number v-model="form.model.priority" :min="0" style="width:100%" /> <a-input-number v-model="form.model.priority" :min="0" style="width: 100%" />
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="描述:" prop="description"> <a-form-model-item label="描述:" prop="description">
<a-input v-model="form.model.description" :autoSize="{ minRows: 5 }" type="textarea" /> <a-input v-model="form.model.description" :autoSize="{ minRows: 5 }" type="textarea" />
@ -95,7 +95,13 @@
</template> </template>
<span <span
slot="title" slot="title"
style="max-width: 300px;display: block;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;" style="
max-width: 300px;
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
"
> >
{{ item.name }} {{ item.name }}
</span> </span>
@ -132,7 +138,7 @@
</a-card> </a-card>
</a-col> </a-col>
</a-row> </a-row>
<div style="position: fixed;bottom: 30px;right: 30px;"> <div style="position: fixed; bottom: 30px; right: 30px">
<a-button <a-button
icon="setting" icon="setting"
shape="circle" shape="circle"

View File

@ -67,7 +67,7 @@
@showSizeChange="handlePaginationChange" @showSizeChange="handlePaginationChange"
/> />
</div> </div>
<div style="position: fixed;bottom: 30px;right: 30px;"> <div style="position: fixed; bottom: 30px; right: 30px">
<a-button icon="setting" shape="circle" size="large" type="primary" @click="optionFormVisible = true"></a-button> <a-button icon="setting" shape="circle" size="large" type="primary" @click="optionFormVisible = true"></a-button>
</div> </div>
<a-modal v-model="optionFormVisible" :afterClose="() => (optionFormVisible = false)" title="页面设置"> <a-modal v-model="optionFormVisible" :afterClose="() => (optionFormVisible = false)" title="页面设置">
@ -79,7 +79,7 @@
<a-input v-model="options.photos_title" /> <a-input v-model="options.photos_title" />
</a-form-item> </a-form-item>
<a-form-item label="每页显示条数:"> <a-form-item label="每页显示条数:">
<a-input-number v-model="options.photos_page_size" style="width:100%" /> <a-input-number v-model="options.photos_page_size" style="width: 100%" />
</a-form-item> </a-form-item>
</a-form> </a-form>
</a-modal> </a-modal>
@ -97,7 +97,7 @@
<img <img
:src="form.model.url || '/images/placeholder.jpg'" :src="form.model.url || '/images/placeholder.jpg'"
class="w-full cursor-pointer" class="w-full cursor-pointer"
style="border-radius:4px" style="border-radius: 4px"
@click="attachmentSelectDrawer.visible = true" @click="attachmentSelectDrawer.visible = true"
/> />
</div> </div>
@ -114,7 +114,7 @@
:defaultValue="takeTimeDefaultValue" :defaultValue="takeTimeDefaultValue"
format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"
showTime showTime
style="width:100%" style="width: 100%"
@change="onTakeTimeChange" @change="onTakeTimeChange"
@ok="onTakeTimeSelect" @ok="onTakeTimeSelect"
/> />
@ -123,7 +123,7 @@
<a-input v-model="form.model.location" /> <a-input v-model="form.model.location" />
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="分组:" prop="team"> <a-form-model-item label="分组:" prop="team">
<a-auto-complete v-model="form.model.team" :dataSource="computedTeams" allowClear style="width:100%" /> <a-auto-complete v-model="form.model.team" :dataSource="computedTeams" allowClear style="width: 100%" />
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="描述:" prop="description"> <a-form-model-item label="描述:" prop="description">
<a-input v-model="form.model.description" :autoSize="{ minRows: 5 }" type="textarea" /> <a-input v-model="form.model.description" :autoSize="{ minRows: 5 }" type="textarea" />

View File

@ -189,7 +189,7 @@ User Agent${navigator.userAgent}`
.then(response => { .then(response => {
_this.contributors = response.data _this.contributors = response.data
}) })
.catch(function(error) { .catch(function (error) {
_this.$log.error('Fetch contributors error', error) _this.$log.error('Fetch contributors error', error)
}) })
.finally(() => { .finally(() => {
@ -236,7 +236,7 @@ User Agent${navigator.userAgent}`
} }
}) })
}) })
.catch(function(error) { .catch(function (error) {
this.$log.error('Check update fail', error) this.$log.error('Check update fail', error)
}) })
.finally(() => { .finally(() => {

View File

@ -2,7 +2,7 @@
<a-row align="middle" class="h-screen" justify="center" type="flex"> <a-row align="middle" class="h-screen" justify="center" type="flex">
<a-col :lg="16" :md="20" :sm="20" :xl="12" :xs="23" :xxl="8"> <a-col :lg="16" :md="20" :sm="20" :xl="12" :xs="23" :xxl="8">
<div class="card-container animated fadeIn"> <div class="card-container animated fadeIn">
<a-card :bordered="false" style="box-shadow: rgba(99, 99, 99, 0.2) 0 2px 8px 0;"> <a-card :bordered="false" style="box-shadow: rgba(99, 99, 99, 0.2) 0 2px 8px 0">
<div class="halo-logo"> <div class="halo-logo">
<img alt="Halo Logo" src="/images/logo.svg" /> <img alt="Halo Logo" src="/images/logo.svg" />
<span>安装向导</span> <span>安装向导</span>
@ -11,12 +11,8 @@
<!-- Blogger info --> <!-- Blogger info -->
<div class="mt-5 mb-5"> <div class="mt-5 mb-5">
<a-radio-group v-model="installationMode"> <a-radio-group v-model="installationMode">
<a-radio-button value="new"> <a-radio-button value="new"> 全新安装 </a-radio-button>
全新安装 <a-radio-button value="import"> 数据导入 </a-radio-button>
</a-radio-button>
<a-radio-button value="import">
数据导入
</a-radio-button>
</a-radio-group> </a-radio-group>
</div> </div>
<a-form-model <a-form-model
@ -27,45 +23,41 @@
class="installationForm animated fadeIn" class="installationForm animated fadeIn"
layout="horizontal" layout="horizontal"
> >
<a-divider dashed orientation="left"> <a-divider dashed orientation="left"> 管理员信息 </a-divider>
管理员信息
</a-divider>
<a-form-model-item prop="username"> <a-form-model-item prop="username">
<a-input v-model="form.model.username" placeholder="用户名"> <a-input v-model="form.model.username" placeholder="用户名">
<a-icon slot="prefix" style="color: rgba(0,0,0,.25)" type="user" /> <a-icon slot="prefix" style="color: rgba(0, 0, 0, 0.25)" type="user" />
</a-input> </a-input>
</a-form-model-item> </a-form-model-item>
<a-form-model-item prop="username"> <a-form-model-item prop="username">
<a-input v-model="form.model.nickname" placeholder="用户昵称"> <a-input v-model="form.model.nickname" placeholder="用户昵称">
<a-icon slot="prefix" style="color: rgba(0,0,0,.25)" type="user" /> <a-icon slot="prefix" style="color: rgba(0, 0, 0, 0.25)" type="user" />
</a-input> </a-input>
</a-form-model-item> </a-form-model-item>
<a-form-model-item prop="email"> <a-form-model-item prop="email">
<a-input v-model="form.model.email" placeholder="用户邮箱"> <a-input v-model="form.model.email" placeholder="用户邮箱">
<a-icon slot="prefix" style="color: rgba(0,0,0,.25)" type="mail" /> <a-icon slot="prefix" style="color: rgba(0, 0, 0, 0.25)" type="mail" />
</a-input> </a-input>
</a-form-model-item> </a-form-model-item>
<a-form-model-item prop="password"> <a-form-model-item prop="password">
<a-input v-model="form.model.password" placeholder="登录密码8-100位" type="password"> <a-input v-model="form.model.password" placeholder="登录密码8-100位" type="password">
<a-icon slot="prefix" style="color: rgba(0,0,0,.25)" type="lock" /> <a-icon slot="prefix" style="color: rgba(0, 0, 0, 0.25)" type="lock" />
</a-input> </a-input>
</a-form-model-item> </a-form-model-item>
<a-form-model-item prop="confirmPassword"> <a-form-model-item prop="confirmPassword">
<a-input v-model="form.model.confirmPassword" placeholder="确认登录密码" type="password"> <a-input v-model="form.model.confirmPassword" placeholder="确认登录密码" type="password">
<a-icon slot="prefix" style="color: rgba(0,0,0,.25)" type="lock" /> <a-icon slot="prefix" style="color: rgba(0, 0, 0, 0.25)" type="lock" />
</a-input> </a-input>
</a-form-model-item> </a-form-model-item>
<a-divider dashed orientation="left"> <a-divider dashed orientation="left"> 站点信息 </a-divider>
站点信息
</a-divider>
<a-form-model-item prop="url"> <a-form-model-item prop="url">
<a-input v-model="form.model.url" placeholder="博客地址"> <a-input v-model="form.model.url" placeholder="博客地址">
<a-icon slot="prefix" style="color: rgba(0,0,0,.25)" type="link" /> <a-icon slot="prefix" style="color: rgba(0, 0, 0, 0.25)" type="link" />
</a-input> </a-input>
</a-form-model-item> </a-form-model-item>
<a-form-model-item prop="title"> <a-form-model-item prop="title">
<a-input v-model="form.model.title" placeholder="博客标题"> <a-input v-model="form.model.title" placeholder="博客标题">
<a-icon slot="prefix" style="color: rgba(0,0,0,.25)" type="book" /> <a-icon slot="prefix" style="color: rgba(0, 0, 0, 0.25)" type="book" />
</a-input> </a-input>
</a-form-model-item> </a-form-model-item>
</a-form-model> </a-form-model>

View File

@ -1,7 +1,7 @@
<template> <template>
<page-view :title="title"> <page-view :title="title">
<template slot="extra"> <template slot="extra">
<a-button style="padding:0" type="link" @click="advancedOptions = !advancedOptions"> <a-button style="padding: 0" type="link" @click="advancedOptions = !advancedOptions">
切换到{{ advancedOptions ? '基础选项' : '高级选项' }} 切换到{{ advancedOptions ? '基础选项' : '高级选项' }}
</a-button> </a-button>
</template> </template>

View File

@ -7,7 +7,7 @@
<a-icon type="experiment" /> <a-icon type="experiment" />
开发者选项 开发者选项
</div> </div>
<p style="min-height: 50px;">点击进入开发者选项页面</p> <p style="min-height: 50px">点击进入开发者选项页面</p>
<a-button class="float-right" type="primary" @click="handleToDeveloperOptions()"></a-button> <a-button class="float-right" type="primary" @click="handleToDeveloperOptions()"></a-button>
</a-card> </a-card>
</a-col> </a-col>
@ -17,19 +17,13 @@
<a-icon type="hdd" /> <a-icon type="hdd" />
博客备份 博客备份
</div> </div>
<p style="min-height: 50px;">支持备份全站数据和数据导出支持下载到本地</p> <p style="min-height: 50px">支持备份全站数据和数据导出支持下载到本地</p>
<a-dropdown class="float-right"> <a-dropdown class="float-right">
<a-menu slot="overlay"> <a-menu slot="overlay">
<a-menu-item key="1" @click="backupWorkDirDrawerVisible = true"> <a-menu-item key="1" @click="backupWorkDirDrawerVisible = true"> 整站备份 </a-menu-item>
整站备份 <a-menu-item key="2" @click="exportDataDrawerVisible = true"> 数据导出 </a-menu-item>
</a-menu-item> <a-menu-item key="3" @click="exportMarkdownDrawerVisible = true"> 导出文章为 Markdown 文档 </a-menu-item>
<a-menu-item key="2" @click="exportDataDrawerVisible = true">
数据导出
</a-menu-item>
<a-menu-item key="3" @click="exportMarkdownDrawerVisible = true">
导出文章为 Markdown 文档
</a-menu-item>
</a-menu> </a-menu>
<a-button class="ml-2"> <a-button class="ml-2">
备份 备份
@ -44,7 +38,7 @@
<a-icon type="file-markdown" /> <a-icon type="file-markdown" />
Markdown 文章导入 Markdown 文章导入
</div> </div>
<p style="min-height: 50px;">支持 Hexo/Jekyll 文章导入并解析元数据</p> <p style="min-height: 50px">支持 Hexo/Jekyll 文章导入并解析元数据</p>
<a-button class="float-right" type="primary" @click="markdownUpload = true">导入</a-button> <a-button class="float-right" type="primary" @click="markdownUpload = true">导入</a-button>
</a-card> </a-card>
</a-col> </a-col>

View File

@ -133,7 +133,7 @@
</a-card> </a-card>
</a-col> </a-col>
</a-row> </a-row>
<div style="position: fixed;bottom: 30px;right: 30px;"> <div style="position: fixed; bottom: 30px; right: 30px">
<a-button icon="sync" shape="circle" size="large" type="primary" @click="handleRefresh"></a-button> <a-button icon="sync" shape="circle" size="large" type="primary" @click="handleRefresh"></a-button>
</div> </div>
</div> </div>

View File

@ -3,12 +3,8 @@
<a-card :bodyStyle="{ padding: 0 }" :bordered="false"> <a-card :bodyStyle="{ padding: 0 }" :bordered="false">
<div class="table-operator"> <div class="table-operator">
<a-button icon="cloud-upload" type="primary" @click="uploadModal.visible = true">上传</a-button> <a-button icon="cloud-upload" type="primary" @click="uploadModal.visible = true">上传</a-button>
<a-button icon="plus" @click="handleOpenCreateDirectoryModal({})"> <a-button icon="plus" @click="handleOpenCreateDirectoryModal({})"> </a-button>
新建文件夹 <a-button :loading="list.loading" icon="sync" @click="handleListStatics"> </a-button>
</a-button>
<a-button :loading="list.loading" icon="sync" @click="handleListStatics">
刷新
</a-button>
</div> </div>
<div class="mt-4"> <div class="mt-4">
<a-table <a-table
@ -235,7 +231,7 @@ export default {
...mapGetters(['options']), ...mapGetters(['options']),
sortedStatics() { sortedStatics() {
const data = this.list.data.slice(0) const data = this.list.data.slice(0)
return data.sort(function(a, b) { return data.sort(function (a, b) {
return a.isFile - b.isFile return a.isFile - b.isFile
}) })
} }

View File

@ -11,10 +11,10 @@
<a-switch v-model="options.attachment_upload_image_preview_enable" /> <a-switch v-model="options.attachment_upload_image_preview_enable" />
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="最大上传文件数:"> <a-form-model-item label="最大上传文件数:">
<a-input-number v-model="options.attachment_upload_max_files" :min="1" style="width:100%" /> <a-input-number v-model="options.attachment_upload_max_files" :min="1" style="width: 100%" />
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="同时上传文件数:"> <a-form-model-item label="同时上传文件数:">
<a-input-number v-model="options.attachment_upload_max_parallel_uploads" :min="1" style="width:100%" /> <a-input-number v-model="options.attachment_upload_max_parallel_uploads" :min="1" style="width: 100%" />
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="存储位置:"> <a-form-model-item label="存储位置:">
<a-select v-model="options.attachment_type"> <a-select v-model="options.attachment_type">

View File

@ -33,7 +33,7 @@
<a-input v-model="options.gravatar_source" /> <a-input v-model="options.gravatar_source" />
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="每页显示条数: "> <a-form-model-item label="每页显示条数: ">
<a-input-number v-model="options.comment_page_size" :min="1" style="width:100%" /> <a-input-number v-model="options.comment_page_size" :min="1" style="width: 100%" />
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="占位提示:"> <a-form-model-item label="占位提示:">
<a-input v-model="options.comment_content_placeholder" /> <a-input v-model="options.comment_content_placeholder" />

View File

@ -15,10 +15,10 @@
</a-select> </a-select>
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="首页每页文章条数:"> <a-form-model-item label="首页每页文章条数:">
<a-input-number v-model="options.post_index_page_size" :min="1" style="width:100%" /> <a-input-number v-model="options.post_index_page_size" :min="1" style="width: 100%" />
</a-form-model-item> </a-form-model-item>
<a-form-model-item help="* 包括标签所属文章页面、分类所属文章页面" label="归档页面每页文章条数:"> <a-form-model-item help="* 包括标签所属文章页面、分类所属文章页面" label="归档页面每页文章条数:">
<a-input-number v-model="options.post_archives_page_size" :min="1" style="width:100%" /> <a-input-number v-model="options.post_archives_page_size" :min="1" style="width: 100%" />
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="RSS 内容类型:"> <a-form-model-item label="RSS 内容类型:">
<a-select v-model="options.rss_content_type"> <a-select v-model="options.rss_content_type">
@ -27,10 +27,10 @@
</a-select> </a-select>
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="RSS 内容条数:"> <a-form-model-item label="RSS 内容条数:">
<a-input-number v-model="options.rss_page_size" :min="1" style="width:100%" /> <a-input-number v-model="options.rss_page_size" :min="1" style="width: 100%" />
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="文章摘要字数:"> <a-form-model-item label="文章摘要字数:">
<a-input-number v-model="options.post_summary_length" style="width:100%" /> <a-input-number v-model="options.post_summary_length" style="width: 100%" />
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="自动清理回收站文章:"> <a-form-model-item label="自动清理回收站文章:">
<a-switch v-model="options.recycled_post_cleaning_enabled" /> <a-switch v-model="options.recycled_post_cleaning_enabled" />

View File

@ -12,7 +12,7 @@
@click="attachmentDrawer.visible = true" @click="attachmentDrawer.visible = true"
/> />
</a-tooltip> </a-tooltip>
<div class="mt-4 mb-1 text-xl font-medium leading-5" style="color: rgba(0, 0, 0, 0.85);"> <div class="mt-4 mb-1 text-xl font-medium leading-5" style="color: rgba(0, 0, 0, 0.85)">
{{ userForm.model.nickname }} {{ userForm.model.nickname }}
</div> </div>
<div>{{ userForm.model.description }}</div> <div>{{ userForm.model.description }}</div>
@ -216,9 +216,7 @@
icon="safety-certificate" icon="safety-certificate"
> >
<template slot="footer"> <template slot="footer">
<a-button key="back" @click="handleCloseMFAuthModal"> <a-button key="back" @click="handleCloseMFAuthModal"> </a-button>
取消
</a-button>
<ReactiveButton <ReactiveButton
key="submit" key="submit"
:errored="mfaParam.errored" :errored="mfaParam.errored"
@ -234,7 +232,7 @@
<a-form-model ref="mfaForm" :model="mfaParam" :rules="mfaParam.rules" layout="vertical"> <a-form-model ref="mfaForm" :model="mfaParam" :rules="mfaParam.rules" layout="vertical">
<a-form-model-item v-if="mfaUsed" label="两步验证码" prop="authcode"> <a-form-model-item v-if="mfaUsed" label="两步验证码" prop="authcode">
<a-input v-model="mfaParam.authcode" :maxLength="6"> <a-input v-model="mfaParam.authcode" :maxLength="6">
<a-icon slot="prefix" style="color: rgba(0,0,0,.25)" type="safety-certificate" /> <a-icon slot="prefix" style="color: rgba(0, 0, 0, 0.25)" type="safety-certificate" />
</a-input> </a-input>
</a-form-model-item> </a-form-model-item>
<a-form-model-item v-if="!mfaUsed" :help="`MFAKey:${mfaParam.mfaKey}`" label="1. 请扫描二维码或导入 key"> <a-form-model-item v-if="!mfaUsed" :help="`MFAKey:${mfaParam.mfaKey}`" label="1. 请扫描二维码或导入 key">
@ -247,7 +245,7 @@
</a-form-model-item> </a-form-model-item>
<a-form-model-item v-if="!mfaUsed" label="2. 验证两步验证码" prop="authcode"> <a-form-model-item v-if="!mfaUsed" label="2. 验证两步验证码" prop="authcode">
<a-input v-model="mfaParam.authcode" :maxLength="6"> <a-input v-model="mfaParam.authcode" :maxLength="6">
<a-icon slot="prefix" style="color: rgba(0,0,0,.25)" type="safety-certificate" /> <a-icon slot="prefix" style="color: rgba(0, 0, 0, 0.25)" type="safety-certificate" />
</a-input> </a-input>
</a-form-model-item> </a-form-model-item>
</a-form-model> </a-form-model>

View File

@ -43,9 +43,7 @@
<a-button :block="true" type="primary" @click="handleResetPassword"></a-button> <a-button :block="true" type="primary" @click="handleResetPassword"></a-button>
</a-form-model-item> </a-form-model-item>
</a-form-model> </a-form-model>
<router-link :to="{ name: 'Login' }" class="tip"> <router-link :to="{ name: 'Login' }" class="tip"> 返回登录 </router-link>
返回登录
</router-link>
</div> </div>
</div> </div>
</template> </template>

View File

@ -131,24 +131,24 @@ module.exports = {
}, },
spacing: { spacing: {
px: '1px', px: '1px',
'0': '0', 0: '0',
'1': '0.25rem', 1: '0.25rem',
'2': '0.5rem', 2: '0.5rem',
'3': '0.75rem', 3: '0.75rem',
'4': '1rem', 4: '1rem',
'5': '1.25rem', 5: '1.25rem',
'6': '1.5rem', 6: '1.5rem',
'8': '2rem', 8: '2rem',
'10': '2.5rem', 10: '2.5rem',
'12': '3rem', 12: '3rem',
'16': '4rem', 16: '4rem',
'20': '5rem', 20: '5rem',
'24': '6rem', 24: '6rem',
'32': '8rem', 32: '8rem',
'40': '10rem', 40: '10rem',
'48': '12rem', 48: '12rem',
'56': '14rem', 56: '14rem',
'64': '16rem' 64: '16rem'
}, },
backgroundColor: theme => theme('colors'), backgroundColor: theme => theme('colors'),
backgroundImage: { backgroundImage: {
@ -195,10 +195,10 @@ module.exports = {
}, },
borderWidth: { borderWidth: {
default: '1px', default: '1px',
'0': '0', 0: '0',
'2': '2px', 2: '2px',
'4': '4px', 4: '4px',
'8': '8px' 8: '8px'
}, },
boxShadow: { boxShadow: {
xs: '0 0 0 1px rgba(0, 0, 0, 0.05)', xs: '0 0 0 1px rgba(0, 0, 0, 0.05)',
@ -229,17 +229,17 @@ module.exports = {
current: 'currentColor' current: 'currentColor'
}, },
flex: { flex: {
'1': '1 1 0%', 1: '1 1 0%',
auto: '1 1 auto', auto: '1 1 auto',
initial: '0 1 auto', initial: '0 1 auto',
none: 'none' none: 'none'
}, },
flexGrow: { flexGrow: {
'0': '0', 0: '0',
default: '1' default: '1'
}, },
flexShrink: { flexShrink: {
'0': '0', 0: '0',
default: '1' default: '1'
}, },
fontFamily: { fontFamily: {
@ -291,7 +291,7 @@ module.exports = {
screen: '100vh' screen: '100vh'
}), }),
inset: { inset: {
'0': '0', 0: '0',
auto: 'auto' auto: 'auto'
}, },
letterSpacing: { letterSpacing: {
@ -309,14 +309,14 @@ module.exports = {
normal: '1.5', normal: '1.5',
relaxed: '1.625', relaxed: '1.625',
loose: '2', loose: '2',
'3': '.75rem', 3: '.75rem',
'4': '1rem', 4: '1rem',
'5': '1.25rem', 5: '1.25rem',
'6': '1.5rem', 6: '1.5rem',
'7': '1.75rem', 7: '1.75rem',
'8': '2rem', 8: '2rem',
'9': '2.25rem', 9: '2.25rem',
'10': '2.5rem' 10: '2.5rem'
}, },
listStyleType: { listStyleType: {
none: 'none', none: 'none',
@ -348,12 +348,12 @@ module.exports = {
...breakpoints(theme('screens')) ...breakpoints(theme('screens'))
}), }),
minHeight: { minHeight: {
'0': '0', 0: '0',
full: '100%', full: '100%',
screen: '100vh' screen: '100vh'
}, },
minWidth: { minWidth: {
'0': '0', 0: '0',
full: '100%' full: '100%'
}, },
objectPosition: { objectPosition: {
@ -368,28 +368,28 @@ module.exports = {
top: 'top' top: 'top'
}, },
opacity: { opacity: {
'0': '0', 0: '0',
'25': '0.25', 25: '0.25',
'50': '0.5', 50: '0.5',
'75': '0.75', 75: '0.75',
'100': '1' 100: '1'
}, },
order: { order: {
first: '-9999', first: '-9999',
last: '9999', last: '9999',
none: '0', none: '0',
'1': '1', 1: '1',
'2': '2', 2: '2',
'3': '3', 3: '3',
'4': '4', 4: '4',
'5': '5', 5: '5',
'6': '6', 6: '6',
'7': '7', 7: '7',
'8': '8', 8: '8',
'9': '9', 9: '9',
'10': '10', 10: '10',
'11': '11', 11: '11',
'12': '12' 12: '12'
}, },
padding: theme => theme('spacing'), padding: theme => theme('spacing'),
placeholderColor: theme => theme('colors'), placeholderColor: theme => theme('colors'),
@ -402,9 +402,9 @@ module.exports = {
current: 'currentColor' current: 'currentColor'
}, },
strokeWidth: { strokeWidth: {
'0': '0', 0: '0',
'1': '1', 1: '1',
'2': '2' 2: '2'
}, },
textColor: theme => theme('colors'), textColor: theme => theme('colors'),
textOpacity: theme => theme('opacity'), textOpacity: theme => theme('opacity'),
@ -442,28 +442,28 @@ module.exports = {
}), }),
zIndex: { zIndex: {
auto: 'auto', auto: 'auto',
'0': '0', 0: '0',
'10': '10', 10: '10',
'20': '20', 20: '20',
'30': '30', 30: '30',
'40': '40', 40: '40',
'50': '50' 50: '50'
}, },
gap: theme => theme('spacing'), gap: theme => theme('spacing'),
gridTemplateColumns: { gridTemplateColumns: {
none: 'none', none: 'none',
'1': 'repeat(1, minmax(0, 1fr))', 1: 'repeat(1, minmax(0, 1fr))',
'2': 'repeat(2, minmax(0, 1fr))', 2: 'repeat(2, minmax(0, 1fr))',
'3': 'repeat(3, minmax(0, 1fr))', 3: 'repeat(3, minmax(0, 1fr))',
'4': 'repeat(4, minmax(0, 1fr))', 4: 'repeat(4, minmax(0, 1fr))',
'5': 'repeat(5, minmax(0, 1fr))', 5: 'repeat(5, minmax(0, 1fr))',
'6': 'repeat(6, minmax(0, 1fr))', 6: 'repeat(6, minmax(0, 1fr))',
'7': 'repeat(7, minmax(0, 1fr))', 7: 'repeat(7, minmax(0, 1fr))',
'8': 'repeat(8, minmax(0, 1fr))', 8: 'repeat(8, minmax(0, 1fr))',
'9': 'repeat(9, minmax(0, 1fr))', 9: 'repeat(9, minmax(0, 1fr))',
'10': 'repeat(10, minmax(0, 1fr))', 10: 'repeat(10, minmax(0, 1fr))',
'11': 'repeat(11, minmax(0, 1fr))', 11: 'repeat(11, minmax(0, 1fr))',
'12': 'repeat(12, minmax(0, 1fr))' 12: 'repeat(12, minmax(0, 1fr))'
}, },
gridColumn: { gridColumn: {
auto: 'auto', auto: 'auto',
@ -482,44 +482,44 @@ module.exports = {
}, },
gridColumnStart: { gridColumnStart: {
auto: 'auto', auto: 'auto',
'1': '1', 1: '1',
'2': '2', 2: '2',
'3': '3', 3: '3',
'4': '4', 4: '4',
'5': '5', 5: '5',
'6': '6', 6: '6',
'7': '7', 7: '7',
'8': '8', 8: '8',
'9': '9', 9: '9',
'10': '10', 10: '10',
'11': '11', 11: '11',
'12': '12', 12: '12',
'13': '13' 13: '13'
}, },
gridColumnEnd: { gridColumnEnd: {
auto: 'auto', auto: 'auto',
'1': '1', 1: '1',
'2': '2', 2: '2',
'3': '3', 3: '3',
'4': '4', 4: '4',
'5': '5', 5: '5',
'6': '6', 6: '6',
'7': '7', 7: '7',
'8': '8', 8: '8',
'9': '9', 9: '9',
'10': '10', 10: '10',
'11': '11', 11: '11',
'12': '12', 12: '12',
'13': '13' 13: '13'
}, },
gridTemplateRows: { gridTemplateRows: {
none: 'none', none: 'none',
'1': 'repeat(1, minmax(0, 1fr))', 1: 'repeat(1, minmax(0, 1fr))',
'2': 'repeat(2, minmax(0, 1fr))', 2: 'repeat(2, minmax(0, 1fr))',
'3': 'repeat(3, minmax(0, 1fr))', 3: 'repeat(3, minmax(0, 1fr))',
'4': 'repeat(4, minmax(0, 1fr))', 4: 'repeat(4, minmax(0, 1fr))',
'5': 'repeat(5, minmax(0, 1fr))', 5: 'repeat(5, minmax(0, 1fr))',
'6': 'repeat(6, minmax(0, 1fr))' 6: 'repeat(6, minmax(0, 1fr))'
}, },
gridRow: { gridRow: {
auto: 'auto', auto: 'auto',
@ -532,23 +532,23 @@ module.exports = {
}, },
gridRowStart: { gridRowStart: {
auto: 'auto', auto: 'auto',
'1': '1', 1: '1',
'2': '2', 2: '2',
'3': '3', 3: '3',
'4': '4', 4: '4',
'5': '5', 5: '5',
'6': '6', 6: '6',
'7': '7' 7: '7'
}, },
gridRowEnd: { gridRowEnd: {
auto: 'auto', auto: 'auto',
'1': '1', 1: '1',
'2': '2', 2: '2',
'3': '3', 3: '3',
'4': '4', 4: '4',
'5': '5', 5: '5',
'6': '6', 6: '6',
'7': '7' 7: '7'
}, },
transformOrigin: { transformOrigin: {
center: 'center', center: 'center',
@ -562,25 +562,25 @@ module.exports = {
'top-left': 'top left' 'top-left': 'top left'
}, },
scale: { scale: {
'0': '0', 0: '0',
'50': '.5', 50: '.5',
'75': '.75', 75: '.75',
'90': '.9', 90: '.9',
'95': '.95', 95: '.95',
'100': '1', 100: '1',
'105': '1.05', 105: '1.05',
'110': '1.1', 110: '1.1',
'125': '1.25', 125: '1.25',
'150': '1.5' 150: '1.5'
}, },
rotate: { rotate: {
'-180': '-180deg', '-180': '-180deg',
'-90': '-90deg', '-90': '-90deg',
'-45': '-45deg', '-45': '-45deg',
'0': '0', 0: '0',
'45': '45deg', 45: '45deg',
'90': '90deg', 90: '90deg',
'180': '180deg' 180: '180deg'
}, },
translate: (theme, { negative }) => ({ translate: (theme, { negative }) => ({
...theme('spacing'), ...theme('spacing'),
@ -594,10 +594,10 @@ module.exports = {
'-12': '-12deg', '-12': '-12deg',
'-6': '-6deg', '-6': '-6deg',
'-3': '-3deg', '-3': '-3deg',
'0': '0', 0: '0',
'3': '3deg', 3: '3deg',
'6': '6deg', 6: '6deg',
'12': '12deg' 12: '12deg'
}, },
transitionProperty: { transitionProperty: {
none: 'none', none: 'none',
@ -615,24 +615,24 @@ module.exports = {
'in-out': 'cubic-bezier(0.4, 0, 0.2, 1)' 'in-out': 'cubic-bezier(0.4, 0, 0.2, 1)'
}, },
transitionDuration: { transitionDuration: {
'75': '75ms', 75: '75ms',
'100': '100ms', 100: '100ms',
'150': '150ms', 150: '150ms',
'200': '200ms', 200: '200ms',
'300': '300ms', 300: '300ms',
'500': '500ms', 500: '500ms',
'700': '700ms', 700: '700ms',
'1000': '1000ms' 1000: '1000ms'
}, },
transitionDelay: { transitionDelay: {
'75': '75ms', 75: '75ms',
'100': '100ms', 100: '100ms',
'150': '150ms', 150: '150ms',
'200': '200ms', 200: '200ms',
'300': '300ms', 300: '300ms',
'500': '500ms', 500: '500ms',
'700': '700ms', 700: '700ms',
'1000': '1000ms' 1000: '1000ms'
}, },
animation: { animation: {
none: 'none', none: 'none',

View File

@ -1,6 +1,8 @@
const pkg = require('./package.json') const pkg = require('./package.json')
module.exports = { const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
publicPath: process.env.PUBLIC_PATH, publicPath: process.env.PUBLIC_PATH,
chainWebpack: config => { chainWebpack: config => {
@ -24,4 +26,4 @@ module.exports = {
lintOnSave: false, lintOnSave: false,
transpileDependencies: [], transpileDependencies: [],
productionSourceMap: false productionSourceMap: false
} })