|
@@ -0,0 +1,332 @@
|
|
|
+<template>
|
|
|
+ <div>
|
|
|
+ <el-dialog
|
|
|
+ title="添加素材"
|
|
|
+ v-model="materialOpen"
|
|
|
+ width="1200"
|
|
|
+ append-to-body
|
|
|
+ destroy-on-close
|
|
|
+ >
|
|
|
+ <el-form :model="form" ref="dataForm" label-width="110px" inline>
|
|
|
+ <el-row :gutter="10">
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="素材" prop="selectMaterial">
|
|
|
+ <el-radio-group v-model="form.selectMaterial">
|
|
|
+ <el-radio :label="1">选择已有素材</el-radio>
|
|
|
+ <el-radio :label="2" @click="uploadSource">上传素材</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="24" v-show="form.selectMaterial == 1">
|
|
|
+ <el-form-item label="">
|
|
|
+ <!-- 列表 -->
|
|
|
+ <el-table
|
|
|
+ border
|
|
|
+ row-key="materialId"
|
|
|
+ v-loading="loading"
|
|
|
+ :data="libraryList"
|
|
|
+ @selection-change="handleSelectionChange"
|
|
|
+ >
|
|
|
+ <el-table-column
|
|
|
+ type="selection"
|
|
|
+ width="100"
|
|
|
+ align="center"
|
|
|
+ :reserve-selection="true"
|
|
|
+ />
|
|
|
+ <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>
|
|
|
+ <pagination
|
|
|
+ v-show="total > 0"
|
|
|
+ :total="total"
|
|
|
+ v-model:page="queryParams.pageNum"
|
|
|
+ v-model:limit="queryParams.pageSize"
|
|
|
+ @pagination="getList"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </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>
|
|
|
+
|
|
|
+ <el-dialog title="新增素材" v-model="addSourceOpen" width="800">
|
|
|
+ <el-form
|
|
|
+ :model="materialForm"
|
|
|
+ ref="materialFormRef"
|
|
|
+ :rules="materialRules"
|
|
|
+ label-width="100"
|
|
|
+ >
|
|
|
+ <el-form-item label="素材名称" prop="materialName">
|
|
|
+ <el-input
|
|
|
+ v-model="materialForm.materialName"
|
|
|
+ placeholder="请输入素材名称"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="素材类型" prop="materialType">
|
|
|
+ <el-select
|
|
|
+ v-model="materialForm.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="materialForm.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="materialConfirmLoading"
|
|
|
+ @click="sourceAdd"
|
|
|
+ >确 定</el-button
|
|
|
+ >
|
|
|
+ <el-button :loading="materialConfirmLoading" @click="sourceAddCancel"
|
|
|
+ >取 消</el-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup name="FormFields">
|
|
|
+import {
|
|
|
+ getLibraryList,
|
|
|
+ libraryAdd,
|
|
|
+} from "@/api/interactVideo/sourceMaterialManage";
|
|
|
+import { updateMaterialInfo } from "@/api/interactVideo/videoManage";
|
|
|
+const { proxy } = getCurrentInstance();
|
|
|
+const props = defineProps({
|
|
|
+ open: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false,
|
|
|
+ },
|
|
|
+ baseInfo: {
|
|
|
+ type: Object,
|
|
|
+ default: {
|
|
|
+ interactionId: undefined,
|
|
|
+ interactionName: undefined,
|
|
|
+ materialIds: [],
|
|
|
+ remark: undefined,
|
|
|
+ },
|
|
|
+ },
|
|
|
+});
|
|
|
+const emits = defineEmits(["close"]);
|
|
|
+const materialOpen = ref(false);
|
|
|
+const confirmLoading = ref(false);
|
|
|
+const loading = ref(false);
|
|
|
+const libraryList = ref([]);
|
|
|
+const total = ref(0);
|
|
|
+const materialConfirmLoading = ref(false);
|
|
|
+const addSourceOpen = ref(false);
|
|
|
+const ids = ref([]);
|
|
|
+const uploadId = ref([]);
|
|
|
+const data = reactive({
|
|
|
+ form: {
|
|
|
+ nodeType: "root-node",
|
|
|
+ selectMaterial: 1,
|
|
|
+ },
|
|
|
+ materialForm: {
|
|
|
+ materialName: undefined,
|
|
|
+ materialType: undefined,
|
|
|
+ fileList: [],
|
|
|
+ },
|
|
|
+ materialRules: {
|
|
|
+ materialName: [
|
|
|
+ { required: true, message: "素材名称不能为空", trigger: "blur" },
|
|
|
+ ],
|
|
|
+ materialType: [
|
|
|
+ { required: true, message: "素材类型不能为空", trigger: "change" },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ libraryType: {
|
|
|
+ 0: "视频",
|
|
|
+ 1: "图片",
|
|
|
+ },
|
|
|
+ libraryStatus: {
|
|
|
+ 0: "未发布",
|
|
|
+ 1: "已发布",
|
|
|
+ },
|
|
|
+ queryParams: {
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ },
|
|
|
+});
|
|
|
+
|
|
|
+const {
|
|
|
+ form,
|
|
|
+ libraryType,
|
|
|
+ libraryStatus,
|
|
|
+ queryParams,
|
|
|
+ materialRules,
|
|
|
+ materialForm,
|
|
|
+} = toRefs(data);
|
|
|
+
|
|
|
+watchEffect(() => {
|
|
|
+ if (props.open) {
|
|
|
+ materialOpen.value = true;
|
|
|
+ form.value = {
|
|
|
+ selectMaterial: 1,
|
|
|
+ };
|
|
|
+ getList();
|
|
|
+ } else {
|
|
|
+ materialOpen.value = false;
|
|
|
+ }
|
|
|
+});
|
|
|
+
|
|
|
+// 互动视频新增并关联素材
|
|
|
+function dialogSubmit() {
|
|
|
+ proxy.$refs["dataForm"].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ // 判断选中素材id和上传素材id是否为空
|
|
|
+ if (ids.value.length == 0 && uploadId.value.length == 0) {
|
|
|
+ proxy.$modal.msgError("请选择素材");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ confirmLoading.value = true;
|
|
|
+ const params = {
|
|
|
+ materialIds: ids.value,
|
|
|
+ ...props.baseInfo,
|
|
|
+ };
|
|
|
+ updateMaterialInfo(params)
|
|
|
+ .then((res) => {
|
|
|
+ // 新增成功后拿到id跳转互动视频节点编辑
|
|
|
+ if (res.code == 200) {
|
|
|
+ proxy.$modal.msgSuccess("添加成功");
|
|
|
+ dialogCancel();
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ confirmLoading.value = false;
|
|
|
+ });
|
|
|
+ confirmLoading.value = true;
|
|
|
+ }
|
|
|
+ });
|
|
|
+}
|
|
|
+function dialogCancel() {
|
|
|
+ emits("close", false);
|
|
|
+ confirmLoading.value = false;
|
|
|
+}
|
|
|
+
|
|
|
+/** 查询素材列表 */
|
|
|
+function getList() {
|
|
|
+ loading.value = true;
|
|
|
+ getLibraryList(queryParams.value).then((response) => {
|
|
|
+ libraryList.value = response.rows;
|
|
|
+ total.value = response.total;
|
|
|
+ loading.value = false;
|
|
|
+ });
|
|
|
+}
|
|
|
+// 选中素材id
|
|
|
+function handleSelectionChange(selection) {
|
|
|
+ ids.value = selection.map((item) => item.materialId);
|
|
|
+}
|
|
|
+
|
|
|
+// 素材新增
|
|
|
+function uploadSource() {
|
|
|
+ addSourceOpen.value = true;
|
|
|
+ materialForm.value = {
|
|
|
+ materialName: undefined,
|
|
|
+ materialType: 0,
|
|
|
+ fileList: [],
|
|
|
+ };
|
|
|
+}
|
|
|
+function sourceAdd() {
|
|
|
+ const formData = new FormData();
|
|
|
+ proxy.$refs["materialFormRef"].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ materialConfirmLoading.value = true;
|
|
|
+ const { materialName, materialType, fileList } = materialForm.value;
|
|
|
+ formData.append("materialName", materialName);
|
|
|
+ formData.append("materialType", materialType);
|
|
|
+ fileList.forEach((file) => {
|
|
|
+ formData.append("file", file.raw);
|
|
|
+ });
|
|
|
+ libraryAdd(formData)
|
|
|
+ .then((res) => {
|
|
|
+ if (res.code == 200) {
|
|
|
+ proxy.$modal.msgSuccess("新增成功");
|
|
|
+ uploadId.value.push(res.data);
|
|
|
+ addSourceOpen.value = false;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ materialConfirmLoading.value = false;
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ console.log(err);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+}
|
|
|
+// 取消素材新增
|
|
|
+function sourceAddCancel() {
|
|
|
+ materialConfirmLoading.value = false;
|
|
|
+ addSourceOpen.value = false;
|
|
|
+}
|
|
|
+
|
|
|
+// 文件上传回调
|
|
|
+function uploadChange(file) {
|
|
|
+ materialForm.value.fileList.push(file);
|
|
|
+}
|
|
|
+
|
|
|
+function uploadRemove() {
|
|
|
+ materialForm.value.fileList = [];
|
|
|
+}
|
|
|
+</script>
|