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