|
@@ -3,13 +3,17 @@
|
|
|
<div class="layout-padding-auto layout-padding-view pd20">
|
|
|
<div class="flex-center-between mb20">
|
|
|
<p class="table-title">信息列表</p>
|
|
|
- <div v-auth="'300202'">
|
|
|
- <el-button type="primary" @click="onAddTelsGroup" v-waves>
|
|
|
+ <div>
|
|
|
+ <el-button type="primary" @click="onAddTelsGroup" v-waves v-auth="'300202'">
|
|
|
<SvgIcon name="ele-Plus" class="mr5" />新增分机组
|
|
|
</el-button>
|
|
|
+ <el-button type="primary" v-waves @click="onImportTable">
|
|
|
+ <SvgIcon name="iconfont icon-daochu" class="mr5"/>导出
|
|
|
+ </el-button>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <el-table :data="list" v-loading="loading" height="100%">
|
|
|
+ <el-table :data="tableData" v-loading="loading" row-key="id" @selection-change="handleSelectionChange">
|
|
|
+ <el-table-column type="selection" width="55" :reserve-selection="true"/>
|
|
|
<el-table-column prop="no" label="编号" show-overflow-tooltip></el-table-column>
|
|
|
<el-table-column prop="name" label="分机组名称" show-overflow-tooltip></el-table-column>
|
|
|
<el-table-column prop="distributionText" label="呼叫分配方式" show-overflow-tooltip></el-table-column>
|
|
@@ -77,7 +81,7 @@
|
|
|
<el-form-item label="选择分机" prop="telNos"
|
|
|
:rules="[{ required: true, message: '请选择分机', trigger: 'change' }]">
|
|
|
<el-transfer v-model="ruleForm.telNos" :titles="['所有分机', '已选分机']" :props="{ key: 'no' }"
|
|
|
- :data="data" :filterable="true">
|
|
|
+ :data="telsList" :filterable="true">
|
|
|
<template #default="{ option }">
|
|
|
<span>分机 - {{ option.no }}</span>
|
|
|
</template>
|
|
@@ -121,47 +125,68 @@ import { ElMessage, ElNotification } from 'element-plus';
|
|
|
import { storeToRefs } from 'pinia';
|
|
|
import { formatDate } from '/@/utils/formatTime';
|
|
|
import { useUserInfo } from '/@/stores/userInfo';
|
|
|
+import table2excel from 'js-table2excel';
|
|
|
// 引入需要的api
|
|
|
import { getTelsGroupList, addTelsGroup, updateTelsGroup, baseInfoTelsGroup } from '/@/api/deviceManagement/telsGroup';
|
|
|
import { getTelsList } from '/@/api/deviceManagement/tels';
|
|
|
import { voicequerylist } from '/@/api/deviceManagement/ivr';
|
|
|
|
|
|
-const loading = ref(false);
|
|
|
-const list = ref<any>([]);
|
|
|
-const voiceData = ref<any>([]); // 音频文件
|
|
|
+interface telsGroupState {
|
|
|
+ ruleForm:{
|
|
|
+ no: string; // 分机组编号
|
|
|
+ name: string; // 分机组名称
|
|
|
+ remark: string; // 分机组备注
|
|
|
+ telNos: Array<any>; //选择的分机
|
|
|
+ voiceList: Array<any>; //语音列表
|
|
|
+ voice: string; //格式化之后的语音列表
|
|
|
+ distribution:object; //呼叫分配方式
|
|
|
+ isDefault: boolean; //是否默认分组
|
|
|
+ }
|
|
|
+ distributions:Array<any>; //呼叫分配方式列表
|
|
|
+ loading:boolean;
|
|
|
+ tableData:Array<any>; //列表数据
|
|
|
+ voiceData:Array<any>; //音频文件
|
|
|
+ isShowDialog:boolean;
|
|
|
+ telsList:Array<any>; //分机列表
|
|
|
+ multipleSelection:Array<any>; //多选列表
|
|
|
+}
|
|
|
const dialogTitle = ref('配置分机组')
|
|
|
-const isShowDialog = ref(false);
|
|
|
-const data = ref<any>([]); //分机列表
|
|
|
-const state = reactive({
|
|
|
+const state = reactive<telsGroupState>({
|
|
|
ruleForm: {
|
|
|
no: '', // 分机组编号
|
|
|
name: '', // 分机组名称
|
|
|
remark: '', // 分机组备注
|
|
|
- telNos: [] as unknown as any, //选择的分机
|
|
|
- voiceList: <any>[],
|
|
|
+ telNos: [],
|
|
|
+ voiceList: [],
|
|
|
voice: "",
|
|
|
- distribution: null as unknown as number,
|
|
|
+ distribution:{},
|
|
|
isDefault: false
|
|
|
},
|
|
|
- distributions: [] as unknown as any
|
|
|
+ distributions: [],
|
|
|
+ loading:false,
|
|
|
+ tableData:[],
|
|
|
+ voiceData:[],
|
|
|
+ isShowDialog:false,
|
|
|
+ telsList:[],
|
|
|
+ multipleSelection:[]
|
|
|
})
|
|
|
const storesUserInfo = useUserInfo();
|
|
|
const { userInfos } = storeToRefs(storesUserInfo);
|
|
|
-const { ruleForm, distributions } = toRefs(state);
|
|
|
+const { ruleForm, distributions,loading,tableData,voiceData,isShowDialog,telsList } = toRefs(state);
|
|
|
/** 获取所有语音文件列表 */
|
|
|
const getAudioList = () => {
|
|
|
voicequerylist().then((response: any) => {
|
|
|
- voiceData.value = response.result.map((item: any) => {
|
|
|
+ state.voiceData = response.result.map((item: any) => {
|
|
|
return {
|
|
|
key: item,
|
|
|
label: item
|
|
|
}
|
|
|
})
|
|
|
setTimeout(() => {
|
|
|
- loading.value = false;
|
|
|
+ state.loading = false;
|
|
|
}, 300);
|
|
|
}).catch(() => {
|
|
|
- loading.value = false;
|
|
|
+ state.loading = false;
|
|
|
});
|
|
|
if (userInfos.value.authBtnList.includes('300201')) { // 校验是否有权限 页面基础信息
|
|
|
baseInfoTelsGroup().then((res: any) => {// 获取页面基础信息
|
|
@@ -178,18 +203,18 @@ const getAudioList = () => {
|
|
|
};
|
|
|
/** 获取分机列表 */
|
|
|
const getList = () => {
|
|
|
- loading.value = true;
|
|
|
+ state.loading = true;
|
|
|
getTelsGroupList().then((response: any) => {
|
|
|
- list.value = response?.result ?? [];
|
|
|
- for (let i of list.value) {
|
|
|
+ state.tableData = response?.result ?? [];
|
|
|
+ for (let i of state.tableData) {
|
|
|
i.voiceList = i.voice ? i.voice.split('+') : [];
|
|
|
i.telNos = i.tels;
|
|
|
}
|
|
|
setTimeout(() => {
|
|
|
- loading.value = false;
|
|
|
+ state.loading = false;
|
|
|
}, 300);
|
|
|
}).catch(() => {
|
|
|
- loading.value = false;
|
|
|
+ state.loading = false;
|
|
|
});
|
|
|
};
|
|
|
const configure = (row: any) => { //配置分机
|
|
@@ -204,7 +229,7 @@ const configure = (row: any) => { //配置分机
|
|
|
} else {
|
|
|
state.ruleForm.telNos = <any>[]
|
|
|
}
|
|
|
- isShowDialog.value = true;
|
|
|
+ state.isShowDialog = true;
|
|
|
}
|
|
|
const ruleFormRef = ref();
|
|
|
const onAddTelsGroup = () => {//新增分机组
|
|
@@ -213,26 +238,26 @@ const onAddTelsGroup = () => {//新增分机组
|
|
|
ruleFormRef.value.clearValidate();
|
|
|
ruleFormRef.value.resetFields();
|
|
|
}
|
|
|
- if (list.value.length) {
|
|
|
+ if (state.tableData.length) {
|
|
|
state.ruleForm = {
|
|
|
- no: String(Number(list.value.length + 1)), // ivr编号
|
|
|
+ no: String(Number(state.tableData.length + 1)), // ivr编号
|
|
|
name: '', // 分机组名称
|
|
|
remark: '', // 分机组备注
|
|
|
- telNos: [] as unknown as any, //选择的分机
|
|
|
- voiceList: <any>[],
|
|
|
+ telNos: [],
|
|
|
+ voiceList: [],
|
|
|
voice: "",
|
|
|
- distribution: null as unknown as number,
|
|
|
+ distribution:{},
|
|
|
isDefault: false
|
|
|
}
|
|
|
} else {
|
|
|
state.ruleForm.no = '1';
|
|
|
}
|
|
|
- isShowDialog.value = true;
|
|
|
+ state.isShowDialog = true;
|
|
|
}
|
|
|
/** 获取分机列表 */
|
|
|
const getTelList = () => {
|
|
|
getTelsList().then((response: any) => {
|
|
|
- data.value = response?.result ?? [];
|
|
|
+ state.telsList = response?.result ?? [];
|
|
|
}).catch(() => {
|
|
|
|
|
|
});
|
|
@@ -243,17 +268,17 @@ const save = () => { // 保存分机组配置
|
|
|
if (state.ruleForm.voiceList.length) {
|
|
|
state.ruleForm.voice = state.ruleForm.voiceList.join("+");
|
|
|
}
|
|
|
- loading.value = true;
|
|
|
+ state.loading = true;
|
|
|
if (dialogTitle.value == '新增分机组') {
|
|
|
addTelsGroup(state.ruleForm).then(() => {
|
|
|
ElMessage.success("操作成功");
|
|
|
setTimeout(() => {
|
|
|
getList();
|
|
|
}, 1000);
|
|
|
- isShowDialog.value = false;
|
|
|
- loading.value = false;
|
|
|
+ state.isShowDialog = false;
|
|
|
+ state.loading = false;
|
|
|
}).catch(() => {
|
|
|
- loading.value = false;
|
|
|
+ state.loading = false;
|
|
|
});
|
|
|
} else if (dialogTitle.value == '配置分机组') {
|
|
|
updateTelsGroup(state.ruleForm).then(() => {
|
|
@@ -261,10 +286,10 @@ const save = () => { // 保存分机组配置
|
|
|
setTimeout(() => {
|
|
|
getList();
|
|
|
}, 1000);
|
|
|
- isShowDialog.value = false;
|
|
|
- loading.value = false;
|
|
|
+ state.isShowDialog = false;
|
|
|
+ state.loading = false;
|
|
|
}).catch(() => {
|
|
|
- loading.value = false;
|
|
|
+ state.loading = false;
|
|
|
});
|
|
|
}
|
|
|
|
|
@@ -273,6 +298,23 @@ const save = () => { // 保存分机组配置
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
+// 表格多选
|
|
|
+const handleSelectionChange = (val: any) => {
|
|
|
+ state.multipleSelection = val;
|
|
|
+}
|
|
|
+// 导出表格
|
|
|
+const onImportTable = ()=>{
|
|
|
+ if (state.multipleSelection.length <= 0) return ElMessage.warning('请先选择要导出的数据');
|
|
|
+ const tabeHeader = [
|
|
|
+ { key: 'no', colWidth: '', title: '编号', type: 'text', isCheck: true },
|
|
|
+ { key: 'name', colWidth: '', title: '分机组名称', type: 'text', isCheck: true },
|
|
|
+ { key: 'distributionText', colWidth: '', title: '呼叫分配方式', type: 'text', isCheck: true },
|
|
|
+ { key: 'isDefault', colWidth: '', title: '是否默认分组', type: 'text', isCheck: true },
|
|
|
+ { key: 'remark', colWidth: '', title: '备注', type: 'text', isCheck: true },
|
|
|
+ { key: 'creationTime', colWidth: '', title: '创建时间', type: 'text', isCheck: true },
|
|
|
+ ]
|
|
|
+ table2excel(tabeHeader, state.multipleSelection, `分机组管理 ${formatDate(new Date(),'YYYY-mm-dd HH-MM')}`);
|
|
|
+}
|
|
|
// 页面加载时
|
|
|
onMounted(() => {
|
|
|
getTelList(); //获取分机列表
|