<template>
  <div class="commit-page-content">
    <van-form @submit="onSubmit">
      <div class="field-title">
        <span>基本信息</span>
      </div>
      <div class="input-box">
        <van-field
          class="field-form-item"
          readonly
          clickable
          required
          name="boardName"
          input-align="right"
          :value="form.boardName"
          label="展板名称"
          placeholder="请选择展板"
          :right-icon="showBoard ? 'arrow-up' : 'arrow-down'"
          @click="showBoard = true"
          :rules="[{ required: true ,message: '请选择展板' ,trigger:'change'}]"
        />
        <van-popup v-model="showBoard" position="bottom">
          <van-picker
            show-toolbar
            :columns="boardNameList"
            @confirm="onConfirmBoard"
            @cancel="showBoard = false"
          />
        </van-popup>
        <van-field
          label="账户名"
          v-model="form.username"
          placeholder="请输入账户名称"
          readonly
          input-align="right"
        />
        <van-field
          class="field-form-item"
          readonly
          clickable
          required
          name="studyTime"
          input-align="right"
          :value="form.studyTime || ''"
          label="学习时间"
          placeholder="请选择学习时间"
          :right-icon="form.studyTime || cellIcon"
          @click="onDisplay"
          :rules="[{ required: true ,message: '请选择学习时间',trigger:'change' }]"
        />
        <van-popup v-model="show" position="bottom">
          <van-datetime-picker
            v-model="currentDate"
            type="datetime"
            title="选择学习时间"
            :formatter="formatter"
            @confirm="onConfirm"
            @cancel="onClose"
          />
        </van-popup>
        <van-field
          required
          label="观影人数"
          v-model="form.num"
          placeholder="请输入观影人数"
          input-align="right"
          :rules="[{ pattern: /^[1-9]\d{0,9}$/, message: '请输入正确内容,最多10位数',trigger:'blur'}]"
        />
        <!-- <van-field
          required
          label="管理员账号"
          v-model="form.name"
          placeholder="请输入管理员账号"
          input-align="right"
          :rules="[{ required: true }]"
        />
        <van-field
          required
          type="password"
          label="管理员密码"
          v-model="form.password"
          placeholder="请输入管理员密码"
          input-align="right"
          :rules="[{ required: true }]"
        /> -->
      </div>
      <div class="field-title">
        <span>上传视频</span>
      </div>
      <div class="field-content">
        <div class="upload-content">
          <div class="uplaod-video" style="min-height: 60px">
            <van-uploader
              :max-count="3"
              v-model="fileList"
              accept="video/*"
              :before-read="beforeVideo"
              :after-read="uploadVideo"
              :before-delete="deleteVideo"
              multiple
            >
              <div class="avatar-plus">
                <span>+</span>
              </div>
            </van-uploader>
          </div>
          <div class="tips">
            <img src="@/assets/images/applets/tip.png" alt />
            <span>
              最多支持上传
              <b>3</b> 段视频,每段大小不能超过 <b>10MB</b>。
            </span>
          </div>
        </div>
      </div>
      <div class="field-title">
        <span>上传照片</span>
      </div>
      <div class="field-content">
        <div class="upload-content">
          <div class="uplaod-video" style="min-height: 60px">
            <van-uploader
              :max-count="6"
              accept="image/png, image/jpeg"
              v-model="imgFileList"
              multiple
              :after-read="uploadImg"
              :before-delete="deleteImg"
            >
              <div class="avatar-plus">
                <span>+</span>
              </div>
            </van-uploader>
          </div>
          <div class="tips">
            <img src="@/assets/images/applets/tip.png" alt />
            <span>
              最多支持上传
              <b>6</b> 张照片
            </span>
          </div>
        </div>
      </div>
      <div class="field-title">
        <span>有话对党说</span>
      </div>
      <div class="field-content">
        <van-field
          required
          class="field-textarea"
          type="textarea"
          v-model="form.content"
          maxlength="500"
          show-word-limit
          placeholder="我有话对党说..."
          :rules="[{ required: true ,message: '请输入内容,最多500个字'}]"
        />
      </div>
      <div class="commit-page-button">
        <van-button type="default" native-type="submit">提交</van-button>
      </div>
    </van-form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      form: {
        username: JSON.parse(sessionStorage.getItem("userInfo")).orgName,
        organId: JSON.parse(sessionStorage.getItem("userInfo")).orgId,
        images: [], // 文件地址
        videos: [], // 文件地址
      },
      currentDate: new Date(),
      boardList: [],
      boardNameList: [],
      showBoard: false,
      cellIcon: require("@/assets/images/applets/date.png"),
      show: false,
      fileList: [], // 预览
      imgFileList: [],// 预览
      videoIds:[], // 文件ID
      imageIds:[] // 文件ID
    };
  },
  mounted() {
    this.getBoardList();
  },
  methods: {
    // 获取所属单位
    getBoardList() {
      let vm = this;
      vm.$https({
        url: "exhibitionBoard/getList",
        method: "post",
        authType: this.backToken,
      })
        .then((res) => {
          if (res.data.resultCode === "200") {
            vm.boardList = res.data.data;
            vm.boardNameList = res.data.data.map((item) => item.name);
          }
        })
        .catch(function (err) {
          console.log(err);
        });
    },
    // 下拉框确认按钮
    onConfirmBoard(value, index) {
      this.form.boardName = value;
      this.form.boardId = this.boardList[index].id;
      this.showBoard = false;
    },
    // 打开日历
    onDisplay() {
      this.show = true;
    },
    // 关闭日历
    onClose() {
      this.show = false;
    },
    // 确认日历
    onConfirm(event) {
      this.show = false;
      this.form.studyTime = this.timeStamp2String(event);
    },
    // 格式转化
    timeStamp2String(time) {
      var datetime = new Date();
      datetime.setTime(time);
      var year = datetime.getFullYear();
      var month =
        datetime.getMonth() + 1 < 10
          ? "0" + (datetime.getMonth() + 1)
          : datetime.getMonth() + 1;
      var date =
        datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();
      var hour =
        datetime.getHours() < 10
          ? "0" + datetime.getHours()
          : datetime.getHours();
      var minute =
        datetime.getMinutes() < 10
          ? "0" + datetime.getMinutes()
          : datetime.getMinutes();
      var second =
        datetime.getSeconds() < 10
          ? "0" + datetime.getSeconds()
          : datetime.getSeconds();
      return (
        year +
        "-" +
        month +
        "-" +
        date +
        " " +
        hour +
        ":" +
        minute +
        ":" +
        second
      );
    },
    formatter(type, value) {
      if (type === "year") {
        return `${value}年`;
      } else if (type === "month") {
        return `${value}月`;
      } else if (type === "day") {
        return `${value}日`;
      } else if (type === "hour") {
        return `${value}时`;
      }
      return `${value}分`;
    },
    // 删除图片
    async deleteImg(file,detail){
      this.form.images.splice(detail.index,1)
      const id = this.imageIds[detail.index]
      this.imageIds.splice(detail.index,1)
      await this.deleteInterface(id)
    },
    // 上传图片
    uploadImg(file) {
      let param = new FormData();
      if(Array.isArray(file)){
        file.forEach(item=>{
          param.append("file", item.file)
        })
      }else{
        param.append("file", file.file)
      }
      this.uploadImgInterface(param)
    },
    // 上传图片接口
    uploadImgInterface(param){
      let vm = this;
      vm.$https(
        {
          url: "file/datum/upload",
          method: "post",
          authType: this.backToken,
        },
        param
      )
        .then((res) => {
          if(res.data.resultCode==='200'){
            this.$toast('上传成功')
            res.data.data.fileList.forEach(item=>{
              this.form.images.push(item.fileUrl);
              this.imageIds.push(item.id);
            })
          }else{
            this.$toast(res.data.message)
          }
        })
        .catch(function (err) {
          console.log(err);
        });
    },
    // 上传视频size限制
    beforeVideo(file) {
      let isOver = true
      if(Array.isArray(file)){
        isOver = file.every(item=>item <= 10*1024*1024)
      }else{
        isOver = file.size <= 10*1024*1024
      }
      if(!isOver){
        this.$toast.fail("上传文件大小不能超过 10MB");
        return false
      }else{
        return true
      }
    },
    // 删除视频
    async deleteVideo(file,detail){
      this.form.videos.splice(detail.index,1)
      const id = this.videoIds[detail.index]
      this.videoIds.splice(detail.index,1)
      await this.deleteInterface(id)
    },
    // 上传视频
    uploadVideo(file) {
      let param = new FormData();
      if(Array.isArray(file)){
        file.forEach(item=>{
          param.append("file", item.file)
        })
      }else{
        param.append("file", file.file)
      }
      this.uploadVideoInterface(param)
    },
    // 上传视频接口
    uploadVideoInterface(param){
      let vm = this;
      vm.$https(
        {
          url: "file/video/upload",
          method: "post",
          authType: this.backToken,
        },
        param
      )
        .then((res) => {
          if(res.data.resultCode==='200'){
            this.$toast('上传成功')
            res.data.data.fileList.forEach(item=>{
              this.form.videos.push(item.fileUrl);
              this.videoIds.push(item.id);
            })
          }else{
            this.$toast(res.data.message)
          }
        })
        .catch(function (err) {
          console.log(err);
        });
    },
    // 删除接口
    deleteInterface(id){
        this.$https(
        {
          url: "file/delete/"+id,
          method: "delete",
          authType: this.backToken,
        })
        .then((res) => {
          if(res.data.resultCode==='200'){
            return true
          }else{
            this.$toast(res.data.message)
            return false
          }
        })
        .catch(function (err) {
          console.log(err);
        });
    },
    
    // 提交数据
    onSubmit() {
      let vm = this;
      let param = {};
      for (let key in this.form) {
        if (this.form[key]) {
          param[key] = this.form[key];
        }
      }
      param.images = [...param.images, ...param.videos];
      param.images = param.images.join(",");
      delete param.videos;
      vm.$https(
        {
          url: "interaction/add",
          method: "post",
          authType: this.backToken,
        },
        vm.$qs.stringify(param)
      )
        .then((res) => {
          if (res.data.resultCode === "200") {
            this.$router.replace({path:"/success",query:{txt:'提交成功',url:'/commit'}})
          } else {
            this.$toast(res.data.message)
          }
        })
        .catch(function (err) {
          console.log(err)
        });
    },
  },
};
</script>

<style lang="scss" scoped>
.commit-page-content {
  padding: 24px 20px;
  height: calc(100% - 200px);
  overflow-y: auto;
  .field-title {
    position: relative;
    padding-bottom: 20px;
    span {
      color: #333;
      font-size: 16px;
      line-height: 20px;
      &:before {
        content: "";
        height: 16px;
        width: 4px;
        border-radius: 1px;
        display: inline-block;
        background: #a4151d;
        position: absolute;
        left: -20px;
        top: 2px;
      }
    }
  }
  .field-content {
    padding-bottom: 32px;
    .upload-content {
      .avatar-plus {
        width: 48px;
        height: 48px;
        line-height: 48px;
        text-align: center;
        background-color: #f5f5f5;
        border-radius: 1px;
        font-size: 25px;
        color: #999;
        margin-bottom: 12px;
      }
      .tips {
        img {
          width: 12px;
          height: 12px;
          vertical-align: middle;
        }
        span {
          margin-left: 4px;
          color: #666;
          font-size: 12px;
          vertical-align: middle;
        }
      }
    }
  }
  .input-box {
    padding-bottom: 32px;
    .van-cell {
      line-height: 40px;
      padding-left: 0;
      padding-right: 0;
      border-bottom: 1px solid #eee;
    }
    .van-cell:after {
      display: none;
    }
  }
  .commit-page-button {
    position: fixed;
    bottom: 50px;
    left: 0;
    right: 0;
    padding: 0 40px;
    background-color: #fff;
    box-sizing: border-box;
    padding-top: 10px;
    padding-bottom: 10px;
    width: 100%;
    .van-button--normal {
      background: #a4151d;
      border-radius: 4px;
      height: 40px;
      width: 100%;
      color: #fff;
      border: none;
      font-size: 16px;
    }
  }
  .van-field__control,
  .van-cell__value {
    color: #333;
  }
  ::v-deep .van-field__error-message {
    text-align: right;
    background: #fff;
  }
  ::v-deep .field-textarea {
    min-height: 80px;
    padding: 0;
    margin-bottom: 150px;
    .van-field__value {
      background-color: #f5f5f5;
    }
    .van-cell {
      padding: 0;
    }
  }
  ::v-deep .van-cell--required::before {
    left: -10px;
    color:#A4151D;
  }
 
}
</style>