<!-- 报事上报 -->
<template>
  <scroll-view class="bs-page" scroll-y="true">
    <image src="/static/img/bs-bg.png" class="contentImg"></image>
    <view class="conHead">
      <u-cell-group :border="false">
        <u-cell
          title="反馈类型"
          :isLink="true"
          :border="false"
          :value="form.feedbackTypeName"
          @click="wtlxShow = true"
        >
          <view slot="icon" style="color: #f93838">*</view>
        </u-cell>
      </u-cell-group>
    </view>
    <view class="conItem">
      <u-form labelPosition="left">
        <u-form-item
          labelAlign="right"
          labelWidth="100px"
          label="问题描述"
          :borderBottom="false"
          required
          labelPosition="top"
        >
          <u--textarea
            v-model="form.content"
            placeholder="请输入内容"
            border="none"
            height="300rpx"
            custom-style="background:#f7f7f7;border-radius:12rpx;padding:16rpx;margin-top:16rpx;"
          ></u--textarea>
        </u-form-item>

        <u-form-item
          labelAlign="right"
          labelWidth="120px"
          label="上传图片/视频"
          :borderBottom="false"
          labelPosition="top"
        >
          <u-upload
            :max-count="10"
            :multiple="true"
            :preview-full-image="true"
            :deletable="true"
            :show-upload-list="true"
            :fileList="fileList"
            :auto-upload="false"
            accept="all"
            :maxSize="10 * 1024 * 1024"
            @oversize="oversize"
            @delete="onDelete"
            :disabled="true"
          >
            <view class="custom-upload-btn" @click.stop="chooseMedia">
              <view class="icon-box">
                <image
                  class="camera-icon"
                  src="/static/img/camera-icon.png"
                  mode="aspectFill"
                ></image>
              </view>
              <view class="upload-tips">点击上传</view>
            </view>
          </u-upload>
        </u-form-item>
      </u-form>
    </view>

    <view class="btn" @click="handleBtn">提交</view>

    <u-action-sheet
      :show="wtlxShow"
      :actions="feedbackTypeList"
      title="请选择反馈类型"
      @close="wtlxShow = false"
      @select="handleFeedbackSelect"
    >
    </u-action-sheet>
  </scroll-view>
</template>

<script>
import { addFeedback } from "@/common/api";
import { uploadImage } from "@/pages/api";
import { mapState } from "vuex";

export default {
  data() {
    return {
      wtlxShow: false,
      feedbackTypeList: [
        { dictValue: "1", name: "安全问题" },
        { dictValue: "2", name: "卫生问题" },
        { dictValue: "3", name: "服务问题" },
        { dictValue: "4", name: "噪音问题" },
        { dictValue: "5", name: "体验问题" },
        { dictValue: "6", name: "其他" },
      ],
      form: {
        feedbackType: "",
        feedbackTypeName: "",
        content: "",
        imageList: [],
      },
      fileList: [],
    };
  },
  onLoad() {
    const userInfo = uni.getStorageSync("userInfo");
    if (userInfo) {
      this.$store.dispatch("user/setUserInfo", userInfo);
    }
  },
  computed: {
    ...mapState("user", ["userInfo"]),
  },
  methods: {
    chooseMedia() {
      uni.chooseMedia({
        count: 10 - this.fileList.length,
        mediaType: ["image", "video"],
        sourceType: ["album", "camera"],
        maxDuration: 60,
        camera: "back",
        success: async (res) => {
          // 添加文件大小检查
          const files = res.tempFiles;
          // 检查每个文件的大小
          const oversizeFiles = files.filter(
            (file) => file.size > 10 * 1024 * 1024
          );
          if (oversizeFiles.length > 0) {
            this.$u.toast("请选择10MB以内大小的图片/视频！");
            return;
          }
          uni.showLoading({ title: "上传中...", mask: true });
          try {
            const files = res.tempFiles;
            for (let i = 0; i < files.length; i++) {
              const file = files[i];
              const filePath = file.tempFilePath;
              const type =
                file.fileType ||
                (filePath.match(/\.(mp4|mov|avi|wmv|flv|mkv)$/i)
                  ? "video"
                  : "image");
              // 走上传接口
              const uploadRes = await uploadImage(filePath);
              this.fileList.push({
                url: uploadRes.data?.url || uploadRes.url || uploadRes.path,
                name: uploadRes.data?.name || uploadRes.name || "",
                type: type,
                status: "success",
              });
            }
            // 更新 form.imageList
            this.form.imageList = this.fileList.map((v) => ({
              name: v.name || "",
              format: v.type,
              url: v.url,
            }));
          } catch (e) {
            uni.showToast({ title: "上传失败", icon: "none" });
          } finally {
            uni.hideLoading();
          }
        },
        fail: () => {
          uni.hideLoading();
        },
      });
    },

    //图片超过大小时取消上传
    oversize(e) {
      this.$u.toast("请传10MB以内大小的图片/视频！");
      return false;
    },

    onDelete(event) {
      this.fileList.splice(event.index, 1);
      var arry = [];
      this.fileList.filter((v, i) => {
        arry.push({
          name: v.name || "",
          format: v.type,
          url: v.url,
        });
      });
      this.form.imageList = arry;
    },

    handleBtn() {
      console.log(this.form);
      if (!this.form.feedbackType) {
        uni.showToast({
          icon: "none",
          title: "请选择反馈类型",
        });
        return;
      } else if (!this.form.content) {
        uni.showToast({
          icon: "none",
          title: "请输入问题描述",
        });
        return;
      }

      let parmas = JSON.parse(JSON.stringify(this.form));
      delete parmas.feedbackTypeName;

      // addFeedback(parmas).then((res) => {
      //   if (res.code == 200) {
      //     uni.showToast({
      //       icon: "success",
      //       title: "提交成功!",
      //       success: () => {
      //         setTimeout(() => {
      //           uni.switchTab({
      //             url: "/pages/tabBar/work/index",
      //             success: () => {
      //               this.fileList = [];
      //               this.form = {
      //                 feedbackType: "",
      //                 feedbackTypeName: "",
      //                 content: "",
      //                 imageList: [],
      //               };
      //             },
      //           });
      //         }, 1500);
      //       },
      //     });
      //   } else {
      //     uni.showToast({
      //       title: res.msg || "提交失败",
      //       icon: "none",
      //     });
      //   }
      // });
    },

    handleFeedbackSelect(e) {
      this.form.feedbackTypeName = e.name;
      this.form.feedbackType = e.dictValue;
    },
  },
};
</script>

<style lang="scss" scoped>
.bs-page {
  width: 100%;
  height: 100vh;
  padding-bottom: 50rpx;
  box-sizing: border-box;
  background: #f8f8f8;
  position: relative;
}

.contentImg {
  position: absolute;
  left: 0rpx;
  top: 0rpx;
  width: 100%;
  height: 280rpx;
  z-index: 0;
}

.bsTitle {
  width: 100%;
  color: rgba(16, 16, 16, 1);
  font-size: 38rpx;
  font-weight: bold;
  margin-left: 30rpx;
  margin-top: 40rpx;
}

.bsTips {
  width: 100%;
  color: rgba(102, 102, 102, 1);
  font-size: 26rpx;
  margin-left: 30rpx;
  margin-top: 10rpx;
}
.conHead {
  width: calc(100% - 40rpx);
  margin-left: 20rpx;
  border-radius: 20rpx;
  background: #fff;
  padding: 10rpx 0rpx;
  margin-top: 50rpx;
  box-sizing: border-box;
  position: relative;
  z-index: 1;
}
.conItem {
  width: calc(100% - 40rpx);
  border-radius: 20rpx;
  margin-left: 20rpx;
  background-color: rgba(255, 255, 255, 1);
  margin-top: 20rpx;
  padding: 24rpx 36rpx;
  box-sizing: border-box;
  position: relative;
  z-index: 1;
}

.btn {
  width: 414rpx;
  height: 70rpx;
  line-height: 70rpx;
  border-radius: 600rpx;
  background: linear-gradient(
    86.25deg,
    rgba(13, 198, 198, 1) 3.03%,
    rgba(19, 194, 194, 1) 3.03%,
    rgba(70, 219, 213, 1) 96.43%
  );
  color: rgba(255, 255, 255, 1);
  font-size: 34rpx;
  text-align: center;
  margin: auto;
  margin-top: 40rpx;
  bottom: -120rpx;
  position: relative;
  z-index: 1;
}

.custom-upload-btn {
  width: 160rpx;
  height: 160rpx;
  background: #fafafa;
  border: 2rpx solid #f0f0f0;
  border-radius: 16rpx;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  margin: 20rpx 16rpx 0 0;
}

.icon-box {
  width: 60rpx;
  height: 60rpx;
  background: #ceeced;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
}

.camera-icon {
  width: 36rpx;
  height: 36rpx;
}

.upload-tips {
  color: #bbb;
  font-size: 24rpx;
  margin-top: 8rpx;
}

.u-upload__wrap {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  margin-top: 20rpx;
}

.u-upload__preview {
  border-radius: 16rpx;
  overflow: hidden;
  margin-right: 16rpx;
  margin-bottom: 16rpx;
}
</style>

<style lang="scss">
.bs-page {
  .u-form-item__body__left__content__required {
    font-size: 24rpx !important;
  }
}
</style>
