|
@@ -140,29 +140,35 @@
|
|
|
<div class="selected-container">
|
|
<div class="selected-container">
|
|
|
<!-- 自定义表头 -->
|
|
<!-- 自定义表头 -->
|
|
|
<div class="draggable-header"
|
|
<div class="draggable-header"
|
|
|
- style="display: flex; align-items: center; background: #fafafa; border-bottom: 1px solid #eee; min-height: 48px; font-weight: bold;">
|
|
|
|
|
- <span style="width:80px; text-align:center;">排序</span>
|
|
|
|
|
- <span style="flex:1;">文件名</span>
|
|
|
|
|
- <span style="width:120px; margin-left:8px;">播放时长</span>
|
|
|
|
|
|
|
+ style="display: flex; align-items: center; background: #fafafa; border-bottom: 1px solid #eee; min-height: 48px; font-weight: bold">
|
|
|
|
|
+ <span style="width: 80px; text-align: center">排序</span>
|
|
|
|
|
+ <span style="flex: 1">文件名</span>
|
|
|
|
|
+ <span style="width: 120px; margin-left: 8px">播放时长</span>
|
|
|
</div>
|
|
</div>
|
|
|
<!-- 拖拽列表体 -->
|
|
<!-- 拖拽列表体 -->
|
|
|
<draggable v-model="selectedFiles" item-key="id" @end="onSelectedFilesDragEnd" :animation="200" tag="div">
|
|
<draggable v-model="selectedFiles" item-key="id" @end="onSelectedFilesDragEnd" :animation="200" tag="div">
|
|
|
<template #item="{ element, index }">
|
|
<template #item="{ element, index }">
|
|
|
<div class="draggable-row" :draggable="true"
|
|
<div class="draggable-row" :draggable="true"
|
|
|
- style="display: flex; align-items: center; border-bottom: 1px solid #eee; min-height: 48px; cursor: move;">
|
|
|
|
|
- <span class="order-number" style="width:80px; text-align:center;">{{ element.order }}</span>
|
|
|
|
|
|
|
+ style="display: flex; align-items: center; border-bottom: 1px solid #eee; min-height: 48px; cursor: move">
|
|
|
|
|
+ <span class="order-number" style="width: 80px; text-align: center">{{ element.order }}</span>
|
|
|
<el-tooltip effect="dark" :content="element.name" placement="top">
|
|
<el-tooltip effect="dark" :content="element.name" placement="top">
|
|
|
- <span
|
|
|
|
|
- style="flex:1; max-width:240px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; display:inline-block; vertical-align:middle;">{{
|
|
|
|
|
- element.name }}</span>
|
|
|
|
|
|
|
+ <span style="
|
|
|
|
|
+ flex: 1;
|
|
|
|
|
+ max-width: 240px;
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+ text-overflow: ellipsis;
|
|
|
|
|
+ white-space: nowrap;
|
|
|
|
|
+ display: inline-block;
|
|
|
|
|
+ vertical-align: middle;
|
|
|
|
|
+ ">{{ element.name }}</span>
|
|
|
</el-tooltip>
|
|
</el-tooltip>
|
|
|
<el-input-number :disabled="element.type !== 1" v-model="element.duration" :min="1" :max="300"
|
|
<el-input-number :disabled="element.type !== 1" v-model="element.duration" :min="1" :max="300"
|
|
|
- style="width:120px; margin-left:8px;" />
|
|
|
|
|
|
|
+ style="width: 120px; margin-left: 8px" />
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
</draggable>
|
|
</draggable>
|
|
|
<!-- 空数据提示 -->
|
|
<!-- 空数据提示 -->
|
|
|
- <div v-if="selectedFiles.length === 0" style="text-align:center; color:#999; padding: 16px 0;">暂无数据</div>
|
|
|
|
|
|
|
+ <div v-if="selectedFiles.length === 0" style="text-align: center; color: #999; padding: 16px 0">暂无数据</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<template #footer>
|
|
<template #footer>
|
|
@@ -235,7 +241,7 @@
|
|
|
<el-form-item label="跑马灯" prop="hasPmd">
|
|
<el-form-item label="跑马灯" prop="hasPmd">
|
|
|
<el-radio-group v-model="form.hasPmd">
|
|
<el-radio-group v-model="form.hasPmd">
|
|
|
<el-radio v-for="dict in smsb_yes_no" :key="dict.value" :value="parseInt(dict.value)">{{ dict.label
|
|
<el-radio v-for="dict in smsb_yes_no" :key="dict.value" :value="parseInt(dict.value)">{{ dict.label
|
|
|
- }}
|
|
|
|
|
|
|
+ }}
|
|
|
</el-radio>
|
|
</el-radio>
|
|
|
</el-radio-group>
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -257,7 +263,7 @@
|
|
|
<el-form-item label="天气" prop="hasWeather">
|
|
<el-form-item label="天气" prop="hasWeather">
|
|
|
<el-radio-group v-model="form.hasWeather">
|
|
<el-radio-group v-model="form.hasWeather">
|
|
|
<el-radio v-for="dict in smsb_yes_no" :key="dict.value" :value="parseInt(dict.value)">{{ dict.label
|
|
<el-radio v-for="dict in smsb_yes_no" :key="dict.value" :value="parseInt(dict.value)">{{ dict.label
|
|
|
- }}
|
|
|
|
|
|
|
+ }}
|
|
|
</el-radio>
|
|
</el-radio>
|
|
|
</el-radio-group>
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -266,7 +272,7 @@
|
|
|
<el-form-item label="时间" prop="hasTime">
|
|
<el-form-item label="时间" prop="hasTime">
|
|
|
<el-radio-group v-model="form.hasTime">
|
|
<el-radio-group v-model="form.hasTime">
|
|
|
<el-radio v-for="dict in smsb_yes_no" :key="dict.value" :value="parseInt(dict.value)">{{ dict.label
|
|
<el-radio v-for="dict in smsb_yes_no" :key="dict.value" :value="parseInt(dict.value)">{{ dict.label
|
|
|
- }}
|
|
|
|
|
|
|
+ }}
|
|
|
</el-radio>
|
|
</el-radio>
|
|
|
</el-radio-group>
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -287,6 +293,7 @@
|
|
|
|
|
|
|
|
<script setup name="Item" lang="ts">
|
|
<script setup name="Item" lang="ts">
|
|
|
import draggable from 'vuedraggable';
|
|
import draggable from 'vuedraggable';
|
|
|
|
|
+import { onActivated } from 'vue';
|
|
|
import { listItem, getItem, delItem, addItem, updateItem, itemStatistics } from '@/api/smsb/source/item';
|
|
import { listItem, getItem, delItem, addItem, updateItem, itemStatistics } from '@/api/smsb/source/item';
|
|
|
import { ItemVO, ItemQuery, ItemForm } from '@/api/smsb/source/item_type';
|
|
import { ItemVO, ItemQuery, ItemForm } from '@/api/smsb/source/item_type';
|
|
|
import { MinioDataQuery, MinioDataVO } from '@/api/smsb/source/minioData_type';
|
|
import { MinioDataQuery, MinioDataVO } from '@/api/smsb/source/minioData_type';
|
|
@@ -349,40 +356,35 @@ const initFormData: ItemForm = {
|
|
|
hasWeather: 0,
|
|
hasWeather: 0,
|
|
|
hasTime: 0
|
|
hasTime: 0
|
|
|
};
|
|
};
|
|
|
-const data = reactive<PageData<ItemForm, ItemQuery>>({
|
|
|
|
|
- form: { ...initFormData },
|
|
|
|
|
- queryParams: {
|
|
|
|
|
- pageNum: 1,
|
|
|
|
|
- pageSize: 10,
|
|
|
|
|
- itemName: undefined,
|
|
|
|
|
- itemType: undefined,
|
|
|
|
|
- splitScreen: undefined,
|
|
|
|
|
- createUser: undefined,
|
|
|
|
|
- params: {}
|
|
|
|
|
- },
|
|
|
|
|
- rules: {
|
|
|
|
|
- itemName: [{ required: true, message: '请输入名称', trigger: 'blur' }],
|
|
|
|
|
- itemType: [{ required: true, message: '请选择类型', trigger: 'change' }]
|
|
|
|
|
- // 可按需补充其它字段校验
|
|
|
|
|
- }
|
|
|
|
|
|
|
+const queryParams = ref({
|
|
|
|
|
+ pageNum: 1,
|
|
|
|
|
+ pageSize: 10,
|
|
|
|
|
+ itemName: undefined,
|
|
|
|
|
+ itemType: undefined,
|
|
|
|
|
+ splitScreen: undefined,
|
|
|
|
|
+ createUser: undefined,
|
|
|
|
|
+ params: {}
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
-const dialogData = reactive<DialogPageData<MinioDataQuery>>({
|
|
|
|
|
- dialogQueryParams: {
|
|
|
|
|
- pageNum: 1,
|
|
|
|
|
- pageSize: 10,
|
|
|
|
|
- params: {}
|
|
|
|
|
- }
|
|
|
|
|
-});
|
|
|
|
|
|
|
+const form = ref({ ...initFormData });
|
|
|
|
|
+const rules = {
|
|
|
|
|
+ itemName: [{ required: true, message: '请输入名称', trigger: 'blur' }],
|
|
|
|
|
+ itemType: [{ required: true, message: '请选择类型', trigger: 'change' }]
|
|
|
|
|
+ // 可按需补充其它字段校验
|
|
|
|
|
+};
|
|
|
|
|
|
|
|
-const { queryParams, form, rules } = toRefs(data);
|
|
|
|
|
-const { dialogQueryParams } = toRefs(dialogData);
|
|
|
|
|
|
|
+const dialogQueryParams = ref({
|
|
|
|
|
+ pageNum: 1,
|
|
|
|
|
+ pageSize: 10,
|
|
|
|
|
+ params: {}
|
|
|
|
|
+});
|
|
|
|
|
|
|
|
/** 查询节目管理列表 */
|
|
/** 查询节目管理列表 */
|
|
|
const getList = async () => {
|
|
const getList = async () => {
|
|
|
loading.value = true;
|
|
loading.value = true;
|
|
|
try {
|
|
try {
|
|
|
const res = await listItem(proxy?.addDateRange(queryParams.value, dateRangeCreateTime.value, 'CreateTime'));
|
|
const res = await listItem(proxy?.addDateRange(queryParams.value, dateRangeCreateTime.value, 'CreateTime'));
|
|
|
|
|
+ console.log('getList result:', res);
|
|
|
itemList.value = res.rows;
|
|
itemList.value = res.rows;
|
|
|
total.value = res.total;
|
|
total.value = res.total;
|
|
|
} catch (e: any) {
|
|
} catch (e: any) {
|
|
@@ -404,8 +406,8 @@ const getFileList = async () => {
|
|
|
// After data loads, restore selections
|
|
// After data loads, restore selections
|
|
|
nextTick(() => {
|
|
nextTick(() => {
|
|
|
if (selectedFiles.value?.length) {
|
|
if (selectedFiles.value?.length) {
|
|
|
- const selectedIds = new Set(selectedFiles.value.map(f => f.id));
|
|
|
|
|
- minioDataList.value.forEach(row => {
|
|
|
|
|
|
|
+ const selectedIds = new Set(selectedFiles.value.map((f) => f.id));
|
|
|
|
|
+ minioDataList.value.forEach((row) => {
|
|
|
if (selectedIds.has(row.id)) {
|
|
if (selectedIds.has(row.id)) {
|
|
|
fileTable.value?.toggleRowSelection(row, true);
|
|
fileTable.value?.toggleRowSelection(row, true);
|
|
|
}
|
|
}
|
|
@@ -420,8 +422,8 @@ const getFileList = async () => {
|
|
|
/** 多选框选中文件数据 */
|
|
/** 多选框选中文件数据 */
|
|
|
// selection-change 只做新增
|
|
// selection-change 只做新增
|
|
|
const handleSelectionFile = (selection: MinioDataVO[]) => {
|
|
const handleSelectionFile = (selection: MinioDataVO[]) => {
|
|
|
- selection.forEach(item => {
|
|
|
|
|
- if (!selectedFiles.value.some(f => String(f.id) === String(item.id))) {
|
|
|
|
|
|
|
+ selection.forEach((item) => {
|
|
|
|
|
+ if (!selectedFiles.value.some((f) => String(f.id) === String(item.id))) {
|
|
|
selectedFiles.value.push({
|
|
selectedFiles.value.push({
|
|
|
id: item.id,
|
|
id: item.id,
|
|
|
name: item.originalName,
|
|
name: item.originalName,
|
|
@@ -437,17 +439,17 @@ const handleSelectionFile = (selection: MinioDataVO[]) => {
|
|
|
|
|
|
|
|
// 取消单个选中
|
|
// 取消单个选中
|
|
|
const handleSelect = (selection: MinioDataVO[], row: MinioDataVO) => {
|
|
const handleSelect = (selection: MinioDataVO[], row: MinioDataVO) => {
|
|
|
- if (!selection.some(item => String(item.id) === String(row.id))) {
|
|
|
|
|
- selectedFiles.value = selectedFiles.value.filter(f => String(f.id) !== String(row.id));
|
|
|
|
|
|
|
+ if (!selection.some((item) => String(item.id) === String(row.id))) {
|
|
|
|
|
+ selectedFiles.value = selectedFiles.value.filter((f) => String(f.id) !== String(row.id));
|
|
|
selectedFiles.value = selectedFiles.value.map((f, idx) => ({ ...f, order: idx + 1 }));
|
|
selectedFiles.value = selectedFiles.value.map((f, idx) => ({ ...f, order: idx + 1 }));
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// 取消全选
|
|
// 取消全选
|
|
|
const handleSelectAll = (selection: MinioDataVO[]) => {
|
|
const handleSelectAll = (selection: MinioDataVO[]) => {
|
|
|
- const currentPageIds = new Set(minioDataList.value.map(item => String(item.id)));
|
|
|
|
|
- const selectedIds = new Set(selection.map(item => String(item.id)));
|
|
|
|
|
- selectedFiles.value = selectedFiles.value.filter(f => !currentPageIds.has(String(f.id)) || selectedIds.has(String(f.id)));
|
|
|
|
|
|
|
+ const currentPageIds = new Set(minioDataList.value.map((item) => String(item.id)));
|
|
|
|
|
+ const selectedIds = new Set(selection.map((item) => String(item.id)));
|
|
|
|
|
+ selectedFiles.value = selectedFiles.value.filter((f) => !currentPageIds.has(String(f.id)) || selectedIds.has(String(f.id)));
|
|
|
selectedFiles.value = selectedFiles.value.map((f, idx) => ({ ...f, order: idx + 1 }));
|
|
selectedFiles.value = selectedFiles.value.map((f, idx) => ({ ...f, order: idx + 1 }));
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -640,6 +642,11 @@ onMounted(() => {
|
|
|
getList();
|
|
getList();
|
|
|
getItemStatistics();
|
|
getItemStatistics();
|
|
|
});
|
|
});
|
|
|
|
|
+
|
|
|
|
|
+onActivated(() => {
|
|
|
|
|
+ getList();
|
|
|
|
|
+ getItemStatistics();
|
|
|
|
|
+});
|
|
|
</script>
|
|
</script>
|
|
|
<style scoped>
|
|
<style scoped>
|
|
|
.dialog-container {
|
|
.dialog-container {
|