Skip to content

Commit

Permalink
Merge pull request #930 from iview/2.0
Browse files Browse the repository at this point in the history
2.0
  • Loading branch information
Lison authored Aug 30, 2018
2 parents 342d200 + c4ca29d commit 7becc13
Show file tree
Hide file tree
Showing 13 changed files with 256 additions and 12 deletions.
1 change: 0 additions & 1 deletion config/env.js

This file was deleted.

4 changes: 1 addition & 3 deletions config/url.js
Original file line number Diff line number Diff line change
@@ -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 changes: 8 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
7 changes: 7 additions & 0 deletions src/api/data.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,10 @@ export const getTableData = () => {
method: 'get'
})
}

export const getDragList = () => {
return axios.request({
url: 'get_drag_list',
method: 'get'
})
}
92 changes: 92 additions & 0 deletions src/components/drag-list/drag-list.vue
Original file line number Diff line number Diff line change
@@ -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>
2 changes: 2 additions & 0 deletions src/components/drag-list/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import DragList from './drag-list.vue'
export default DragList
3 changes: 1 addition & 2 deletions src/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
16 changes: 16 additions & 0 deletions src/mock/data.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Mock from 'mockjs'
import { doCustomTimes } from '@/libs/util'
const Random = Mock.Random

export const getTableData = req => {
let tableData = []
Expand All @@ -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: ''
}
}
3 changes: 2 additions & 1 deletion src/mock/index.js
Original file line number Diff line number Diff line change
@@ -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
9 changes: 9 additions & 0 deletions src/router/routers.js
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
113 changes: 113 additions & 0 deletions src/view/components/drag-list/drag-list.vue
Original file line number Diff line number Diff line change
@@ -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>
9 changes: 4 additions & 5 deletions vue.config.js
Original file line number Diff line number Diff line change
@@ -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/
Expand Down Expand Up @@ -39,4 +34,8 @@ module.exports = {
},
// 打包时不生成.map文件
productionSourceMap: false
// 这里写你调用接口的基础路径,来解决跨域,如果设置了代理,那你本地开发环境的axios的baseUrl要写为 '' ,即空字符串
// devServer: {
// proxy: 'localhost:3000'
// }
}

0 comments on commit 7becc13

Please sign in to comment.