|
@@ -0,0 +1,310 @@
|
|
|
+<template>
|
|
|
+ <div class="app-container">
|
|
|
+ <!-- 查询条件 -->
|
|
|
+ <el-form
|
|
|
+ :model="queryParams"
|
|
|
+ ref="queryRef"
|
|
|
+ :inline="true"
|
|
|
+ label-width="68px"
|
|
|
+ >
|
|
|
+ <el-form-item label="素材名称" prop="materialName">
|
|
|
+ <el-input
|
|
|
+ v-model="queryParams.materialName"
|
|
|
+ placeholder="请输入素材名称"
|
|
|
+ clearable
|
|
|
+ style="width: 240px"
|
|
|
+ @keyup.enter="handleQuery"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item>
|
|
|
+ <el-button type="primary" icon="Search" @click="handleQuery"
|
|
|
+ >搜索</el-button
|
|
|
+ >
|
|
|
+ <el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <!-- 操作按钮 -->
|
|
|
+ <el-row :gutter="10" class="mb8">
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button type="primary" plain icon="Plus" @click="handleAdd"
|
|
|
+ >新增</el-button
|
|
|
+ >
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button
|
|
|
+ type="success"
|
|
|
+ plain
|
|
|
+ icon="Edit"
|
|
|
+ :disabled="single"
|
|
|
+ @click="handleUpdate"
|
|
|
+ >修改</el-button
|
|
|
+ >
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button
|
|
|
+ type="danger"
|
|
|
+ plain
|
|
|
+ icon="Delete"
|
|
|
+ :disabled="multiple"
|
|
|
+ @click="handleDelete"
|
|
|
+ >删除</el-button
|
|
|
+ >
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <!-- 列表 -->
|
|
|
+ <el-table
|
|
|
+ border
|
|
|
+ v-loading="loading"
|
|
|
+ :data="libraryList"
|
|
|
+ @selection-change="handleSelectionChange"
|
|
|
+ >
|
|
|
+ <el-table-column type="selection" width="100" align="center" />
|
|
|
+ <el-table-column type="index" label="序号" width="100" align="center" />
|
|
|
+ <el-table-column prop="materialName" label="素材名称" align="center" />
|
|
|
+ <!-- 素材类型,0-视频、1-图片 -->
|
|
|
+ <el-table-column prop="materialType" label="素材类型" align="center">
|
|
|
+ <template #default="{ row }">
|
|
|
+ {{ libraryType[row.materialType] }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <!-- 0=未发布,1=发布 -->
|
|
|
+ <el-table-column prop="status" label="状态" align="center">
|
|
|
+ <template #default="{ row }">
|
|
|
+ {{ libraryStatus[row.status] }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" align="center">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <el-button type="primary" icon="Edit" link @click="handleUpdate(row)"
|
|
|
+ >编辑</el-button
|
|
|
+ >
|
|
|
+ <el-button type="danger" icon="Delete" link @click="handleDelete(row)"
|
|
|
+ >删除</el-button
|
|
|
+ >
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <pagination
|
|
|
+ v-show="total > 0"
|
|
|
+ :total="total"
|
|
|
+ v-model:page="queryParams.pageNum"
|
|
|
+ v-model:limit="queryParams.pageSize"
|
|
|
+ @pagination="getList"
|
|
|
+ />
|
|
|
+ <!-- 新增编辑素材 -->
|
|
|
+ <el-dialog
|
|
|
+ :title="dialogTitle"
|
|
|
+ v-model="materialOpen"
|
|
|
+ width="800"
|
|
|
+ append-to-body
|
|
|
+ >
|
|
|
+ <el-form
|
|
|
+ v-loading="detailLoading"
|
|
|
+ :model="form"
|
|
|
+ ref="dataForm"
|
|
|
+ :rules="rules"
|
|
|
+ label-width="100"
|
|
|
+ >
|
|
|
+ <el-form-item label="素材名称" prop="materialName">
|
|
|
+ <el-input v-model="form.materialName" placeholder="请输入素材名称" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="素材类型" prop="materialType">
|
|
|
+ <el-select v-model="form.materialType" placeholder="请选择素材类型">
|
|
|
+ <el-option :value="0" label="视频" />
|
|
|
+ <el-option :value="1" label="图片" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="素材文件">
|
|
|
+ <el-upload
|
|
|
+ ref="uploadRef"
|
|
|
+ action=""
|
|
|
+ :file-list="form.fileList"
|
|
|
+ :on-change="uploadChange"
|
|
|
+ :on-remove="uploadRemove"
|
|
|
+ :auto-upload="false"
|
|
|
+ :limit="1"
|
|
|
+ >
|
|
|
+ <template #trigger>
|
|
|
+ <el-button type="primary">选择文件</el-button>
|
|
|
+ </template>
|
|
|
+ <template #tip>
|
|
|
+ <div class="el-upload__tip">仅支持上传图片或视频文件</div>
|
|
|
+ </template>
|
|
|
+ </el-upload>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <template #footer>
|
|
|
+ <div class="dialog-footer">
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ :loading="confirmLoading"
|
|
|
+ @click="dialogSubmit"
|
|
|
+ >确 定</el-button
|
|
|
+ >
|
|
|
+ <el-button :loading="confirmLoading" @click="dialogCancel"
|
|
|
+ >取 消</el-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup name="SourceMaterialManage">
|
|
|
+import {
|
|
|
+ getLibraryList,
|
|
|
+ libraryAdd,
|
|
|
+ getLibraryDetail,
|
|
|
+ libraryDelete,
|
|
|
+} from "@/api/interactVideo/sourceMaterialManage";
|
|
|
+const { proxy } = getCurrentInstance();
|
|
|
+
|
|
|
+const loading = ref(false);
|
|
|
+const confirmLoading = ref(false);
|
|
|
+const detailLoading = ref(false);
|
|
|
+const libraryList = ref([]);
|
|
|
+const total = ref(0);
|
|
|
+const ids = ref([]);
|
|
|
+const single = ref(true);
|
|
|
+const multiple = ref(true);
|
|
|
+const dialogTitle = ref("新增素材");
|
|
|
+const materialOpen = ref(false);
|
|
|
+const data = reactive({
|
|
|
+ form: {
|
|
|
+ materialName: undefined,
|
|
|
+ materialType: undefined,
|
|
|
+ fileList: [],
|
|
|
+ },
|
|
|
+ queryParams: {
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ materialName: undefined,
|
|
|
+ },
|
|
|
+ rules: {
|
|
|
+ materialName: [
|
|
|
+ { required: true, message: "素材名称不能为空", trigger: "blur" },
|
|
|
+ ],
|
|
|
+ materialType: [
|
|
|
+ { required: true, message: "素材类型不能为空", trigger: "change" },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ libraryType: {
|
|
|
+ 0: "视频",
|
|
|
+ 1: "图片",
|
|
|
+ },
|
|
|
+ libraryStatus: {
|
|
|
+ 0: "未发布",
|
|
|
+ 1: "已发布",
|
|
|
+ },
|
|
|
+});
|
|
|
+const { queryParams, form, rules, libraryType, libraryStatus } = toRefs(data);
|
|
|
+function handleSelectionChange(selection) {
|
|
|
+ ids.value = selection.map((item) => item.materialId);
|
|
|
+ single.value = selection.length != 1;
|
|
|
+ multiple.value = !selection.length;
|
|
|
+}
|
|
|
+getList();
|
|
|
+/** 查询视频列表 */
|
|
|
+function getList() {
|
|
|
+ loading.value = true;
|
|
|
+ getLibraryList(queryParams.value).then((response) => {
|
|
|
+ libraryList.value = response.rows;
|
|
|
+ total.value = response.total;
|
|
|
+ loading.value = false;
|
|
|
+ });
|
|
|
+}
|
|
|
+/** 搜索按钮操作 */
|
|
|
+function handleQuery() {
|
|
|
+ queryParams.value.pageNum = 1;
|
|
|
+ getList();
|
|
|
+}
|
|
|
+/** 重置按钮操作 */
|
|
|
+function resetQuery() {
|
|
|
+ proxy.resetForm("queryRef");
|
|
|
+ handleQuery();
|
|
|
+}
|
|
|
+/** 删除按钮操作 */
|
|
|
+function handleDelete(row) {
|
|
|
+ const materialIds = row.materialId || ids.value;
|
|
|
+ proxy.$modal
|
|
|
+ .confirm('是否确认删除视频编号为"' + materialIds + '"的数据项?')
|
|
|
+ .then(function () {
|
|
|
+ return libraryDelete(materialIds);
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ getList();
|
|
|
+ proxy.$modal.msgSuccess("删除成功");
|
|
|
+ })
|
|
|
+ .catch(() => {});
|
|
|
+}
|
|
|
+
|
|
|
+function handleAdd() {
|
|
|
+ form.value = {
|
|
|
+ materialName: undefined,
|
|
|
+ materialType: "0",
|
|
|
+ fileList: [],
|
|
|
+ };
|
|
|
+ dialogTitle.value = "新增素材";
|
|
|
+ materialOpen.value = true;
|
|
|
+}
|
|
|
+function handleUpdate(row) {
|
|
|
+ dialogTitle.value = "编辑素材";
|
|
|
+ materialOpen.value = true;
|
|
|
+ detailLoading.value = true;
|
|
|
+ getLibraryDetail(row.materialId)
|
|
|
+ .then((res) => {
|
|
|
+ form.value = {
|
|
|
+ materialName: res.data.materialName,
|
|
|
+ materialType: res.data.materialType,
|
|
|
+ };
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ detailLoading.value = false;
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+// 弹窗表单提交
|
|
|
+function dialogSubmit() {
|
|
|
+ const formData = new FormData();
|
|
|
+ proxy.$refs["dataForm"].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ confirmLoading.value = true;
|
|
|
+ console.log(form.value);
|
|
|
+ const { materialName, materialType, fileList } = form.value;
|
|
|
+ formData.append("materialName", materialName);
|
|
|
+ formData.append("materialType", materialType);
|
|
|
+ fileList.forEach((file) => {
|
|
|
+ formData.append("file", file.raw);
|
|
|
+ });
|
|
|
+ libraryAdd(formData)
|
|
|
+ .then((res) => {
|
|
|
+ console.log(res);
|
|
|
+ if (res.code == 200) {
|
|
|
+ proxy.$modal.msgSuccess("新增成功");
|
|
|
+ materialOpen.value = false;
|
|
|
+ getList();
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ confirmLoading.value = false;
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ console.log(err);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+}
|
|
|
+function dialogCancel() {
|
|
|
+ materialOpen.value = false;
|
|
|
+ confirmLoading.value = false;
|
|
|
+}
|
|
|
+
|
|
|
+// 文件上传回调
|
|
|
+function uploadChange(file) {
|
|
|
+ form.value.fileList.push(file);
|
|
|
+}
|
|
|
+
|
|
|
+function uploadRemove() {
|
|
|
+ form.value.fileList = [];
|
|
|
+}
|
|
|
+</script>
|