¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <!-- æç´¢è¡¨å --> |
| | | <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch"> |
| | | <el-form-item label="æä»¶å" prop="fileName"> |
| | | <el-input |
| | | v-model="queryParams.name" |
| | | placeholder="请è¾å
¥æä»¶å" |
| | | clearable |
| | | size="default" |
| | | @keyup.enter="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" size="default" @click="handleQuery">æç´¢</el-button> |
| | | <el-button size="default" @click="resetQuery">éç½®</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <!-- æ°å¢æé® --> |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | size="default" |
| | | @click="handleAdd" |
| | | >æ°å¢</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <!-- è¡¨æ ¼ --> |
| | | <el-table v-loading="loading" :data="fileList" border> |
| | | <el-table-column type="index" label="åºå·" align="center" width="80" /> |
| | | <el-table-column label="æä»¶å" prop="name" :show-overflow-tooltip="true" align="center" /> |
| | | <el-table-column label="æä»¶ç±»å«" prop="type" align="center"> |
| | | <template #default="scope"> |
| | | {{ scope.row.type === VIDEO_TYPE.HEAD ? 'ç头' : 'çå°¾' }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å建人" prop="creatorName" align="center" /> |
| | | <el-table-column label="å建æ¶é´" prop="createTime" align="center"> |
| | | <template #default="scope"> |
| | | <span>{{ parseTime(scope.row.createTime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æä½" align="center" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-download" |
| | | @click="handleDownload(scope.row.url,scope.row.name)" |
| | | >ä¸è½½</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="handleUpdate(scope.row)" |
| | | >ä¿®æ¹</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | @click="handleDelete(scope.row)" |
| | | style="color: #F56C6C" |
| | | >å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <!-- å页 --> |
| | | <pagination |
| | | v-show="total>0" |
| | | :total="total" |
| | | v-model:page="queryParams.pageNo" |
| | | v-model:limit="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | |
| | | <!-- æ°å¢å¼¹çª --> |
| | | <el-dialog :title="dialogTitle" v-model="open" width="40%" append-to-body> |
| | | <el-form ref="formRef" :model="form" :rules="rules" label-width="80px"> |
| | | <el-form-item label="æä»¶å" prop="name"> |
| | | <el-input v-model="form.name" placeholder="请è¾å
¥æä»¶å" /> |
| | | </el-form-item> |
| | | <el-form-item label="æä»¶ç±»å«" prop="type"> |
| | | <el-select v-model="form.type" placeholder="è¯·éæ©æä»¶ç±»å«"> |
| | | <el-option label="ç头" :value="VIDEO_TYPE.HEAD" /> |
| | | <el-option label="çå°¾" :value="VIDEO_TYPE.TAIL" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ä¸ä¼ æä»¶" prop="url"> |
| | | <UploadFile v-model="form.url" :fileType="['mp4']" :limit="1" @on-success="handleFileSuccess('videoUrl', $event)"/> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">ç¡® å®</el-button> |
| | | <el-button @click="cancel">å æ¶</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | import { ref, reactive, onMounted } from 'vue' |
| | | import type { FormInstance } from 'element-plus' |
| | | import * as DigitalHumansApi from '@/api/system/file/index' |
| | | import dayjs from 'dayjs' |
| | | const message = useMessage() // æ¶æ¯å¼¹çª |
| | | |
| | | // è§é¢ç±»å«å¸¸é |
| | | const VIDEO_TYPE = { |
| | | HEAD: '1', // ç头 |
| | | TAIL: '2' // çå°¾ |
| | | } |
| | | |
| | | interface FileItem { |
| | | id?: number |
| | | name: string |
| | | type: string |
| | | createBy?: string |
| | | url: string |
| | | } |
| | | |
| | | interface QueryParams { |
| | | pageNo: number |
| | | pageSize: number |
| | | name?: string |
| | | } |
| | | |
| | | // é®ç½©å± |
| | | const loading = ref(true) |
| | | // æ¾ç¤ºæç´¢æ¡ä»¶ |
| | | const showSearch = ref(true) |
| | | // æ»æ¡æ° |
| | | const total = ref(0) |
| | | // æä»¶å表 |
| | | const fileList = ref<FileItem[]>([]) |
| | | // æ¥è¯¢åæ° |
| | | const queryParams = reactive<QueryParams>({ |
| | | pageNo: 1, |
| | | pageSize: 10, |
| | | name: undefined |
| | | }) |
| | | |
| | | // 表åå¼ç¨ |
| | | const formRef = ref<FormInstance>() |
| | | |
| | | // æ°å¢å¼¹çª |
| | | const open = ref(false) |
| | | const dialogTitle = ref('æ°å¢æä»¶') |
| | | const form = reactive<FileItem>({ |
| | | id: undefined, |
| | | name: '', |
| | | url: '', |
| | | type: '', |
| | | createBy: undefined |
| | | }) |
| | | const rules = reactive({ |
| | | name: [ |
| | | { required: true, message: "æä»¶åä¸è½ä¸ºç©º", trigger: "blur" } |
| | | ], |
| | | type: [ |
| | | { required: true, message: "è¯·éæ©æä»¶ç±»å«", trigger: "change" } |
| | | ], |
| | | url: [ |
| | | { required: true, message: "请ä¸ä¼ æä»¶", trigger: "change" } |
| | | ] |
| | | }) |
| | | |
| | | // æ°å¢æé®æä½ |
| | | const handleAdd = () => { |
| | | open.value = true |
| | | } |
| | | |
| | | // åæ¶æé® |
| | | const cancel = () => { |
| | | open.value = false |
| | | reset() |
| | | } |
| | | |
| | | // 表åéç½® |
| | | const reset = () => { |
| | | form.id = undefined |
| | | form.name = '' |
| | | form.url = '' |
| | | form.type = '' |
| | | form.createBy = undefined |
| | | dialogTitle.value = 'æ°å¢æä»¶' |
| | | } |
| | | |
| | | // æäº¤æé® |
| | | const submitForm = async () => { |
| | | if (!formRef.value) return |
| | | try { |
| | | await formRef.value.validate() |
| | | // éªè¯éè¿ï¼æ§è¡æäº¤æä½ |
| | | let res |
| | | if (form.id) { |
| | | // ä¿®æ¹æä½ |
| | | res = await DigitalHumansApi.updateFile(form) |
| | | } else { |
| | | // æ°å¢æä½ |
| | | res = await DigitalHumansApi.createFile(form) |
| | | } |
| | | console.log(res) |
| | | open.value = false |
| | | if (res) { |
| | | message.success(form.id ? "ä¿®æ¹æå" : "æ°å¢æå") |
| | | getList() |
| | | } |
| | | } catch (error) { |
| | | // éªè¯å¤±è´¥ï¼æ¾ç¤ºéè¯¯ä¿¡æ¯ |
| | | message.error("请填å宿´ä¿¡æ¯") |
| | | } |
| | | } |
| | | const handleFileSuccess = (fileType,response) => { |
| | | if (fileType === 'videoUrl') { |
| | | form.url = response.data; |
| | | } |
| | | }; |
| | | // æ¥è¯¢æä»¶å表 |
| | | const getList = async () => { |
| | | loading.value = true |
| | | try { |
| | | const data = await DigitalHumansApi.listFile(queryParams) |
| | | console.log(data) |
| | | fileList.value = data.list |
| | | total.value = data.total |
| | | } finally { |
| | | loading.value = false |
| | | } |
| | | } |
| | | |
| | | // æç´¢æé®æä½ |
| | | const handleQuery = () => { |
| | | queryParams.pageNo = 1 |
| | | getList() |
| | | } |
| | | |
| | | // éç½®æé®æä½ |
| | | const resetQuery = () => { |
| | | queryParams.name = undefined |
| | | handleQuery() |
| | | } |
| | | |
| | | // ä¿®æ¹æé®æä½ |
| | | const handleUpdate = (row: FileItem) => { |
| | | form.id = row.id |
| | | form.name = row.name || '' |
| | | form.url = row.url || '' |
| | | form.type = row.type |
| | | form.createBy = row.createBy |
| | | dialogTitle.value = 'ä¿®æ¹æä»¶' |
| | | open.value = true |
| | | } |
| | | |
| | | // å é¤æé®æä½ |
| | | const handleDelete = async (row: FileItem) => { |
| | | await message.delConfirm() |
| | | if (row.id) { |
| | | const res = await DigitalHumansApi.deleteFile(row.id) |
| | | if (res) { |
| | | message.success("å 餿å") |
| | | getList() |
| | | } |
| | | } |
| | | } |
| | | |
| | | // ä¸è½½æé®æä½ |
| | | const handleDownload = (url, filename) => { |
| | | if (!url) { |
| | | message.warning("æªæ¾å°èµæºæä»¶ï¼") |
| | | return |
| | | } |
| | | console.log(url,filename) |
| | | const link = document.createElement('a') |
| | | link.href = url |
| | | link.download = filename || 'download' |
| | | link.target = '_blank' |
| | | document.body.appendChild(link) |
| | | link.click() |
| | | document.body.removeChild(link) |
| | | } |
| | | |
| | | // æ ¼å¼åæ¶é´ |
| | | const parseTime = (time: number) => { |
| | | return dayjs(time).format('YYYY-MM-DD HH:mm:ss') |
| | | } |
| | | |
| | | onMounted(() => { |
| | | getList() |
| | | }) |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .app-container { |
| | | padding: 20px; |
| | | } |
| | | .mb8 { |
| | | margin-bottom: 8px; |
| | | } |
| | | </style> |