<template>
  <div class="article">
    <el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="100px">
      <el-row>
        <el-col :span="12">
          <el-form-item label="文章标题" prop="title">
            <el-input v-model="formData.title" placeholder="请输入文章标题" clearable :style="{width: '100%'}">
            </el-input>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="8">
          <el-form-item label="是否新闻" prop="isTop">
            <el-radio-group v-model="formData.isTop">
              <el-radio-button v-for="(item, index) in isTopOptions" :key="index"
                               :label="item.dictValue">{{ item.dictLabel }}
              </el-radio-button>
            </el-radio-group>
          </el-form-item>
        </el-col>
<!--        <el-col :span="8">-->
<!--          <el-form-item label="是否显示" prop="isView">-->
<!--            <el-radio-group v-model="formData.isView">-->
<!--              <el-radio-button v-for="(item, index) in isViewOptions" :key="index"-->
<!--                               :label="item.dictValue">{{ item.dictLabel }}-->
<!--              </el-radio-button>-->
<!--            </el-radio-group>-->
<!--          </el-form-item>-->
<!--        </el-col>-->
        <el-col :span="8">
          <el-form-item label="是否英语" prop="isEnglish">
            <el-radio-group v-model="formData.isEnglish">
              <el-radio-button v-for="(item, index) in isEnglishOptions" :key="index"
                               :label="item.dictValue">{{ item.dictLabel }}
              </el-radio-button>
            </el-radio-group>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="12">
          <el-row v-show="sistArticleTypeOption.length>0 && approveShow.sist">
            <el-col :span="12">
              <el-form-item label="信息网站">
                <el-select v-model="params.sistArticleType" @change="getSistApprove(params.sistArticleType)"
                           placeholder="请选择文章类型" clearable :style="{width: '100%'}">
                  <el-option
                    v-for="dict in sistArticleTypeOption"
                    :key="dict.id"
                    :label="dict.title"
                    :value="dict.id"
                  />
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="审批人">
                <el-select v-model="params.sistApprove" placeholder="请选择文章类型" clearable :style="{width: '100%'}">
                  <el-option
                    v-for="dict in sistApproveOption"
                    :key="dict.userId"
                    :label="dict.userName"
                    :value="dict.userId"
                  />
                </el-select>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row v-show="labArticleTypeOption.length>0 && approveShow.lab">
            <el-col :span="12">
              <el-form-item label="实验室网站">
                <el-select v-model="params.labArticleType" placeholder="请选择文章类型"
                           @change="getLabApprove(params.labArticleType)" clearable :style="{width: '100%'}">
                  <el-option
                    v-for="dict in labArticleTypeOption"
                    :key="dict.id"
                    :label="dict.title"
                    :value="dict.id"
                  />
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="审批人">
                <el-select v-model="params.labApprove" placeholder="请选择文章类型" clearable :style="{width: '100%'}">
                  <el-option
                    v-for="dict in labApproveOption"
                    :key="dict.userId"
                    :label="dict.userName"
                    :value="dict.userId"
                  />
                </el-select>
              </el-form-item>
            </el-col>
          </el-row>
        </el-col>
        <el-col :span="12" v-show="imgurlShow">
          <el-form-item >
            <UploadFile v-model="formData.imgurl"
                        file-type="image"
                        :v-public="true"
                        :v-data="false"
            />
          </el-form-item>
        </el-col>
      </el-row>

      <el-row>
        <el-col :offset="1" :span="22">

          <el-upload
            class="upload-demo"
            ref="upload"
            :action="uploadFileUrl"
            :headers="headers"
            :on-remove="handleRemove"
            :on-success="handleUploadSuccess"
            :file-list="fileList"
            :auto-upload="true"
          >
            <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
            <div slot="tip" class="el-upload__tip">只能上传jpg/png文件，且不超过500kb</div>
          </el-upload>

        </el-col>
      </el-row>
      <el-row>
        <el-col :offset="1" :span="22">
          <Editor v-model="formData.content" :height="800"/>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="24" class="submitForm">
          <el-form-item size="large">
            <el-button type="success" @click="saveDrafts">保存草稿</el-button>
            <el-button type="primary" @click="submitForm">提交审核</el-button>
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
  </div>
</template>
<script>
// import ArticleFile from './ArticleFile'
import Editor from '@/components/Editor';
import {updateArticle, getArticle, drafts, getArticleType, getArticleApprove} from "@/api/sist/article";
import {Message} from "element-ui";
import UploadFile from '@/views/utils/uploadFile.vue';
import { getArticleNav } from '../../../../api/sist/article'
import { getToken } from '../../../../utils/auth'
import { addFile, delFile } from '../../../../api/sist/file'

export default {
  components: {
    Editor,
    UploadFile,
    // ArticleFile
  },
  props: [],
  data() {
    return {
      isAdmin:false,
      uploadFileUrl: process.env.VUE_APP_BASE_API + '/common/upload', // 上传的图片服务器地址
      headers: {
        Authorization: 'Bearer ' + getToken()
      },
      fileList:[],
      fileMapper:[],
      submit: 1,
      imgurlShow:false,
      formData: {
        id: null,
        title: null,
        isTop: '2',
        isEnglish: '1',
        content: "",
        imgurl:null,
      },
      approveShow: {
        sist: true,
        lab: true,
      },
      params: {
        sistArticleType: null,
        sistApprove: null,
        labArticleType: null,
        labApprove: null,
      },
      sistArticleTypeOption: [],
      labArticleTypeOption: [],
      sistApproveOption: [],
      labApproveOption: [],
      articleTypeOptions: [],
      isTopOptions: [],
      isViewOptions: [],
      isEnglishOptions: [],
      sitetypeOptions: [],
      rules: {
        title: [{
          required: true,
          message: '请输入文章标题',
          trigger: 'blur'
        }],
        isTop: [{
          required: true,
          message: '请选择是否顶置',
          trigger: 'change'
        }],
        isEnglish: [{
          required: true,
          message: '请选择是否英语',
          trigger: 'change'
        }],
        isView: [{
          required: true,
          message: '请选择是否显示',
          trigger: 'change'
        }],
        imgurl: [{
          required: true,
          message: '请选择是否显示',
          trigger: 'change'
        }],
        sitetype: [{
          required: true,
          message: '单选框组不能为空',
          trigger: 'change'
        }],
        publishTime: [{
          required: true,
          message: '请选择发布日期',
          trigger: 'change'
        }],
      },
    }
  },
  computed: {},
  watch: {},
  created() {
    this.approveShow = {
      sist: true,
      lab: true
    }
    this.formData.id = this.$route.params && this.$route.params.articleId;
    if (this.formData.id === undefined) {
      this.formData.id = null;
    } else {
      getArticle(this.formData.id).then(response => {
        this.formData = response.data
        if (this.formData.siteType === '2') {
          this.approveShow.sist = false
          if (null != this.formData.navId){
            this.params.labArticleType = parseInt(this.formData.navId)
            this.getLabApprove(this.params.labArticleType)
          }
        } else if (this.formData.siteType === '1') {
          this.approveShow.lab = false
          if (null != this.formData.navId){
            this.params.sistArticleType = parseInt(this.formData.navId)
            this.getSistApprove(this.params.sistArticleType)
          }
        }
      })
    }
    this.getDicts("article_site_type").then(response => {
      this.sitetypeOptions = response.data;
    });
    this.getDicts("is_top").then(response => {
      this.isTopOptions = response.data;
    });
    this.getDicts("is_view").then(response => {
      this.isViewOptions = response.data;
    });
    this.getDicts("is_english").then(response => {
      this.isEnglishOptions = response.data;
    });
    this.getDicts("article_status").then(response => {
      this.statusOptions = response.data;
    });
    getArticleNav().then(res=>{
      let data = res.data
      this.articleTypeOptions = data
      for (let item of data) {
        if (item.sitetype == 1){
          this.sistArticleTypeOption.push(item)
        }else {
          this.labArticleTypeOption.push(item)
        }
      }
    })
  },
  mounted() {
  },
  methods: {
    handleRemove(file, fileList) {
      let fileId = null
      let index = 0
      for (let item of this.fileMapper) {
        console.log(file.uid, item)
        if (file.uid == item.uid) {
          fileId = item.id
          break
        }
        index++
      }
      console.log(index)
      let that = this
      delFile(fileId).then(res => {
        that.fileMapper.splice(index, 1)
        console.log(that.fileMapper)
        that.$message.success('提交成功!')
      })
    },
    // 上传成功回调
    handleUploadSuccess(res, file) {
      let data = {
        isPublic: '1',
        fileType: '',
        fileName:res.fileName,
        fileAddr: res.fileAddr
      }
      addFile(data).then(res => {
        console.log(res)
        let dataFile = res.data
        let mapperItem = {
          id: dataFile.fileId,
          uid: file.uid,
          url:dataFile.url,
          fileName:data.fileName,
        }
        let fileStr = '<p><a target="_blank" href="'+mapperItem.url+'">'+mapperItem.fileName+'</a><br/></p>'
        this.formData.content = this.formData.content + fileStr
        this.fileMapper.push(mapperItem)
      })
      this.$message.success('提交成功!')
    },

    getSistApprove(navId) {
      this.judgeThumbnail(navId)
      getArticleApprove(navId).then(res => {
        this.sistApproveOption = res.data
      })
    },
    getLabApprove(navId) {
      this.judgeThumbnail(navId)
      getArticleApprove(navId).then(res => {
        this.labApproveOption = res.data
      })
    },
    judgeThumbnail(navId){
      let articleList = this.articleTypeOptions
      for (let article of articleList) {
        console.log(article.title)
        if (navId === article.id && article.isThumbnail == 1){
          this.imgurlShow = true
          return
        }
      }
    },
    submitForm() {
      let that_ = this
      this.$refs['elForm'].validate(valid => {
        if (valid) {
          if ((that_.params.sistArticleType === null || that_.params.sistArticleType === "") && (that_.params.labArticleType === null || that_.params.labArticleType === "")) {
            Message({
              message: "请至少选择一个网站发布文章",
              type: "error",
            })
            return
          } else if ((that_.params.sistArticleType === null || that_.params.sistArticleType === "") && (that_.params.labArticleType !== null || that_.params.labArticleType !== "") && (that_.formData.sistApprove === null || that_.params.sistApprove === "")) {
            Message({
              message: "请选择信息网站的审批人",
              type: "error",
            })
            return
          } else if ((that_.params.sistArticleType === null || that_.params.sistArticleType === "") && (that_.params.labArticleType != null || that_.params.labArticleType !== "") && (that_.params.labApprove === null || that_.params.labApprove === "")) {
            Message({
              message: "请选择实验室网站的审批人",
              type: "error",
            })
            return
          }
        }
        that_.formData.params = that_.params
        if (that_.submit == 0) {
          Message({
            message: "您操作过快",
            type: "error",
          })
        } else {
          that_.submit = 0
          that_.loading = true;
          // this.formData.imgurl = this.form.imgurl.url
          updateArticle(that_.formData).then(response => {
            that_.loading = false;
            if (response.code == 200) {
              that_.msgSuccess("提交审批成功");
              that_.submit = 1
              that_.close();
            }
          }).catch(e => {
            that_.submit = 1
          });
        }
        // TODO 提交表单
      })
    },
    close() {
      this.$store.dispatch("tagsView/delView", this.$route);
      this.$router.push({path: "/SIST/article/", query: {t: Date.now()}})
    },
    saveDrafts() {
      let that = this
      this.$refs['elForm'].validate(valid => {
        drafts(that.formData).then(res => {
          if (that.formData.id == null || this.formData.id == "") {
            that.formData.id = res.data
          }
          if (res.code == 200) {
            that.msgSuccess('保存成功');
          } else {
            that.Message({
              message: res.code,
              type: "error"
            })
          }
        })
      })
    },
  }
}

</script>
<style>
.el-select-dropdown, .el-message {
  z-index: 2147483647 !important;
}
</style>
<style scoped lang="scss">
.article {
  margin-top: 20px;
}

.submitForm {
  margin-top: 20px;
  text-align: center;
}
</style>
