123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- <template>
- <el-form-item label="排序">
- <!-- <draggable v-model="orderByStrs" :group="{name: 'orderBy',pull: false, put: false}" style="display: inline-block;">
- <el-tag v-for="(item,index) in orderByStrs" :key="index" closable size="small" @close="handleCloseOrderBy">
- {{ item }}
- </el-tag>
- </draggable> -->
- <draggable v-model="orderByStrs" :group="{name: 'orderBy',pull: false, put: false}" style="display: inline-block;">
- <el-tag v-for="(item,index) in orderByStrs" :key="index" closable size="small" @close="handleCloseOrderBy" style="display:none">
- {{ item }}
- </el-tag>
- <el-tag v-for="(item,index) in orderByStrs1" :key="index" closable size="small" @close="handleCloseOrderBy">
- {{ item }}
- </el-tag>
- </draggable>
- <el-cascader v-model="orderBy" :options="orderByOption" :disabled="orderByOption.length===0" size="mini" :placeholder="$t('chart.selectOrderBy')" style="width: 150px;" @change="handleOrderByChange" />
- </el-form-item>
- </template>
- <script>
- import draggable from 'vuedraggable'
- import store from '../store'
- export default {
- components: { draggable },
- props: {
- value: {
- required: true,
- type: Array
- }
- },
- data() {
- return {
- orderBy: [],
- orderBy1: [],
- orderByStrs1: []
- }
- },
- computed: {
- allSelected() {
- return store.state.caculCols.concat(store.state.dimensions)
- },
- orderByStrs: {
- set(value) {
- this.$emit('input', value)
- },
- get() {
- return this.value
- }
- },
- orderByOption() {
- return this.allSelected.map(col => {
- return {
- value: col.Column,
- label: col.Comment,
- children: [{
- value: 'desc',
- label: '降序'
- }, {
- value: 'asc',
- label: '正序'
- }]
- }
- })
- }
- },
- watch: {
- 'store.state.dimensions': function (value) {
- this.watchHandler(value)
- },
- 'store.state.caculCols': function (value) {
- this.watchHandler(value)
- }
- },
- methods: {
- watchHandler(cols) {
- console.log("cols", cols)
- this.orderByStrs.forEach((orderByStr, index) => {
- console.log('orderByStr', orderByStr)
- const colName = orderByStr.split(' ')[0]
- console.log('colName', colName)
- if (!cols.findIndex(col => col.Column === colName)) {
- this.orderByStrs.splice(index, 1)
- }
- })
- },
- // handleOrderByChange(value) {
- // console.log('handleOrderByChange:', value)
- // this.orderBy = []
- // const index = this.orderByStrs.findIndex(orderBy => orderBy.indexOf(value[0]) >= 0)
- // if (index >= 0) {
- // this.orderByStrs.splice(index, 1, `${value[0]} ${value[1]}`)
- // } else {
- // this.orderByStrs.push(`${value[0]} ${value[1]}`)
- // }
- // console.log('handleOrderByChange:', value)
- // console.log('this.orderByStrs', this.orderByStrs)
- // },
- handleOrderByChange(value) {
- console.log('handleOrderByChange:', value)
- console.log('orderBy:', this.orderBy)
- console.log('orderByOption:', this.orderByOption)
- var china_value = ""
- this.orderByOption.forEach(function (i, j) {
- if (i.value == value[0]) {
- china_value = i.label
- }
- })
- console.log('china_value:', china_value)
- this.orderBy = []
- const index = this.orderByStrs.findIndex(orderBy => orderBy.indexOf(value[0]) >= 0)
- if (index >= 0) {
- this.orderByStrs.splice(index, 1, `${value[0]} ${value[1]}`)
- } else {
- this.orderByStrs.push(`${value[0]} ${value[1]}`)
- }
- this.orderBy1 = []
- if (value[1] == 'desc') {
- var sort = '降序'
- } else {
- var sort = '正序'
- }
- const index1 = this.orderByStrs1.findIndex(orderBy1 => orderBy1.indexOf(china_value) >= 0)
- if (index1 >= 0) {
- this.orderByStrs1.splice(index1, 1, `${china_value} ${sort}`)
- } else {
- this.orderByStrs1.push(`${china_value} ${sort}`)
- }
- console.log('handleOrderByChange:', value)
- console.log('this.orderByStrs', this.orderByStrs)
- console.log('this.orderByStrs1', this.orderByStrs1)
- },
- handleCloseOrderBy(value) {
- this.orderByStrs.splice(this.orderByStrs.indexOf(value), 1)
- this.orderByStrs1.splice(this.orderByStrs1.indexOf(value), 1)
- }
- }
- }
- </script>
|