|
|
@@ -153,7 +153,7 @@
|
|
|
</el-table>
|
|
|
</el-col>
|
|
|
<!--发布名称-->
|
|
|
- <el-col :span="10" style="height: 100%; overflow: auto; padding-left: 10px">
|
|
|
+ <el-col :span="9" style="height: 100%; overflow: auto; padding-left: 10px">
|
|
|
<el-form ref="itemPushFormRef" :model="form" :rules="rules" label-width="60px">
|
|
|
<el-form-item label="名称" prop="name">
|
|
|
<el-input v-model="form.name" placeholder="请输入名称" />
|
|
|
@@ -196,32 +196,49 @@
|
|
|
<!-- Time Periods -->
|
|
|
<el-form-item label="时间">
|
|
|
<div v-for="(timePeriod, index) in form.timeRange" :key="index" class="time-period">
|
|
|
- <el-time-picker v-model="timePeriod.start" placeholder="开始时间" format="HH:mm:ss" :disabled="false" />
|
|
|
+ <el-time-picker v-model="timePeriod.start" placeholder="开始时间" format="HH:mm:ss" style="width: 150px;" :disabled="false" />
|
|
|
<span>至</span>
|
|
|
- <el-time-picker v-model="timePeriod.end" placeholder="结束时间" format="HH:mm:ss" :disabled="false" />
|
|
|
- <el-button @click="removeTimePeriod(index)" type="danger" icon="Delete"></el-button>
|
|
|
+ <el-time-picker v-model="timePeriod.end" placeholder="结束时间" format="HH:mm:ss" style="width: 150px;" :disabled="false" />
|
|
|
+ <el-button @click="removeTimePeriod(index)" type="danger" style="margin-left: 10px" icon="Delete"></el-button>
|
|
|
</div>
|
|
|
<el-button @click="addTimePeriod" type="primary">新增时间段</el-button>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
</el-col>
|
|
|
<!--发布内容-->
|
|
|
- <el-col :span="8" style="height: 100%; overflow: auto; padding-left: 10px">
|
|
|
- <!--轮播组-->
|
|
|
+ <el-col :span="9" style="height: 100%; overflow: auto; padding-left: 10px">
|
|
|
+ <!--轮播组 -->
|
|
|
<div v-if="form.itemType === 1 || form.itemType === 3">
|
|
|
- <!--<el-table v-loading="loading" :data="itemList" @selection-change="handleSelectItem">
|
|
|
- <el-table-column type="selection" width="55" align="center" />-->
|
|
|
<el-table v-loading="loading" :data="itemList" style="height: 520px">
|
|
|
- <el-table-column label="ID" width="220" align="left" :show-overflow-tooltip="true">
|
|
|
+ <el-table-column label="ID" width="200" align="left" :show-overflow-tooltip="true">
|
|
|
<template #default="{ row }">
|
|
|
<el-radio v-model="selectedRowId" :label="row.id" @change="handleRadioChange(row)" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="名称" align="left" prop="itemName" :show-overflow-tooltip="true" />
|
|
|
<!-- <el-table-column label="资源数量" align="center" prop="sourceNum" width="80" />-->
|
|
|
- <!--
|
|
|
- <el-table-column label="创建人" align="left" prop="createUser" width="100" :show-overflow-tooltip="true" />
|
|
|
- -->
|
|
|
+ <el-table-column label="创建人" align="center" prop="createUser" width="120" :show-overflow-tooltip="true" />
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ <!-- 素材 -->
|
|
|
+ <div v-if="form.itemType === 4 ">
|
|
|
+ <el-table v-loading="loading" :data="minioDataList" style="height: 520px" @selection-change="handleSelectionMinioChange">
|
|
|
+ <el-table-column type="selection" width="40" align="center" />
|
|
|
+ <el-table-column label="ID" prop="id" width="170" align="left" :show-overflow-tooltip="true" />
|
|
|
+ <el-table-column label="文件" align="left" prop="originalName" :show-overflow-tooltip="true" />
|
|
|
+ <el-table-column label="预览" align="center" prop="screenshot" width="80">
|
|
|
+ <template #default="scope">
|
|
|
+ <div v-if="scope.row.type === 1">
|
|
|
+ <!-- 图片类型 -->
|
|
|
+ <image-preview :src="scope.row.screenshot" style="width: 40px; height: 40px; cursor: pointer" />
|
|
|
+ </div>
|
|
|
+ <div v-else-if="scope.row.type === 2">
|
|
|
+ <el-icon class="VideoPlay" @click="viewVideo(scope.row.screenshot)" size="40" style="cursor: pointer">
|
|
|
+ <VideoPlay />
|
|
|
+ </el-icon>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
</el-table>
|
|
|
</div>
|
|
|
</el-col>
|
|
|
@@ -292,6 +309,11 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
+
|
|
|
+ <!-- 用于展示播放的视频 -->
|
|
|
+ <el-dialog v-model="videoDialogVisible">
|
|
|
+ <video width="100%" controls :src="videoUrl"></video>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
@@ -313,6 +335,8 @@ import {ItemQuery, ItemVO} from '@/api/smsb/source/item_type';
|
|
|
import {listItem} from '@/api/smsb/source/item';
|
|
|
import {ItemPushDeviceVO} from '@/api/smsb/source/item_push_device_type';
|
|
|
import {listItemPushDeviceV2, removeItemPushDevice} from '@/api/smsb/source/item_push_device';
|
|
|
+import {MinioDataVO} from "@/api/smsb/source/minioData_type";
|
|
|
+import {listMinioData} from "@/api/smsb/source/minioData";
|
|
|
|
|
|
const {proxy} = getCurrentInstance() as ComponentInternalInstance;
|
|
|
const {smsb_push_state, smsb_push_device_state, smsb_push_type, smsb_push_level,smsb_push_isuse} = toRefs<any>(
|
|
|
@@ -321,6 +345,7 @@ const {smsb_push_state, smsb_push_device_state, smsb_push_type, smsb_push_level,
|
|
|
|
|
|
const itemPushList = ref<ItemPushVO[]>([]);
|
|
|
const itemList = ref<ItemVO[]>([]);
|
|
|
+const minioDataList = ref<MinioDataVO[]>([]);
|
|
|
const buttonLoading = ref(false);
|
|
|
const loading = ref(true);
|
|
|
const deviceLoading = ref(true);
|
|
|
@@ -344,10 +369,13 @@ const deviceList = ref<DeviceVO[]>([]);
|
|
|
const pushDeviceList = ref<ItemPushDeviceVO[]>([]);
|
|
|
// 存储选中行的唯一标识
|
|
|
const selectedRowId = ref<number | null>(null);
|
|
|
+const selectedMinioDataIds = ref<[]>;
|
|
|
const removeItemTag = ref(false);
|
|
|
const removeButtonTag = ref(true);
|
|
|
const queryFormRef = ref<ElFormInstance>();
|
|
|
const itemPushFormRef = ref<ElFormInstance>();
|
|
|
+const videoUrl = ref('');
|
|
|
+const videoDialogVisible = ref(false);
|
|
|
|
|
|
const dialog = reactive<DialogOption>({
|
|
|
visible: false,
|
|
|
@@ -388,7 +416,7 @@ const data = reactive<PageData<ItemPushForm, ItemPushQuery>>({
|
|
|
const dialogData = reactive<DialogPageData<DeviceQuery>>({
|
|
|
dialogQueryParams: {
|
|
|
pageNum: 1,
|
|
|
- pageSize: 10,
|
|
|
+ pageSize: 10000,
|
|
|
pushId: undefined
|
|
|
}
|
|
|
});
|
|
|
@@ -396,7 +424,7 @@ const dialogData = reactive<DialogPageData<DeviceQuery>>({
|
|
|
const itemData = reactive<TransPageData<ItemQuery>>({
|
|
|
transQueryParams: {
|
|
|
pageNum: 1,
|
|
|
- pageSize: 10,
|
|
|
+ pageSize: 10000,
|
|
|
itemType: undefined
|
|
|
}
|
|
|
});
|
|
|
@@ -440,8 +468,16 @@ const getItemList = async () => {
|
|
|
itemList.value = res.rows;
|
|
|
itemTotal.value = res.total;
|
|
|
}
|
|
|
+ if (form.value.itemType === 4) {
|
|
|
+ const res = await listMinioData(transQueryParams.value);
|
|
|
+ minioDataList.value = res.rows;
|
|
|
+ }
|
|
|
+};
|
|
|
+// 播放视频
|
|
|
+const viewVideo = (url: string) => {
|
|
|
+ videoUrl.value = url;
|
|
|
+ videoDialogVisible.value = true;
|
|
|
};
|
|
|
-
|
|
|
const addTimePeriod = () => {
|
|
|
const now = new Date();
|
|
|
now.setHours(0, 0, 0, 0);
|
|
|
@@ -459,6 +495,7 @@ const cancel = () => {
|
|
|
reset();
|
|
|
dialog.visible = false;
|
|
|
deviceDialog.visible = false;
|
|
|
+ videoDialogVisible.value = false;
|
|
|
};
|
|
|
|
|
|
/** 表单重置 */
|
|
|
@@ -555,7 +592,10 @@ const handleSelectItem = (selection: ItemVO[]) => {
|
|
|
itemIds.value = selection.map((item) => item.id);
|
|
|
form.value.itemIds = itemIds.value;
|
|
|
};
|
|
|
-
|
|
|
+const handleSelectionMinioChange = (selection: MinioDataVO[]) => {
|
|
|
+ selectedMinioDataIds.value = selection.map((item) => item.id);
|
|
|
+ form.value.itemIds = selectedMinioDataIds.value;
|
|
|
+}
|
|
|
const handleRadioChange = (row: ItemVO) => {
|
|
|
const itemIds = [row.id];
|
|
|
form.value.itemIds = itemIds;
|
|
|
@@ -595,7 +635,6 @@ const submitForm = () => {
|
|
|
console.log(resTime.data)
|
|
|
await addItemPush(form.value).finally(() => (buttonLoading.value = false));
|
|
|
} else {
|
|
|
- console.log(form.value)
|
|
|
await addItemPush(form.value).finally(() => (buttonLoading.value = false));
|
|
|
}
|
|
|
}
|