|  | @@ -5,53 +5,47 @@
 | 
	
		
			
				|  |  |        <auth :auths="['photoAlbum/batchUpdate']"><el-button type="primary" v-if="!sorting" @click="sorting = true">调整排序</el-button></auth>
 | 
	
		
			
				|  |  |        <el-button type="primary" v-if="sorting" @click="setSort()">确定</el-button>
 | 
	
		
			
				|  |  |        <el-button type="primary" v-if="sorting" @click="stopSort()">取消</el-button>
 | 
	
		
			
				|  |  | -      <!-- <el-button type="primary" @click="openUpload()">上传图片</el-button> -->
 | 
	
		
			
				|  |  |      </div>
 | 
	
		
			
				|  |  | -    <el-timeline reverse class="timeline">
 | 
	
		
			
				|  |  | -      <el-timeline-item
 | 
	
		
			
				|  |  | -        placement="top"
 | 
	
		
			
				|  |  | -        v-for="(timeDetail, key) in times"
 | 
	
		
			
				|  |  | -        :key="key"
 | 
	
		
			
				|  |  | -        :timestamp="key">
 | 
	
		
			
				|  |  | -          <draggable :list="timeDetail.list" :disabled="!sorting" class="drag-container">
 | 
	
		
			
				|  |  | -            <div
 | 
	
		
			
				|  |  | -              v-for="item in timeDetail.list"
 | 
	
		
			
				|  |  | -              :key="item.id"
 | 
	
		
			
				|  |  | -              class="item-container"
 | 
	
		
			
				|  |  | -              @click="toDetail(item)"
 | 
	
		
			
				|  |  | -            >
 | 
	
		
			
				|  |  | -              <group
 | 
	
		
			
				|  |  | -                class="item"
 | 
	
		
			
				|  |  | -                :detail="item"
 | 
	
		
			
				|  |  | -                :name="item.name"
 | 
	
		
			
				|  |  | -              />
 | 
	
		
			
				|  |  | -              <auth :auths="['photoAlbum/batchUpdate']">
 | 
	
		
			
				|  |  | -                <div class="ctrls">
 | 
	
		
			
				|  |  | -                  <div class="photoNum">{{item.photoNum}} 张</div>
 | 
	
		
			
				|  |  | -                  <div class="dropdown">
 | 
	
		
			
				|  |  | -                    <el-tooltip effect="dark" content="修改相册" placement="top" :open-delay=".5">
 | 
	
		
			
				|  |  | -                      <i class="el-icon-edit" @click.stop="openForm(item)"></i>
 | 
	
		
			
				|  |  | -                    </el-tooltip>
 | 
	
		
			
				|  |  | -                    <el-tooltip effect="dark" content="删除" placement="top" :open-delay=".5">
 | 
	
		
			
				|  |  | -                      <i class="el-icon-delete" @click.stop="removeItem(item)"></i>
 | 
	
		
			
				|  |  | -                    </el-tooltip>
 | 
	
		
			
				|  |  | -                  </div>
 | 
	
		
			
				|  |  | -                  <!-- <el-dropdown class="dropdown" @command="command => handleCommand(command, item)">
 | 
	
		
			
				|  |  | -                    <span class="el-dropdown-link">
 | 
	
		
			
				|  |  | -                      更多操作 <i class="el-icon-arrow-down el-icon--right"></i>
 | 
	
		
			
				|  |  | -                    </span>
 | 
	
		
			
				|  |  | -                    <el-dropdown-menu slot="dropdown" class="ctrls-dropdown">
 | 
	
		
			
				|  |  | -                      <el-dropdown-item command="realName">重命名</el-dropdown-item>
 | 
	
		
			
				|  |  | -                      <el-dropdown-item command="remove" style="color: red;">删除</el-dropdown-item>
 | 
	
		
			
				|  |  | -                    </el-dropdown-menu>
 | 
	
		
			
				|  |  | -                  </el-dropdown> -->
 | 
	
		
			
				|  |  | +    <el-collapse style="margin-top: 20px;" v-model="activeNames">
 | 
	
		
			
				|  |  | +      <el-collapse-item v-for="(yitem, ykey) in years" :title="ykey + '年 相册'" :key="ykey" :name="ykey">
 | 
	
		
			
				|  |  | +        <empty v-if="yitem.length == 0"/>
 | 
	
		
			
				|  |  | +        <el-timeline reverse class="timeline">
 | 
	
		
			
				|  |  | +          <el-timeline-item
 | 
	
		
			
				|  |  | +            placement="top"
 | 
	
		
			
				|  |  | +            v-for="(timeDetail, key) in yitem"
 | 
	
		
			
				|  |  | +            :key="key"
 | 
	
		
			
				|  |  | +            :timestamp="key">
 | 
	
		
			
				|  |  | +              <draggable :list="timeDetail" :disabled="!sorting" class="drag-container" @change="() => draggableChange(timeDetail, key)">
 | 
	
		
			
				|  |  | +                <div
 | 
	
		
			
				|  |  | +                  v-for="item in timeDetail"
 | 
	
		
			
				|  |  | +                  :key="item.id"
 | 
	
		
			
				|  |  | +                  class="item-container"
 | 
	
		
			
				|  |  | +                  @click="toDetail(item)"
 | 
	
		
			
				|  |  | +                >
 | 
	
		
			
				|  |  | +                  <group
 | 
	
		
			
				|  |  | +                    class="item"
 | 
	
		
			
				|  |  | +                    :detail="item"
 | 
	
		
			
				|  |  | +                    :name="item.name"
 | 
	
		
			
				|  |  | +                  />
 | 
	
		
			
				|  |  | +                  <auth :auths="['photoAlbum/batchUpdate']">
 | 
	
		
			
				|  |  | +                    <div class="ctrls">
 | 
	
		
			
				|  |  | +                      <div class="photoNum">{{item.photoNum}} 张</div>
 | 
	
		
			
				|  |  | +                      <div class="dropdown">
 | 
	
		
			
				|  |  | +                        <el-tooltip effect="dark" content="修改相册" placement="top" :open-delay=".5">
 | 
	
		
			
				|  |  | +                          <i class="el-icon-edit" @click.stop="openForm(item)"></i>
 | 
	
		
			
				|  |  | +                        </el-tooltip>
 | 
	
		
			
				|  |  | +                        <el-tooltip effect="dark" content="删除" placement="top" :open-delay=".5">
 | 
	
		
			
				|  |  | +                          <i class="el-icon-delete" @click.stop="removeItem(item)"></i>
 | 
	
		
			
				|  |  | +                        </el-tooltip>
 | 
	
		
			
				|  |  | +                      </div>
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                  </auth>
 | 
	
		
			
				|  |  |                  </div>
 | 
	
		
			
				|  |  | -              </auth>
 | 
	
		
			
				|  |  | -            </div>
 | 
	
		
			
				|  |  | -          </draggable>
 | 
	
		
			
				|  |  | -      </el-timeline-item>
 | 
	
		
			
				|  |  | -    </el-timeline>
 | 
	
		
			
				|  |  | -    <empty v-if="list.length == 0"/>
 | 
	
		
			
				|  |  | +              </draggable>
 | 
	
		
			
				|  |  | +          </el-timeline-item>
 | 
	
		
			
				|  |  | +        </el-timeline>
 | 
	
		
			
				|  |  | +      </el-collapse-item>
 | 
	
		
			
				|  |  | +    </el-collapse>
 | 
	
		
			
				|  |  |      <el-dialog
 | 
	
		
			
				|  |  |        :title="detail ? '修改相册' : '创建相册'"
 | 
	
		
			
				|  |  |        :visible.sync="formVisible"
 | 
	
	
		
			
				|  | @@ -100,13 +94,20 @@ export default {
 | 
	
		
			
				|  |  |        detail: null,
 | 
	
		
			
				|  |  |        list: [],
 | 
	
		
			
				|  |  |        sorting: false,
 | 
	
		
			
				|  |  | -      times: {}
 | 
	
		
			
				|  |  | +      times: {},
 | 
	
		
			
				|  |  | +      years: {},
 | 
	
		
			
				|  |  | +      activeNames: [],
 | 
	
		
			
				|  |  | +      changed: {}
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    },
 | 
	
		
			
				|  |  |    mounted() {
 | 
	
		
			
				|  |  |      this.FetchList()
 | 
	
		
			
				|  |  |    },
 | 
	
		
			
				|  |  |    methods: {
 | 
	
		
			
				|  |  | +    draggableChange(list, key) {
 | 
	
		
			
				|  |  | +      console.log(list)
 | 
	
		
			
				|  |  | +      this.changed[key] = list
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  |      submited() {
 | 
	
		
			
				|  |  |        this.page = 1
 | 
	
		
			
				|  |  |        this.FetchList()
 | 
	
	
		
			
				|  | @@ -124,21 +125,23 @@ export default {
 | 
	
		
			
				|  |  |      stopSort() {
 | 
	
		
			
				|  |  |        this.sorting = false
 | 
	
		
			
				|  |  |        this.list = this.list.sort((a, b) => a.order - b.order)
 | 
	
		
			
				|  |  | +      this.changed = {}
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      async setSort() {
 | 
	
		
			
				|  |  |        try {
 | 
	
		
			
				|  |  | -        const times = Object.values(this.times)
 | 
	
		
			
				|  |  | +        const times = Object.values(this.changed)
 | 
	
		
			
				|  |  |          let list = []
 | 
	
		
			
				|  |  |          for (const item of times) {
 | 
	
		
			
				|  |  | -          list = list.concat(item.list)
 | 
	
		
			
				|  |  | +          list = list.concat(item.map((item, index) => ({
 | 
	
		
			
				|  |  | +            ...item,
 | 
	
		
			
				|  |  | +            order: index
 | 
	
		
			
				|  |  | +          })))
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        await photoAlbumUpdate(list.map((item, index) => ({
 | 
	
		
			
				|  |  | -          ...item,
 | 
	
		
			
				|  |  | -          order: index
 | 
	
		
			
				|  |  | -        })))
 | 
	
		
			
				|  |  | +        await photoAlbumUpdate(list)
 | 
	
		
			
				|  |  |          this.sorting = false
 | 
	
		
			
				|  |  |          this.$message.success('修改成功')
 | 
	
		
			
				|  |  |          this.FetchList()
 | 
	
		
			
				|  |  | +        this.changed = {}
 | 
	
		
			
				|  |  |        } catch (error) {}
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      getTimestamp(time) {
 | 
	
	
		
			
				|  | @@ -149,26 +152,50 @@ export default {
 | 
	
		
			
				|  |  |          const res = await photoAlbumQueryPage({
 | 
	
		
			
				|  |  |            musicGroupId: this.$route.query.id
 | 
	
		
			
				|  |  |          })
 | 
	
		
			
				|  |  | +        var ys = {}
 | 
	
		
			
				|  |  |          const times = {}
 | 
	
		
			
				|  |  |          for (const item of res.data.rows) {
 | 
	
		
			
				|  |  |            const timeKey = dayjs(item.timeLine).format('YYYY-MM')
 | 
	
		
			
				|  |  | +          const timeYear = dayjs(item.timeLine).format('YYYY')
 | 
	
		
			
				|  |  | +          if (!ys[timeYear]) {
 | 
	
		
			
				|  |  | +            ys[timeYear] = {}
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  |            if (!times[timeKey]) {
 | 
	
		
			
				|  |  |              times[timeKey] = {
 | 
	
		
			
				|  |  |                list: [],
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  | +          if (!ys[timeYear][timeKey]) {
 | 
	
		
			
				|  |  | +            ys[timeYear][timeKey] = []
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          ys[timeYear][timeKey].push({
 | 
	
		
			
				|  |  | +            ...item,
 | 
	
		
			
				|  |  | +            timeKey,
 | 
	
		
			
				|  |  | +            timeYear
 | 
	
		
			
				|  |  | +          })
 | 
	
		
			
				|  |  |            times[timeKey].list.push({
 | 
	
		
			
				|  |  |              ...item
 | 
	
		
			
				|  |  |            })
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        var sortTime = {};
 | 
	
		
			
				|  |  | -        Object.keys(times).sort().map(key => {
 | 
	
		
			
				|  |  | -          sortTime[key] = times[key]
 | 
	
		
			
				|  |  | -          sortTime[key].list.sort()
 | 
	
		
			
				|  |  | -        })
 | 
	
		
			
				|  |  | -        // console.log(times)
 | 
	
		
			
				|  |  | +        // let sortTime = {};
 | 
	
		
			
				|  |  | +        // Object.keys(times).sort().map(key => {
 | 
	
		
			
				|  |  | +        //   sortTime[key] = times[key]
 | 
	
		
			
				|  |  | +        //   sortTime[key].list.sort()
 | 
	
		
			
				|  |  | +        // })
 | 
	
		
			
				|  |  |          this.list = res.data.rows
 | 
	
		
			
				|  |  | -        this.times = sortTime
 | 
	
		
			
				|  |  | +        // this.times = sortTime
 | 
	
		
			
				|  |  | +        const sortyears = {}
 | 
	
		
			
				|  |  | +        const ykeys = Object.keys(ys).sort()
 | 
	
		
			
				|  |  | +        for (const tkey of ykeys) {
 | 
	
		
			
				|  |  | +          const mkeys = Object.keys(ys[tkey]).sort()
 | 
	
		
			
				|  |  | +          const mdata = {}
 | 
	
		
			
				|  |  | +          for (const mkey of mkeys) {
 | 
	
		
			
				|  |  | +            mdata[mkey] = ys[tkey][mkey]
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          sortyears[tkey] = mdata
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        this.years = sortyears
 | 
	
		
			
				|  |  | +        this.activeNames = ykeys[0]
 | 
	
		
			
				|  |  |        } catch (error) {}
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      async removeItem(item) {
 | 
	
	
		
			
				|  | @@ -217,6 +244,7 @@ export default {
 | 
	
		
			
				|  |  |      display: flex;
 | 
	
		
			
				|  |  |      flex-direction: column;
 | 
	
		
			
				|  |  |      cursor: pointer;
 | 
	
		
			
				|  |  | +    height: 112.5px;
 | 
	
		
			
				|  |  |      .photoNum{
 | 
	
		
			
				|  |  |        margin: auto;
 | 
	
		
			
				|  |  |        text-align: center;
 | 
	
	
		
			
				|  | @@ -260,9 +288,13 @@ export default {
 | 
	
		
			
				|  |  |  .timeline{
 | 
	
		
			
				|  |  |    margin-top: 20px;
 | 
	
		
			
				|  |  |    margin-left: 10px;
 | 
	
		
			
				|  |  | +  padding-left: 100px;
 | 
	
		
			
				|  |  |    /deep/ .el-timeline-item__node{
 | 
	
		
			
				|  |  |      background-color: #14928A;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | +  /deep/ .el-timeline-item__timestamp {
 | 
	
		
			
				|  |  | +    margin-left: -100px;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  // .group{
 | 
	
		
			
				|  |  |  // }
 |