From 0d91757d82f4cfd1586ab39cbe37f12d739ddc43 Mon Sep 17 00:00:00 2001 From: charles <981744753@qq.com> Date: 星期一, 20 五月 2024 11:03:19 +0800 Subject: [PATCH] feat:完成接口联调 --- vue.config.js | 14 src/views/home/components/textManager/index.vue | 69 +++-- src/api/modules/text.js | 19 + src/views/home/components/audioAnalysis/components/Analysis.vue | 52 ++- src/api/modules/audio.js | 53 ++++ src/router/index.js | 12 .env.development | 4 src/views/home/components/audioAnalysis/index.vue | 256 ++++++++++++++----- src/api/modules/train.js | 9 src/api/index.js | 5 src/main.js | 3 src/views/home/components/leftNav.vue | 1 package.json | 1 src/views/home/components/uploadAudio/index.vue | 264 ++++++++++++++++++++ src/utils/modules/axiosUtil.js | 5 15 files changed, 634 insertions(+), 133 deletions(-) diff --git a/.env.development b/.env.development index 1165bed..cde61a0 100644 --- a/.env.development +++ b/.env.development @@ -2,7 +2,7 @@ NODE_ENV=development ## 2.鍩虹璺緞 浠g悊鏈嶅姟鍣ㄦ嫤鎴殑璺緞 -VUE_APP_BASE_API=/api-dev +VUE_APP_BASE_API=/api-sa ## 3.鐩爣鏈嶅姟鍣ㄥ湴鍧� -VUE_APP_BASE_URL=http://localhost:3001 \ No newline at end of file +VUE_APP_BASE_URL=http://smartai.com:7013/ \ No newline at end of file diff --git a/package.json b/package.json index 0bf9115..172f62d 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "core-js": "^3.8.3", "element-ui": "^2.4.5", "hls.js": "^1.5.8", + "moment": "^2.30.1", "vue": "^2.6.14", "vue-aplayer": "^1.6.1", "vue-router": "^3.5.1", diff --git a/src/api/index.js b/src/api/index.js index ff8b4c5..2338992 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -1 +1,4 @@ -export default {}; +export * from './modules/text'; +export * from './modules/audio'; +export * from './modules/train'; + diff --git a/src/api/modules/audio.js b/src/api/modules/audio.js new file mode 100644 index 0000000..9d58a5b --- /dev/null +++ b/src/api/modules/audio.js @@ -0,0 +1,53 @@ +import {request} from '@/utils' +//1.鎵归噺鍒犻櫎闊抽 +export function batchDeleteAudioApi(ids) { + return request({ + url:'/api-sa/v1/audio/batchDelete', + method:'DELETE', + data:{ids} + }); +} +//2. 鎵归噺澶勭悊闊抽 +export function batchProcessAudioApi(ids){ + return request({ + url:'/api-sa/v1/audio/batchProcess', + method:'POST', + data:{ids} + }) +} +//3.鍒犻櫎闊抽 /api-sa/v1/audio/delete +export function deleteAudioApi(id) { + return request({ + url:'/api-sa/v1/audio/delete', + method:'DELETE', + params:{id} + }) +} + +//4. 鍏虫敞锛屽彇娑� /api-sa/v1/audio/follow +export function followAudioApi(id) { + return request({ + url:'/api-sa/v1/audio/follow', + method:'POST', + data:{id} + }) +} +//5. 闊抽鍒嗘瀽鍒楄〃 +export function audioListApi(params) { + return request({ + url:'/api-sa/v1/audio/list', + method:'GET', + params + }) +} +//6.澶勭悊闊抽 +export function processAudioApi(id) { + return request({ + url:'/api-sa/v1/audio/process', + method:'POST', + data:{id} + }) +} + + + diff --git a/src/api/modules/text.js b/src/api/modules/text.js new file mode 100644 index 0000000..146313c --- /dev/null +++ b/src/api/modules/text.js @@ -0,0 +1,19 @@ +import {request} from '@/utils' + +//1.鑾峰彇鏂囧瓧鍒楄〃 +export function getTextListApi(params) { + return request({ + url:'/api-sa/v1/text/list', + method:'GET', + params + }); +} +//2.鏂板鏂囧瓧 +export function addTextApi(data) { + return request({ + url:'/api-sa/v1/text/add', + method:'POST', + data + }) +} + diff --git a/src/api/modules/train.js b/src/api/modules/train.js new file mode 100644 index 0000000..1812856 --- /dev/null +++ b/src/api/modules/train.js @@ -0,0 +1,9 @@ +import {request} from '@/utils' +//1. 鑾峰緱鐏溅鍒楄〃淇℃伅 +export function trainListApi(params) { + return request({ + url:'/api-sa/v1/audio/trainInfoList', + method:'GET', + params + }); +} \ No newline at end of file diff --git a/src/main.js b/src/main.js index 47ded6d..1427839 100644 --- a/src/main.js +++ b/src/main.js @@ -3,8 +3,9 @@ import router from './router' import store from './store' import './plugins/element.js' +import * as moment from 'moment'; Vue.config.productionTip = false; -console.log(process.env) +Vue.prototype.$moment=moment; new Vue({ router, store, diff --git a/src/router/index.js b/src/router/index.js index 0561bc0..3d55cb9 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -1,8 +1,6 @@ import Vue from 'vue' import VueRouter from 'vue-router' import Home from "../views/home/index.vue"; -import AudioAnalysis from "../views/home/components/audioAnalysis/index.vue"; -import TextManager from "../views/home/components/textManager/index.vue"; Vue.use(VueRouter); const routes = [ { @@ -15,12 +13,16 @@ children:[ { path:"audioAnalysis", - component:AudioAnalysis + component:()=>import('@/views/home/components/audioAnalysis/index.vue') }, { path:"textManager", - component:TextManager - } + component:()=>import('@/views/home/components/textManager/index.vue') + }, + { + path:"uploadAudio", + component:()=>import('@/views/home/components/uploadAudio/index.vue') + }, ] } ]; diff --git a/src/utils/modules/axiosUtil.js b/src/utils/modules/axiosUtil.js index d63b835..908c93b 100644 --- a/src/utils/modules/axiosUtil.js +++ b/src/utils/modules/axiosUtil.js @@ -3,8 +3,8 @@ import router from "../../router"; //1.璁剧疆鍩虹璺緞(鑳藉缁熶竴绠$悊鎺ュ彛鐨勬湇鍔″櫒鍦板潃) 閰嶇疆鎺ュ彛鐨勬湇鍔″櫒鍦板潃 //http://localhost:3001:鏈嶅姟鍣ㄥ湴鍧�锛堝紑鍙戠幆澧冿紝娴嬭瘯鐜锛岀敓浜х幆澧冿級 -export const BASE_URL="http://localhost:3001"; -axios.defaults.baseURL=process.env.VUE_APP_BASE_API; +//export const BASE_URL="http://localhost:3001"; +//axios.defaults.baseURL=process.env.VUE_APP_BASE_API; //2.缁熶竴鎷︽埅璇锋眰 寰�璇锋眰澶翠腑璁剧疆token(鍚庣闇�瑕佹牴鎹姹傚ご涓殑token锛岃繘琛岃韩浠介獙璇佷箣鍚庢墠鍙互鍘昏闂帴鍙�) //request 璇锋眰瀵硅薄(鐢ㄦ潵缁欏悗绔紶閫掓暟鎹殑) axios.interceptors.request.use(request=>{ @@ -29,7 +29,6 @@ } return data;//灏辨槸鍚庣鍝嶅簲鐨勬暟鎹� }); - export const request=axios; diff --git a/src/views/home/components/audioAnalysis/components/Analysis.vue b/src/views/home/components/audioAnalysis/components/Analysis.vue index 1d0edbf..d379ee4 100644 --- a/src/views/home/components/audioAnalysis/components/Analysis.vue +++ b/src/views/home/components/audioAnalysis/components/Analysis.vue @@ -13,7 +13,6 @@ <a-player :music="audio[0]" :list="audio" - autoplay /> </el-card> </div> @@ -22,24 +21,33 @@ <el-card height="420px"> <h3>璇煶璇嗗埆</h3> <div class="status"> - <span>寮傚父</span> + <span v-if="lookAudio.audioStatus===0">涓婁紶涓�</span> + <span v-else-if="lookAudio.audioStatus===1" style="color: green">姝e父</span> + <span v-else-if="lookAudio.audioStatus===2">澶勭悊涓�</span> + <span v-else-if="lookAudio.audioStatus===3">寮傚父</span> </div> - <div class="title"> + <!--<div class="title"> <div>鏃堕棿</div> <div>璇煶</div> - </div> + </div>--> <div class="timeline-container"> - <el-timeline style="margin-top: 20px"> - <el-timeline-item v-for="i in 10" placement="top"> - <div class="time-line"> - <div class="time"> - <div>2018/4/12 20:46</div> - <div>2018/4/12 20:46</div> - </div> - <div class="description">杞﹁締鍚姩浜�</div> - </div> - </el-timeline-item> - </el-timeline> + <div v-if="lookAudio.audioText==''"> + <el-empty description="鏆傛棤鏁版嵁"></el-empty> + </div> + <div v-else> + {{lookAudio.audioText}} + </div> + <!--<el-timeline style="margin-top: 20px">--> + <!--<el-timeline-item v-for="i in 10" placement="top">--> + <!--<div class="time-line">--> + <!--<div class="time">--> + <!--<div>2018/4/12 20:46</div>--> + <!--<div>2018/4/12 20:46</div>--> + <!--</div>--> + <!--<div class="description">杞﹁締鍚姩浜�</div>--> + <!--</div>--> + <!--</el-timeline-item>--> + <!--</el-timeline>--> </div> </el-card> </div> @@ -47,10 +55,10 @@ <el-card style="height: 420px"> <h3>闊抽璇︽儏</h3> <div> - 杞﹀彿锛歋S4B115<br/> - 杞︽锛�8040<br> - 鏃堕棿锛�2020-09-21 20:45:08<br/> - 鍙告満锛欰20<br> + 杞﹀彿锛歿{lookAudio.locomotiveNumber}}<br/> + 杞︽锛歿{lookAudio.trainNumber}}<br> + 鏃堕棿锛歿{lookAudio.occurrenceTime}}<br/> + 鍙告満锛歿{lookAudio.driverNumber}}<br> </div> </el-card> </div> @@ -68,7 +76,11 @@ APlayer }, props:{ - modalAudio:{type:Boolean,default:false} + modalAudio:{type:Boolean,default:false}, + lookAudio:{ + type:Object, + default:()=>({}) + } }, data(){ return { diff --git a/src/views/home/components/audioAnalysis/index.vue b/src/views/home/components/audioAnalysis/index.vue index c980ae0..bcc5651 100644 --- a/src/views/home/components/audioAnalysis/index.vue +++ b/src/views/home/components/audioAnalysis/index.vue @@ -3,11 +3,11 @@ <div class="search"> <el-form :inline="true" class="demo-form-inline"> <el-form-item label=""> - <el-input v-model="whereCar.keyword" size="small" placeholder="璇疯緭鍏ュ徃鏈猴紝杞︽锛岃溅鍙风瓑鍏抽敭瀛楄繘琛屾悳绱�" style="width: 300px"></el-input> + <el-input v-model="whereTrain.keyword" size="small" placeholder="璇疯緭鍏ュ徃鏈猴紝杞︽锛岃溅鍙风瓑鍏抽敭瀛楄繘琛屾悳绱�" style="width: 300px"></el-input> </el-form-item> <el-form-item label=""> <el-date-picker - v-model="whereCar.date" + v-model="searchDateTime" type="daterange" size="small" align="right" @@ -28,7 +28,7 @@ 宸查�夋潯浠�: <span v-if="tagList.length>0"> <el-tag class="tag-cla" effect="plain" closable v-for="(tag,index) in tagList" @close="closeTag(index)"> - <span>{{tag.filterType}}:</span> <span style="color: red">{{tag.value}}</span> + <span>{{tag.label}}:</span> <span style="color: red">{{tag.value}}</span> </el-tag> </span> <span v-else style="color: lightgray;font-size: 12px">杩樻湭閫夋嫨绛涢�夋潯浠�</span> @@ -42,8 +42,8 @@ <div class="title">杞﹀彿:</div> <div class="list"> <div class="default"> - <div v-for="(carNo,index) in carNoList" v-if="index<=(carNoBtn.moreStatus?carNoList.length-1:9)"> - <el-checkbox v-show="carNoBtn.manySel" checked/>{{carNo}} + <div @click="selTrain(carNo)" v-for="(carNo,index) in carNoList" v-if="index<=(carNoBtn.moreStatus?carNoList.length-1:9)"> + <el-checkbox v-show="carNoBtn.manySel" checked/>{{carNo.name}} </div> <div style="width: 100%;text-align: center" v-show="carNoBtn.manySel"> <el-button type="primary" size="mini">纭畾</el-button> @@ -51,8 +51,8 @@ </div> </div> <div class="btn"> - <el-button size="mini" @click="carNoBtn.moreStatus=!carNoBtn.moreStatus">鏇村<i :class="carNoBtn.moreStatus?'el-icon-arrow-up':'el-icon-arrow-down'"></i></el-button> - <el-button size="mini" @click="manySelect">澶氶��<i class="el-icon-plus"></i></el-button> + <el-button size="mini" :disabled="carNoList.length<=10" @click="carNoBtn.moreStatus=!carNoBtn.moreStatus">鏇村<i :class="carNoBtn.moreStatus?'el-icon-arrow-up':'el-icon-arrow-down'"></i></el-button> + <!--<el-button size="mini" @click="manySelect">澶氶��<i class="el-icon-plus"></i></el-button>--> </div> </div> </div> @@ -60,12 +60,12 @@ <div class="title">杞︽:</div> <div class="list" style="border-top: none"> <div class="default"> - <div v-for="(carTime,index) in carTimeList" v-if="index<=(carTimeBtn?carTimeList.length-1:9)"> - {{carTime}} + <div @click="selTrain(carTime)" v-for="(carTime,index) in carTimeList" v-if="index<=(carTimeBtn?carTimeList.length-1:9)"> + {{carTime.name}} </div> </div> <div class="btn"> - <el-button size="mini" @click="carTimeBtn=!carTimeBtn">鏇村<i :class="carTimeBtn?'el-icon-arrow-up':'el-icon-arrow-down'"></i></el-button> + <el-button size="mini" :disabled="carTimeList.length<=10" @click="carTimeBtn=!carTimeBtn">鏇村<i :class="carTimeBtn?'el-icon-arrow-up':'el-icon-arrow-down'"></i></el-button> </div> </div> </div> @@ -73,10 +73,10 @@ <div class="title">杞︾珯鍙�:</div> <div class="list" style="border-top: none"> <div class="default"> - <div v-for="(carState,index) in carStateList" v-if="index<=(carStateBtn?carStateList.length-1:9)">{{carState}}</div> + <div @click="selTrain(carState)" v-for="(carState,index) in carStateList" v-if="index<=(carStateBtn?carStateList.length-1:9)">{{carState.name}}</div> </div> <div class="btn"> - <el-button size="mini" @click="carStateBtn=!carStateBtn">鏇村<i :class="carStateBtn?'el-icon-arrow-up':'el-icon-arrow-down'"></i></el-button> + <el-button size="mini" :disabled="carStateList.length<=10" @click="carStateBtn=!carStateBtn">鏇村<i :class="carStateBtn?'el-icon-arrow-up':'el-icon-arrow-down'"></i></el-button> </div> </div> @@ -84,16 +84,16 @@ </div> <div class="audio-filter"> <div> - <el-select size="mini" v-model="whereAudio.isState"> - <el-option value="0" label="鏈叧娉�"></el-option> - <el-option value="1" label="宸插叧娉�"></el-option> - <el-option value="2" label="鍏ㄩ儴"></el-option> + <el-select size="mini" v-model="whereTrain.isFollowed"> + <el-option :value="0" label="鍏ㄩ儴"></el-option> + <el-option :value="1" label="宸插叧娉�"></el-option> + <el-option :value="2" label="鏈叧娉�"></el-option> </el-select> - <el-select size="mini" style="margin-left: 10px" v-model="whereAudio.status"> - <el-option value="0" label="姝e父"></el-option> - <el-option value="1" label="寮傚父"></el-option> - <el-option value="2" label="鍏ㄩ儴"></el-option> - </el-select> + <!-- <el-select size="mini" style="margin-left: 10px" v-model="whereTrain.audioStatus"> + <el-option :value="0" label="鍏ㄩ儴"></el-option> + <el-option :value="1" label="姝e父"></el-option> + <el-option :value="4" label="寮傚父"></el-option> + </el-select>--> </div> <div class="icon"> <div @click="audioListType='table'" :class="{'border-cla':audioListType==='table'}"> @@ -105,8 +105,8 @@ </div> </div> <div v-if="audioListType=='table'" class="audio-list-table"> - <div class="item" v-for="i in 8"> - <div class="head" @click="modalAudio=true"> + <div class="item" v-for="audio in pageInfo.audioList" :key="audio.ID"> + <div class="head" @click="processAudio(audio)"> <img :src="`${publicPath}images/audio/u230.png`"/> <img :src="`${publicPath}images/audio/u231.png`" class="player"/> <div class="time">06:20</div> @@ -114,33 +114,56 @@ <div class="body"> <div class="carNo"> <div> - 杞﹀彿锛歋S4B115<br/> - 杞︽锛�8040<br> - 鏃堕棿锛�2020-09-21 20:45:08<br/> - 鍙告満锛欰20<br> + 杞﹀彿锛歿{audio.locomotiveNumber}}<br/> + 杞︽锛歿{audio.trainNumber}}<br> + 鏃堕棿锛歿{audio.occurrenceTime}}<br/> + 鍙告満锛歿{audio.driverNumber}}<br> </div> - <div class="status">寮傚父</div> + <div class="status"> + <span v-if="audio.audioStatus===0">涓婁紶涓�</span> + <span v-else-if="audio.audioStatus===1" style="color: green">姝e父</span> + <span v-else-if="audio.audioStatus===2">澶勭悊涓�</span> + <span v-else-if="audio.audioStatus===3">寮傚父</span> + </div> </div> - <div style="text-align: right;margin-right: 10px"> - <el-rate :max="1"></el-rate> + <div style="text-align: right;margin-right: 10px;"> + <el-rate :max="1" :value="audio.IsFollowed===1?1:0" @change="isFollowChange(audio)"></el-rate> </div> - <div class="tag"> - <div>鐏溅鍒扮珯</div> - <div>鐏溅鍚姩</div> - <div>鐏溅楦g瑳</div> + <div class="tag" v-if="Array.isArray(audio.words)"> + <div v-for="item in audio.words">{{item}}</div> + </div> + <div class="tag-no" v-else> + <div> </div> + <div> </div> + <div> </div> </div> </div> </div> </div> <div v-else class="audio-list-menu"> - <el-table :data="audioList"> - <el-table-column prop="name" label="鍚嶇О" align="center"></el-table-column> - <el-table-column prop="size" label="澶у皬" align="center"></el-table-column> - <el-table-column prop="tag" label="鏍囩" align="center"></el-table-column> - <el-table-column prop="editDate" label="淇敼鏃堕棿" align="center"></el-table-column> - <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" align="center"></el-table-column> + <el-table :data="pageInfo.audioList"> + <el-table-column prop="name" label="鍚嶇О" align="center" min-width="220px"></el-table-column> + <el-table-column prop="size" label="澶у皬" align="center" width="100px"></el-table-column> + <el-table-column prop="tag" label="鏍囩" align="center"> + <template slot-scope="scope"> + <span v-if="scope.row.words">{{scope.row.words.join(',')}}</span> + <span v-else>鏆傛棤鏍囩</span> + </template> + </el-table-column> + <el-table-column prop="UpdatedAt" label="淇敼鏃堕棿" align="center"> + <template slot-scope="scope"> + {{$moment(scope.row.UpdateAt).format('YYYY-MM-DD HH:mm:ss')}} + </template> + </el-table-column> + <el-table-column prop="CreatedAt" label="鍒涘缓鏃堕棿" align="center"> + <template slot-scope="scope"> + {{$moment(scope.row.CreateAt).format('YYYY-MM-DD HH:mm:ss')}} + </template> + </el-table-column> <el-table-column label="鎿嶄綔" align="center"> - <el-rate max="1"></el-rate> + <template slot-scope="scope"> + <el-rate :max="1" :value="scope.row.IsFollowed===1?1:0" @change="isFollowChange(scope.row)"></el-rate> + </template> </el-table-column> </el-table> </div> @@ -158,12 +181,13 @@ </el-pagination> </div> </div> - <Analysis :modal-audio.sync="modalAudio"></Analysis> + <Analysis :modal-audio.sync="modalAudio" :look-audio="lookAudio"></Analysis> </div> </template> <script> import Analysis from './components/Analysis.vue'; + import {audioListApi,trainListApi,followAudioApi,processAudioApi} from '@/api'; export default { name: "audioAnalysis", components:{ @@ -171,17 +195,15 @@ }, data(){ return { + lookAudio:{}, publicPath: process.env.BASE_URL, modalAudio:false, pageInfo:{ total:100, - textList:[] + audioList:[] }, pageData:{page:1,pageSize:10}, - whereAudio:{ - status:'2', - isState:'2' - }, + trainPageData:{page:1,pageSize:500}, audioListType:'table', carNoBtn:{ moreStatus:false, @@ -189,15 +211,13 @@ }, carTimeBtn:false, carStateBtn:false, - whereCar:{ + whereTrain:{ keyword:'', - date:'' + // audioStatus:'', + isFollowed:0 }, - tagList:[ - {filterType:'杞︽',value:'鍏ㄩ儴'}, - {filterType:'杞﹀彿',value:'鍏ㄩ儴'}, - {filterType:'杞︾珯鍙�',value:'鍏ㄩ儴'} - ], + searchDateTime:[], + tagList:[], pickerOptions: { shortcuts: [ { @@ -226,18 +246,9 @@ } }] }, - carNoList:['鍏ㄩ儴','K24','K24','K24','K24','K24','K24','K24','K24','K24','K24','K24','K24','K24','K24','K24'], - carTimeList:['鍏ㄩ儴','K24','K24','K24','K24','K24','K24','K24','K24','K24','K24','K24','K24','K24','K24','K24'], - carStateList:['鍏ㄩ儴','K24','K24','K24','K24','K24','K24','K24','K24','K24','K24','K24','K24','K24','K24','K24'], - audioList:[ - {name: '鐜嬪皬铏�1', size:'100MB', tag:'鐏溅鍑虹珯', createDate: '2016-05-02', editDate:'2016-05-02'}, - {name: '鐜嬪皬铏�2', size:'100MB', tag:'鐏溅鍑虹珯', createDate: '2016-05-02', editDate:'2016-05-02'}, - {name: '鐜嬪皬铏�3', size:'100MB', tag:'鐏溅鍑虹珯', createDate: '2016-05-02', editDate:'2016-05-02'}, - {name: '鐜嬪皬铏�4', size:'100MB', tag:'鐏溅鍑虹珯', createDate: '2016-05-02', editDate:'2016-05-02'}, - {name: '鐜嬪皬铏�5', size:'100MB', tag:'鐏溅鍑虹珯', createDate: '2016-05-02', editDate:'2016-05-02'}, - {name: '鐜嬪皬铏�6', size:'100MB', tag:'鐏溅鍑虹珯', createDate: '2016-05-02', editDate:'2016-05-02'}, - {name: '鐜嬪皬铏�7', size:'100MB', tag:'鐏溅鍑虹珯', createDate: '2016-05-02', editDate:'2016-05-02'} - ] + carNoList:[], + carTimeList:[], + carStateList:[], } }, computed:{ @@ -245,7 +256,63 @@ return Math.ceil(this.pageInfo.total/this.pageData.pageSize) } }, + watch:{ + pageData:{ + handler(){ + this.searchCar(); + }, + deep:true, + immediate:true + } + }, + mounted(){ + this.trainList(); + }, methods:{ + isFollowChange(item){ + this.$confirm(`${item.IsFollowed===1?'纭畾鍙栨秷鍏虫敞鍚�?':'纭畾鍏虫敞鍚�?'}`, `${item.IsFollowed===1?'鏄惁鍙栨秷鍏虫敞?':'鏄惁鍏虫敞?'}`, { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: `${item.IsFollowed===1?'warning':'info'}` + }).then(async () => { + const {code,data}=await followAudioApi(item.ID); + if(code===200){ + if(item.IsFollowed===1){ + this.$message.success('鍙栨秷鍏虫敞鎴愬姛'); + }else{ + this.$message.success('鍏虫敞鎴愬姛'); + } + this.searchCar(); + } + }).catch(()=>{}); + }, + selTrain(car){ + let searchIndex=-1; + this.tagList.forEach((item,index)=>{ + if((car.class===1&&item.label==='鏈鸿溅')||(car.class===2&&item.label==='杞︽')||(car.class===3&&item.label==='杞︾珯鍙�')){ + searchIndex=index; + } + }); + const obj ={value:car.name} + if(car.class===1){//鏈鸿溅鍙� + obj.label='鏈鸿溅' + }else if(car.class===2){//杞︽ + obj.label='杞︽' + }else if(car.class===3){//杞︾珯鍙� + obj.label='杞︾珯鍙�' + } + if(searchIndex==-1){ + this.tagList.push(obj); + }else{ + this.tagList.splice(searchIndex,1,obj); + } + }, + async processAudio(audio){ + this.modalAudio=true; + this.lookAudio={...audio}; + //const res=await processAudioApi(audio.ID); + //console.log(res); + }, handleSizeChange(pageSize){ this.pageData.pageSize=pageSize; }, @@ -256,8 +323,51 @@ this.carNoBtn.manySel=true; this.carNoBtn.moreStatus=true; }, - searchCar(){ - + async searchCar(){ + const params={...this.pageData,keyword:this.whereTrain.keyword} + if(this.whereTrain.isFollowed){ + params.isFollowed=this.whereTrain.isFollowed; + } + if(Array.isArray(this.searchDateTime)&&this.searchDateTime.length>1){ + params.beginTime=this.$moment(this.searchDateTime[0]).format('YYYY-MM-DDTHH:mm:ss.ms+08:00'); + params.endTime=this.$moment(this.searchDateTime[1]).format('YYYY-MM-DDTHH:mm:ss.ms+08:00'); + } + // if(this.whereTrain.audioStatus){ + // params.audioStatus=this.whereTrain.audioStatus; + // } + this.tagList.forEach(item=>{ + if(item.label==='鏈鸿溅'){ + params.locomotiveNumber=item.value; + }else if(item.label==='杞︽'){ + params.trainNumber =item .value; + }else if(item.label === '杞︾珯鍙�'){ + params.stationNumber=item.value; + } + }) + const {code,data,total}=await audioListApi(params) + if(code===200){ + this.pageInfo.audioList=data; + this.pageInfo.total=total; + } + }, + async trainList(){ + const {code,data} =await trainListApi({...this.trainPageData}); + if(code===200){ + this.carNoList=[]; + this.carTimeList=[]; + this.carStateList=[]; + if(Array.isArray(data)){ + data.forEach(item=>{ + if(item.class===1){//鏈鸿溅鍙� + this.carNoList.push(item); + }else if(item.class===2){//杞︽ + this.carTimeList.push(item); + }else if(item.class===3){//鏈鸿溅绔� + this.carStateList.push(item) + } + }); + } + } }, cancelManySel(){ this.carNoBtn.manySel=false; @@ -389,19 +499,23 @@ color: red; } } - .tag{ + .tag,.tag-no{ display: flex; justify-content: start; - margin-bottom: 30px; + margin-bottom: 20px; div{ width: 70px; font-size: 12px; - background-color: rgba(242, 242, 242, 1); margin-left: 10px; text-align: center; color: gray; } } + .tag{ + div{ + background-color: rgba(242, 242, 242, 1); + } + } } } } diff --git a/src/views/home/components/leftNav.vue b/src/views/home/components/leftNav.vue index 3c17578..c6209ba 100644 --- a/src/views/home/components/leftNav.vue +++ b/src/views/home/components/leftNav.vue @@ -9,6 +9,7 @@ <span v-show="!isCollapse" style="display:inline-block;width:180px;padding-left: 6px">璇煶鏅鸿兘鍒嗘瀽搴旂敤</span> </h1> <div class="menu-btn" v-show="!isCollapse"> + <div :class="{item:true,'is-active':$route.path==='/home/uploadAudio'}" @click="$router.push('/home/uploadAudio',()=>{})">闊抽涓婁紶</div> <div :class="{item:true,'is-active':$route.path==='/home/audioAnalysis'}" @click="$router.push('/home/audioAnalysis',()=>{})">闊抽鍒嗘瀽妫�绱�</div> <div :class="{item:true,'is-active':$route.path==='/home/textManager'}" @click="$router.push('/home/textManager',()=>{})">鏂囧瓧搴撶鐞�</div> </div> diff --git a/src/views/home/components/textManager/index.vue b/src/views/home/components/textManager/index.vue index a9c360a..2ab05f5 100644 --- a/src/views/home/components/textManager/index.vue +++ b/src/views/home/components/textManager/index.vue @@ -10,11 +10,11 @@ :destroy-on-close="true" > <el-form ref="textForm" class="demo-form-inline" label-width="120px" :model="textObj" :rules="textRules"> - <el-form-item label="鏂囧瓧鍐呭锛�" prop="textContent"> - <el-input v-model="textObj.textContent" placeholder="璇疯緭鍏ユ枃瀛楀唴瀹�"/> + <el-form-item label="鏂囧瓧鍐呭锛�" prop="content"> + <el-input v-model="textObj.content" placeholder="璇疯緭鍏ユ枃瀛楀唴瀹�"/> </el-form-item> <el-form-item label="杞﹀彿锛�"> - <el-input v-model="textObj.carNo" placeholder="璇疯緭鍏ヨ溅鍙�"/> + <el-input v-model="textObj.locomotiveNumber" placeholder="璇疯緭鍏ヨ溅鍙�"/> </el-form-item> </el-form> <span slot="footer" class="dialog-footer"> @@ -41,10 +41,14 @@ </div> <div> <el-table :data="pageInfo.textList" > - <el-table-column prop="id" label="搴忓彿" align="center" /> - <el-table-column prop="textContent" label="鏂囧瓧鍐呭" align="center" /> - <el-table-column prop="cid" label="杞﹀彿" align="center" /> - <el-table-column prop="date" label="娣诲姞鏃堕棿" align="center" /> + <el-table-column prop="ID" label="搴忓彿" align="center" /> + <el-table-column prop="content" label="鏂囧瓧鍐呭" align="center" /> + <el-table-column prop="locomotiveNumber" label="杞﹀彿" align="center" /> + <el-table-column prop="CreatedAt" label="娣诲姞鏃堕棿" align="center" > + <template slot-scope="scope"> + {{$moment(scope.row.CreatedAt).format('YYYY-MM-DD HH:mm:ss')}} + </template> + </el-table-column> </el-table> <div class="pagination"> <div class="total">鍏辫{{pageInfo.total}}鏉¤褰� 绗瑊{pageData.page}}/{{lastPage}}椤�</div> @@ -65,18 +69,19 @@ </template> <script> + import { getTextListApi,addTextApi} from '@/api'; export default { name: "textManager", data(){ return{ textRules:{ - textContent: [ + content: [ { required: true, message: '鍐呭涓嶈兘涓虹┖', trigger: 'blur' }, ], }, addModal:false, keyword:'', - textObj:{textContent:'',carNo:''}, + textObj:{content:'',locomotiveNumber:''}, pageInfo:{ total:100, textList:[] @@ -89,21 +94,22 @@ return Math.ceil(this.pageInfo.total/this.pageData.pageSize) } }, + watch:{ + pageData:{ + handler(){ + this.searchCar(); + }, + deep:true, + immediate:true + } + }, methods:{ - searchCar(){ - //鎼滅储 - this.pageInfo.textList=[ - {id:1, textContent: '鐏溅鍚姩', cid: 'k12', date: '2016-05-02'}, - {id:2, textContent: '鐏溅鍚姩', cid: 'k12', date: '2016-05-02'}, - {id:3, textContent: '鐏溅鍚姩', cid: 'k12', date: '2016-05-02'}, - {id:4, textContent: '鐏溅鍚姩', cid: 'k12', date: '2016-05-02'}, - {id:5, textContent: '鐏溅鍚姩', cid: 'k12', date: '2016-05-02'}, - {id:6, textContent: '鐏溅鍚姩', cid: 'k12', date: '2016-05-02'}, - {id:7, textContent: '鐏溅鍚姩', cid: 'k12', date: '2016-05-02'}, - {id:8, textContent: '鐏溅鍚姩', cid: 'k12', date: '2016-05-02'}, - {id:9, textContent: '鐏溅鍚姩', cid: 'k12', date: '2016-05-02'}, - {id:10, textContent: '鐏溅鍚姩', cid: 'k12', date: '2016-05-02'} - ]; + async searchCar(){ + const {code,data,total}=await getTextListApi({keyword:this.keyword,...this.pageData}); + if(code===200){ + this.pageInfo.textList=data; + this.pageInfo.total=total; + } }, handleSizeChange(pageSize){ this.pageData.pageSize=pageSize; @@ -111,16 +117,25 @@ handleCurrentChange(page){ this.pageData.page=page; }, + resetFormData(){ + this.addModal=false; + this.textObj={content:'',locomotiveNumber:''} + }, addText(){ this.$refs.textForm.validate((valid) => { if(valid){ - + addTextApi(this.textObj).then(({code})=>{ + if(code===200){ + this.$message.success('娣诲姞鎴愬姛'); + this.resetFormData(); + this.searchCar(); + }else{ + this.$message.warning('娣诲姞澶辫触') + } + }); } }) } - }, - mounted(){ - this.searchCar(); } } </script> diff --git a/src/views/home/components/uploadAudio/index.vue b/src/views/home/components/uploadAudio/index.vue new file mode 100644 index 0000000..2c870c1 --- /dev/null +++ b/src/views/home/components/uploadAudio/index.vue @@ -0,0 +1,264 @@ +<template> + <div class="upload-audio-container"> + <div class="left"> + <el-form :inline="true" class="demo-form-inline"> + <el-form-item label=""> + <el-input v-model.lazy="keyword" placeholder="璇疯緭鍏ユ悳绱㈠唴瀹�" suffix-icon="el-icon-search" size="small"></el-input> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="manyAnalysisAudio" icon="el-icon-video-play" plain size="mini">鎵归噺鍒嗘瀽</el-button> + <el-button type="danger" @click="deleteManyAudio" icon="el-icon-delete" plain size="mini">鎵归噺鍒犻櫎</el-button> + <el-upload + style="display: inline-block;margin-left: 10px" + action="/api-sa/v1/audio/upload" + :on-change="selFile" + accept=".mp3,.wav" + :show-file-list="false" + :on-success="upSuccess" + > + <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button> + </el-upload> + </el-form-item> + </el-form> + </div> + <div class="right"> + <el-tabs v-model="activeName"> + <el-tab-pane label="宸蹭笂浼�" name="first"> + <div> + <el-table :data="pageInfo.audioList" border @selection-change="selAudio"> + <el-table-column label='鍏ㄩ��' type="selection" align="center" /> + <el-table-column prop="name" label="鏂囦欢鍚�" min-width="200px" align="center" /> + <el-table-column prop="size" label="澶у皬" align="center" /> + <el-table-column prop="occurrenceTime" label="涓婁紶鏃堕棿" align="center" /> + <el-table-column prop="audioStatus" label="澶勭悊鐘舵��" align="center" > + <template slot-scope="scope"> + <span v-if="scope.row.audioStatus===0" style="color:wheat">涓婁紶涓�</span> + <span v-else-if="scope.row.audioStatus===1" style="color: blue">涓婁紶鎴愬姛</span> + <span v-else-if="scope.row.audioStatus===2" style="color: cyan">澶勭悊涓�</span> + <span v-else-if="scope.row.audioStatus===3" style="color: green">澶勭悊瀹屾垚</span> + <span v-else-if="scope.row.audioStatus===4" style="color: red">澶勭悊澶辫触</span> + </template> + </el-table-column> + <el-table-column label="鎿嶄綔" align="center" > + <template slot-scope="scope"> + <el-button icon="el-icon-video-play" @click="analysisAudio(scope.row.ID)" type="text"></el-button> + <el-button icon="el-icon-delete" type="text" @click="deleteAudio(scope.row.ID)"></el-button> + </template> + </el-table-column> + </el-table> + <div class="pagination"> + <div class="total">鍏辫{{pageInfo.total}}鏉¤褰� 绗瑊{pageData.page}}/{{lastPage}}椤�</div> + <div class="page"> + <el-pagination + background + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + :current-page.sync="pageData.page" + :page-size="pageData.pageSize" + layout="prev, pager, next,sizes, jumper" + :total="pageInfo.total"> + </el-pagination> + </div> + </div> + </div> + </el-tab-pane> + <el-tab-pane label="姝e湪涓婁紶" name="second"> + <!-- <el-skeleton style="width: 100%" :loading="isUpload" animated> + <template slot="template"> + <div style="padding: 14px;"> + <el-skeleton-item variant="h3" style="width: 100%;height: 40px" /> + </div> + </template> + </el-skeleton>--> + <div> + <el-skeleton animated :loading="isUpload"> + <template slot="template"> + <div style="padding: 14px;"> + <el-skeleton-item style="width: 100%;height: 40px" /> + </div> + </template> + </el-skeleton> + </div> + </el-tab-pane> + </el-tabs> + </div> + </div> +</template> + +<script> + import {audioListApi,processAudioApi,deleteAudioApi,batchProcessAudioApi,batchDeleteAudioApi} from '@/api'; + export default { + name: "index", + data(){ + return { + isUpload:false, + activeName:'first', + keyword:'', + pageInfo:{ + audioList:[], + total:0 + }, + pageData:{page:1,pageSize:10}, + ids:[] + } + }, + watch:{ + pageData:{ + handler(){ + this.queryAudioList(); + }, + deep:true, + immediate:true + }, + keyword:{ + handler(){ + this.queryAudioList(); + } + }, + }, + computed:{ + lastPage(){ + return Math.ceil(this.pageInfo.total/this.pageData.pageSize) + } + }, + methods:{ + upSuccess({code}){ + if(code===200){ + this.$message.success('涓婁紶鎴愬姛'); + this.queryAudioList(); + }else{ + this.$message.warning('涓婁紶澶辫触'); + } + this.$nextTick(()=>{ + this.isUpload=false; + }); + }, + selFile(file,fileList){ + this.activeName='second'; + this.isUpload=true; + }, + selAudio(rows){ + this.ids=rows.map(item=>item.ID); + }, + handleSizeChange(pageSize){ + this.pageData.pageSize=pageSize; + }, + handleCurrentChange(page){ + this.pageData.page=page; + }, + async queryAudioList(){ + // status 0 鏈厤缃鍒� 1 澶勭悊涓� 2 澶勭悊瀹屾垚 + const {code,data,total}=await audioListApi({...this.pageData,keyword:this.keyword}); + if(code===200){ + this.pageInfo.audioList=data; + this.pageInfo.total=total; + } + /*this.pageInfo.audioList=[ + {filename:'0_20240519_xx_01.mp3',size:'879.88k',uploadAt:'2024-05-10 10:10:10',status:0}, + {filename:'0_20240519_xx_02.mp3',size:'879.88k',uploadAt:'2024-05-10 10:10:10',status:1}, + {filename:'0_20240519_xx_03.mp3',size:'879.88k',uploadAt:'2024-05-10 10:10:10',status:0}, + {filename:'0_20240519_xx_04.mp3',size:'879.88k',uploadAt:'2024-05-10 10:10:10',status:1}, + {filename:'0_20240519_xx_05.mp3',size:'879.88k',uploadAt:'2024-05-10 10:10:10',status:2}, + {filename:'0_20240519_xx_06.mp3',size:'879.88k',uploadAt:'2024-05-10 10:10:10',status:2}, + ]*/ + }, + analysisAudio(id){ + this.$confirm('鏄惁杩涜闊抽鍒嗘瀽, 鏄惁缁х画?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'success' + }).then(async() => { + const {code}=await processAudioApi(id); + if(code===200){ + this.$message.success('闊抽鍒嗘瀽瀹屾垚'); + this.queryAudioList(); + }else{ + this.$message.success('闊抽鍒嗘瀽澶辫触'); + } + }).catch(() =>{}); + }, + deleteAudio(id){ + this.$confirm('鏄惁鍒犻櫎闊抽, 鏄惁缁х画?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'success' + }).then(async() => { + const {code}=await deleteAudioApi(id); + if(code===200){ + this.$message.success('闊抽鍒犻櫎鎴愬姛'); + this.queryAudioList(); + }else{ + this.$message.success('闊抽鍒犻櫎澶辫触'); + } + }).catch(() =>{}); + }, + manyAnalysisAudio(){ + if(this.ids.length>0){ + this.$confirm('鏄惁杩涜鎵归噺鍒嗘瀽, 鏄惁缁х画?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'success' + }).then(async() => { + const {code}=await batchProcessAudioApi(this.ids); + if(code===200){ + this.$message.success('鎵归噺鍒嗘瀽鎴愬姛'); + this.queryAudioList(); + }else{ + this.$message.success('鎵归噺鍒嗘瀽澶辫触'); + } + }).catch(() =>{}); + }else{ + this.$message.warning('璇峰厛閫夋嫨鎮ㄨ鍒嗘瀽鐨勯煶棰�!') + } + }, + deleteManyAudio(){ + if(this.ids.length>0){ + this.$confirm('鏄惁杩涜鎵归噺鍒犻櫎, 鏄惁缁х画?', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(async() => { + const {code}=await batchDeleteAudioApi(this.ids); + if(code===200){ + this.$message.success('鎵归噺鍒犻櫎鎴愬姛'); + this.queryAudioList(); + }else{ + this.$message.success('鎵归噺鍒犻櫎澶辫触'); + } + }).catch(() =>{}); + }else{ + this.$message.warning('璇峰厛閫夋嫨鎮ㄨ鍒犻櫎鐨勯煶棰�!') + } + } + } + } +</script> + +<style scoped lang="scss"> + .upload-audio-container{ + .left{ + position: relative; + z-index: 100; + width: 80%; + text-align: right; + margin-left: 20%; + } + .right{ + position: relative; + top:-60px; + } + .pagination{ + display: flex; + justify-content: space-between; + margin-top: 50px; + .total{ + color: gray; + } + } + } + ::v-deep{ + .el-tabs__nav-wrap::after{ + display: none; + } + } +</style> \ No newline at end of file diff --git a/vue.config.js b/vue.config.js index f6b7e38..2b0aabc 100644 --- a/vue.config.js +++ b/vue.config.js @@ -1,6 +1,14 @@ const { defineConfig } = require('@vue/cli-service'); const buildConfig ={outputDir:"dist", publicPath:"./", assetsDir:"static"}; +const path=require("path"); const config={ + configureWebpack:{ + resolve: { + alias: { + '@': path.join(__dirname,'./src') + } + } + }, transpileDependencies: true, devServer:{ host:"localhost", @@ -17,9 +25,9 @@ [process.env.VUE_APP_BASE_API]:{ target: process.env.VUE_APP_BASE_URL, changeOrigin: true, - pathRewrite: { - ['^'+process.env.VUE_APP_BASE_API]: '' - } + // pathRewrite: { + // ['^'+process.env.VUE_APP_BASE_API]: '' + // } } } } -- Gitblit v1.8.0