Merge pull request #930 from iview/2.0

2.0
This commit is contained in:
Lison 2018-08-30 18:19:33 +08:00 committed by GitHub
commit 7becc132c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 256 additions and 12 deletions

View File

@ -1 +0,0 @@
export default 'development'

View File

@ -1,6 +1,4 @@
import env from './env'
const DEV_URL = 'https://www.easy-mock.com/mock/5add9213ce4d0e69998a6f51/iview-admin/'
const PRO_URL = 'https://produce.com'
export default env === 'development' ? DEV_URL : PRO_URL
export default process.env.NODE_ENV === 'development' ? DEV_URL : PRO_URL

8
package-lock.json generated
View File

@ -14279,6 +14279,14 @@
"integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==",
"dev": true
},
"vuedraggable": {
"version": "2.16.0",
"resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.16.0.tgz",
"integrity": "sha512-fr9gcWKXMJlzbbtJcrQs4kU7qdOZqd4SEpAcx+r0nykbW8AygZN0aKVpadEtI53T8A2azhzCdXMvEqrLuKE2fA==",
"requires": {
"sortablejs": "1.7.0"
}
},
"vuex": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/vuex/-/vuex-3.0.1.tgz",

View File

@ -26,6 +26,7 @@
"vue": "^2.5.10",
"vue-i18n": "^7.8.0",
"vue-router": "^3.0.1",
"vuedraggable": "^2.16.0",
"vuex": "^3.0.1",
"wangeditor": "^3.1.1",
"xlsx": "^0.13.3"

View File

@ -6,3 +6,10 @@ export const getTableData = () => {
method: 'get'
})
}
export const getDragList = () => {
return axios.request({
url: 'get_drag_list',
method: 'get'
})
}

View File

@ -0,0 +1,92 @@
<template>
<div class="drag-list-wrapper">
<div class="drag-list-con con1">
<slot name="left-title"></slot>
<draggable class="drop-box1" :class="dropConClass.left" :options="options" :value="list1" @input="handleListChange($event, 'left')" @end="handleEnd($event, 'left')">
<div class="drag-list-item" v-for="(itemLeft, index) in list1" :key="`drag_li1_${index}`">
<slot name="left" :itemLeft="itemLeft">{{ itemLeft }}</slot>
</div>
</draggable>
</div>
<div class="drag-list-con con2">
<slot name="right-title"></slot>
<draggable class="drop-box2" :class="dropConClass.right" :options="options" :value="list2" @input="handleListChange($event, 'right')" @end="handleEnd($event, 'right')">
<div class="drag-list-item" v-for="(itemRight, index) in list2" :key="`drag_li2_${index}`">
<slot name="right" :itemRight="itemRight">{{ itemRight }}</slot>
</div>
</draggable>
</div>
</div>
</template>
<script>
import draggable from 'vuedraggable'
export default {
name: 'DragList',
components: {
draggable
},
props: {
list1: {
type: Array,
required: true
},
list2: {
type: Array,
default: () => []
},
dropConClass: {
type: Object,
default: () => ({})
}
},
data () {
return {
options: { group: 'drag_list' }
}
},
methods: {
handleListChange (value, type) {
if (type === 'left') this.$emit('update:list1', value)
else this.$emit('update:list2', value)
},
handleEnd (event, type) {
const srcClassName = (event.srcElement || event.target).classList[0]
const targetClassName = event.to.classList[0]
let src = ''
let target = ''
if (srcClassName === targetClassName) {
if (type === 'left') {
src = 'left'
target = 'left'
} else {
src = 'right'
target = 'right'
}
} else {
if (type === 'left') {
src = 'left'
target = 'right'
} else {
src = 'right'
target = 'left'
}
}
this.$emit('on-change', {
src: src,
target: target,
oldIndex: event.oldIndex,
newIndex: event.newIndex
})
}
}
}
</script>
<style lang="less">
.drag-list-wrapper{
height: 100%;
.drag-list-con{
width: 50%;
float: left;
}
}
</style>

View File

@ -0,0 +1,2 @@
import DragList from './drag-list.vue'
export default DragList

View File

@ -13,9 +13,8 @@ import './index.less'
import '@/assets/icons/iconfont.css'
// import '@/mock'
// 实际打包时应该不引入mock
import env from '../config/env'
/* eslint-disable */
env === 'development' ? require('@/mock') : ''
if (process.env.NODE_ENV !== 'production') require('@/mock')
Vue.use(iView, {
i18n: (key, value) => i18n.t(key, value)

View File

@ -1,5 +1,6 @@
import Mock from 'mockjs'
import { doCustomTimes } from '@/libs/util'
const Random = Mock.Random
export const getTableData = req => {
let tableData = []
@ -16,3 +17,18 @@ export const getTableData = req => {
msg: ''
}
}
export const getDragList = req => {
let dragList = []
doCustomTimes(5, () => {
dragList.push(Mock.mock({
name: Random.csentence(10, 13),
id: Random.increment(10)
}))
})
return {
code: 200,
data: dragList,
msg: ''
}
}

View File

@ -1,11 +1,12 @@
import Mock from 'mockjs'
import { login, logout, getUserInfo } from './login'
import { getTableData } from './data'
import { getTableData, getDragList } from './data'
// 登录相关和获取用户信息
Mock.mock(/\/login/, login)
Mock.mock(/\/get_info/, getUserInfo)
Mock.mock(/\/logout/, logout)
Mock.mock(/\/get_table_data/, getTableData)
Mock.mock(/\/get_drag_list/, getDragList)
export default Mock

View File

@ -86,6 +86,15 @@ export default [
},
component: () => import('@/view/components/count-to/count-to.vue')
},
{
path: 'drag_list_page',
name: 'drag_list_page',
meta: {
icon: 'ios-infinite',
title: '拖拽列表'
},
component: () => import('@/view/components/drag-list/drag-list.vue')
},
{
path: 'tables_page',
name: 'tables_page',

View File

@ -0,0 +1,113 @@
<template>
<div>
<Card>
<div class="drag-box-card">
<!-- 切记设置list1和list2属性时一定要添加.sync修饰符 -->
<drag-list :list1.sync="list1" :list2.sync="list2" :dropConClass="dropConClass" @on-change="handleChange">
<h3 slot="left-title">待办事项</h3>
<Card class="drag-item" slot="left" slot-scope="left">{{ left.itemLeft.name }}</Card>
<h3 slot="right-title">完成事项</h3>
<Card class="drag-item" slot="right" slot-scope="right">{{ right.itemRight.name }}</Card>
</drag-list>
</div>
<div class="handle-log-box">
<h3>操作记录</h3>
<div class="handle-inner-box">
<p v-for="(item, index) in handleList" :key="`handle_item_${index}`">{{ item }}</p>
</div>
</div>
<div class="res-show-box">
<pre>{{ list1 }}</pre>
</div>
<div class="res-show-box">
<pre>{{ list2 }}</pre>
</div>
</Card>
</div>
</template>
<script>
import DragList from '_c/drag-list'
import { getDragList } from '@/api/data'
export default {
name: 'drag_list_page',
components: {
DragList
},
data () {
return {
list1: [],
list2: [],
dropConClass: {
left: ['drop-box', 'left-drop-box'],
right: ['drop-box', 'right-drop-box']
},
handleList: []
}
},
methods: {
handleChange ({ src, target, oldIndex, newIndex }) {
this.handleList.push(`${src} => ${target}, ${oldIndex} => ${newIndex}`)
}
},
mounted () {
getDragList().then(res => {
this.list1 = res.data
this.list2 = [res.data[0]]
})
}
}
</script>
<style lang="less">
.drag-box-card{
display: inline-block;
width: 600px;
height: 560px;
.drag-item{
margin: 10px;
}
h3{
padding: 10px 15px;
}
.drop-box{
border: 1px solid #eeeeee;
height: 455px;
border-radius: 5px;
}
.left-drop-box{
margin-right: 10px;
}
.right-drop-box{
//
}
}
.handle-log-box{
display: inline-block;
margin-left: 20px;
border: 1px solid #eeeeee;
vertical-align: top;
width: 200px;
height: 500px;
h3{
padding: 10px 14px;
}
.handle-inner-box{
height: ~"calc(100% - 44px)";
overflow: auto;
p{
padding: 14px 0;
margin: 0 14px;
border-bottom: 1px dashed #eeeeee;
}
}
}
.res-show-box{
display: inline-block;
margin-left: 20px;
border: 1px solid #eeeeee;
vertical-align: top;
width: 350px;
height: 570px;
}
</style>

View File

@ -1,14 +1,9 @@
const path = require('path')
const fs = require('fs')
const resolve = dir => {
return path.join(__dirname, dir)
}
const env = process.env.NODE_ENV || 'development'
fs.writeFileSync(path.join(__dirname, './config/env.js'), `export default '${env}'
`)
// 项目部署基础
// 默认情况下,我们假设你的应用将被部署在域的根目录下,
// 例如https://www.my-app.com/
@ -39,4 +34,8 @@ module.exports = {
},
// 打包时不生成.map文件
productionSourceMap: false
// 这里写你调用接口的基础路径来解决跨域如果设置了代理那你本地开发环境的axios的baseUrl要写为 '' ,即空字符串
// devServer: {
// proxy: 'localhost:3000'
// }
}