Blame view

src/views/prod/list.vue 4.99 KB
5cb375940   Adam   auto commit the c...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  <template>
    <div class="app-container">
      <!-- Note that row-key is necessary to get a correct row order. -->
      <el-table
        ref="dragTable"
        v-loading="listLoading"
        :data="list"
        row-key="id"
        border
        fit
        highlight-current-row
        style="width: 100%"
      >
        <el-table-column
          align="center"
b58b17e1e   Adam   auto commit the c...
16
          label="PID"
5cb375940   Adam   auto commit the c...
17
18
19
20
21
22
23
24
25
26
          width="65"
        >
          <template slot-scope="{row}">
            <span>{{ row.id }}</span>
          </template>
        </el-table-column>
  
        <el-table-column
          width="180px"
          align="center"
b58b17e1e   Adam   auto commit the c...
27
          label="Date2"
5cb375940   Adam   auto commit the c...
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
        >
          <template slot-scope="{row}">
            <span>{{ row.timestamp | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>
          </template>
        </el-table-column>
  
        <el-table-column
          min-width="300px"
          label="Title"
        >
          <template slot-scope="{row}">
            <span>{{ row.title }}</span>
          </template>
        </el-table-column>
  
        <el-table-column
          width="110px"
          align="center"
          label="Author"
        >
          <template slot-scope="{row}">
            <span>{{ row.author }}</span>
          </template>
        </el-table-column>
  
        <el-table-column
          width="100px"
          label="Importance"
        >
          <template slot-scope="{row}">
            <svg-icon
              v-for="n in + row.importance"
              :key="n"
              icon-class="star"
              class="icon-star"
            />
          </template>
        </el-table-column>
  
        <el-table-column
          align="center"
          label="Readings"
          width="95"
        >
          <template slot-scope="{row}">
            <span>{{ row.pageviews }}</span>
          </template>
        </el-table-column>
  
        <el-table-column
          class-name="status-col"
          label="Status"
          width="110"
        >
          <template slot-scope="{row}">
            <el-tag :type="row.status | statusFilter">
              {{ row.status }}
            </el-tag>
          </template>
        </el-table-column>
  
        <el-table-column
          align="center"
          label="Drag"
          width="80"
        >
          <template slot-scope="{}">
            <svg-icon
              class="drag-handler"
              icon-class="drag"
            />
          </template>
        </el-table-column>
      </el-table>
      <!-- $t is vue-i18n global function to translate lang (lang in @/lang)  -->
      <div class="show-d">
        <el-tag style="margin-right:12px;">{{ $t('table.dragTips1') }} :</el-tag> {{ oldList }}
      </div>
      <div class="show-d">
        <el-tag>{{ $t('table.dragTips2') }} :</el-tag> {{ newList }}
      </div>
    </div>
  </template>
  
  <script>
b58b17e1e   Adam   auto commit the c...
113
114
115
116
117
118
119
  import {
    fetchList
    // fetchPv
    // createUser,
    // updateUser,
    // delUser
  } from '@/api/prod'
5cb375940   Adam   auto commit the c...
120
  import Sortable from 'sortablejs'
b58b17e1e   Adam   auto commit the c...
121
122
123
  // import waves from '@/directive/waves' // waves directive
  // import { parseTime } from "@/utils";
  // import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
5cb375940   Adam   auto commit the c...
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
  
  export default {
    name: 'DragTable',
    filters: {
      statusFilter(status) {
        const statusMap = {
          published: 'success',
          draft: 'info',
          deleted: 'danger'
        }
        return statusMap[status]
      }
    },
    data() {
      return {
        list: null,
        total: null,
        listLoading: true,
        listQuery: {
          page: 1,
          limit: 10
        },
        sortable: null,
        oldList: [],
        newList: []
      }
    },
    created() {
      this.getList()
    },
    methods: {
      async getList() {
b58b17e1e   Adam   auto commit the c...
156
        console.log('test======>', 'prod ..... -----getList')
5cb375940   Adam   auto commit the c...
157
158
        this.listLoading = true
        const { data } = await fetchList(this.listQuery)
b58b17e1e   Adam   auto commit the c...
159
        console.log('data===========getList=======', data)
5cb375940   Adam   auto commit the c...
160
161
        this.list = data.items
        this.total = data.total
b58b17e1e   Adam   auto commit the c...
162
163
164
165
166
167
        // this.listLoading = false;
        // this.oldList = this.list.map(v => v.id);
        // this.newList = this.oldList.slice();
        // this.$nextTick(() => {
        //   this.setSort();
        // });
5cb375940   Adam   auto commit the c...
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
      },
      setSort() {
        const el = this.$refs.dragTable.$el.querySelectorAll(
          '.el-table__body-wrapper > table > tbody'
        )[0]
        this.sortable = Sortable.create(el, {
          ghostClass: 'sortable-ghost', // Class name for the drop placeholder,
          setData: function(dataTransfer) {
            // to avoid Firefox bug
            // Detail see : https://github.com/RubaXa/Sortable/issues/1012
            dataTransfer.setData('Text', '')
          },
          onEnd: evt => {
            const targetRow = this.list.splice(evt.oldIndex, 1)[0]
            this.list.splice(evt.newIndex, 0, targetRow)
  
            // for show the changes, you can delete in you code
            const tempIndex = this.newList.splice(evt.oldIndex, 1)[0]
            this.newList.splice(evt.newIndex, 0, tempIndex)
          }
        })
      }
    }
  }
  </script>
  
  <style>
  .sortable-ghost {
    opacity: 0.8;
    color: #fff !important;
    background: #42b983 !important;
  }
  </style>
  
  <style scoped>
  .icon-star {
    margin-right: 2px;
  }
  .drag-handler {
    width: 20px;
    height: 20px;
    cursor: pointer;
  }
  .show-d {
    margin-top: 15px;
  }
  </style>