xiangpei
2024-12-03 8c3eaeddeff2c9c5a92352e6bf830e5000ff5882
src/views/onlineStudy/file.vue
@@ -31,26 +31,29 @@
      </el-table-column>
      <el-table-column prop="contentType" :formatter="typeFormatter" label="文件类型">
      </el-table-column>
      <el-table-column label="文件内容">
        <template slot-scope="scope">
      <el-table-column label="文件内容" width="240">
        <template slot-scope="scope" v-if="scope.row.contentUrl">
          <video controls v-if="scope.row.contentType === 'video'" :src="'/api/files/' + scope.row.contentUrl.url"
            class="showContent" />
          <img v-if="scope.row.contentType === 'img'" :src="'/api/files/' + scope.row.contentUrl.url"
            class="showContent" />
          <el-link type="primary" v-if="scope.row.contentType === 'pdf'" :src="'/api/files/' + scope.row.contentUrl.url"
            class="showContent">点击查看</el-link>
          <el-image v-if="scope.row.contentType === 'img'" :src="'/api/files/' + scope.row.contentUrl.url"
            class="showContent"></el-image>
          <!-- <img v-if="scope.row.contentType === 'img'" :src="'/api/files/' + scope.row.contentUrl.url"
            class="showContent" /> -->
          <el-link type="primary" v-if="scope.row.contentType === 'pdf'" class="showContent"
            @click="checkPdf('/api/files/' + scope.row.contentUrl.url)">点击查看</el-link>
        </template>
      </el-table-column>
      <el-table-column prop="attachment" label="附件">
        <template slot-scope="scope">
          <el-link type="primary" v-for="item in scope.row.attachment">{{ item.name }}</el-link>
          <div v-for="item in scope.row.attachment" :key="item.url">
            <el-link type="primary" :href="'/api/upload/download?url=' + item.url +'&fileName=' + item.name" >{{ item.name }}</el-link>
          </div>
        </template>
      </el-table-column>
      <el-table-column fixed="right" label="操作" width="140">
        <template slot-scope="scope">
          <el-button @click="handleUpdate(scope.row)" type="primary" size="small"
            style="margin-right: 5px">修改</el-button>
          <el-popconfirm :title="getTitle(scope.row.typeName)" @confirm="remove(scope.row.id)">
            <el-button slot="reference" type="danger" size="small">删除</el-button>
          </el-popconfirm>
@@ -81,11 +84,11 @@
          </el-select>
        </el-form-item>
        <el-form-item label="上传文件(一个)" prop="contentUrl">
          <upload v-show="form.contentType" ref="upload" :fileUrl="form.contentUrl" :fileType="form.contentType"
            :fileSizeLimitM="1024" :uploadNum="1" @getUploadUrl="getUploadUrl" @removeFile="removeFile" />
          <upload v-if="form.contentType" ref="upload" :fileUrl="form.contentUrl" :fileType="form.contentType"
            :fileSizeLimitM="10" :uploadNum="1" @getUploadUrl="getUploadUrl" @removeFile="removeFile" />
        </el-form-item>
        <el-form-item label="附件(最多3个)" prop="attachment">
          <upload :fileSizeLimitM="1024" :uploadNum="3" :fileUrl="form.attachment"
        <el-form-item label="附件(最多10个)" prop="attachment">
          <upload :fileSizeLimitM="10" :uploadNum="10" :fileUrl="form.attachment"
            @getUploadUrl="getUploadAttachmentUrl" @removeFile="removeAttachmentFile" />
        </el-form-item>
      </el-form>
@@ -93,6 +96,10 @@
        <el-button @click="open = false">取 消</el-button>
        <el-button type="primary" @click="handlerSubmit">保 存</el-button>
      </span>
    </el-dialog>
    <el-dialog title="PDF查看" :visible.sync="pdfDialog" width="80%" :before-close="closePdfDialog">
      <vue-office-pdf :src="pdf" @rendered="rendered" style="min-height: 400px; max-height: 800px;"/>
    </el-dialog>
  </div>
</template>
@@ -102,9 +109,11 @@
import OnlineStudyAPI from '@/api/online-study';
import StudyTypeAPI from '@/api/study-type';
import Upload from '@/components/UploadC';
import VueOfficePdf from '@vue-office/pdf';
export default {
  name: 'type',
  components: { Upload, Pagination },
  components: { Upload, Pagination, VueOfficePdf },
  computed: {
    fileContentUrl: () => {
      return this.form ? this.form.contentUrl ? [this.form.contentUrl] : [] : [];
@@ -112,17 +121,19 @@
  },
  data() {
    return {
      pdf: '',
      dialogTitle: '添加学习内容',
      ids: [],
      typeList: [],
      searchForm: {
        pageNum: 1,
        pageSize: 10,
        pageSize: 5,
        typeName: ''
      },
      total: 0,
      tableData: [],
      open: false,
      pdfDialog: false,
      form: {
        contentType: 'video',
        subject: '',
@@ -132,9 +143,9 @@
        temp: []
      },
      rules: {
        contentUrl: [
          { required: true, message: '请上传文件', trigger: 'blur' },
        ],
        // contentUrl: [
        //   { required: true, message: '请上传文件', trigger: 'blur' },
        // ],
        subject: [
          { required: true, message: '请输入主题内容', trigger: 'blur' },
        ],
@@ -148,6 +159,16 @@
    };
  },
  methods: {
    checkPdf(url) {
      this.pdf = url;
      this.pdfDialog = true;
    },
    closePdfDialog() {
      this.pdfDialog = false;
    },
    rendered() {
    },
    fileChange() {
      this.form.contentUrl = [];
    },
@@ -176,15 +197,21 @@
      this.form.attachment = fileList.filter(item => item.name !== fileName);
    },
    getUploadAttachmentUrl(uploadData) {
      this.form.attachment = uploadData;
      if (uploadData) {
        this.form.attachment = uploadData;
      }
    },
    getUploadUrl(uploadData) {
      this.form.contentUrl = uploadData;
      console.log("收到:", uploadData)
      if (uploadData) {
        this.form.contentUrl = uploadData;
      }
    },
    remove(id) {
      OnlineStudyAPI.remove([id]).then(res => {
        if (res.code === 1) {
          this.$message.success('删除成功');
          this.page()
        }
      });
    },
@@ -236,7 +263,7 @@
        contentUrl: [],
        attachment: [],
        temp: []
      }
      };
    },
    handleClose() {
      this.open = false;
@@ -258,7 +285,7 @@
    handleUpdate(row) {
      this.form.id = row.id;
      this.form.contentType = row.contentType;
      this.form.contentUrl = [row.contentUrl] || [];
      this.form.contentUrl = row.contentUrl ? [row.contentUrl] : [];
      this.form.attachment = row.attachment || [];
      this.form.subject = row.subject;
      this.form.belongType = row.belongType;
@@ -279,8 +306,9 @@
<style scoped>
.showContent {
  width: 200px;
  height: 100px;
  width: 100%;
  min-height: 80px;
  object-fit: contain;
}
.warp {
@@ -290,4 +318,9 @@
.search {
  margin-top: 10px;
}
::v-deep .el-image__error {
  position: absolute;
  top: 0;
  bottom: 0;
}
</style>