Browse Source

语音播报管理 完成

cxmo 11 months ago
parent
commit
913686eed9
1 changed files with 239 additions and 2 deletions
  1. 239 2
      src/views/operation_manage/voice_manage/components/voicePlate.vue

+ 239 - 2
src/views/operation_manage/voice_manage/components/voicePlate.vue

@@ -1,10 +1,247 @@
 <script setup>
 import { ref, reactive } from 'vue'
+import { QuestionFilled } from '@element-plus/icons-vue'
+import { interactiveInterface,customInterence } from '@/api/api'
+import { ElMessage } from 'element-plus'
+
+const tableColumns = [
+    {label:'版块名称',key:'SectionName'},
+    {label:'品种',key:'VarietyName'},
+    {label:'状态',key:'Status',width:'200'},
+]
+let tableData = ref([{}])
+let tableParams = reactive({
+    pageNo:1,
+    pageSize:10,
+    totals:0
+})
+function handleCurrentChange(page){
+    tableParams.pageNo = page
+    getTableData()
+}
+async function getTableData(){
+    const res = await interactiveInterface.voiceList({
+        CurrentIndex: tableParams.pageNo,
+        PageSize:tableParams.pageSize
+    })
+    if(res.Ret!==200) return
+    const { List,Paging } = res.Data;
+
+    tableData.value = List || [];
+    tableParams.totals = Paging.Totals;
+}
+getTableData()
+
+let isEdit = ref(false)
+let showAdd = ref(false)
+let formData = reactive({
+    name:'',
+    classify:'',
+    shareImg:'',
+    id:''
+})
+function handelShowAdd(data){
+    isEdit.value = data.SectionId?true:false
+    formData.name = data.SectionName||''
+    formData.classify = data.VarietyId||''
+    formData.shareImg = data.ImgUrl||''
+    formData.id = data.SectionId||''
+    showAdd.value = true
+}
+let classifyArr = ref([])
+let cascaderRef = ref(null)
+async function getClassifyList(){
+    const res = await customInterence.getvariety({CompanyType:"ficc"})
+    if(res.Ret!==200) return 
+    classifyArr.value = res.Data.List||[]
+}
+getClassifyList()
+function handleUpload(e){
+    let form = new FormData();
+    form.append('file',e.file);
+    customInterence.upload(form).then(res=>{
+        if(res.Ret===200){
+            formData.shareImg=res.Data.ResourceUrl
+        }
+    })
+}
+//编辑/保存板块
+async function handleAdd(){
+    if(!formData.name){
+        ElMessage.warning('请输入板块名称')
+        return
+    }
+    if(!formData.classify){
+        ElMessage.warning('请选择品种')
+        return
+    }
+    if(!formData.shareImg){
+        ElMessage.warning('请上传分享图片')
+        return
+    }
+    const params = formData.id
+        ?{
+            SectionId:Number(formData.id),
+            SectionName:formData.name,
+            ImgUrl:formData.shareImg
+        }
+        :{
+            SectionName:formData.name,
+            VarietyId:Number(formData.classify),
+            VarietyName:cascaderRef.value.getCheckedNodes()[0].label||'',
+            ImgUrl:formData.shareImg
+        }
+    const apiName = formData.id?'editVoiceSection':'addVoiceSection'
+    const res = await interactiveInterface[apiName](params)
+    if(res.Ret!==200) return
+    ElMessage.success(formData.id?'编辑成功':'添加成功')
+    handleCurrentChange(1)
+    showAdd.value = false
+}
+//启用/禁用
+async function handleOptItem(data){
+    const res = await interactiveInterface.editVoiceSection({
+        SectionId:Number(data.SectionId),
+        Enable:data.Status==1?0:1
+    })
+    if(res.Ret===200){
+        ElMessage.success(`${data.Status==1?'禁用':'启用'}成功`)
+        getTableData()
+    }
+}
 </script>
 
 <template>
-    <div>
-        板块配置
+    <div class="voice-plate-wrap">
+        <div>
+            <el-button type="primary" @click="handelShowAdd({})">新建板块</el-button>
+        </div>
+        <div style="margin-top:30px">
+            <el-table
+                :data="tableData"
+                border
+                style="width: 100%"
+            >
+                <el-table-column v-for="column in tableColumns" :key="column.key"
+                    :prop="column.key"
+                    :label="column.label"
+                    :width="column.width"
+                    align="center"
+                >
+                    <template #default="{row}">
+                        <span v-if="column.key==='Status'" :style="{color:row.Status===1?'':'#ef0000'}">{{row.Status===1?'启用':'禁用'}}</span>
+                        <span v-else>{{ row[column.key] }}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                    width="200"
+                    align="center"
+                >
+                    <template #header>
+                        <el-tooltip 
+                            effect="dark" 
+                            content="禁用后不可选择该版块新增语音播报,不影响历史数据;" 
+                            placement="top-start"
+                        >   
+                            <div style="display: flex;align-items: center;justify-content: center;">
+                                <span>操作</span>
+                                <el-icon><QuestionFilled /></el-icon>
+                            </div>
+                        </el-tooltip>
+                    </template>
+                    <template #default="{row}">
+                        <span style="color:#409EFF;cursor:pointer;margin-right:5px" @click="handelShowAdd(row)">编辑</span>
+                        <span :style="{color:row.Status===1?'#ef0000':'#409EFF',cursor:'pointer'}" @click="handleOptItem(row)">{{row.Status===1?'禁用':'启用'}}</span>
+                    </template>
+                </el-table-column>
+                <template slot="empty">
+                    <div style="margin:50px 0">
+                        <img style="width:150px" src="~@/assets/img/cus_m/nodata.png" alt="">
+                        <div>暂无数据~</div>
+                    </div>
+                </template>
+            </el-table>
+            <el-pagination
+                layout="total,prev,pager,next,jumper" 
+                background
+                :current-page="tableParams.pageNo"
+                @current-change="handleCurrentChange"
+                :page-size="tableParams.pageSize" 
+                :total="tableParams.totals"
+                style="float:right;margin-top:20px">
+            </el-pagination>
+        </div>
+        <!-- 新增板块弹窗 -->
+        <el-dialog
+            v-model="showAdd"
+            :close-on-click-modal="false"
+            :modal-append-to-body='false'
+            custom-class="dialog"
+            center
+            width="700px"
+            :title="isEdit?'编辑板块':'新建版块'"
+            @close="showAdd=false"
+        >
+            <div class="dialog-container">
+                <el-form
+                    ref="formRef"
+                    label-position="left"
+                    hide-required-asterisk
+                    label-width="80px"
+                    :model="formData"
+                >
+                    <el-form-item 
+                        label="版块名称" 
+                        prop="name"
+                    >
+                        <el-input
+                            style="width:400px"
+                            v-model="formData.name"
+                            placeholder="请输入板块名称"
+                        />
+                    </el-form-item>
+                    <el-form-item 
+                        label="品种" 
+                        prop="classify"
+                    >
+                        <el-cascader 
+                            class="voice-plate-cascader"
+                            v-model="formData.classify"
+                            placeholder="请选择品种"
+                            :options="classifyArr" 
+                            :props="{value:'ChartPermissionId',label:'ClassifyName',children:'Items',emitPath:false}"
+                            :show-all-levels="false"
+                            ref="cascaderRef"
+                            :disabled="isEdit"
+                        ></el-cascader>
+                    </el-form-item>
+                    <el-form-item 
+                        label="分享图片" 
+                        prop="shareImg"
+                    >
+                        <el-input
+                            style="width:400px"
+                            v-model="formData.shareImg"
+                            placeholder="请上传分享图片"
+                            readonly
+                        />
+                        <el-upload
+                            style="display: inline-block;margin-left:5px"
+                            action=""
+                            accept="image/*"
+                            :http-request="handleUpload"
+                            :show-file-list="false"
+                        >
+                            <el-button type="primary">选择图片</el-button>
+                        </el-upload>
+                    </el-form-item>
+                    <div style="text-align:center;margin:30px 0">
+                        <el-button type="primary" plain style="width:100px" @click="showAdd=false">取消</el-button>
+                        <el-button type="primary" style="margin-left:30px;width:100px" @click="handleAdd">保存</el-button>
+                    </div>
+                </el-form>
+            </div>
+        </el-dialog>
     </div>
 </template>