├── src ├── mock │ ├── views │ │ ├── dashboard.js │ │ ├── medias.js │ │ ├── post │ │ │ ├── post-categories.js │ │ │ ├── post-content-card.js │ │ │ ├── post-appearance-card.js │ │ │ ├── post-seo-card.js │ │ │ ├── post-category-card.js │ │ │ ├── post-addition-card.js │ │ │ ├── post-attributes.js │ │ │ ├── post-attribute-edit.js │ │ │ └── post-social-dialog.js │ │ ├── product │ │ │ ├── product-categories.js │ │ │ ├── product-content-card.js │ │ │ ├── product-appearance-card.js │ │ │ ├── product-seo-card.js │ │ │ ├── product-category-card.js │ │ │ ├── product-addition-card.js │ │ │ ├── product-base-card.js │ │ │ ├── product-attributes.js │ │ │ ├── product-attribute-edit.js │ │ │ └── product-social-dialog.js │ │ ├── page │ │ │ ├── page-base-card.js │ │ │ └── page-seo-card.js │ │ ├── appbar.js │ │ ├── notification │ │ │ ├── notification-view.js │ │ │ └── notification-list.js │ │ ├── user │ │ │ ├── roles.js │ │ │ └── admins.js │ │ └── order │ │ │ └── ticheng.js │ └── actions │ │ ├── post-blank.js │ │ ├── post-xx.js │ │ ├── one-notification.js │ │ ├── post-attributes.js │ │ ├── order-list.js │ │ ├── notifications.js │ │ ├── post1.js │ │ ├── notifications-list.js │ │ └── inquires.js ├── Customized │ ├── PageDesign │ │ └── Core │ │ │ ├── States │ │ │ ├── ActiveState.js │ │ │ ├── CanDragoverState.js │ │ │ ├── DraggedState.js │ │ │ ├── NormalState.js │ │ │ ├── FocusState.js │ │ │ └── ElementState.js │ │ │ ├── Elements │ │ │ ├── Canvas.js │ │ │ ├── ElementRow.js │ │ │ ├── ElementColumn.js │ │ │ ├── ElementPageContent.js │ │ │ └── ElementPageLayout.js │ │ │ └── Views │ │ │ ├── ThePageHeader.vue │ │ │ ├── ThePageFooter.vue │ │ │ ├── TheLabel.vue │ │ │ ├── TheToolbox.vue │ │ │ ├── ThePageContent.vue │ │ │ ├── TheCanvas.vue │ │ │ └── TheMouseFollower.vue │ ├── Themes.vue │ ├── NavMenu.vue │ └── Modules │ │ ├── FormDesign.vue │ │ └── WelcomePage.vue ├── components │ ├── relations │ │ ├── VularHasOneCard.vue │ │ ├── VularHasOneDialog.vue │ │ ├── VularToManySelect.vue │ │ └── VularHasManyPanel.vue │ ├── VularPageContent.vue │ ├── tinymce │ │ ├── toolbar.js │ │ ├── plugins.js │ │ └── dynamicLoadScript.js │ ├── form │ │ ├── VularLabel.vue │ │ ├── VularFormCard.vue │ │ ├── VularInput.vue │ │ └── VularDateField.vue │ ├── widgets │ │ ├── VularPageHeaderTitle.vue │ │ ├── VularListTitle.vue │ │ └── VularPageHeader.vue │ ├── pages │ │ ├── dashboard │ │ │ ├── charts │ │ │ │ ├── PieChart.vue │ │ │ │ └── HistogramChart.vue │ │ │ └── tables │ │ │ │ ├── Orders.vue │ │ │ │ └── Projects.vue │ │ └── theme │ │ │ ├── VularColorInput.vue │ │ │ └── VularBackgrounInput.vue │ ├── VularBottomActionEditPage.vue │ ├── media │ │ ├── MediaView.vue │ │ ├── MediaFolderMenu.vue │ │ ├── VularSingleImageInput.vue │ │ ├── MediaFolderList.vue │ │ ├── MediaAddCell.vue │ │ ├── MediaSelectCell.vue │ │ ├── MediaFolderRow.vue │ │ └── MediaSelectDialog.vue │ ├── VularTreePage.vue │ ├── VularMediasPage.vue │ ├── notifications │ │ └── ViewDialog.vue │ └── VularPage.vue ├── VularAdmin │ ├── Drawer │ │ ├── VularSubheader.vue │ │ ├── VularMenuItem.vue │ │ └── VularMenuItemGroup.vue │ ├── VularModule.vue │ ├── tools │ │ ├── AppFab.vue │ │ └── ErrorDialog.vue │ ├── VularPageLoader.vue │ └── VularAppbar.vue ├── plugins │ └── vuetify.js ├── App.vue ├── assets │ └── locales │ │ ├── index.js │ │ ├── zh.json │ │ └── en.json ├── themes │ ├── demo5.js │ ├── demo2.js │ ├── demo6.js │ ├── demo4.js │ ├── demo3.js │ ├── demo7.js │ ├── demo8.js │ └── demo1.js ├── store.js └── basic │ └── vular-array.js ├── images ├── 1.jpg ├── 100.jpg ├── 2.jpg ├── 3.jpg ├── 4.jpg ├── 5.jpg ├── a1.jpg ├── a2.jpg ├── a3.jpg ├── a4.jpg ├── a5.jpg ├── a6.jpg ├── bg.jpg ├── demo1.jpg ├── demo2.jpg ├── demo3.jpg ├── demo4.jpg ├── demo5.jpg ├── demo6.jpg ├── demo7.jpg ├── demo8.jpg ├── login.jpg ├── logo.png ├── logo2.png ├── favicon.png ├── login-2.jpg ├── login-bg.jpg ├── logo-3.png ├── logo-4.png ├── logo-5.png ├── logo-b.png ├── logo-w.png ├── pics │ ├── 110-500x300.jpg │ ├── 111-500x300.jpg │ ├── 112-500x300.jpg │ ├── 113-500x300.jpg │ ├── 114-500x300.jpg │ ├── 115-500x300.jpg │ ├── 116-500x300.jpg │ ├── 117-500x300.jpg │ ├── 118-500x300.jpg │ ├── 119-500x300.jpg │ ├── 120-500x300.jpg │ └── 121-500x300.jpg └── lazy-pics │ ├── 110-500x300.jpg │ ├── 111-500x300.jpg │ ├── 112-500x300.jpg │ ├── 113-500x300.jpg │ ├── 114-500x300.jpg │ ├── 115-500x300.jpg │ ├── 116-500x300.jpg │ ├── 117-500x300.jpg │ ├── 118-500x300.jpg │ ├── 119-500x300.jpg │ ├── 120-500x300.jpg │ └── 121-500x300.jpg ├── .gitattributes ├── .babelrc ├── vendor └── tinymce │ └── js │ └── tinymce │ ├── skins │ ├── ui │ │ ├── oxide │ │ │ ├── fonts │ │ │ │ └── tinymce-mobile.woff │ │ │ └── content.mobile.min.css │ │ └── oxide-dark │ │ │ ├── fonts │ │ │ └── tinymce-mobile.woff │ │ │ └── content.mobile.min.css │ └── content │ │ ├── default │ │ └── content.min.css │ │ ├── writer │ │ └── content.min.css │ │ ├── document │ │ └── content.min.css │ │ └── dark │ │ └── content.min.css │ ├── langs │ └── readme.md │ └── plugins │ ├── textcolor │ └── plugin.min.js │ ├── colorpicker │ └── plugin.min.js │ ├── contextmenu │ └── plugin.min.js │ ├── hr │ └── plugin.min.js │ ├── print │ └── plugin.min.js │ ├── code │ └── plugin.min.js │ ├── nonbreaking │ └── plugin.min.js │ ├── visualblocks │ └── plugin.min.js │ ├── save │ └── plugin.min.js │ ├── noneditable │ └── plugin.min.js │ ├── pagebreak │ └── plugin.min.js │ ├── tabfocus │ └── plugin.min.js │ ├── anchor │ └── plugin.min.js │ ├── preview │ └── plugin.min.js │ ├── autoresize │ └── plugin.min.js │ ├── autolink │ └── plugin.min.js │ └── legacyoutput │ └── plugin.min.js ├── .editorconfig ├── README.md ├── .vscode ├── launch.json └── settings.json ├── .eslintrc.json ├── index.html ├── LICENSE ├── tinymce └── plugins │ └── vimages │ └── plugin.min.js ├── package.json └── .gitignore /src/mock/views/dashboard.js: -------------------------------------------------------------------------------- 1 | export default { 2 | "name" : "Dashboard", 3 | } -------------------------------------------------------------------------------- /images/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/1.jpg -------------------------------------------------------------------------------- /images/100.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/100.jpg -------------------------------------------------------------------------------- /images/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/2.jpg -------------------------------------------------------------------------------- /images/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/3.jpg -------------------------------------------------------------------------------- /images/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/4.jpg -------------------------------------------------------------------------------- /images/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/5.jpg -------------------------------------------------------------------------------- /images/a1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/a1.jpg -------------------------------------------------------------------------------- /images/a2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/a2.jpg -------------------------------------------------------------------------------- /images/a3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/a3.jpg -------------------------------------------------------------------------------- /images/a4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/a4.jpg -------------------------------------------------------------------------------- /images/a5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/a5.jpg -------------------------------------------------------------------------------- /images/a6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/a6.jpg -------------------------------------------------------------------------------- /images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/bg.jpg -------------------------------------------------------------------------------- /src/mock/views/medias.js: -------------------------------------------------------------------------------- 1 | export default { 2 | "name" : "VularMediasPage", 3 | } -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /images/demo1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/demo1.jpg -------------------------------------------------------------------------------- /images/demo2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/demo2.jpg -------------------------------------------------------------------------------- /images/demo3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/demo3.jpg -------------------------------------------------------------------------------- /images/demo4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/demo4.jpg -------------------------------------------------------------------------------- /images/demo5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/demo5.jpg -------------------------------------------------------------------------------- /images/demo6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/demo6.jpg -------------------------------------------------------------------------------- /images/demo7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/demo7.jpg -------------------------------------------------------------------------------- /images/demo8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/demo8.jpg -------------------------------------------------------------------------------- /images/login.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/login.jpg -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/logo.png -------------------------------------------------------------------------------- /images/logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/logo2.png -------------------------------------------------------------------------------- /images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/favicon.png -------------------------------------------------------------------------------- /images/login-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/login-2.jpg -------------------------------------------------------------------------------- /images/login-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/login-bg.jpg -------------------------------------------------------------------------------- /images/logo-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/logo-3.png -------------------------------------------------------------------------------- /images/logo-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/logo-4.png -------------------------------------------------------------------------------- /images/logo-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/logo-5.png -------------------------------------------------------------------------------- /images/logo-b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/logo-b.png -------------------------------------------------------------------------------- /images/logo-w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/logo-w.png -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { "modules": false }], 4 | "stage-3" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /images/pics/110-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/pics/110-500x300.jpg -------------------------------------------------------------------------------- /images/pics/111-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/pics/111-500x300.jpg -------------------------------------------------------------------------------- /images/pics/112-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/pics/112-500x300.jpg -------------------------------------------------------------------------------- /images/pics/113-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/pics/113-500x300.jpg -------------------------------------------------------------------------------- /images/pics/114-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/pics/114-500x300.jpg -------------------------------------------------------------------------------- /images/pics/115-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/pics/115-500x300.jpg -------------------------------------------------------------------------------- /images/pics/116-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/pics/116-500x300.jpg -------------------------------------------------------------------------------- /images/pics/117-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/pics/117-500x300.jpg -------------------------------------------------------------------------------- /images/pics/118-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/pics/118-500x300.jpg -------------------------------------------------------------------------------- /images/pics/119-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/pics/119-500x300.jpg -------------------------------------------------------------------------------- /images/pics/120-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/pics/120-500x300.jpg -------------------------------------------------------------------------------- /images/pics/121-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/pics/121-500x300.jpg -------------------------------------------------------------------------------- /src/mock/actions/post-blank.js: -------------------------------------------------------------------------------- 1 | export default { 2 | id:"", 3 | title:"test", 4 | url:"", 5 | medias:[], 6 | } -------------------------------------------------------------------------------- /images/lazy-pics/110-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/lazy-pics/110-500x300.jpg -------------------------------------------------------------------------------- /images/lazy-pics/111-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/lazy-pics/111-500x300.jpg -------------------------------------------------------------------------------- /images/lazy-pics/112-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/lazy-pics/112-500x300.jpg -------------------------------------------------------------------------------- /images/lazy-pics/113-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/lazy-pics/113-500x300.jpg -------------------------------------------------------------------------------- /images/lazy-pics/114-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/lazy-pics/114-500x300.jpg -------------------------------------------------------------------------------- /images/lazy-pics/115-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/lazy-pics/115-500x300.jpg -------------------------------------------------------------------------------- /images/lazy-pics/116-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/lazy-pics/116-500x300.jpg -------------------------------------------------------------------------------- /images/lazy-pics/117-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/lazy-pics/117-500x300.jpg -------------------------------------------------------------------------------- /images/lazy-pics/118-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/lazy-pics/118-500x300.jpg -------------------------------------------------------------------------------- /images/lazy-pics/119-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/lazy-pics/119-500x300.jpg -------------------------------------------------------------------------------- /images/lazy-pics/120-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/lazy-pics/120-500x300.jpg -------------------------------------------------------------------------------- /images/lazy-pics/121-500x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/images/lazy-pics/121-500x300.jpg -------------------------------------------------------------------------------- /src/mock/views/post/post-categories.js: -------------------------------------------------------------------------------- 1 | export default { 2 | "name" : "VularTreePage", 3 | props:{ 4 | title:'文章分类', 5 | titleIcon:'mdi-scatter-plot-outline', 6 | } 7 | } -------------------------------------------------------------------------------- /src/mock/views/product/product-categories.js: -------------------------------------------------------------------------------- 1 | export default { 2 | "name" : "VularTreePage", 3 | props:{ 4 | title:'商品分类', 5 | titleIcon:'mdi-scatter-plot-outline', 6 | } 7 | } -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/vendor/tinymce/js/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff -------------------------------------------------------------------------------- /src/mock/actions/post-xx.js: -------------------------------------------------------------------------------- 1 | export default { 2 | id:"xx", 3 | title:"我是一个兵,来自老百姓", 4 | url:"https://vular.cn/test-sewfw", 5 | "seo.description":"描述Meta,has one 关联数据测试", 6 | medias:[], 7 | } -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codebdy/vular-admin/HEAD/vendor/tinymce/js/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/langs/readme.md: -------------------------------------------------------------------------------- 1 | This is where language files should be placed. 2 | 3 | Please DO NOT translate these directly use this service: https://www.transifex.com/projects/p/tinymce/ 4 | -------------------------------------------------------------------------------- /src/Customized/PageDesign/Core/States/ActiveState.js: -------------------------------------------------------------------------------- 1 | import ElementState from "./ElementState" 2 | 3 | export default class ActiveState extends ElementState { 4 | constructor(element) { 5 | super(element) 6 | } 7 | 8 | } -------------------------------------------------------------------------------- /src/Customized/PageDesign/Core/States/CanDragoverState.js: -------------------------------------------------------------------------------- 1 | import ElementState from "./ElementState" 2 | 3 | export default class CanDragoverState extends ElementState{ 4 | constructor(element) { 5 | super(element) 6 | } 7 | 8 | } -------------------------------------------------------------------------------- /src/Customized/PageDesign/Core/States/DraggedState.js: -------------------------------------------------------------------------------- 1 | import ElementState from "./ElementState" 2 | 3 | export default class DraggedState extends ElementState{ 4 | constructor(element) { 5 | super(element) 6 | } 7 | } 8 | 9 | -------------------------------------------------------------------------------- /src/Customized/PageDesign/Core/States/NormalState.js: -------------------------------------------------------------------------------- 1 | import CanDragoverState from "./CanDragoverState" 2 | 3 | export default class NormalState extends CanDragoverState{ 4 | constructor(element) { 5 | super(element) 6 | } 7 | } 8 | 9 | -------------------------------------------------------------------------------- /src/Customized/PageDesign/Core/Elements/Canvas.js: -------------------------------------------------------------------------------- 1 | import Element from "./Element" 2 | export default class Canvas extends Element{ 3 | constructor() { 4 | super('TheCanvas') 5 | this.accepts = ['VularPageHeader','VularPageContent', 'VularPageFooter'] 6 | } 7 | } -------------------------------------------------------------------------------- /src/mock/actions/one-notification.js: -------------------------------------------------------------------------------- 1 | export default 2 | { 3 | title: "有新用户注册", 4 | created_at: "2020-06-06 17:24", 5 | content:"新用户“悠闲的风”注册,用户总量已达1000w。5月6日下午,阅文集团CEO程武、总裁侯晓楠、总编辑杨晨等新管理团队与多位作家参加了首场作家恳谈会,向外界再度进行了解释。
文表示,争议合同早在2019年便已经制定,新团队不可能在接手的第二天就做出任何动作。", 6 | } -------------------------------------------------------------------------------- /src/Customized/PageDesign/Core/Elements/ElementRow.js: -------------------------------------------------------------------------------- 1 | import Element from "./Element" 2 | export default class ElementRow extends Element{ 3 | constructor() { 4 | super("v-row", window.i18n.t('design.row')) 5 | } 6 | 7 | clone(){ 8 | return new ElementRow() 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vular-admin 2 | 3 | Vular 前端界面 4 | 演示地址:https://vular.cn/admin-ui/ 不是最新版 5 | 6 | 已改用React重构代码,本项目不再维护,新代码地址:https://github.com/rxwater/rxdrag 7 | QQ交流群:957619750 8 | 9 | ## dev 10 | 11 | 1. npm install 12 | 2. npm run dev 13 | 14 | ## build 15 | 16 | 1. npm run build 17 | -------------------------------------------------------------------------------- /src/Customized/PageDesign/Core/Elements/ElementColumn.js: -------------------------------------------------------------------------------- 1 | import Element from "./Element" 2 | export default class ElementColumn extends Element{ 3 | constructor() { 4 | super("v-col", window.i18n.t('design.column')) 5 | } 6 | 7 | clone(){ 8 | return new ElementColumn() 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /src/Customized/PageDesign/Core/States/FocusState.js: -------------------------------------------------------------------------------- 1 | import CanDragoverState from "./CanDragoverState" 2 | 3 | export default class FocusState extends CanDragoverState{ 4 | constructor(element) { 5 | super(element) 6 | //window.$editorBus.$emit('focused', this.element) 7 | } 8 | 9 | } 10 | 11 | -------------------------------------------------------------------------------- /src/Customized/Themes.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 20 | -------------------------------------------------------------------------------- /src/Customized/NavMenu.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 20 | -------------------------------------------------------------------------------- /src/Customized/Modules/FormDesign.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 20 | -------------------------------------------------------------------------------- /src/components/relations/VularHasOneCard.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 21 | -------------------------------------------------------------------------------- /src/Customized/PageDesign/Core/Elements/ElementPageContent.js: -------------------------------------------------------------------------------- 1 | import Element from "./Element" 2 | export default class ElementPageContent extends Element{ 3 | constructor() { 4 | super("VularPageContent", '', 'ThePageContent') 5 | this.accepts = ['v-row', 'v-col'] 6 | } 7 | 8 | clone(){ 9 | return new ElementPageContent() 10 | } 11 | 12 | } -------------------------------------------------------------------------------- /src/Customized/PageDesign/Core/Elements/ElementPageLayout.js: -------------------------------------------------------------------------------- 1 | import Element from "./Element" 2 | export default class ElementPageLayout extends Element{ 3 | constructor(name, title, designName) { 4 | super(name, title, designName) 5 | } 6 | 7 | clone(){ 8 | return new ElementPageLayout(this.name, this.title, this.designName) 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /src/mock/actions/post-attributes.js: -------------------------------------------------------------------------------- 1 | export default[ 2 | { 3 | id:1, 4 | name: "显示在首页", 5 | slug: "show-on-home", 6 | }, 7 | { 8 | id:2, 9 | name: "幻灯", 10 | slug: "ppt", 11 | }, 12 | { 13 | id:3, 14 | name: "置顶", 15 | slug: "top", 16 | }, 17 | { 18 | id:4, 19 | name: "隐藏", 20 | slug: "hide", 21 | } 22 | ] -------------------------------------------------------------------------------- /src/mock/views/post/post-content-card.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name:"VularFormCard", 3 | props:{ 4 | title:"内容", 5 | }, 6 | children:[ 7 | { 8 | name:"vular-input", 9 | props:{ 10 | field:"content", 11 | vInput:{ 12 | name:"VularTinymce", 13 | props:{ 14 | height:"700px", 15 | }, 16 | }, 17 | }, 18 | }, 19 | ] 20 | } -------------------------------------------------------------------------------- /src/mock/views/product/product-content-card.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name:"VularFormCard", 3 | props:{ 4 | title:"详情", 5 | }, 6 | children:[ 7 | { 8 | name:"vular-input", 9 | props:{ 10 | field:"content", 11 | vInput:{ 12 | name:"VularTinymce", 13 | props:{ 14 | height:"500px", 15 | }, 16 | }, 17 | }, 18 | }, 19 | ] 20 | } -------------------------------------------------------------------------------- /src/VularAdmin/Drawer/VularSubheader.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 22 | 23 | -------------------------------------------------------------------------------- /src/components/VularPageContent.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 24 | 25 | 27 | -------------------------------------------------------------------------------- /src/mock/actions/order-list.js: -------------------------------------------------------------------------------- 1 | export default[ 2 | { 3 | id:1, 4 | title: "New user registered", 5 | timeLabel: "Just now", 6 | unread:true, 7 | }, 8 | { 9 | id:2, 10 | title: "New order received", 11 | timeLabel: "2分钟前" 12 | }, 13 | { 14 | id:3, 15 | title: "New payment made", 16 | timeLabel: "24分钟前" 17 | }, 18 | { 19 | id:4, 20 | title: "New message from Michael", 21 | timeLabel: "1小时前" 22 | } 23 | ] -------------------------------------------------------------------------------- /src/mock/actions/notifications.js: -------------------------------------------------------------------------------- 1 | export default[ 2 | { 3 | id:1, 4 | title: "New user registered", 5 | timeLabel: "Just now", 6 | unread:true, 7 | }, 8 | { 9 | id:2, 10 | title: "New order received", 11 | timeLabel: "2分钟前" 12 | }, 13 | { 14 | id:3, 15 | title: "New payment made", 16 | timeLabel: "24分钟前" 17 | }, 18 | { 19 | id:4, 20 | title: "New message from Michael", 21 | timeLabel: "1小时前" 22 | } 23 | ] -------------------------------------------------------------------------------- /src/VularAdmin/VularModule.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 25 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // 使用 IntelliSense 了解相关属性。 3 | // 悬停以查看现有属性的描述。 4 | // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "type": "node", 9 | "request": "launch", 10 | "name": "启动程序", 11 | "skipFiles": [ 12 | "/**" 13 | ], 14 | "program": "${file}" 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "emmet.includeLanguages": { 3 | "vue-html": "html", 4 | "vue": "html" 5 | }, 6 | "files.associations": { 7 | "*.vue": "html" 8 | }, 9 | "emmet.excludeLanguages": [ 10 | "markdown" 11 | ], 12 | "editor.detectIndentation": false, 13 | "editor.tabSize": 2, 14 | "eslint.format.enable": true, 15 | "editor.fontFamily": "'Fira Code'", 16 | "eslint.codeAction.showDocumentation": {}, 17 | "eslint.codeAction.disableRuleComment": { 18 | 19 | } 20 | } -------------------------------------------------------------------------------- /src/components/tinymce/toolbar.js: -------------------------------------------------------------------------------- 1 | // Here is a list of the toolbar 2 | // Detail list see https://www.tinymce.com/docs/advanced/editor-control-identifiers/#toolbarcontrols 3 | 4 | const toolbar = ['formatselect bold italic underline strikethrough alignleft aligncenter alignright outdent indent blockquote undo redo removeformat subscript superscript code codesample', 'hr bullist numlist link vimages charmap preview anchor pagebreak insertdatetime media table emoticons forecolor backcolor'] 5 | 6 | export default toolbar 7 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es6": true, 5 | "node": true 6 | }, 7 | "extends": [ 8 | "eslint:recommended", 9 | "plugin:vue/essential" 10 | ], 11 | "globals": { 12 | "Atomics": "readonly", 13 | "SharedArrayBuffer": "readonly" 14 | }, 15 | "parserOptions": { 16 | "ecmaVersion": 11, 17 | "sourceType": "module" 18 | }, 19 | "plugins": [ 20 | "vue" 21 | ], 22 | "rules": { 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/Customized/PageDesign/Core/Views/ThePageHeader.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 26 | 27 | 30 | -------------------------------------------------------------------------------- /src/components/tinymce/plugins.js: -------------------------------------------------------------------------------- 1 | // Any plugins you want to use has to be imported 2 | // Detail plugins list see https://www.tinymce.com/docs/plugins/ 3 | // Custom builds see https://www.tinymce.com/download/custom-builds/ 4 | 5 | const plugins = ['advlist anchor autolink autosave code codesample image directionality emoticons hr imagetools insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save spellchecker tabfocus table template textpattern visualblocks visualchars wordcount'] 6 | 7 | export default plugins 8 | -------------------------------------------------------------------------------- /src/Customized/PageDesign/Core/Views/ThePageFooter.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 26 | 27 | 31 | -------------------------------------------------------------------------------- /src/components/form/VularLabel.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 30 | -------------------------------------------------------------------------------- /src/plugins/vuetify.js: -------------------------------------------------------------------------------- 1 | // src/plugins/vuetify.js 2 | //import 'material-design-icons-iconfont/dist/material-design-icons.css' 3 | import Vue from 'vue' 4 | import Vuetify from 'vuetify' 5 | import 'vuetify/dist/vuetify.min.css' 6 | 7 | Vue.use(Vuetify) 8 | 9 | const opts = { 10 | icons: { 11 | iconfont: 'mdi',//'md' ||'fa' || 12 | }, 13 | theme: { 14 | dark:false, 15 | themes: { 16 | light: { 17 | primary: "#5d78ff", 18 | }, 19 | dark: { 20 | primary: "#5d78ff", 21 | }, 22 | }, 23 | }, 24 | } 25 | 26 | export default new Vuetify(opts) -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/plugins/textcolor/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.2.1 (2020-03-25) 8 | */ 9 | !function(o){"use strict";var i=tinymce.util.Tools.resolve("tinymce.PluginManager");!function n(){i.add("textcolor",function(){o.console.warn("Text color plugin is now built in to the core editor, please remove it from your editor configuration")})}()}(window); -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/skins/ui/oxide/content.mobile.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | */ 7 | .tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{background-color:green;display:inline-block;opacity:.5;position:absolute}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%}body{font-family:sans-serif}table{border-collapse:collapse} 8 | -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/plugins/colorpicker/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.2.1 (2020-03-25) 8 | */ 9 | !function(o){"use strict";var i=tinymce.util.Tools.resolve("tinymce.PluginManager");!function n(){i.add("colorpicker",function(){o.console.warn("Color picker plugin is now built in to the core editor, please remove it from your editor configuration")})}()}(window); -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.2.1 (2020-03-25) 8 | */ 9 | !function(n){"use strict";var o=tinymce.util.Tools.resolve("tinymce.PluginManager");!function e(){o.add("contextmenu",function(){n.console.warn("Context menu plugin is now built in to the core editor, please remove it from your editor configuration")})}()}(window); -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/skins/ui/oxide-dark/content.mobile.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | */ 7 | .tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{background-color:green;display:inline-block;opacity:.5;position:absolute}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%}body{font-family:sans-serif}table{border-collapse:collapse} 8 | -------------------------------------------------------------------------------- /src/Customized/PageDesign/Core/Views/TheLabel.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 35 | 36 | 38 | -------------------------------------------------------------------------------- /src/Customized/PageDesign/Core/Views/TheToolbox.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 35 | 36 | 38 | -------------------------------------------------------------------------------- /src/mock/views/page/page-base-card.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name:"VularFormCard", 3 | props:{ 4 | title:"基本信息", 5 | }, 6 | children:[ 7 | { 8 | name:"vular-input", 9 | props:{ 10 | rules:"required|max:50", 11 | field:"title", 12 | vInput:{ 13 | name:"v-text-field", 14 | props:{ 15 | label:"名称", 16 | }, 17 | }, 18 | }, 19 | }, 20 | { 21 | name:"vular-input", 22 | props:{ 23 | rules:"required", 24 | field:"slug", 25 | vInput:{ 26 | name:"v-text-field", 27 | props:{ 28 | label:"Slug", 29 | }, 30 | }, 31 | }, 32 | }, 33 | ], 34 | } 35 | -------------------------------------------------------------------------------- /src/components/widgets/VularPageHeaderTitle.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 30 | -------------------------------------------------------------------------------- /src/components/pages/dashboard/charts/PieChart.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /src/Customized/Modules/WelcomePage.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 35 | -------------------------------------------------------------------------------- /src/Customized/PageDesign/Core/Views/ThePageContent.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 28 | 29 | 37 | -------------------------------------------------------------------------------- /src/Customized/PageDesign/Core/Views/TheCanvas.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 28 | 29 | 42 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | 15 | 51 | -------------------------------------------------------------------------------- /src/mock/actions/post1.js: -------------------------------------------------------------------------------- 1 | export default { 2 | id:"1", 3 | title:"有时像蒲公英,看似自由自在,实则身不由己", 4 | url:"https://vular.cn/test-sewfw", 5 | "seo.description":"描述Meta,has one 关联数据测试", 6 | medias:[], 7 | page:` 8 |
9 |

10 | Hello, world! 11 |

12 |

13 | This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information. 14 |

15 |
16 |

17 | It uses utility classes for typography and spacing to space content out within the larger container. 18 |

19 | 20 | Learn more 21 | 22 |
23 | `, 24 | } -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/plugins/hr/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.2.1 (2020-03-25) 8 | */ 9 | !function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=function(n){n.addCommand("InsertHorizontalRule",function(){n.execCommand("mceInsertContent",!1,"
")})},t=function(n){n.ui.registry.addButton("hr",{icon:"horizontal-rule",tooltip:"Horizontal line",onAction:function(){return n.execCommand("InsertHorizontalRule")}}),n.ui.registry.addMenuItem("hr",{icon:"horizontal-rule",text:"Horizontal line",onAction:function(){return n.execCommand("InsertHorizontalRule")}})};!function e(){n.add("hr",function(n){o(n),t(n)})}()}(); -------------------------------------------------------------------------------- /src/mock/actions/notifications-list.js: -------------------------------------------------------------------------------- 1 | export default[ 2 | { 3 | id:1, 4 | title: "新用户注册", 5 | created_at: "2020-05-07 13:40", 6 | icon:{ 7 | name:"v-icon", 8 | text:"mdi-email-outline", 9 | }, 10 | "styles": { 11 | "font-weight":"bold", 12 | }, 13 | }, 14 | { 15 | id:2, 16 | title: "New order received", 17 | created_at: "2020-05-07 13:40", 18 | icon:{ 19 | name:"v-icon", 20 | text:"mdi-email-open-outline", 21 | }, 22 | }, 23 | { 24 | id:3, 25 | title: "New payment made", 26 | created_at: "2020-05-07 13:40", 27 | icon:{ 28 | name:"v-icon", 29 | text:"mdi-email-open-outline", 30 | } 31 | }, 32 | { 33 | id:4, 34 | title: "New message from Michael", 35 | created_at: "2020-05-07 13:40", 36 | icon:{ 37 | name:"v-icon", 38 | text:"mdi-email-open-outline", 39 | } 40 | } 41 | ] -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/plugins/print/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.2.1 (2020-03-25) 8 | */ 9 | !function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env"),i=function(n){n.addCommand("mcePrint",function(){t.browser.isIE()?n.getDoc().execCommand("print",!1,null):n.getWin().print()})},e=function(n){n.ui.registry.addButton("print",{icon:"print",tooltip:"Print",onAction:function(){return n.execCommand("mcePrint")}}),n.ui.registry.addMenuItem("print",{text:"Print...",icon:"print",onAction:function(){return n.execCommand("mcePrint")}})};!function o(){n.add("print",function(n){i(n),e(n),n.addShortcut("Meta+P","","mcePrint")})}()}(); -------------------------------------------------------------------------------- /src/mock/views/post/post-appearance-card.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name:"VularFormCard", 3 | props:{ 4 | title:"显示", 5 | }, 6 | children:[ 7 | { 8 | name:"vular-input", 9 | props:{ 10 | rules:"required|max:50", 11 | field:"order", 12 | vInput:{ 13 | name:"v-text-field", 14 | props:{ 15 | label:"显示顺序", 16 | "prepend-icon":"mdi-sort", 17 | }, 18 | }, 19 | }, 20 | }, 21 | { 22 | name:"vular-input", 23 | props:{ 24 | rules:"", 25 | field:"additions", 26 | vInput:{ 27 | name:"v-select", 28 | props:{ 29 | label:"附加属性", 30 | "prepend-icon":"mdi-bookmark-plus-outline", 31 | multiple: true, 32 | chips : true, 33 | items : ['首页', '热门', '推荐', '置顶'], 34 | }, 35 | }, 36 | }, 37 | }, 38 | ] 39 | 40 | } 41 | -------------------------------------------------------------------------------- /src/mock/views/product/product-appearance-card.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name:"VularFormCard", 3 | props:{ 4 | title:"显示", 5 | }, 6 | children:[ 7 | { 8 | name:"vular-input", 9 | props:{ 10 | rules:"required|max:50", 11 | field:"order", 12 | vInput:{ 13 | name:"v-text-field", 14 | props:{ 15 | label:"显示顺序", 16 | "prepend-icon":"mdi-sort", 17 | }, 18 | }, 19 | }, 20 | }, 21 | { 22 | name:"vular-input", 23 | props:{ 24 | rules:"", 25 | field:"additions", 26 | vInput:{ 27 | name:"v-select", 28 | props:{ 29 | label:"附加属性", 30 | "prepend-icon":"mdi-bookmark-plus-outline", 31 | multiple: true, 32 | chips : true, 33 | items : ['首页', '热门', '推荐', '置顶'], 34 | }, 35 | }, 36 | }, 37 | }, 38 | ] 39 | 40 | } 41 | -------------------------------------------------------------------------------- /src/VularAdmin/tools/AppFab.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 47 | -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/skins/content/default/content.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | */ 7 | body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table td,table th{border:1px solid #ccc;padding:.4rem}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem} 8 | -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/skins/content/writer/content.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | */ 7 | body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem auto;max-width:900px}table{border-collapse:collapse}table td,table th{border:1px solid #ccc;padding:.4rem}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem} 8 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | vular-admin 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/skins/content/document/content.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | */ 7 | @media screen{html{background:#f4f4f4}}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif}@media screen{body{background-color:#fff;box-shadow:0 0 4px rgba(0,0,0,.15);box-sizing:border-box;margin:1rem auto 0;max-width:820px;min-height:calc(100vh - 1rem);padding:4rem 6rem 6rem 6rem}}table{border-collapse:collapse}table td,table th{border:1px solid #ccc;padding:.4rem}figure figcaption{color:#999;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem} 8 | -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/skins/content/dark/content.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | */ 7 | body{background-color:#2f3742;color:#dfe0e4;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table td,table th{border:1px solid #6d737b;padding:.4rem}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}td[data-mce-selected],th[data-mce-selected]{color:#333}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem} 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Water.Li 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/mock/actions/inquires.js: -------------------------------------------------------------------------------- 1 | export default[ 2 | { 3 | id:1, 4 | name: "Martin", 5 | email:'maring@gmail.com', 6 | company:"Kingnod Co.,Ltd", 7 | created_at: "2020-05-07 13:40", 8 | icon:{ 9 | name:"v-icon", 10 | text:"mdi-email-outline", 11 | }, 12 | "styles": { 13 | "font-weight":"bold", 14 | }, 15 | }, 16 | { 17 | id:2, 18 | name: "Jack Josh", 19 | email:'jack.tar@hotmail.com', 20 | company:"Kingnod Co.,Ltd", 21 | created_at: "2020-05-07 13:40", 22 | icon:{ 23 | name:"v-icon", 24 | text:"mdi-email-open-outline", 25 | }, 26 | }, 27 | { 28 | id:3, 29 | name: "Jack Josh", 30 | email:'jack.tar@hotmail.com', 31 | company:"Kingnod Co.,Ltd", 32 | created_at: "2020-05-07 13:40", 33 | icon:{ 34 | name:"v-icon", 35 | text:"mdi-email-open-outline", 36 | } 37 | }, 38 | { 39 | id:4, 40 | name: "Jack Josh", 41 | email:'jack.tar@hotmail.com', 42 | company:"Kingnod Co.,Ltd", 43 | created_at: "2020-05-07 13:40", 44 | icon:{ 45 | name:"v-icon", 46 | text:"mdi-email-open-outline", 47 | } 48 | } 49 | ] -------------------------------------------------------------------------------- /tinymce/plugins/vimages/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add('vimages', function(editor, url) { 2 | var openMediaDialog = function () { 3 | $bus.$emit('selectImage', editor.vularId) 4 | $bus.$on('selectedImages',(images, id)=>{ 5 | if(id == editor.vularId){ 6 | var html = '' 7 | images.forEach(media=>{ 8 | html += ''; 9 | }) 10 | editor.insertContent(html); 11 | } 12 | $bus.$off('selectedImages', this) 13 | }) 14 | }; 15 | 16 | // 注册一个工具栏按钮名称 17 | editor.ui.registry.addButton('vimages', { 18 | icon:"image", 19 | tooltip: 'Image', 20 | onAction: function () { 21 | openMediaDialog(); 22 | } 23 | }); 24 | 25 | // 注册一个菜单项名称 menu/menubar 26 | editor.ui.registry.addMenuItem('vimages', { 27 | icon: 'image', 28 | text: 'Image...', 29 | onAction: function() { 30 | openMediaDialog(); 31 | } 32 | }); 33 | 34 | return { 35 | getMetadata: function () { 36 | return { 37 | //插件名和链接会显示在“帮助”→“插件”→“已安装的插件”中 38 | name: "Insert image",//插件名称 39 | url: "http://vular.cn", //作者网址 40 | }; 41 | } 42 | }; 43 | }); 44 | -------------------------------------------------------------------------------- /src/mock/views/page/page-seo-card.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name:"VularFormCard", 3 | props:{ 4 | title:"搜索引擎优化", 5 | }, 6 | children:[ 7 | { 8 | name:"vular-input", 9 | props:{ 10 | field:"url", 11 | vInput:{ 12 | name:"vular-label", 13 | props:{ 14 | label:"预览", 15 | color:"blue", 16 | }, 17 | }, 18 | }, 19 | }, 20 | { 21 | name:"vular-input", 22 | props:{ 23 | field:"seo.keywords", 24 | vInput:{ 25 | name:"v-text-field", 26 | props:{ 27 | label:"Keywords", 28 | }, 29 | }, 30 | }, 31 | }, 32 | { 33 | name:"vular-input", 34 | props:{ 35 | field:"seo.title", 36 | vInput:{ 37 | name:"v-text-field", 38 | props:{ 39 | label:"Title", 40 | }, 41 | }, 42 | }, 43 | }, 44 | { 45 | name:"vular-input", 46 | props:{ 47 | field:"seo.description", 48 | vInput:{ 49 | name:"v-textarea", 50 | props:{ 51 | label:"Deacription", 52 | }, 53 | }, 54 | }, 55 | }, 56 | ] 57 | } -------------------------------------------------------------------------------- /src/mock/views/post/post-seo-card.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name:"VularFormCard", 3 | props:{ 4 | title:"搜索引擎优化", 5 | }, 6 | children:[ 7 | { 8 | name:"vular-input", 9 | props:{ 10 | field:"url", 11 | vInput:{ 12 | name:"vular-label", 13 | props:{ 14 | label:"预览", 15 | color:"blue", 16 | }, 17 | }, 18 | }, 19 | }, 20 | { 21 | name:"vular-input", 22 | props:{ 23 | field:"seo.keywords", 24 | vInput:{ 25 | name:"v-text-field", 26 | props:{ 27 | label:"Keywords", 28 | }, 29 | }, 30 | }, 31 | }, 32 | { 33 | name:"vular-input", 34 | props:{ 35 | field:"seo.title", 36 | vInput:{ 37 | name:"v-text-field", 38 | props:{ 39 | label:"Title", 40 | }, 41 | }, 42 | }, 43 | }, 44 | { 45 | name:"vular-input", 46 | props:{ 47 | field:"seo.description", 48 | vInput:{ 49 | name:"v-textarea", 50 | props:{ 51 | label:"Deacription", 52 | }, 53 | }, 54 | }, 55 | }, 56 | ] 57 | } -------------------------------------------------------------------------------- /src/mock/views/product/product-seo-card.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name:"VularFormCard", 3 | props:{ 4 | title:"搜索引擎优化", 5 | }, 6 | children:[ 7 | { 8 | name:"vular-input", 9 | props:{ 10 | field:"url", 11 | vInput:{ 12 | name:"vular-label", 13 | props:{ 14 | label:"预览", 15 | color:"blue", 16 | }, 17 | }, 18 | }, 19 | }, 20 | { 21 | name:"vular-input", 22 | props:{ 23 | field:"seo.keywords", 24 | vInput:{ 25 | name:"v-text-field", 26 | props:{ 27 | label:"Keywords", 28 | }, 29 | }, 30 | }, 31 | }, 32 | { 33 | name:"vular-input", 34 | props:{ 35 | field:"seo.title", 36 | vInput:{ 37 | name:"v-text-field", 38 | props:{ 39 | label:"Title", 40 | }, 41 | }, 42 | }, 43 | }, 44 | { 45 | name:"vular-input", 46 | props:{ 47 | field:"seo.description", 48 | vInput:{ 49 | name:"v-textarea", 50 | props:{ 51 | label:"Deacription", 52 | }, 53 | }, 54 | }, 55 | }, 56 | ] 57 | } -------------------------------------------------------------------------------- /src/components/VularBottomActionEditPage.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 36 | 37 | -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/plugins/code/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.2.1 (2020-03-25) 8 | */ 9 | !function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(e,n){e.focus(),e.undoManager.transact(function(){e.setContent(n)}),e.selection.setCursorLocation(),e.nodeChanged()},o=function(e){return e.getContent({source_view:!0})},n=function(n){var e=o(n);n.windowManager.open({title:"Source Code",size:"large",body:{type:"panel",items:[{type:"textarea",name:"code"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{code:e},onSubmit:function(e){t(n,e.getData().code),e.close()}})},c=function(e){e.addCommand("mceCodeEditor",function(){n(e)})},i=function(e){e.ui.registry.addButton("code",{icon:"sourcecode",tooltip:"Source code",onAction:function(){return n(e)}}),e.ui.registry.addMenuItem("code",{icon:"sourcecode",text:"Source code",onAction:function(){return n(e)}})};!function u(){e.add("code",function(e){return c(e),i(e),{}})}()}(); -------------------------------------------------------------------------------- /src/VularAdmin/tools/ErrorDialog.vue: -------------------------------------------------------------------------------- 1 | 38 | 39 | 58 | -------------------------------------------------------------------------------- /src/assets/locales/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueI18n from 'vue-i18n' 3 | 4 | //引入Vue-i18n 5 | Vue.use(VueI18n) 6 | 7 | //引入语言资源文件 8 | const locales = { 9 | zh: require('./zh.json'), 10 | en: require('./en.json'), 11 | } 12 | 13 | //构建vuei18n实例,后面会export 这个实例 14 | const i18n = new VueI18n({ 15 | locale: getDefaultLang(), 16 | messages: locales, 17 | }) 18 | 19 | //获取浏览器语言环境,截取lang的前2位字符,是因为浏览器语言返回值可能是: 20 | //zh-cn Chinese(PRC) 21 | //zh-tw Chinese(Taiwan Region) 22 | //zh-hk Chinese(Hong Kong SAR, PRC) 23 | //zh-sg Chinese(Singapore) 24 | //en-us English(United States) 25 | // eslint-disable-next-line no-irregular-whitespace 26 | //en English 27 | function getDefaultLang(){ 28 | let lang = navigator.language || navigator.userLanguage 29 | lang = lang.substr(0, 2) 30 | //目前只实现两个语言版本 31 | if(lang !== 'zh'){ 32 | lang = 'en' 33 | } 34 | return lang 35 | } 36 | 37 | //进行一些基础配置 38 | export const setup = () => { 39 | let lang = getDefaultLang() 40 | 41 | Object.keys(locales).forEach(lang => { 42 | document.body.classList.remove(`lang-${lang}`) 43 | }) 44 | document.body.classList.add(`lang-${lang}`) 45 | document.body.setAttribute('lang', lang) 46 | 47 | Vue.config.lang = lang 48 | i18n.locale = lang 49 | } 50 | 51 | setup() 52 | window.i18n = i18n 53 | export default i18n -------------------------------------------------------------------------------- /src/mock/views/post/post-category-card.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name:"VularFormCard", 3 | props:{ 4 | title:"分类", 5 | }, 6 | children:[ 7 | { 8 | name:"vular-input", 9 | props:{ 10 | rules:"", 11 | field:"category", 12 | vInput:{ 13 | name:"v-treeview", 14 | props:{ 15 | "selection-type":"leaf", 16 | selectable:true, 17 | 'return-object':true, 18 | items: [ 19 | { 20 | id: 1, 21 | name: '男装', 22 | children: [ 23 | { id: 2, name: '绅士' }, 24 | { id: 3, name: '休闲' }, 25 | ], 26 | }, 27 | { 28 | id: 4, 29 | name: '女鞋', 30 | children: [ 31 | { id: 5, name: '辣妹' }, 32 | { id: 6, name: '淑女' }, 33 | ], 34 | }, 35 | { 36 | id:7, 37 | name:"运动", 38 | children: [ 39 | { id: 8, name: '滑板' }, 40 | { id: 9, name: '拖鞋' }, 41 | ], 42 | }, 43 | ], 44 | }, 45 | }, 46 | }, 47 | }, 48 | ] 49 | 50 | } 51 | -------------------------------------------------------------------------------- /src/mock/views/product/product-category-card.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name:"VularFormCard", 3 | props:{ 4 | title:"分类", 5 | }, 6 | children:[ 7 | { 8 | name:"vular-input", 9 | props:{ 10 | rules:"", 11 | field:"category", 12 | vInput:{ 13 | name:"v-treeview", 14 | props:{ 15 | "selection-type":"leaf", 16 | selectable:true, 17 | 'return-object':true, 18 | items: [ 19 | { 20 | id: 1, 21 | name: '男装', 22 | children: [ 23 | { id: 2, name: '绅士' }, 24 | { id: 3, name: '休闲' }, 25 | ], 26 | }, 27 | { 28 | id: 4, 29 | name: '女鞋', 30 | children: [ 31 | { id: 5, name: '辣妹' }, 32 | { id: 6, name: '淑女' }, 33 | ], 34 | }, 35 | { 36 | id:7, 37 | name:"运动", 38 | children: [ 39 | { id: 8, name: '滑板' }, 40 | { id: 9, name: '拖鞋' }, 41 | ], 42 | }, 43 | ], 44 | }, 45 | }, 46 | }, 47 | }, 48 | ] 49 | 50 | } 51 | -------------------------------------------------------------------------------- /src/components/widgets/VularListTitle.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 38 | 39 | -------------------------------------------------------------------------------- /src/components/pages/dashboard/charts/HistogramChart.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /src/themes/demo5.js: -------------------------------------------------------------------------------- 1 | export default { 2 | fontFamily:"Microsoft YaHei", 3 | theme: { 4 | dark:true, 5 | themes: { 6 | light: { 7 | primary: "#0078d4", 8 | }, 9 | dark: { 10 | primary: "#0078d4", 11 | }, 12 | }, 13 | }, 14 | logo: { 15 | src: "/images/logo-w.png", 16 | title:"Vular", 17 | alt: "An amazing framework", 18 | }, 19 | drawer: { 20 | showLogo: false, 21 | src:"", 22 | dark:false, 23 | light:false, 24 | model: false, 25 | type: 'permanent', 26 | clipped: true, 27 | floating: false, 28 | mini: false, 29 | miniVariantWidth: 70, 30 | expandOnHover:true, 31 | logo:{ 32 | color: "#1a1a27", 33 | dark: false, 34 | flat: true, 35 | src:"", 36 | style:"border-bottom:#0e0e18 solid 1px;" 37 | }, 38 | fontSize: "0.825rem", 39 | }, 40 | appbar:{ 41 | logoImage: true, 42 | logoText: true, 43 | dark: false, 44 | light: false, 45 | src: "", 46 | flat:true, 47 | style:"" 48 | }, 49 | footer: { 50 | inset: true, 51 | color:"", 52 | dark:false, 53 | light:false, 54 | src:"", 55 | }, 56 | content:{ 57 | fontFamily:"", 58 | color: "#121212", 59 | src: "", 60 | //flat: true, 61 | //cardColor:"#f4f5fa", 62 | card:{ 63 | color:"", 64 | style:"", 65 | }, 66 | }, 67 | } -------------------------------------------------------------------------------- /src/components/form/VularFormCard.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 58 | -------------------------------------------------------------------------------- /src/themes/demo2.js: -------------------------------------------------------------------------------- 1 | export default { 2 | fontFamily:"Microsoft YaHei", 3 | theme: { 4 | dark:false, 5 | themes: { 6 | light: { 7 | primary: "#3f51b5", 8 | }, 9 | dark: { 10 | primary: "#3f51b5", 11 | }, 12 | }, 13 | }, 14 | logo: { 15 | src: "/images/logo.png", 16 | title:"Vular", 17 | alt: "An amazing framework", 18 | }, 19 | drawer: { 20 | showLogo: true, 21 | src:"", 22 | dark:false, 23 | light:false, 24 | color:"", 25 | model: true, 26 | type: 'default (no property)', 27 | clipped: false, 28 | floating: false, 29 | mini: false, 30 | miniVariantWidth: 70, 31 | expandOnHover:false, 32 | logo:{ 33 | color: "#193a9a", 34 | dark: true, 35 | flat: false, 36 | src:"", 37 | style:"" 38 | }, 39 | }, 40 | appbar:{ 41 | logoImage: false, 42 | logoText: false, 43 | dark: true, 44 | light: false, 45 | color: "#3f51b5", 46 | src: "", 47 | flat:false, 48 | style:"" 49 | }, 50 | footer: { 51 | inset: true, 52 | color:"", 53 | dark:false, 54 | light:false, 55 | src:"", 56 | }, 57 | content:{ 58 | fontFamily:"", 59 | color: "#ffffff", 60 | src: "", 61 | flat: false, 62 | card:{ 63 | color:"#ffffff", 64 | style:"", 65 | }, 66 | breadcurmbsImage:false, 67 | }, 68 | } -------------------------------------------------------------------------------- /src/components/media/MediaView.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 60 | 61 | -------------------------------------------------------------------------------- /src/mock/views/post/post-addition-card.js: -------------------------------------------------------------------------------- 1 | import socialDialog from "./post-social-dialog" 2 | export default { 3 | name:"VularFormCard", 4 | props:{ 5 | title:"附加信息", 6 | }, 7 | children:[ 8 | { 9 | name:"vular-input", 10 | props:{ 11 | rules:"required", 12 | field:"category", 13 | vInput:{ 14 | name:"VularToManySelect", 15 | props:{ 16 | "prepend-icon":"mdi-shopping-search", 17 | label:"相关产品", 18 | multiple:true, 19 | chips:true, 20 | clearable:true, 21 | "vularId":"to-many-slect-1", 22 | "hide-no-data":true, 23 | "hide-details":true, 24 | queryAction:{ 25 | "name" : "doAction", 26 | "api" : "/api/action", 27 | params : { 28 | actionName:"/Water/Vular/Actions/Query", 29 | modelName:"/Water/Vular/Model/Products", 30 | } 31 | }, 32 | }, 33 | }, 34 | }, 35 | }, 36 | { 37 | name:"vular-input", 38 | props:{ 39 | rules:"", 40 | field:"seo-dialog", 41 | vInput:{ 42 | name:"VularHasOneDialog", 43 | props:{ 44 | "icon":"mdi-trending-up", 45 | title:"搜索引擎优化", 46 | }, 47 | }, 48 | }, 49 | }, 50 | socialDialog, 51 | ] 52 | 53 | } 54 | -------------------------------------------------------------------------------- /src/mock/views/product/product-addition-card.js: -------------------------------------------------------------------------------- 1 | import socialDialog from "./product-social-dialog" 2 | export default { 3 | name:"VularFormCard", 4 | props:{ 5 | title:"附加信息", 6 | }, 7 | children:[ 8 | { 9 | name:"vular-input", 10 | props:{ 11 | rules:"required", 12 | field:"category", 13 | vInput:{ 14 | name:"VularToManySelect", 15 | props:{ 16 | "prepend-icon":"mdi-shopping-search", 17 | label:"相关产品", 18 | multiple:true, 19 | chips:true, 20 | clearable:true, 21 | "vularId":"to-many-slect-1", 22 | "hide-no-data":true, 23 | "hide-details":true, 24 | queryAction:{ 25 | "name" : "doAction", 26 | "api" : "/api/action", 27 | params : { 28 | actionName:"/Water/Vular/Actions/Query", 29 | modelName:"/Water/Vular/Model/Products", 30 | }, 31 | }, 32 | }, 33 | }, 34 | }, 35 | }, 36 | { 37 | name:"vular-input", 38 | props:{ 39 | rules:"", 40 | field:"seo-dialog", 41 | vInput:{ 42 | name:"VularHasOneDialog", 43 | props:{ 44 | "icon":"mdi-trending-up", 45 | title:"搜索引擎优化", 46 | }, 47 | }, 48 | }, 49 | }, 50 | socialDialog, 51 | ] 52 | 53 | } 54 | -------------------------------------------------------------------------------- /src/themes/demo6.js: -------------------------------------------------------------------------------- 1 | export default { 2 | fontFamily:"Microsoft YaHei", 3 | theme: { 4 | dark:false, 5 | themes: { 6 | light: { 7 | primary: "#0bb883", 8 | }, 9 | dark: { 10 | primary: "#0bb883", 11 | }, 12 | }, 13 | }, 14 | logo: { 15 | src: "/images/logo-w.png", 16 | title:"Vular", 17 | alt: "An amazing framework", 18 | }, 19 | drawer: { 20 | showLogo: false, 21 | src:"", 22 | dark:false, 23 | light:false, 24 | model: true, 25 | type: 'default (no property)', 26 | clipped: true, 27 | floating: false, 28 | mini: false, 29 | miniVariantWidth: 70, 30 | expandOnHover:false, 31 | logo:{ 32 | color: "#0bb883", 33 | dark: false, 34 | flat: true, 35 | src:"", 36 | style:"border-bottom:rgba(0,0,0,0.1) solid 1px;" 37 | }, 38 | fontSize: "0.825rem", 39 | }, 40 | appbar:{ 41 | logoImage: true, 42 | logoText: true, 43 | dark: true, 44 | light: false, 45 | color: "#0bb883", 46 | src: "", 47 | flat:true, 48 | style:"border-bottom:rgba(0,0,0,0.1) solid 1px;" 49 | }, 50 | footer: { 51 | inset: true, 52 | color:"", 53 | dark:false, 54 | light:false, 55 | src:"", 56 | }, 57 | content:{ 58 | fontFamily:"", 59 | color: "#fbf6f0", 60 | src: "", 61 | flat: true, 62 | card:{ 63 | color:"#ffffff", 64 | style:"", 65 | } 66 | }, 67 | } -------------------------------------------------------------------------------- /src/themes/demo4.js: -------------------------------------------------------------------------------- 1 | export default { 2 | fontFamily:"Microsoft YaHei", 3 | theme: { 4 | dark:false, 5 | themes: { 6 | light: { 7 | primary: "#0078d4", 8 | }, 9 | dark: { 10 | primary: "#0078d4", 11 | }, 12 | }, 13 | }, 14 | logo: { 15 | src: "/images/logo.png", 16 | title:"Vular", 17 | alt: "An amazing framework", 18 | }, 19 | drawer: { 20 | showLogo: false, 21 | src:"", 22 | dark:false, 23 | light:false, 24 | model: false, 25 | type: 'permanent', 26 | clipped: true, 27 | floating: false, 28 | mini: false, 29 | miniVariantWidth: 70, 30 | expandOnHover:true, 31 | logo:{ 32 | color: "#1a1a27", 33 | dark: false, 34 | flat: true, 35 | src:"", 36 | style:"border-bottom:#0e0e18 solid 1px;" 37 | }, 38 | fontSize: "0.825rem", 39 | }, 40 | appbar:{ 41 | logoImage: true, 42 | logoText: true, 43 | dark: false, 44 | light: false, 45 | src: "", 46 | flat:true, 47 | color:"#ffffff", 48 | style:"border-bottom:rgba(0,0,0,0.1) solid 1px;" 49 | }, 50 | footer: { 51 | inset: true, 52 | color:"", 53 | dark:false, 54 | light:false, 55 | src:"", 56 | }, 57 | content:{ 58 | fontFamily:"", 59 | color: "#ffffff", 60 | src: "", 61 | //flat: true, 62 | //cardColor:"#f4f5fa", 63 | card:{ 64 | color:"", 65 | style:"", 66 | } 67 | }, 68 | } -------------------------------------------------------------------------------- /src/components/form/VularInput.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | 65 | -------------------------------------------------------------------------------- /src/themes/demo3.js: -------------------------------------------------------------------------------- 1 | export default { 2 | fontFamily:"Microsoft YaHei", 3 | theme: { 4 | dark:false, 5 | themes: { 6 | light: { 7 | primary: "#fbce44", 8 | }, 9 | dark: { 10 | primary: "#fbce44", 11 | }, 12 | }, 13 | }, 14 | logo: { 15 | src: "/images/logo-4.png", 16 | title:"Vular", 17 | alt: "An amazing framework", 18 | }, 19 | drawer: { 20 | showLogo: true, 21 | src:"", 22 | dark:false, 23 | light:false, 24 | model: false, 25 | type: 'permanent', 26 | clipped: false, 27 | floating: false, 28 | mini: false, 29 | miniVariantWidth: 70, 30 | expandOnHover:true, 31 | logo:{ 32 | color: "#fbce44", 33 | dark: true, 34 | flat: true, 35 | src:"", 36 | style:"border-bottom:rgba(0,0,0,0.1) solid 1px;" 37 | }, 38 | fontSize: "0.825rem", 39 | }, 40 | appbar:{ 41 | logoImage: false, 42 | logoText: true, 43 | dark: false, 44 | light: false, 45 | color: "#ffffff", 46 | src: "", 47 | flat:true, 48 | style:"border-bottom:rgba(0,0,0,0.1) solid 1px;" 49 | }, 50 | footer: { 51 | inset: true, 52 | color:"", 53 | dark:false, 54 | light:false, 55 | src:"", 56 | }, 57 | content:{ 58 | fontFamily:"", 59 | color: "#f3f3f7", 60 | src: "", 61 | flat: true, 62 | card:{ 63 | color:"#ffffff", 64 | style:"box-shadow: 2px 2px 5px rgba(0,0,0,0.05);", 65 | } 66 | }, 67 | } -------------------------------------------------------------------------------- /src/mock/views/appbar.js: -------------------------------------------------------------------------------- 1 | export default[ 2 | { 3 | name:'v-btn', 4 | props:{ 5 | icon:true, 6 | href:'https://github.com/vularsoft/vular-admin', 7 | target:"_blank" 8 | }, 9 | children:[ 10 | { 11 | name:'v-icon', 12 | props:{ 13 | medium:true, 14 | }, 15 | text:'mdi-github', 16 | } 17 | ] 18 | }, 19 | { 20 | name:'VularNotifications', 21 | props:{ 22 | globalField:"notifications", 23 | vularId:"notifications", 24 | "queryAction":{ 25 | "name" : "doAction", 26 | "api" : "/api/action", 27 | params : { 28 | actionName:"/Water/Vular/Actions/Query", 29 | modelName:"/Water/Vular/Model/Notifications", 30 | } 31 | }, 32 | "viewAction":{ 33 | "name" : "doAction", 34 | "api" : "/api/action", 35 | params : { 36 | actionName:"/Water/Vular/Actions/View", 37 | modelName:"/Water/Vular/Model/Notifications", 38 | } 39 | }, 40 | "viewAllAction":{ 41 | name : "openPage", 42 | to:{ 43 | name: 'page', 44 | params: { 45 | pageId: 'water-vualr-view-notification-list', 46 | moduleId:'notifications', 47 | } 48 | }, 49 | }, 50 | } 51 | }, 52 | { 53 | name:'VularAppbarAccount', 54 | props:{ 55 | user: { 56 | avatar:"/images/100.jpg", 57 | }, 58 | } 59 | } 60 | ] -------------------------------------------------------------------------------- /src/themes/demo7.js: -------------------------------------------------------------------------------- 1 | export default { 2 | fontFamily:"Microsoft YaHei", 3 | theme: { 4 | dark:false, 5 | themes: { 6 | light: { 7 | primary: "#561b6f", 8 | }, 9 | dark: { 10 | primary: "#561b6f", 11 | }, 12 | }, 13 | }, 14 | logo: { 15 | src: "/images/logo.png", 16 | title:"Vular", 17 | alt: "An amazing framework", 18 | }, 19 | drawer: { 20 | showLogo: false, 21 | src:"", 22 | dark:true, 23 | light:false, 24 | color:"#672f7e", 25 | model: true, 26 | type: 'default (no property)', 27 | clipped: true, 28 | floating: false, 29 | mini: false, 30 | miniVariantWidth: 70, 31 | expandOnHover:false, 32 | logo:{ 33 | color: "#0bb883", 34 | dark: false, 35 | flat: true, 36 | src:"", 37 | style:"border-bottom:rgba(0,0,0,0.1) solid 1px;" 38 | }, 39 | fontSize: "0.825rem", 40 | }, 41 | appbar:{ 42 | logoImage: true, 43 | logoText: true, 44 | dark: true, 45 | light: false, 46 | color: "#561b6f", 47 | src: "", 48 | flat:true, 49 | style:"border-bottom:rgba(0,0,0,0.1) solid 1px;" 50 | }, 51 | footer: { 52 | inset: true, 53 | color:"", 54 | dark:false, 55 | light:false, 56 | src:"", 57 | }, 58 | content:{ 59 | fontFamily:"", 60 | color: "#fbf6f0", 61 | src: "", 62 | flat: true, 63 | card:{ 64 | color:"#ffffff", 65 | style:"box-shadow: 2px 2px 5px rgba(0,0,0,0.05);", 66 | } 67 | }, 68 | } -------------------------------------------------------------------------------- /src/themes/demo8.js: -------------------------------------------------------------------------------- 1 | export default { 2 | fontFamily:"Microsoft YaHei", 3 | theme: { 4 | dark:false, 5 | themes: { 6 | light: { 7 | primary: "#5d78ff", 8 | }, 9 | dark: { 10 | primary: "#5d78ff", 11 | }, 12 | }, 13 | }, 14 | logo: { 15 | src: "/images/logo-w.png", 16 | title:"Vular", 17 | alt: "An amazing framework", 18 | }, 19 | drawer: { 20 | showLogo: false, 21 | color: "", 22 | src:"", 23 | dark:false, 24 | light:false, 25 | model: false, 26 | type: 'temporary', 27 | clipped: false, 28 | floating: false, 29 | mini: false, 30 | miniVariantWidth: 70, 31 | expandOnHover:false, 32 | logo:{ 33 | color: "#1a1a27", 34 | dark: false, 35 | flat: true, 36 | src:"", 37 | style:"border-bottom:#0e0e18 solid 1px;" 38 | }, 39 | fontSize: "0.825rem", 40 | }, 41 | appbar:{ 42 | logoImage: false, 43 | logoText: true, 44 | dark: true, 45 | light: false, 46 | color: "#f4f5fa", 47 | src: "/images/bg.jpg", 48 | flat:true, 49 | style:"border-bottom:#dbdfef solid 1px;", 50 | shrinkOnScroll:true, 51 | }, 52 | footer: { 53 | inset: true, 54 | color:"", 55 | dark:false, 56 | light:false, 57 | src:"", 58 | }, 59 | content:{ 60 | fontFamily:"", 61 | color: "#ecebf2", 62 | src: "", 63 | flat: true, 64 | card:{ 65 | color:"#f4f5fa", 66 | style:"box-shadow: 2px 2px 5px rgba(0,0,0,0.05);", 67 | } 68 | }, 69 | } -------------------------------------------------------------------------------- /src/components/form/VularDateField.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 64 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vular-admin", 3 | "description": "A Vue.js project", 4 | "version": "1.0.0", 5 | "author": "", 6 | "license": "MIT", 7 | "private": true, 8 | "scripts": { 9 | "dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot", 10 | "build": "cross-env NODE_ENV=production webpack --progress --hide-modules" 11 | }, 12 | "dependencies": { 13 | "axios": "^0.19.2", 14 | "css-loader": "^0.28.7", 15 | "echarts": "^4.7.0", 16 | "v-charts": "^1.19.0", 17 | "vee-validate": "^3.3.0", 18 | "vue": "^2.5.11", 19 | "vue-i18n": "^8.17.0", 20 | "vue-router": "^3.1.6", 21 | "vuetify": "^2.2.21", 22 | "vuetify-loader": "^1.4.3", 23 | "vuex": "^3.1.3" 24 | }, 25 | "browserslist": [ 26 | "> 1%", 27 | "last 2 versions", 28 | "not ie <= 8" 29 | ], 30 | "devDependencies": { 31 | "babel-core": "^6.26.0", 32 | "babel-loader": "^7.1.2", 33 | "babel-preset-env": "^1.6.0", 34 | "babel-preset-stage-3": "^6.24.1", 35 | "cross-env": "^5.0.5", 36 | "deepmerge": "^4.2.2", 37 | "eslint": "^7.0.0", 38 | "eslint-friendly-formatter": "^4.0.1", 39 | "eslint-loader": "^4.0.2", 40 | "eslint-plugin-vue": "^6.2.2", 41 | "fibers": "^4.0.2", 42 | "file-loader": "^1.1.4", 43 | "mockjs": "^1.1.0", 44 | "sass": "^1.26.3", 45 | "sass-loader": "^7.3.1", 46 | "stylus": "^0.54.7", 47 | "stylus-loader": "^3.0.2", 48 | "vue-loader": "^13.0.5", 49 | "vue-template-compiler": "^2.4.4", 50 | "webpack": "^3.6.0", 51 | "webpack-dev-server": "^2.9.1" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/themes/demo1.js: -------------------------------------------------------------------------------- 1 | export default { 2 | fontFamily:"Microsoft YaHei", 3 | theme: { 4 | dark:false, 5 | themes: { 6 | light: { 7 | primary: "#5d78ff", 8 | }, 9 | dark: { 10 | primary: "#5d78ff", 11 | }, 12 | }, 13 | }, 14 | logo: { 15 | src: "/images/logo.png", 16 | title:"Vular", 17 | alt: "An amazing framework", 18 | }, 19 | drawer: { 20 | showLogo: true, 21 | color: "#1b1b28", 22 | src:"", 23 | dark:true, 24 | light:false, 25 | model: null, 26 | type: 'default (no property)', 27 | clipped: false, 28 | floating: false, 29 | mini: false, 30 | miniVariantWidth: 70, 31 | expandOnHover:false, 32 | logo:{ 33 | color: "#1a1a27", 34 | dark: false, 35 | flat: true, 36 | src:"", 37 | style:"border-bottom:#0e0e18 solid 1px;" 38 | }, 39 | fontSize: "0.825rem", 40 | }, 41 | appbar:{ 42 | logoImage: false, 43 | logoText: false, 44 | dark: false, 45 | light: false, 46 | color: "#ffffff", 47 | src: "", 48 | flat:true, 49 | style:"border-bottom:#dbdfef solid 1px; box-shadow: 2px 2px 5px rgba(0,0,0,0.05);" 50 | }, 51 | footer: { 52 | inset: true, 53 | color:"", 54 | dark:false, 55 | light:false, 56 | src:"", 57 | }, 58 | content:{ 59 | fontFamily:"", 60 | color: "#f4f5fa", 61 | src: "", 62 | flat: true, 63 | card:{ 64 | //color:"#f4f5fa", 65 | color:"#ffffff", 66 | style:"box-shadow: 2px 2px 5px rgba(0,0,0,0.05);", 67 | }, 68 | breadcurmbsImage:true, 69 | }, 70 | } -------------------------------------------------------------------------------- /src/components/media/MediaFolderMenu.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 62 | -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.2.1 (2020-03-25) 8 | */ 9 | !function(){"use strict";function o(n,e){for(var t="",o=0;o'+o(" ",e)+"":o(" ",e);n.undoManager.transact(function(){return n.insertContent(t)})},e=function(n){n.addCommand("mceNonBreaking",function(){r(n,1)})},c=tinymce.util.Tools.resolve("tinymce.util.VK"),t=function(e){var t=i(e);0 2 |
10 | {{followedElement.title}} 11 |
12 | 13 | 14 | 61 | 62 | 74 | -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.2.1 (2020-03-25) 8 | */ 9 | !function(){"use strict";function n(n,e){return function(o){o.setActive(e.get());function t(t){return o.setActive(t.state)}return n.on("VisualBlocks",t),function(){return n.off("VisualBlocks",t)}}}var e=function(t){function o(){return n}var n=t;return{get:o,set:function(t){n=t},clone:function(){return e(o())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(t,o){t.fire("VisualBlocks",{state:o})},u=function(t,o,n){t.dom.toggleClass(t.getBody(),"mce-visualblocks"),n.set(!n.get()),i(t,n.get())},c=function(t,o,n){t.addCommand("mceVisualBlocks",function(){u(t,o,n)})},s=function(t){return t.getParam("visualblocks_default_state",!1,"boolean")},l=function(o,t,n){o.on("PreviewFormats AfterPreviewFormats",function(t){n.get()&&o.dom.toggleClass(o.getBody(),"mce-visualblocks","afterpreviewformats"===t.type)}),o.on("init",function(){s(o)&&u(o,t,n)}),o.on("remove",function(){o.dom.removeClass(o.getBody(),"mce-visualblocks")})},r=function(t,o){t.ui.registry.addToggleButton("visualblocks",{icon:"visualblocks",tooltip:"Show blocks",onAction:function(){return t.execCommand("mceVisualBlocks")},onSetup:n(t,o)}),t.ui.registry.addToggleMenuItem("visualblocks",{text:"Show blocks",onAction:function(){return t.execCommand("mceVisualBlocks")},onSetup:n(t,o)})};!function o(){t.add("visualblocks",function(t,o){var n=e(!1);c(t,o,n),r(t,n),l(t,o,n)})}()}(); -------------------------------------------------------------------------------- /src/mock/views/product/product-base-card.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name:"VularFormCard", 3 | props:{ 4 | title:"基本信息", 5 | }, 6 | children:[ 7 | { 8 | name:"vular-input", 9 | props:{ 10 | rules:"required|max:50", 11 | field:"title", 12 | vInput:{ 13 | name:"v-text-field", 14 | props:{ 15 | label:"商品名", 16 | "prepend-icon":"mdi-format-title", 17 | }, 18 | }, 19 | }, 20 | }, 21 | { 22 | name:"vular-input", 23 | props:{ 24 | rules:"required", 25 | field:"slug", 26 | vInput:{ 27 | name:"v-text-field", 28 | props:{ 29 | label:"Slug", 30 | "prepend-icon":"mdi-identifier", 31 | }, 32 | }, 33 | }, 34 | }, 35 | 36 | { 37 | name:"vular-input", 38 | props:{ 39 | rules:"required", 40 | field:"summary", 41 | vInput:{ 42 | name:"v-textarea", 43 | props:{ 44 | label:"简介", 45 | "prepend-icon":"mdi-card-text-outline", 46 | }, 47 | }, 48 | }, 49 | }, 50 | 51 | { 52 | name:"vular-input", 53 | props:{ 54 | rules:"required", 55 | field:"tags", 56 | vInput:{ 57 | name:"v-combobox", 58 | props:{ 59 | label:"标签", 60 | "prepend-icon":"mdi-tag-multiple-outline", 61 | multiple: true, 62 | hint:"可添加多个标签,回车分割", 63 | attach: true, 64 | chips: true, 65 | items:['foo', 'bar', 'fizz', 'buzz'], 66 | }, 67 | }, 68 | }, 69 | }, 70 | ], 71 | } 72 | -------------------------------------------------------------------------------- /src/components/VularTreePage.vue: -------------------------------------------------------------------------------- 1 | 34 | 35 | 63 | 64 | -------------------------------------------------------------------------------- /src/store.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import defaultTheme from './themes/demo1' 4 | 5 | Vue.use(Vuex) 6 | 7 | 8 | export default 9 | new Vuex.Store({ 10 | state:{ 11 | vularApp: JSON.parse(JSON.stringify(defaultTheme)), 12 | //activedMenuItem: '', 13 | errors: [], 14 | errorMsg:'', 15 | showError:false, 16 | loggedIn:false, 17 | //pages schema cache 18 | pagesCache:new Map, 19 | globals:{}, 20 | customizedApp:{ 21 | modulesDrawer:true, 22 | draggedElement:null, 23 | }, 24 | }, 25 | 26 | mutations:{ 27 | changeTheme(state, theme){ 28 | state.vularApp = JSON.parse(JSON.stringify(theme)) 29 | }, 30 | 31 | //activeMenuItem(state, id){ 32 | // state.activedMenuItem = id 33 | //}, 34 | 35 | cachePage(state, data){ 36 | state.pagesCache.set(data.pageId, data.page) 37 | }, 38 | 39 | error(state, error){ 40 | state.showError = true 41 | state.errorMsg = error.error 42 | state.errors.unshift(error) 43 | }, 44 | 45 | clearErrors(state){ 46 | state.errors = [] 47 | }, 48 | 49 | hideError(state){ 50 | state.showError = false 51 | }, 52 | 53 | login(state){ 54 | state.loggedIn = true 55 | }, 56 | 57 | logout(state){ 58 | state.loggedIn = false 59 | }, 60 | 61 | globals(state, globals){ 62 | state.globals = globals 63 | }, 64 | 65 | showCustuomizedModulesDrawer(state){ 66 | state.customizedApp.modulesDrawer = true 67 | }, 68 | 69 | dragElement(state, element){ 70 | state.customizedApp.draggedElement = element 71 | }, 72 | 73 | endDragElement(state){ 74 | state.customizedApp.draggedElement = null 75 | }, 76 | }, 77 | 78 | actions: { 79 | }, 80 | }) 81 | -------------------------------------------------------------------------------- /src/VularAdmin/Drawer/VularMenuItem.vue: -------------------------------------------------------------------------------- 1 | 40 | 41 | 64 | 65 | -------------------------------------------------------------------------------- /src/components/media/VularSingleImageInput.vue: -------------------------------------------------------------------------------- 1 | 35 | 36 | 59 | 60 | 81 | -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/plugins/save/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.2.1 (2020-03-25) 8 | */ 9 | !function(){"use strict";function t(n,e){n.notificationManager.open({text:e,type:"error"})}function e(t){return function(n){function e(){n.setDisabled(a(t)&&!t.isDirty())}return t.on("NodeChange dirty",e),function(){return t.off("NodeChange dirty",e)}}}var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),i=tinymce.util.Tools.resolve("tinymce.util.Tools"),a=function(n){return n.getParam("save_enablewhendirty",!0)},c=function(n){return!!n.getParam("save_onsavecallback")},r=function(n){return!!n.getParam("save_oncancelcallback")},u=function(n){var e;if(e=o.DOM.getParent(n.id,"form"),!a(n)||n.isDirty()){if(n.save(),c(n))return n.execCallback("save_onsavecallback",n),void n.nodeChanged();e?(n.setDirty(!1),e.onsubmit&&!e.onsubmit()||("function"==typeof e.submit?e.submit():t(n,"Error: Form submit field collision.")),n.nodeChanged()):t(n,"Error: No form element found.")}},l=function(n){var e=i.trim(n.startContent);r(n)?n.execCallback("save_oncancelcallback",n):n.resetContent(e)},s=function(n){n.addCommand("mceSave",function(){u(n)}),n.addCommand("mceCancel",function(){l(n)})},d=function(n){n.ui.registry.addButton("save",{icon:"save",tooltip:"Save",disabled:!0,onAction:function(){return n.execCommand("mceSave")},onSetup:e(n)}),n.ui.registry.addButton("cancel",{icon:"cancel",tooltip:"Cancel",disabled:!0,onAction:function(){return n.execCommand("mceCancel")},onSetup:e(n)}),n.addShortcut("Meta+S","","mceSave")};!function m(){n.add("save",function(n){d(n),s(n)})}()}(); -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/plugins/noneditable/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.2.1 (2020-03-25) 8 | */ 9 | !function(){"use strict";function c(n){return function(t){return-1!==(" "+t.attr("class")+" ").indexOf(n)}}function l(i,o,c){return function(t){var n=arguments,e=n[n.length-2],r=0"===r){var a=o.lastIndexOf("<",e);if(-1!==a)if(-1!==o.substring(a,e).indexOf('contenteditable="false"'))return t}return''+i.dom.encode("string"==typeof n[1]?n[1]:n[0])+""}}var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=tinymce.util.Tools.resolve("tinymce.util.Tools"),f=function(t){return t.getParam("noneditable_noneditable_class","mceNonEditable")},s=function(t){return t.getParam("noneditable_editable_class","mceEditable")},d=function(t){var n=t.getParam("noneditable_regexp",[]);return n&&n.constructor===RegExp?[n]:n},n=function(n){var t,e,r="contenteditable";t=" "+u.trim(s(n))+" ",e=" "+u.trim(f(n))+" ";var a=c(t),i=c(e),o=d(n);n.on("PreInit",function(){0'}var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env"),r=function(e){return e.getParam("pagebreak_separator","\x3c!-- pagebreak --\x3e")},i=function(e){return e.getParam("pagebreak_split_block",!1)},o=function(o){var c=r(o),n=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi");o.on("BeforeSetContent",function(e){e.content=e.content.replace(n,a())}),o.on("PreInit",function(){o.serializer.addNodeFilter("img",function(e){for(var n,a,t=e.length;t--;)if((a=(n=e[t]).attr("class"))&&-1!==a.indexOf("mce-pagebreak")){var r=n.parent;if(o.schema.getBlockElements()[r.name]&&i(o)){r.type=3,r.value=c,r.raw=!0,n.remove();continue}n.type=3,n.value=c,n.raw=!0}})})},c=a,u=e,g=function(e){e.addCommand("mcePageBreak",function(){e.settings.pagebreak_split_block?e.insertContent("

"+c()+"

"):e.insertContent(c())})},m=function(n){n.on("ResolveName",function(e){"IMG"===e.target.nodeName&&n.dom.hasClass(e.target,u())&&(e.name="pagebreak")})},s=function(e){e.ui.registry.addButton("pagebreak",{icon:"page-break",tooltip:"Page break",onAction:function(){return e.execCommand("mcePageBreak")}}),e.ui.registry.addMenuItem("pagebreak",{text:"Page break",icon:"page-break",onAction:function(){return e.execCommand("mcePageBreak")}})};!function l(){n.add("pagebreak",function(e){g(e),s(e),o(e),m(e)})}()}(); -------------------------------------------------------------------------------- /src/components/tinymce/dynamicLoadScript.js: -------------------------------------------------------------------------------- 1 | let callbacks = [] 2 | 3 | function loadedTinymce() { 4 | // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2144 5 | // check is successfully downloaded script 6 | return window.tinymce 7 | } 8 | 9 | const dynamicLoadScript = (src, callback) => { 10 | const existingScript = document.getElementById(src) 11 | const cb = callback || function() {} 12 | 13 | if (!existingScript) { 14 | const script = document.createElement('script') 15 | script.src = src // src url for the third-party library being loaded. 16 | script.id = src 17 | document.body.appendChild(script) 18 | callbacks.push(cb) 19 | const onEnd = 'onload' in script ? stdOnEnd : ieOnEnd 20 | onEnd(script) 21 | } 22 | 23 | if (existingScript && cb) { 24 | if (loadedTinymce()) { 25 | cb(null, existingScript) 26 | } else { 27 | callbacks.push(cb) 28 | } 29 | } 30 | 31 | function stdOnEnd(script) { 32 | script.onload = function() { 33 | // this.onload = null here is necessary 34 | // because even IE9 works not like others 35 | this.onerror = this.onload = null 36 | for (const cb of callbacks) { 37 | cb(null, script) 38 | } 39 | callbacks = null 40 | } 41 | script.onerror = function() { 42 | this.onerror = this.onload = null 43 | cb(new Error('Failed to load ' + src), script) 44 | } 45 | } 46 | 47 | function ieOnEnd(script) { 48 | script.onreadystatechange = function() { 49 | if (this.readyState !== 'complete' && this.readyState !== 'loaded') return 50 | this.onreadystatechange = null 51 | for (const cb of callbacks) { 52 | cb(null, script) // there is no way to catch loading errors in IE8 53 | } 54 | callbacks = null 55 | } 56 | } 57 | } 58 | 59 | export default dynamicLoadScript 60 | -------------------------------------------------------------------------------- /src/basic/vular-array.js: -------------------------------------------------------------------------------- 1 | export function first(array){ 2 | if(array.length > 0){ 3 | return array[0] 4 | } 5 | } 6 | 7 | export function last(array){ 8 | if(array.length > 0){ 9 | return array[array.length - 1] 10 | } 11 | } 12 | 13 | export function before(refence, array){ 14 | for(var i = 0; i < array.length; i++){ 15 | if(array[i] === refence && i > 0){ 16 | return array[i - 1]; 17 | } 18 | } 19 | } 20 | 21 | export function after(refence, array){ 22 | for(var i = 0; i < array.length; i++){ 23 | if(array[i] === refence && i < array.length){ 24 | return array[i + 1]; 25 | } 26 | } 27 | } 28 | 29 | 30 | export function insertBefore(child, refence, array){ 31 | for(var i = 0; i < array.length; i++){ 32 | if(array[i] === refence){ 33 | array.splice(i, 0, child) 34 | return; 35 | } 36 | } 37 | 38 | array.push(child) 39 | } 40 | 41 | export function insertAfter(child, refence, array){ 42 | for(var i = 0; i < array.length; i++){ 43 | if(array[i] === refence){ 44 | array.splice(i + 1, 0, child) 45 | return 46 | } 47 | } 48 | } 49 | 50 | export function remove(node, array){ 51 | for (var i = 0; i < array.length; i++) { 52 | if(array[i] === node){ 53 | array.splice(i, 1) 54 | break 55 | } 56 | } 57 | } 58 | 59 | export function add(node, array){ 60 | if(!contains(node, array)){ 61 | array.push(node) 62 | } 63 | } 64 | 65 | export function contains(node, array){ 66 | for (var i = 0; i < array.length; i++) { 67 | if(array[i] === node){ 68 | return true 69 | } 70 | } 71 | 72 | return false 73 | } 74 | 75 | export function tongleOnCondition(condition, node, array){ 76 | if(condition){ 77 | add(node, array) 78 | } 79 | else{ 80 | remove(node, array) 81 | } 82 | } 83 | 84 | export function clear(array){ 85 | array.length = 0 86 | } 87 | 88 | 89 | -------------------------------------------------------------------------------- /src/components/VularMediasPage.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 62 | 63 | -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/plugins/tabfocus/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.2.1 (2020-03-25) 8 | */ 9 | !function(c){"use strict";function t(e){e.keyCode!==d.TAB||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()}var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),s=tinymce.util.Tools.resolve("tinymce.EditorManager"),a=tinymce.util.Tools.resolve("tinymce.Env"),y=tinymce.util.Tools.resolve("tinymce.util.Delay"),f=tinymce.util.Tools.resolve("tinymce.util.Tools"),d=tinymce.util.Tools.resolve("tinymce.util.VK"),m=function(e){return e.getParam("tab_focus",function(e){return e.getParam("tabfocus_elements",":prev,:next")}(e))},v=n.DOM,i=function(r){function e(n){var i,o,e,l;if(!(n.keyCode!==d.TAB||n.ctrlKey||n.altKey||n.metaKey||n.isDefaultPrevented())&&(1===(e=f.explode(m(r))).length&&(e[1]=e[0],e[0]=":prev"),o=n.shiftKey?":prev"===e[0]?u(-1):v.get(e[0]):":next"===e[1]?u(1):v.get(e[1]))){var t=s.get(o.id||o.name);o.id&&t?t.focus():y.setTimeout(function(){a.webkit||c.window.focus(),o.focus()},10),n.preventDefault()}function u(e){function t(e){return/INPUT|TEXTAREA|BUTTON/.test(e.tagName)&&s.get(n.id)&&-1!==e.tabIndex&&function t(e){return"BODY"===e.nodeName||"hidden"!==e.type&&"none"!==e.style.display&&"hidden"!==e.style.visibility&&t(e.parentNode)}(e)}if(o=v.select(":input:enabled,*[tabindex]:not(iframe)"),f.each(o,function(e,t){if(e.id===r.id)return i=t,!1}),0 2 | 5 | 6 | 14 | 15 | 16 |
17 | 取消 18 | 确定 19 |
20 |
21 |
22 |
23 | 24 | 25 | 76 | 77 | -------------------------------------------------------------------------------- /src/VularAdmin/VularPageLoader.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 80 | -------------------------------------------------------------------------------- /src/components/media/MediaFolderList.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 80 | -------------------------------------------------------------------------------- /src/mock/views/post/post-attributes.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name : "vular-list-page", 3 | props : { 4 | title:'文章属性列表', 5 | vularId : "inquires-list-1", 6 | defaultModel:{ 7 | keywords:'', 8 | page:1, 9 | pagination:'', 10 | //fliters 11 | cagegory:'none', 12 | attribute:'none', 13 | readings:'none', 14 | status:'none', 15 | }, 16 | "queryAction":{ 17 | "name" : "doAction", 18 | "api" : "/api/action", 19 | params : { 20 | actionName:"/Water/Vular/Actions/Query", 21 | modelName:"/Water/Vular/Model/PostAttribute", 22 | } 23 | }, 24 | "canSelect" : true, 25 | "transshapeBreakPoint" : "sm", 26 | "batchActions" : [ 27 | { 28 | "icon": "mdi-delete-sweep-outline", 29 | "title": "删除", 30 | "shortcut": true, 31 | "action": { 32 | "name" : "doAction", 33 | "api" : "/api/action", 34 | params : { 35 | actionName:"/Water/Vular/Actions/BatchDelete", 36 | modelName:"/Water/Vular/Model/Posts", 37 | } 38 | }, 39 | }, 40 | ], 41 | "rowActions":[ 42 | { 43 | "icon": "mdi-pencil", 44 | "title": "编辑", 45 | "shortcut": true, 46 | "action": { 47 | name:"openPage", 48 | to:{ 49 | name: 'page', 50 | params: { 51 | pageId: 'water-vualr-view-post-attribute-edit', 52 | } 53 | }, 54 | }, 55 | }, 56 | { 57 | "icon": "mdi-trash-can", 58 | "title": "删除", 59 | "shortcut": true, 60 | "action":"action_id4" 61 | } 62 | ], 63 | "filters":[ 64 | ], 65 | "columns":[ 66 | { 67 | "field":"slug", 68 | "title": "标识", 69 | "flex": "2" 70 | }, 71 | { 72 | "field":"name", 73 | "title": "名称", 74 | "flex": "4" 75 | }, 76 | ], 77 | "actionsColumn":{ 78 | "width":"150px" 79 | } 80 | 81 | } 82 | } -------------------------------------------------------------------------------- /src/components/media/MediaAddCell.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 41 | 42 | 89 | -------------------------------------------------------------------------------- /src/mock/views/product/product-attributes.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name : "vular-list-page", 3 | props : { 4 | title:'商品属性列表', 5 | vularId : "inquires-list-1", 6 | defaultModel:{ 7 | keywords:'', 8 | page:1, 9 | pagination:'', 10 | //fliters 11 | cagegory:'none', 12 | attribute:'none', 13 | readings:'none', 14 | status:'none', 15 | }, 16 | "queryAction":{ 17 | "name" : "doAction", 18 | "api" : "/api/action", 19 | params : { 20 | actionName:"/Water/Vular/Actions/Query", 21 | modelName:"/Water/Vular/Model/PostAttribute", 22 | } 23 | }, 24 | "canSelect" : true, 25 | "transshapeBreakPoint" : "sm", 26 | "batchActions" : [ 27 | { 28 | "icon": "mdi-delete-sweep-outline", 29 | "title": "删除", 30 | "shortcut": true, 31 | "action": { 32 | "name" : "doAction", 33 | "api" : "/api/action", 34 | params : { 35 | actionName:"/Water/Vular/Actions/BatchDelete", 36 | modelName:"/Water/Vular/Model/Posts", 37 | } 38 | }, 39 | }, 40 | ], 41 | "rowActions":[ 42 | { 43 | "icon": "mdi-pencil", 44 | "title": "编辑", 45 | "shortcut": true, 46 | "action": { 47 | name:"openPage", 48 | to:{ 49 | name: 'page', 50 | params: { 51 | pageId: 'water-vualr-view-post-attribute-edit', 52 | } 53 | }, 54 | }, 55 | }, 56 | { 57 | "icon": "mdi-trash-can", 58 | "title": "删除", 59 | "shortcut": true, 60 | "action":"action_id4" 61 | } 62 | ], 63 | "filters":[ 64 | ], 65 | "columns":[ 66 | { 67 | "field":"slug", 68 | "title": "标识", 69 | "flex": "2" 70 | }, 71 | { 72 | "field":"name", 73 | "title": "名称", 74 | "flex": "4" 75 | }, 76 | ], 77 | "actionsColumn":{ 78 | "width":"150px" 79 | } 80 | 81 | } 82 | } -------------------------------------------------------------------------------- /src/components/widgets/VularPageHeader.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 61 | 62 | -------------------------------------------------------------------------------- /src/assets/locales/zh.json: -------------------------------------------------------------------------------- 1 | { 2 | "base":{ 3 | "save":"保存", 4 | "cancel":"取消", 5 | "close":"关闭", 6 | "clear":"清空", 7 | "confirm":"确定", 8 | "error" : "错误", 9 | "operateSuccess" : "操作成功!" 10 | }, 11 | 12 | "list":{ 13 | "add-new":"新建", 14 | "list-counts":"共 {0} 条", 15 | "selected-counts":"已选中{0}条", 16 | "select-all":"全选" 17 | }, 18 | 19 | "notification":{ 20 | "all" : "全部", 21 | "list" : "通知列表", 22 | "view" : "查看通知" 23 | }, 24 | 25 | "media":{ 26 | "medias":"媒体库", 27 | "images" : "图片", 28 | "videos" : "视频", 29 | "files" : "文件", 30 | "folder" : "文件夹", 31 | "edit-alt" : "编辑图片Alt文本", 32 | "remove-all" : "删除所有图片和视频", 33 | "alt-tips" : "为图片添加Alt文本, 以提高在搜索引擎中的表现,注意每个图片的文本是唯一的。", 34 | "alt-text" : "图片的Alt文本", 35 | "copy-to-all" : "复制到所有图片", 36 | "cancel" : "取消", 37 | "confirm" : "确定", 38 | "select" : "选择", 39 | "select-medias" : "选择媒体", 40 | "view-media" : "查看媒体", 41 | "upload-files" : "上传文件", 42 | "root" : "根目录", 43 | "selected-counts" : "已选中 {0} 个文件", 44 | "new-folder" : "新文件夹", 45 | "drag-here" : "把文件拖放到此处", 46 | "last-modified":"更新日期", 47 | "name" : "名字", 48 | "descending" : "由新到旧", 49 | "ascending" : "由旧到新" 50 | }, 51 | 52 | "debug":{ 53 | "debug":"调试", 54 | "slogan" : "抓虫、抓虫,其乐无穷", 55 | "report-bug" : "提交Bug", 56 | "clear":"清空" 57 | }, 58 | 59 | "login":{ 60 | "welcome":"欢迎使用Vular", 61 | "email":"邮箱", 62 | "password":"密码", 63 | "forgot":"忘记密码?", 64 | "login":"登录" 65 | }, 66 | 67 | "account":{ 68 | "profile":"个人信息", 69 | "change-password":"修改密码", 70 | "logout":"退出", 71 | "old-password":"原密码", 72 | "new-password":"新密码", 73 | "re-new-password":"重新输入新密码" 74 | }, 75 | 76 | "custumized":{ 77 | "modules":"模块" 78 | }, 79 | 80 | "design":{ 81 | "design-title":"{0}设计", 82 | "toolbox":"工具箱", 83 | "page-layout":"页面布局", 84 | "page-header":"页眉", 85 | "page-content":"页面内容", 86 | "page-footer":"页脚", 87 | "grid":"栅格", 88 | "row":"行", 89 | "column":"列" 90 | } 91 | 92 | } -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/plugins/anchor/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.2.1 (2020-03-25) 8 | */ 9 | !function(){"use strict";function e(o){return function(t){for(var e=0;e 2 | 5 | 6 | mdi-close 7 | 8 | 9 | 17 | 18 | 19 |
20 | 取消 21 | 确定 22 |
23 |
24 |
25 |
26 | 27 | 28 | 79 | 80 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | -------------------------------------------------------------------------------- /src/components/relations/VularHasOneDialog.vue: -------------------------------------------------------------------------------- 1 | 33 | 67 | -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/plugins/preview/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.2.1 (2020-03-25) 8 | */ 9 | !function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),l=tinymce.util.Tools.resolve("tinymce.util.Tools"),m=function(e){return e.getParam("content_style","")},u=function(e){return e.getParam("content_css_cors",!1,"boolean")},y=tinymce.util.Tools.resolve("tinymce.Env"),n=function(t){var n="",i=t.dom.encode,e=m(t);n+='',e&&(n+='");var o=u(t)?' crossorigin="anonymous"':"";l.each(t.contentCSS,function(e){n+='"});var r=t.settings.body_id||"tinymce";-1!==r.indexOf("=")&&(r=(r=t.getParam("body_id","","hash"))[t.id]||r);var a=t.settings.body_class||"";-1!==a.indexOf("=")&&(a=(a=t.getParam("body_class","","hash"))[t.id]||"");var c=' 88 | -------------------------------------------------------------------------------- /src/mock/views/post/post-attribute-edit.js: -------------------------------------------------------------------------------- 1 | export default { 2 | "name" : "vular-simple-page", 3 | props : { 4 | title:'编辑文章属性', 5 | vularId : "notification-view-1", 6 | loadAction:{ 7 | "name" : "doAction", 8 | "api" : "/api/action", 9 | params : { 10 | actionName:"/Water/Vular/Actions/View", 11 | modelName:"/Water/Vular/Model/Notifications", 12 | } 13 | }, 14 | md:'5', 15 | operateButtons:[ 16 | { 17 | props:{ 18 | text:true, 19 | rounded:true, 20 | }, 21 | text:"取消", 22 | action:{ 23 | name : "openPage", 24 | to:{ 25 | name: 'page', 26 | params: { 27 | pageId: 'water-vular-view-post_attributes', 28 | moduleId:'post-attributes', 29 | } 30 | }, 31 | } 32 | }, 33 | { 34 | props:{ 35 | rounded:true, 36 | color:"primary", 37 | dark:true, 38 | }, 39 | text:"保存", 40 | action:{ 41 | name : "openPage", 42 | to:{ 43 | name: 'page', 44 | params: { 45 | pageId: 'water-vualr-view-notification-list', 46 | moduleId:'notifications', 47 | } 48 | }, 49 | } 50 | }, 51 | ], 52 | 53 | layout:[ 54 | { 55 | name:"vular-input", 56 | props:{ 57 | rules:"required", 58 | field:"slug", 59 | vInput:{ 60 | name:"v-text-field", 61 | props:{ 62 | label:"标识", 63 | outlined:true, 64 | }, 65 | }, 66 | }, 67 | }, 68 | 69 | { 70 | name:"vular-input", 71 | props:{ 72 | rules:"", 73 | field:"name", 74 | vInput:{ 75 | name:"v-text-field", 76 | props:{ 77 | label:"名称", 78 | outlined:true, 79 | }, 80 | }, 81 | }, 82 | } 83 | ], 84 | } 85 | } -------------------------------------------------------------------------------- /src/mock/views/product/product-attribute-edit.js: -------------------------------------------------------------------------------- 1 | export default { 2 | "name" : "vular-simple-page", 3 | props : { 4 | title:'编辑文章属性', 5 | vularId : "notification-view-1", 6 | loadAction:{ 7 | "name" : "doAction", 8 | "api" : "/api/action", 9 | params : { 10 | actionName:"/Water/Vular/Actions/View", 11 | modelName:"/Water/Vular/Model/Notifications", 12 | } 13 | }, 14 | md:'5', 15 | operateButtons:[ 16 | { 17 | props:{ 18 | text:true, 19 | rounded:true, 20 | }, 21 | text:"取消", 22 | action:{ 23 | name : "openPage", 24 | to:{ 25 | name: 'page', 26 | params: { 27 | pageId: 'water-vular-view-post_attributes', 28 | moduleId:'post-attributes', 29 | } 30 | }, 31 | } 32 | }, 33 | { 34 | props:{ 35 | rounded:true, 36 | color:"primary", 37 | dark:true, 38 | }, 39 | text:"保存", 40 | action:{ 41 | name : "openPage", 42 | to:{ 43 | name: 'page', 44 | params: { 45 | pageId: 'water-vualr-view-notification-list', 46 | moduleId:'notifications', 47 | } 48 | }, 49 | } 50 | }, 51 | ], 52 | 53 | layout:[ 54 | { 55 | name:"vular-input", 56 | props:{ 57 | rules:"required", 58 | field:"slug", 59 | vInput:{ 60 | name:"v-text-field", 61 | props:{ 62 | label:"标识", 63 | outlined:true, 64 | }, 65 | }, 66 | }, 67 | }, 68 | 69 | { 70 | name:"vular-input", 71 | props:{ 72 | rules:"", 73 | field:"name", 74 | vInput:{ 75 | name:"v-text-field", 76 | props:{ 77 | label:"名称", 78 | outlined:true, 79 | }, 80 | }, 81 | }, 82 | } 83 | ], 84 | } 85 | } -------------------------------------------------------------------------------- /src/Customized/PageDesign/Core/States/ElementState.js: -------------------------------------------------------------------------------- 1 | //import Move from "../commands/Move" 2 | import $store from "../../../../store.js" 3 | export default class ElementState { 4 | constructor(element) { 5 | this.element = element 6 | } 7 | 8 | mousemove(event){ 9 | let draggedElement = $store.state.customizedApp.draggedElement 10 | 11 | if(draggedElement){ 12 | window.$bus.$emit('followMouse', event) 13 | let position = this.judgePosition(event) 14 | if(position){ 15 | window.$bus.$emit('showCursor', event, position) 16 | } 17 | else{ 18 | window.$bus.$emit('hideCursor') 19 | } 20 | } 21 | event.stopPropagation() 22 | } 23 | 24 | mouseup(event){ 25 | event.stopPropagation() 26 | let draggedElement = $store.state.customizedApp.draggedElement 27 | if(draggedElement && this.element.canAccept(draggedElement)){ 28 | this.element.addChild(draggedElement) 29 | } 30 | window.$bus.$emit('hideCursor') 31 | window.$bus.$emit('unFollowMouse') 32 | $store.commit('endDragElement') 33 | } 34 | 35 | mouseout(){ 36 | window.$bus.$emit('hideCursor') 37 | } 38 | 39 | judgePosition(event){ 40 | let draggedElement = $store.state.customizedApp.draggedElement 41 | 42 | let clientWidth = event.srcElement.clientWidth 43 | let clientHeight = event.srcElement.clientHeight 44 | let offsetX = event.offsetX 45 | let offsetY = event.offsetY 46 | let ratioY = offsetY/clientHeight 47 | let ratioX = offsetX/clientWidth 48 | 49 | if(this.element.canAccept(draggedElement)){ 50 | //console.log(document.querySelector(`[data-vid-${this.element._vid}]`)) 51 | //if(this.element.children.length === 0){ 52 | return 'in' 53 | //} 54 | //else if(ratioY < 0.1){ 55 | // return 'inBefore' 56 | //} 57 | //else{ 58 | // return 'inAfter' 59 | //} 60 | 61 | } 62 | 63 | if(this.element.parent && this.element.parent.canAccept(draggedElement)){ 64 | if(this.element.isCol()){ 65 | return ratioX > 0.5 ? 'right' : 'left' 66 | } 67 | else{ 68 | return ratioY > 0.5 ? 'bottom' : 'top' 69 | } 70 | } 71 | 72 | return '' 73 | 74 | } 75 | 76 | } -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/plugins/autoresize/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.2.1 (2020-03-25) 8 | */ 9 | !function(){"use strict";function d(e,t){var n=e.getBody();n&&(n.style.overflowY=t?"":"hidden",t||(n.scrollTop=0))}function h(e,t,n,i){var o=parseInt(e.getStyle(t,n,i),10);return isNaN(o)?0:o}var i=function(e){function t(){return n}var n=e;return{get:t,set:function(e){n=e},clone:function(){return i(t())}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),v=tinymce.util.Tools.resolve("tinymce.Env"),r=tinymce.util.Tools.resolve("tinymce.util.Delay"),p=function(e){return e.fire("ResizeEditor")},y=function(e){return e.getParam("min_height",e.getElement().offsetHeight,"number")},z=function(e){return e.getParam("max_height",0,"number")},n=function(e){return e.getParam("autoresize_overflow_padding",1,"number")},b=function(e){return e.getParam("autoresize_bottom_margin",50,"number")},o=function(e){return e.getParam("autoresize_on_init",!0,"boolean")},u=function(e,t,n,i,o){r.setEditorTimeout(e,function(){C(e,t),n--?u(e,t,n,i,o):o&&o()},i)},C=function(e,t){var n,i,o,r=e.dom,u=e.getDoc();if(u)if(function(e){return e.plugins.fullscreen&&e.plugins.fullscreen.isFullscreen()}(e))d(e,!0);else{var s=u.documentElement,a=b(e);i=y(e);var f=h(r,s,"margin-top",!0),c=h(r,s,"margin-bottom",!0);(o=s.offsetHeight+f+c+a)<0&&(o=0);var g=e.getContainer().offsetHeight-e.getContentAreaContainer().offsetHeight;o+g>y(e)&&(i=o+g);var l=z(e);if(l&&l 2 | 10 | 11 | 12 | 90 | -------------------------------------------------------------------------------- /src/components/pages/dashboard/tables/Projects.vue: -------------------------------------------------------------------------------- 1 | 25 | 87 | -------------------------------------------------------------------------------- /src/mock/views/notification/notification-view.js: -------------------------------------------------------------------------------- 1 | export default { 2 | "name" : "vular-simple-page", 3 | props : { 4 | title:'查看通知', 5 | vularId : "notification-view-1", 6 | md:'6', 7 | loadAction:{ 8 | "name" : "doAction", 9 | "api" : "/api/action", 10 | params : { 11 | actionName:"/Water/Vular/Actions/View", 12 | modelName:"/Water/Vular/Model/Notifications", 13 | } 14 | }, 15 | operateButtons:[ 16 | { 17 | props:{ 18 | text:true, 19 | rounded:true, 20 | color:"primary", 21 | }, 22 | text:"删除", 23 | action:{ 24 | name:"doAction" 25 | } 26 | }, 27 | { 28 | props:{ 29 | rounded:true, 30 | color:"primary", 31 | dark:true, 32 | }, 33 | text:"确定", 34 | action:{ 35 | name : "openPage", 36 | to:{ 37 | name: 'page', 38 | params: { 39 | pageId: 'water-vualr-view-notification-list', 40 | moduleId:'notifications', 41 | } 42 | }, 43 | } 44 | }, 45 | ], 46 | 47 | layout:[ 48 | { 49 | name:"vular-input", 50 | props:{ 51 | field:"title", 52 | vInput:{ 53 | name:"vular-label", 54 | props:{ 55 | label:"", 56 | styles:{ 57 | 'font-weight':'bold', 58 | 'font-size':'16px', 59 | } 60 | }, 61 | }, 62 | }, 63 | }, 64 | 65 | { 66 | name:"vular-input", 67 | props:{ 68 | field:"created_at", 69 | vInput:{ 70 | name:"vular-label", 71 | props:{ 72 | label:"", 73 | styles:{ 74 | "margin-top":"10px", 75 | } 76 | }, 77 | }, 78 | }, 79 | }, 80 | 81 | { 82 | name:"vular-input", 83 | props:{ 84 | field:"content", 85 | vInput:{ 86 | name:"vular-label", 87 | props:{ 88 | label:"", 89 | styles:{ 90 | "margin-top":"10px", 91 | } 92 | }, 93 | }, 94 | }, 95 | }, 96 | ], 97 | } 98 | } -------------------------------------------------------------------------------- /src/assets/locales/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "base":{ 3 | "save":"Save", 4 | "cancel":"Cancel", 5 | "close":"Close", 6 | "clear":"Clear", 7 | "confirm":"Confirm", 8 | "error" : "Error", 9 | "operateSuccess" : "Operate Success!" 10 | }, 11 | 12 | "notification":{ 13 | "all" : "All", 14 | "list" : "Notifications", 15 | "view" : "View Notification" 16 | }, 17 | 18 | "list":{ 19 | "add-new":"Add New", 20 | "list-counts":"All {0} records", 21 | "selected-counts":"{0} are selected", 22 | "select-all":"Select All" 23 | }, 24 | 25 | "media":{ 26 | "medias":"Medias", 27 | "images" : "Images", 28 | "videos" : "Videos", 29 | "files" : "Files", 30 | "folder" : "Folder", 31 | "edit-alt" : "Edit Alt Text for Images", 32 | "remove-all" : "Remove All Images & Videos", 33 | "alt-tips" : "Add alt text to your images to optimize search engine results and rank higher in Google. Try and make the text unique for each image.", 34 | "alt-text" : "Alt text for image", 35 | "copy-to-all" : "Copy to all images", 36 | "cancel" : "Cancel", 37 | "confirm" : "Confirm", 38 | "select" : "Select", 39 | "select-medias" : "Select Medias", 40 | "view-media" : "View Media", 41 | "upload-files" : "Upload files", 42 | "root" : "Root folder", 43 | "selected-counts" : "{0} files are selected", 44 | "new-folder" : "New folder", 45 | "drag-here" : "Drag files to here", 46 | "last-modified":"Last Modified", 47 | "descending" : "Descending", 48 | "ascending" : "Ascending" 49 | }, 50 | 51 | "debug":{ 52 | "debug":"Debug", 53 | "slogan" : "Find a bug is funny", 54 | "report-bug" : "Report Bug", 55 | "clear":"Clear" 56 | }, 57 | 58 | "login":{ 59 | "welcome":"Welcome Back", 60 | "email":"Email", 61 | "password":"Password", 62 | "forgot":"Forgot Password?", 63 | "login":"Login" 64 | }, 65 | 66 | "account":{ 67 | "profile":"Profile", 68 | "change-password":"Change Password", 69 | "logout":"Logout", 70 | "old-password":"Old Password", 71 | "new-password":"New Password", 72 | "re-new-password":"Input Password Again" 73 | }, 74 | 75 | "custumized":{ 76 | "modules":"Modules" 77 | }, 78 | 79 | "design":{ 80 | "design-title":"{0} Design", 81 | "toolbox":"Page Layout", 82 | "page-header":"Page Header", 83 | "page-content":"Page Content", 84 | "page-footer":"Page Footer", 85 | "grid":"Grid", 86 | "row":"Row", 87 | "column":"Column" 88 | } 89 | } -------------------------------------------------------------------------------- /src/mock/views/user/roles.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name : "vular-list-page", 3 | props : { 4 | title:'角色列表', 5 | vularId : "inquires-list-1", 6 | defaultModel:{ 7 | keywords:'', 8 | page:1, 9 | pagination:'', 10 | //fliters 11 | cagegory:'none', 12 | attribute:'none', 13 | readings:'none', 14 | status:'none', 15 | }, 16 | "queryAction":{ 17 | "name" : "doAction", 18 | "api" : "/api/action", 19 | params : { 20 | actionName:"/Water/Vular/Actions/Query", 21 | modelName:"/Water/Vular/Model/Inquiry", 22 | } 23 | }, 24 | "addNewAction":{ 25 | name:"openPage", 26 | to:{ 27 | name: 'page', 28 | params: { 29 | pageId: 'water-vualr-view-post-role-edit', 30 | } 31 | }, 32 | }, 33 | "canSelect" : true, 34 | "transshapeBreakPoint" : "sm", 35 | "batchActions" : [ 36 | { 37 | "icon": "mdi-delete-sweep-outline", 38 | "title": "删除", 39 | "shortcut": true, 40 | "action": { 41 | "name" : "doAction", 42 | "api" : "/api/action", 43 | params : { 44 | actionName:"/Water/Vular/Actions/BatchDelete", 45 | modelName:"/Water/Vular/Model/Admins", 46 | } 47 | }, 48 | }, 49 | ], 50 | "rowActions":[ 51 | { 52 | "icon": "mdi-pencil", 53 | "title": "编辑", 54 | "shortcut": true, 55 | "action": { 56 | name:"openPage", 57 | to:{ 58 | name: 'page', 59 | params: { 60 | pageId: 'water-vualr-view-post-role-edit', 61 | } 62 | }, 63 | }, 64 | }, 65 | { 66 | "icon": "mdi-trash-can", 67 | "title": "删除", 68 | "shortcut": true, 69 | "action":"action_id4" 70 | } 71 | ], 72 | "filters":[ 73 | ], 74 | "columns":[ 75 | { 76 | "field":"loginid", 77 | "title": "角色名", 78 | "flex": "2" 79 | }, 80 | { 81 | "field":"name", 82 | "title": "描述", 83 | "flex": "4" 84 | }, 85 | { 86 | "field":"email", 87 | "title": "状态", 88 | "flex": "2" 89 | }, 90 | { 91 | "field":"created_at", 92 | "title": "时间", 93 | "flex": "3" 94 | }, 95 | ], 96 | "actionsColumn":{ 97 | "width":"150px" 98 | } 99 | 100 | } 101 | } -------------------------------------------------------------------------------- /src/components/media/MediaSelectCell.vue: -------------------------------------------------------------------------------- 1 | 36 | 37 | 76 | 77 | 101 | -------------------------------------------------------------------------------- /src/mock/views/post/post-social-dialog.js: -------------------------------------------------------------------------------- 1 | export default{ 2 | name:"VularHasOneDialog", 3 | props:{ 4 | "icon":"mdi-share-variant", 5 | title:"社交分享优化", 6 | defaultModel:{ 7 | id:"d1", 8 | title:"好奇怪的标题", 9 | }, 10 | layout:[ 11 | { 12 | name:"vular-input", 13 | props:{ 14 | rules:"required|max:50", 15 | field:"title", 16 | vInput:{ 17 | name:"v-text-field", 18 | props:{ 19 | label:"标题", 20 | //"prepend-icon":"mdi-format-title", 21 | }, 22 | }, 23 | }, 24 | }, 25 | { 26 | name:"vular-input", 27 | props:{ 28 | rules:"required|max:50", 29 | field:"description", 30 | vInput:{ 31 | name:"v-textarea", 32 | props:{ 33 | label:"描述", 34 | //"prepend-icon":"mdi-format-title", 35 | }, 36 | }, 37 | }, 38 | }, 39 | { 40 | name:"v-row", 41 | children:[ 42 | { 43 | name:"v-col", 44 | props:{ 45 | sm:"6", 46 | }, 47 | children:[ 48 | { 49 | name:"VularSingleImageInput", 50 | props:{ 51 | label:"图片", 52 | } 53 | } 54 | ] 55 | }, 56 | { 57 | name:"v-col", 58 | props:{ 59 | sm:"6", 60 | }, 61 | children:[ 62 | { 63 | name:"vular-input", 64 | props:{ 65 | rules:"required|max:50", 66 | field:"width", 67 | vInput:{ 68 | name:"v-text-field", 69 | props:{ 70 | label:"宽", 71 | //"prepend-icon":"mdi-format-title", 72 | }, 73 | }, 74 | }, 75 | }, 76 | { 77 | name:"vular-input", 78 | props:{ 79 | rules:"required|max:50", 80 | field:"height", 81 | vInput:{ 82 | name:"v-text-field", 83 | props:{ 84 | label:"高", 85 | //"prepend-icon":"mdi-format-title", 86 | }, 87 | }, 88 | }, 89 | }, 90 | ] 91 | } 92 | ], 93 | }, 94 | ] 95 | }, 96 | 97 | } 98 | -------------------------------------------------------------------------------- /src/mock/views/product/product-social-dialog.js: -------------------------------------------------------------------------------- 1 | export default{ 2 | name:"VularHasOneDialog", 3 | props:{ 4 | "icon":"mdi-share-variant", 5 | title:"社交分享优化", 6 | defaultModel:{ 7 | id:"d1", 8 | title:"好奇怪的标题", 9 | }, 10 | layout:[ 11 | { 12 | name:"vular-input", 13 | props:{ 14 | rules:"required|max:50", 15 | field:"title", 16 | vInput:{ 17 | name:"v-text-field", 18 | props:{ 19 | label:"标题", 20 | //"prepend-icon":"mdi-format-title", 21 | }, 22 | }, 23 | }, 24 | }, 25 | { 26 | name:"vular-input", 27 | props:{ 28 | rules:"required|max:50", 29 | field:"description", 30 | vInput:{ 31 | name:"v-textarea", 32 | props:{ 33 | label:"描述", 34 | //"prepend-icon":"mdi-format-title", 35 | }, 36 | }, 37 | }, 38 | }, 39 | { 40 | name:"v-row", 41 | children:[ 42 | { 43 | name:"v-col", 44 | props:{ 45 | sm:"6", 46 | }, 47 | children:[ 48 | { 49 | name:"VularSingleImageInput", 50 | props:{ 51 | label:"图片", 52 | } 53 | } 54 | ] 55 | }, 56 | { 57 | name:"v-col", 58 | props:{ 59 | sm:"6", 60 | }, 61 | children:[ 62 | { 63 | name:"vular-input", 64 | props:{ 65 | rules:"required|max:50", 66 | field:"width", 67 | vInput:{ 68 | name:"v-text-field", 69 | props:{ 70 | label:"宽", 71 | //"prepend-icon":"mdi-format-title", 72 | }, 73 | }, 74 | }, 75 | }, 76 | { 77 | name:"vular-input", 78 | props:{ 79 | rules:"required|max:50", 80 | field:"height", 81 | vInput:{ 82 | name:"v-text-field", 83 | props:{ 84 | label:"高", 85 | //"prepend-icon":"mdi-format-title", 86 | }, 87 | }, 88 | }, 89 | }, 90 | ] 91 | } 92 | ], 93 | }, 94 | ] 95 | }, 96 | 97 | } 98 | -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/plugins/autolink/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.2.1 (2020-03-25) 8 | */ 9 | !function(){"use strict";function i(t,e){if(e<0&&(e=0),3===t.nodeType){var n=t.data.length;n 2 | 13 | 17 | 18 | 19 | {{$store.state.vularApp.logo.title}} 20 | 21 | 22 | mdi-cog-outline 23 | 24 | 25 | 30 | 31 | 37 | 38 | 43 | 44 | 45 | 46 | 83 | -------------------------------------------------------------------------------- /src/components/notifications/ViewDialog.vue: -------------------------------------------------------------------------------- 1 | 36 | 37 | 98 | -------------------------------------------------------------------------------- /src/mock/views/user/admins.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name : "vular-list-page", 3 | props : { 4 | title:'管理员列表', 5 | vularId : "inquires-list-1", 6 | defaultModel:{ 7 | keywords:'', 8 | page:1, 9 | pagination:'', 10 | //fliters 11 | cagegory:'none', 12 | attribute:'none', 13 | readings:'none', 14 | status:'none', 15 | }, 16 | "queryAction":{ 17 | "name" : "doAction", 18 | "api" : "/api/action", 19 | params : { 20 | actionName:"/Water/Vular/Actions/Query", 21 | modelName:"/Water/Vular/Model/Inquiry", 22 | } 23 | }, 24 | "addNewAction":{ 25 | name:"openPage", 26 | to:{ 27 | name: 'page', 28 | params: { 29 | pageId: 'water-vualr-view-post-admin-edit', 30 | } 31 | }, 32 | }, 33 | "canSelect" : true, 34 | "transshapeBreakPoint" : "sm", 35 | "batchActions" : [ 36 | { 37 | "icon": "mdi-delete-sweep-outline", 38 | "title": "删除", 39 | "shortcut": true, 40 | "action": { 41 | "name" : "doAction", 42 | "api" : "/api/action", 43 | params : { 44 | actionName:"/Water/Vular/Actions/BatchDelete", 45 | modelName:"/Water/Vular/Model/Admins", 46 | } 47 | }, 48 | }, 49 | ], 50 | "rowActions":[ 51 | { 52 | "icon": "mdi-pencil", 53 | "title": "编辑", 54 | "shortcut": true, 55 | "action": { 56 | name:"openPage", 57 | to:{ 58 | name: 'page', 59 | params: { 60 | pageId: 'water-vualr-view-post-admin-edit', 61 | } 62 | }, 63 | }, 64 | }, 65 | { 66 | "icon": "mdi-trash-can", 67 | "title": "删除", 68 | "shortcut": true, 69 | "action":"action_id4" 70 | } 71 | ], 72 | "filters":[ 73 | ], 74 | "columns":[ 75 | { 76 | "field":"loginid", 77 | "title": "登录名", 78 | "flex": "2" 79 | }, 80 | { 81 | "field":"name", 82 | "title": "姓名", 83 | "flex": "2" 84 | }, 85 | { 86 | "field":"email", 87 | "title": "邮箱", 88 | "flex": "4" 89 | }, 90 | { 91 | "field":"company", 92 | "title": "状态", 93 | "flex": "4" 94 | }, 95 | { 96 | "field":"created_at", 97 | "title": "时间", 98 | "flex": "3" 99 | }, 100 | ], 101 | "actionsColumn":{ 102 | "width":"150px" 103 | } 104 | 105 | } 106 | } -------------------------------------------------------------------------------- /src/VularAdmin/Drawer/VularMenuItemGroup.vue: -------------------------------------------------------------------------------- 1 | 55 | 56 | 100 | 101 | -------------------------------------------------------------------------------- /src/mock/views/order/ticheng.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name:"VularFormCard", 3 | props:{ 4 | title:"提成核算", 5 | }, 6 | children:[ 7 | { 8 | name:'v-row', 9 | children:[ 10 | { 11 | name:'v-col', 12 | props:{ 13 | md:'6', 14 | }, 15 | children:[ 16 | { 17 | name:"vular-input", 18 | props:{ 19 | rules:"", 20 | field:"auther", 21 | vInput:{ 22 | name:"v-text-field", 23 | props:{ 24 | label:"毛利", 25 | }, 26 | }, 27 | }, 28 | }, 29 | 30 | ] 31 | }, 32 | { 33 | name:'v-col', 34 | props:{ 35 | md:'6', 36 | }, 37 | children:[ 38 | { 39 | name:"vular-input", 40 | props:{ 41 | rules:"required", 42 | field:"bili", 43 | vInput:{ 44 | name:"VSlider", 45 | props:{ 46 | label:"应付提成", 47 | thumbLabel:"always", 48 | step:5, 49 | }, 50 | }, 51 | }, 52 | }, 53 | 54 | ] 55 | } 56 | ] 57 | }, 58 | 59 | { 60 | name:'v-row', 61 | children:[ 62 | { 63 | name:'v-col', 64 | props:{ 65 | md:'6', 66 | }, 67 | children:[ 68 | { 69 | name:"vular-input", 70 | props:{ 71 | rules:"", 72 | field:"source", 73 | vInput:{ 74 | name:"v-text-field", 75 | props:{ 76 | label:"应付提成", 77 | }, 78 | }, 79 | }, 80 | }, 81 | 82 | ] 83 | }, 84 | { 85 | name:'v-col', 86 | props:{ 87 | md:'6', 88 | }, 89 | children:[ 90 | { 91 | name:"vular-input", 92 | props:{ 93 | rules:"required", 94 | field:"source_url", 95 | vInput:{ 96 | name:"v-text-field", 97 | props:{ 98 | label:"实付提成", 99 | }, 100 | }, 101 | }, 102 | }, 103 | 104 | ] 105 | } 106 | ] 107 | }, 108 | 109 | ], 110 | } 111 | -------------------------------------------------------------------------------- /src/components/media/MediaFolderRow.vue: -------------------------------------------------------------------------------- 1 | 57 | 58 | 78 | 79 | -------------------------------------------------------------------------------- /src/components/media/MediaSelectDialog.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 89 | 97 | -------------------------------------------------------------------------------- /vendor/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.2.1 (2020-03-25) 8 | */ 9 | !function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=tinymce.util.Tools.resolve("tinymce.util.Tools"),t=function(e){return e.getParam("font_formats")},i=function(e){return e.getParam("fontsize_formats")},n=function(e,t){e.settings.fontsize_formats=t},l=function(e,t){e.settings.font_formats=t},s=function(e){return e.getParam("font_size_style_values","xx-small,x-small,small,medium,large,x-large,xx-large")},r=function(e,t){e.settings.inline_styles=t},o=function(e){!function(e){r(e,!1),i(e)||n(e,"8pt=1 10pt=2 12pt=3 14pt=4 18pt=5 24pt=6 36pt=7"),t(e)||l(e,"Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats")}(e),e.on("PreInit",function(){return function(e){var t="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table",i=a.explode(s(e)),n=e.schema;e.formatter.register({alignleft:{selector:t,attributes:{align:"left"}},aligncenter:{selector:t,attributes:{align:"center"}},alignright:{selector:t,attributes:{align:"right"}},alignjustify:{selector:t,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:!0}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:!0}],fontname:{inline:"font",toggle:!1,attributes:{face:"%value"}},fontsize:{inline:"font",toggle:!1,attributes:{size:function(e){return String(a.inArray(i,e.value)+1)}}},forecolor:{inline:"font",attributes:{color:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0}}),a.each("b,i,u,strike".split(","),function(e){n.addValidElements(e+"[*]")}),n.getElementRule("font")||n.addValidElements("font[face|size|color|style]"),a.each(t.split(","),function(e){var t=n.getElementRule(e);t&&(t.attributes.align||(t.attributes.align={},t.attributesOrder.push("align")))})}(e)})};!function c(){e.add("legacyoutput",function(e){o(e)})}()}(); -------------------------------------------------------------------------------- /src/components/relations/VularHasManyPanel.vue: -------------------------------------------------------------------------------- 1 | 53 | 54 | 108 | -------------------------------------------------------------------------------- /src/components/VularPage.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 87 | 88 | -------------------------------------------------------------------------------- /src/mock/views/notification/notification-list.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name : "vular-list-page", 3 | props : { 4 | title:'通知列表', 5 | titleIcon:'mdi-bell-outline', 6 | vularId : "notifications-list-1", 7 | defaultModel:{ 8 | keywords:'', 9 | page:1, 10 | pagination:'', 11 | //fliters 12 | cagegory:'none', 13 | attribute:'none', 14 | readings:'none', 15 | status:'none', 16 | }, 17 | "queryAction":{ 18 | "name" : "doAction", 19 | "api" : "/api/action", 20 | params : { 21 | actionName:"/Water/Vular/Actions/Query", 22 | modelName:"/Water/Vular/Model/Notification", 23 | } 24 | }, 25 | "canSelect" : true, 26 | "transshapeBreakPoint" : "sm", 27 | "batchActions" : [ 28 | { 29 | "icon": "mdi-bell-sleep-outline", 30 | "title": "标为已读", 31 | "shortcut": true, 32 | "action": { 33 | "name" : "doAction", 34 | "api" : "/api/action", 35 | params : { 36 | actionName:"/Water/Vular/Actions/BatchDownload", 37 | modelName:"/Water/Vular/Model/Posts", 38 | } 39 | }, 40 | }, 41 | { 42 | "icon": "mdi-delete-sweep-outline", 43 | "title": "删除", 44 | "shortcut": true, 45 | "action": { 46 | "name" : "doAction", 47 | "api" : "/api/action", 48 | params : { 49 | actionName:"/Water/Vular/Actions/BatchDelete", 50 | modelName:"/Water/Vular/Model/Posts", 51 | } 52 | }, 53 | }, 54 | ], 55 | "rowActions":[ 56 | { 57 | "icon": "mdi-eye-outline", 58 | "title": "查看", 59 | "shortcut": true, 60 | "action": { 61 | name:"openPage", 62 | to:{ 63 | name: 'page', 64 | params: { 65 | pageId: 'water-vualr-view-notification', 66 | } 67 | }, 68 | }, 69 | }, 70 | { 71 | "icon": "mdi-trash-can", 72 | "title": "删除", 73 | "shortcut": true, 74 | "action":"action_id4" 75 | } 76 | ], 77 | "filters":[ 78 | { 79 | "title":"", 80 | "shortcut": true, 81 | "rules":{ 82 | "read" : "未读", 83 | "unread" : "已读", 84 | }, 85 | "blankTitle":"全部", 86 | "blankValue":"none", 87 | "field":"cagegory" 88 | }, 89 | ], 90 | "columns":[ 91 | { 92 | "field":"icon", 93 | "title": "", 94 | "width":"60px" 95 | }, 96 | { 97 | "field":"title", 98 | "title": "标题", 99 | "width":"", 100 | "flex": "4" 101 | }, 102 | { 103 | "field":"created_at", 104 | "title": "时间", 105 | "width":"", 106 | "flex": "2" 107 | }, 108 | ], 109 | "actionsColumn":{ 110 | "width":"150px" 111 | } 112 | 113 | } 114 | } --------------------------------------------------------------------------------