增加项目首页呼叫功能

This commit is contained in:
2024-11-04 09:17:14 +08:00
parent bcef47d5cc
commit 94ffbe8210
13 changed files with 821 additions and 58 deletions
@@ -0,0 +1,187 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ProjectUserContact.aspx.cs" Inherits="FineUIPro.Web.ProjectData.ProjectUserContact" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>项目用户</title>
<link href="../res/css/common.css" rel="stylesheet" type="text/css" />
<style type="text/css">
.f-grid-row .f-grid-cell-inner {
white-space: normal;
word-break: break-all;
}
.f-grid-row.red
{
background-color: #FF7575;
background-image: none;
}
.fontred
{
color: #FF7575;
background-image: none;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<f:PageManager ID="PageManager1" AutoSizePanelID="Panel1" runat="server" />
<f:Panel ID="Panel1" runat="server" Margin="5px" BodyPadding="5px" ShowBorder="false"
ShowHeader="false" Layout="VBox" BoxConfigAlign="Stretch" >
<Items>
<f:Grid ID="Grid1" ShowBorder="true" ShowHeader="false" Title="项目用户"
EnableCollapse="true" runat="server" BoxFlex="1" EnableColumnLines="true" ForceFit="true"
DataKeyNames="ProjectUserId" AllowCellEditing="true" ClicksToEdit="2" DataIDField="ProjectUserId"
AllowSorting="true" SortField="UserName" SortDirection="ASC" OnSort="Grid1_Sort"
AllowPaging="true" IsDatabasePaging="true" PageSize="10" OnPageIndexChange="Grid1_PageIndexChange"
EnableTextSelection="True">
<Toolbars>
<f:Toolbar ID="Toolbar2" Position="Top" runat="server" ToolbarAlign="Left">
<Items>
<f:TextBox runat="server" Label="用户名称" ID="txtUserName" EmptyText="输入查询条件"
AutoPostBack="true" OnTextChanged="TextBox_TextChanged" Width="200px" LabelWidth="80px"></f:TextBox>
</Items>
</f:Toolbar>
</Toolbars>
<Columns>
<f:TemplateField ColumnID="tfNumber" Width="50px" HeaderText="序号" HeaderTextAlign="Center"
TextAlign="Center">
<ItemTemplate>
<asp:Label ID="lblNumber" runat="server" Text='<%# Grid1.PageIndex * Grid1.PageSize + Container.DataItemIndex + 1 %>'></asp:Label>
</ItemTemplate>
</f:TemplateField>
<f:RenderField Width="100px" ColumnID="UserName" DataField="UserName" SortField="UserName"
FieldType="String" HeaderText="用户名称" HeaderTextAlign="Center" TextAlign="Left">
</f:RenderField>
<f:RenderField Width="200px" ColumnID="Telephone" DataField="Telephone" SortField="Telephone"
FieldType="String" HeaderText="联系电话" HeaderTextAlign="Center" TextAlign="Left">
</f:RenderField>
<f:RenderField Width="200px" ColumnID="RoleName" DataField="RoleName" SortField="RoleName"
FieldType="String" HeaderText="项目角色" HeaderTextAlign="Center" TextAlign="Left">
</f:RenderField>
<f:RenderField Width="120px" ColumnID="WorkPostName" DataField="WorkPostName" SortField="WorkPostName"
FieldType="String" HeaderText="项目岗位" HeaderTextAlign="Center" TextAlign="Left">
</f:RenderField>
<f:TemplateField Width="60px" ColumnID="Actions">
<ItemTemplate>
<a class="action call" href="javascript:;">
拨号
</a>
&nbsp;&nbsp;
<a class="action hangup" href="javascript:;">
挂断
</a>
</ItemTemplate>
</f:TemplateField>
</Columns>
<Listeners>
</Listeners>
<PageItems>
<f:ToolbarSeparator ID="ToolbarSeparator1" runat="server">
</f:ToolbarSeparator>
<f:ToolbarText ID="ToolbarText1" runat="server" Text="每页记录数:">
</f:ToolbarText>
<f:DropDownList runat="server" ID="ddlPageSize" Width="80px" AutoPostBack="true"
OnSelectedIndexChanged="ddlPageSize_SelectedIndexChanged">
</f:DropDownList>
</PageItems>
</f:Grid>
</Items>
</f:Panel>
<audio id="audio" style="visibility: hidden;" src="" controls="controls">
Your browser does not support the audio element.
</audio>
</form>
<script src="../res/js/jssip-3.7.0.min.js"></script>
<script src="../res/js/mixrtc.min.js"></script>
<script type="text/javascript">
F.ready(function () {
var gridClientID = '<%= Grid1.ClientID %>';
function change(value, CallInPhone = false) {
var classname = {
CallOut: 'label-warning', // 呼出振铃状态
CallIn: 'label-warning', // 呼入振铃状态
Calling: 'label-info', // 通话中
Ended: 'label-success', // 挂断
Failed: 'label-default', // 失败
}
//var status = $('#status')
//status.removeClass()
//status.addClass('label')
//status.addClass(classname[value])
//status.text(value)
//if (CallInPhone != false) {
// $('#callin').text(CallInPhone)
//}
}
var audio = $('#audio')[0]
var Configs = {
audioConfigs: {
audio: audio, // audio的对象
ringout: '../res/wav/ringout.wav', // 呼出振铃的音频地址
ringin: '../res/wav/ringin.wav', // 呼入的振铃音频地址
hangup: '../res/wav/dududu.wav',
}, // 录音音频配置
changeStatus: change, // 通话状态的变动回调
debug: false, // sip信令debug排查
}
var rtc = new WebRTC(Configs);
rtc.WebSocket('wss://demo1.mixcom.cn:8089/ws')
// 注册分机
function registered () {
var extension = '2008'
var password = 'r5yMCjxxxaHQtMXZ'
if (!extension || !password) {
alert("提示: 分机号码和密码不能为空!")
}
rtc.register({
extension: extension,
password: password,
sipserver: 'pri-local-dev02.mixcom.cn',
})
}
//// 注销分机
//$('#unregistered').click(function () {
// rtc.unregister()
//})
registered();
var grid = F(gridClientID);
grid.el.on('click', '.f-grid-cell-Actions .action.call', function (event) {
var targetEl = $(this);
var rowEl = targetEl.parents('.f-grid-row');
var rowData = grid.getRowData(rowEl);
var phone = rowData.values.Telephone + '' ;
rtc.call(phone);
});
grid.el.on('click', '.f-grid-cell-Actions .action.hangup', function (event) {
rtc.hangup()
});
});
</script>
</body>
</html>
@@ -0,0 +1,154 @@
using BLL;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using AspNet = System.Web.UI.WebControls;
namespace FineUIPro.Web.ProjectData
{
public partial class ProjectUserContact : PageBase
{
#region
/// <summary>
/// 加载页面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Funs.DropDownPageSize(this.ddlPageSize);
if (this.CurrUser != null && this.CurrUser.PageSize.HasValue)
{
Grid1.PageSize = this.CurrUser.PageSize.Value;
}
this.ddlPageSize.SelectedValue = Grid1.PageSize.ToString();
// 绑定表格
this.BindGrid();
////权限按钮方法
this.GetButtonPower();
}
}
#endregion
/// <summary>
/// 绑定数据
/// </summary>
private void BindGrid()
{
string strSql = @" SELECT DISTINCT ProjectUser.ProjectUserId, Users.UserName,Users.Telephone, WorkPost.WorkPostName
,RoleName= STUFF(( SELECT ',' + RoleName FROM dbo.Sys_Role where PATINDEX('%,' + RTRIM(RoleId) + ',%',',' +ProjectUser.RoleId + ',')>0 FOR XML PATH('')), 1, 1,'')
FROM Project_ProjectUser AS ProjectUser
LEFT JOIN Sys_User AS Users ON ProjectUser.UserId = Users.UserId
LEFT JOIN SitePerson_Person AS Person ON ProjectUser.ProjectId =Person.ProjectId AND Users.IdentityCard = Person.IdentityCard
LEFT JOIN Base_WorkPost AS WorkPost ON Person.WorkPostId =WorkPost.WorkPostId
where ProjectUser.ProjectId=@ProjectId ";
List<SqlParameter> listStr = new List<SqlParameter>();
listStr.Add(new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId));
SqlParameter[] parameter = listStr.ToArray();
DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
Grid1.RecordCount = tb.Rows.Count;
tb = GetFilteredTable(Grid1.FilteredData, tb);
var table = this.GetPagedDataTable(Grid1, tb);
Grid1.DataSource = table;
Grid1.DataBind();
}
#region
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
{
Grid1.PageIndex = e.NewPageIndex;
BindGrid();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
{
Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
BindGrid();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Grid1_Sort(object sender, FineUIPro.GridSortEventArgs e)
{
Grid1.SortDirection = e.SortDirection;
Grid1.SortField = e.SortField;
BindGrid();
}
#endregion
#region
/// <summary>
/// 获取按钮权限
/// </summary>
/// <param name="button"></param>
/// <returns></returns>
private void GetButtonPower()
{
if (Request.Params["value"] == "0")
{
return;
}
}
#endregion
#region
/// <summary>
/// 查询
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void TextBox_TextChanged(object sender, EventArgs e)
{
this.BindGrid();
this.GetButtonPower();
}
#endregion
protected string ConvertTelephone(object WorkAreaId)
{
if (WorkAreaId != null)
return WorkAreaId.ToString();
else
return "";
}
}
}
@@ -0,0 +1,107 @@
//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web.ProjectData
{
public partial class ProjectUserContact
{
/// <summary>
/// form1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
/// <summary>
/// PageManager1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.PageManager PageManager1;
/// <summary>
/// Panel1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel Panel1;
/// <summary>
/// Grid1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Grid Grid1;
/// <summary>
/// Toolbar2 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Toolbar Toolbar2;
/// <summary>
/// txtUserName 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.TextBox txtUserName;
/// <summary>
/// lblNumber 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.WebControls.Label lblNumber;
/// <summary>
/// ToolbarSeparator1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.ToolbarSeparator ToolbarSeparator1;
/// <summary>
/// ToolbarText1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.ToolbarText ToolbarText1;
/// <summary>
/// ddlPageSize 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.DropDownList ddlPageSize;
}
}