xuechunyuan 2 years ago
commit 5363f1b484
  1. BIN
      src/assets/image/add_btn.png
  2. BIN
      src/assets/image/bag.png
  3. BIN
      src/assets/image/cen_bag.png
  4. BIN
      src/assets/image/device.png
  5. BIN
      src/assets/image/device_act.png
  6. BIN
      src/assets/image/exit.png
  7. BIN
      src/assets/image/exit_speak.png
  8. BIN
      src/assets/image/exit_voice.png
  9. BIN
      src/assets/image/finish.png
  10. BIN
      src/assets/image/group_act.png
  11. BIN
      src/assets/image/group_tit.png
  12. BIN
      src/assets/image/hang.png
  13. BIN
      src/assets/image/head_photo.png
  14. BIN
      src/assets/image/left_bag.png
  15. BIN
      src/assets/image/list_act.png
  16. BIN
      src/assets/image/list_tit.png
  17. BIN
      src/assets/image/mute.png
  18. BIN
      src/assets/image/over.png
  19. BIN
      src/assets/image/phone.png
  20. BIN
      src/assets/image/phone_act.png
  21. BIN
      src/assets/image/phone_tit.png
  22. BIN
      src/assets/image/right_bag.png
  23. BIN
      src/assets/image/spread_btn.png
  24. BIN
      src/assets/image/title.png
  25. BIN
      src/assets/image/top.png
  26. BIN
      src/assets/image/tree.png
  27. BIN
      src/assets/image/voice_bag.png
  28. BIN
      src/assets/image/voice_tit.png
  29. BIN
      src/assets/image/weather.png
  30. 18
      src/assets/js/rem.js
  31. 81
      src/main.js
  32. 191
      src/views/dispatch/index-copy.vue
  33. 1143
      src/views/dispatch/index.vue

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 872 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 918 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 921 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 719 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 762 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 463 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 730 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

@ -0,0 +1,18 @@
(function (doc, win) {
var docEl = doc.documentElement,
resizeEvt = "orientationchange" in window ? "orientationchange" : "resize",
recalc = function () {
var clientWidth = docEl.clientWidth;
if (!clientWidth) return;
if (location.href.indexOf("express") > -1) {
docEl.style.fontSize = "";
} else if (clientWidth >= 1920) {
docEl.style.fontSize = "100px"; //1rem = 100px
} else {
docEl.style.fontSize = 100 * (clientWidth / 1920) + "px";
}
};
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener("DOMContentLoaded", recalc, false);
})(document, window);

@ -1,30 +1,29 @@
import Vue from 'vue';
import axios from './router/axios';
import VueAxios from 'vue-axios';
import App from './App';
import router from './router/router';
import './permission'; // 权限
import './error'; // 日志
import './cache';//页面缓存
import store from './store';
import {loadStyle} from './util/util'
import * as urls from '@/config/env';
import Element from 'element-ui';
import {
iconfontUrl,
iconfontVersion
} from '@/config/env';
import i18n from './lang'; // Internationalization
import './styles/common.scss';
import basicBlock from './components/basic-block/main';
import basicContainer from './components/basic-container/main';
import thirdRegister from './components/third-register/main';
import flowDesign from './components/flow-design/main';
import avueUeditor from 'avue-plugin-ueditor';
import website from '@/config/website';
import crudCommon from '@/mixins/crud';
import Vue from "vue";
import axios from "./router/axios";
import VueAxios from "vue-axios";
import App from "./App";
import router from "./router/router";
import "./permission"; // 权限
import "./error"; // 日志
import "./cache"; //页面缓存
import store from "./store";
import { loadStyle } from "./util/util";
import * as urls from "@/config/env";
import Element from "element-ui";
import { iconfontUrl, iconfontVersion } from "@/config/env";
import i18n from "./lang"; // Internationalization
import "./styles/common.scss";
import basicBlock from "./components/basic-block/main";
import basicContainer from "./components/basic-container/main";
import thirdRegister from "./components/third-register/main";
import flowDesign from "./components/flow-design/main";
import avueUeditor from "avue-plugin-ueditor";
import website from "@/config/website";
import crudCommon from "@/mixins/crud";
import "@/assets/js/rem.js";
// 业务组件
import tenantPackage from './views/system/tenantpackage';
import tenantPackage from "./views/system/tenantpackage";
// 注册全局crud驱动
window.$crudCommon = crudCommon;
@ -32,23 +31,23 @@ window.$crudCommon = crudCommon;
Vue.use(router);
Vue.use(VueAxios, axios);
Vue.use(Element, {
i18n: (key, value) => i18n.t(key, value)
i18n: (key, value) => i18n.t(key, value),
});
Vue.use(window.AVUE, {
size: 'small',
tableSize: 'small',
size: "small",
tableSize: "small",
calcHeight: 65,
i18n: (key, value) => i18n.t(key, value)
i18n: (key, value) => i18n.t(key, value),
});
// 注册全局容器
Vue.component('basicContainer', basicContainer);
Vue.component('basicBlock', basicBlock);
Vue.component('thirdRegister', thirdRegister);
Vue.component('avueUeditor', avueUeditor);
Vue.component('flowDesign', flowDesign);
Vue.component('tenantPackage', tenantPackage);
Vue.component("basicContainer", basicContainer);
Vue.component("basicBlock", basicBlock);
Vue.component("thirdRegister", thirdRegister);
Vue.component("avueUeditor", avueUeditor);
Vue.component("flowDesign", flowDesign);
Vue.component("tenantPackage", tenantPackage);
// 加载相关url地址
Object.keys(urls).forEach(key => {
Object.keys(urls).forEach((key) => {
Vue.prototype[key] = urls[key];
});
// 加载NutFlow
@ -56,8 +55,8 @@ Vue.use(window.WfDesignBase);
// 加载website
Vue.prototype.website = website;
// 动态加载阿里云字体库
iconfontVersion.forEach(ele => {
loadStyle(iconfontUrl.replace('$key', ele));
iconfontVersion.forEach((ele) => {
loadStyle(iconfontUrl.replace("$key", ele));
});
Vue.config.productionTip = false;
@ -66,5 +65,5 @@ new Vue({
router,
store,
i18n,
render: h => h(App)
}).$mount('#app');
render: (h) => h(App),
}).$mount("#app");

@ -0,0 +1,191 @@
<template>
<div>
<div>{{ type == '1' ? '呼叫' : type == '2' ? '对讲' : '会议' }}</div>
<el-row :gutter="22">
<el-col :span="4">
<div>
<h3>通讯录</h3>
</div>
<el-tree :data="groupData" show-checkbox node-key="id" :default-expanded-keys="[2, 3]" :default-checked-keys="[5]"
:props="defaultProps">
</el-tree>
</el-col>
<el-col :span="16">
<el-row :gutter="12">
<el-col v-for="(item, index) in members" :key="item.number" :span="8">
<el-card shadow="always">
{{ item.number }} - {{ item.name }}
<video :id="'video' + item.number" style="background-color: black;"></video>
<div>
<el-button type="primary" plan size="mini" @click="makeCall(item, false)">音频呼叫</el-button>
<el-button type="primary" plan size="mini" @click="makeCall(item, true)">视频呼叫</el-button>
</div>
</el-card>
</el-col>
</el-row>
</el-col>
<el-col :span="4">
<div>
<h3>呼叫列表</h3>
</div>
<div>
<el-checkbox-group v-model="checkedMember">
<el-checkbox v-for="(item, index) in groupMembers" :label="item.number" :key="item.number + '' + index">{{
item.number }} - {{ item.name }}</el-checkbox>
</el-checkbox-group>
</div>
<!-- 其他操作 -->
<el-row :gutter="12">
<el-col :span="16">
<el-col :span="12">
<el-button>邀请进入</el-button>
</el-col>
<el-col :span="12">
<el-button>静音</el-button>
</el-col>
</el-col>
<el-col :span="8">
<el-col :span="24">
<el-button>移除会议</el-button>
</el-col>
<el-col :span="24">
<el-button>结束会议</el-button>
</el-col>
</el-col>
</el-row>
</el-col>
</el-row>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import { client, isRegisted, mylog } from "../../util/dispatch"
export default {
name: "alarmCenter",
data() {
return {
//
groupData: [{
id: 1,
label: '一级 1',
children: [{
id: 4,
label: '二级 1-1',
}]
}, {
id: 2,
label: '一级 2',
children: [{
id: 5,
label: '二级 2-1'
}, {
id: 6,
label: '二级 2-2'
}]
}, {
id: 3,
label: '一级 3',
children: [{
id: 7,
label: '二级 3-1'
}, {
id: 8,
label: '二级 3-2'
}]
}],
defaultProps: {
children: 'children',
label: 'label'
},
//
members: [
{ number: '1001', name: '张三' }
],
groupMembers: [
{ number: '1001', name: '张三' }, { number: '1002', name: '张三2' }, { number: '1003', name: '张三3' }
],
checkedMember: [],
//
type: '1',//1 2 3
_conf: null,
};
},
computed: {
...mapGetters(["userInfo"]),
},
mounted() {
console.log(isRegisted)
},
methods: {
/** 呼叫 */
makeCall(obj, isVideo) {
let mediaControl = document.getElementById('video' + obj.number);
client.makeCall(obj.number, mediaControl, isVideo).then((call) => {
this.setCallEventListener(call);
var state = this.convertCallstate(call.state);
mylog("call success callState: " + state);
}).catch((reason) => {
mylog("call fail");
mylog(JSON.stringify(reason));
});
},
//
setCallEventListener(call) {
call.callStateChange.on(this.onCallStateChange);
call.onBecomeConference.on((para) => {
mylog("当前单呼变成会议");
this._conf = para.changeToConference;
this._conf.stateChange.on((para) => {
console.log("_conf.stateChange" + JSON.stringify(para));
})
});
},
//change
onCallStateChange(param) {
var state = convertCallstate(param.state);
mylog("call callStateChange, number: " + param.sender.number + ", state: " + state + ", isVideo: " + param.sender.isVideo);
},
//
convertCallstate(state) {
var stateStr;
switch (state) {
case 1:
stateStr = "init";
break;
case 2:
stateStr = "normal";
break;
case 3:
stateStr = "callout";
break;
case 4:
stateStr = "incoming";
break;
case 5:
stateStr = "ringing";
break;
case 6:
stateStr = "connected";
break;
case 7:
stateStr = "terminal";
break;
case 8:
stateStr = "hold";
break;
case 9:
stateStr = "unhold";
break;
default:
break;
}
return stateStr;
}
},
};
</script>
<style></style>

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save