miaofuhao vor 3 Jahren
Ursprung
Commit
b4e3335c9b

+ 56 - 40
CallCenterWeb.UI/RMYY/src/api/commonAPI.js

@@ -1,115 +1,131 @@
1 1
 // 公共接口
2
-import request from '@/utils/request'
2
+import request from "@/utils/request";
3 3
 
4 4
 // 获取坐席组
5 5
 export function getSeatGroup() {
6 6
   return request({
7
-    url: 'SeatGroup/GetSeatList',
8
-    method: 'get'
9
-  })
7
+    url: "SeatGroup/GetSeatList",
8
+    method: "get"
9
+  });
10 10
 }
11 11
 
12 12
 // 获取角色
13 13
 export function getRoleSelect(params) {
14 14
   return request({
15
-    url: 'Role/GetList',
16
-    method: 'get',
15
+    url: "Role/GetList",
16
+    method: "get",
17 17
     params
18
-  })
18
+  });
19 19
 }
20 20
 
21 21
 // 获取院区
22 22
 export function getListyqlistall(params) {
23 23
   return request({
24
-    url: 'Worepair/GetListyqlistall',
25
-    method: 'get',
24
+    url: "Worepair/GetListyqlistall",
25
+    method: "get",
26 26
     params
27
-  })
27
+  });
28 28
 }
29 29
 // 获取科室
30 30
 export function getWorkOrderGetDept(params) {
31 31
   return request({
32
-    url: 'WorkOrderBase/GetDept',
33
-    method: 'get',
32
+    url: "WorkOrderBase/GetDept",
33
+    method: "get",
34 34
     params
35
-  })
35
+  });
36 36
 }
37 37
 // 获取人员
38 38
 export function GetPerson(params) {
39 39
   return request({
40
-    url: 'WorkOrderBase/GetPerson',
41
-    method: 'get',
40
+    url: "WorkOrderBase/GetPerson",
41
+    method: "get",
42 42
     params
43
-  })
43
+  });
44 44
 }
45 45
 // 获取人员-转运用
46 46
 export function GetTransPson(params) {
47 47
   return request({
48
-    url: 'WorkOrderBase/GetTransPson',
49
-    method: 'get',
48
+    url: "WorkOrderBase/GetTransPson",
49
+    method: "get",
50 50
     params
51
-  })
51
+  });
52 52
 }
53 53
 // 上传图片
54 54
 export function UploadImage64(data) {
55 55
   return request({
56
-    url: 'WorkOrderBase/UploadImage64',
57
-    method: 'post',
56
+    url: "WorkOrderBase/UploadImage64",
57
+    method: "post",
58 58
     data
59
-  })
59
+  });
60 60
 }
61 61
 // 获取工单类型
62 62
 export function getOrderTypeList(typeid, pid) {
63 63
   return request({
64
-    url: 'WorkOrderBase/GetGongDanType',
65
-    method: 'get',
64
+    url: "WorkOrderBase/GetGongDanType",
65
+    method: "get",
66 66
     params: {
67 67
       typeid,
68 68
       pid
69 69
     }
70
-  })
70
+  });
71 71
 }
72 72
 // 数据字典
73 73
 export function GetDicValue(Flag) {
74 74
   return request({
75
-    url: 'Dictionary/GetDicValueList',
76
-    method: 'get',
75
+    url: "Dictionary/GetDicValueList",
76
+    method: "get",
77 77
     params: {
78 78
       Flag
79 79
     }
80
-  })
80
+  });
81 81
 }
82 82
 // 工单状态
83 83
 export function GetTypeState(params) {
84 84
   return request({
85
-    url: 'T_Dis_WorkOrder/GetTypeState',
86
-    method: 'get',
85
+    url: "T_Dis_WorkOrder/GetTypeState",
86
+    method: "get",
87 87
     params
88
-  })
88
+  });
89 89
 }
90 90
 // 保存自定义列
91 91
 export function AddFiled(data) {
92 92
   return request({
93
-    url: 'CustomFiled/AddFiled',
94
-    method: 'post',
93
+    url: "CustomFiled/AddFiled",
94
+    method: "post",
95 95
     data
96
-  })
96
+  });
97 97
 }
98 98
 // 获取自定义列
99 99
 export function GetFiledState(TableId) {
100 100
   return request({
101
-    url: '/CustomFiled/GetTab',
102
-    method: 'get',
101
+    url: "/CustomFiled/GetTab",
102
+    method: "get",
103 103
     params: {
104 104
       TableId
105 105
     }
106
-  })
106
+  });
107 107
 }
108 108
 // 签入签出
109 109
 export function Teljournal(params) {
110 110
   return request({
111
-    url: 'Home/Teljournal',
112
-    method: 'get',
111
+    url: "Home/Teljournal",
112
+    method: "get",
113 113
     params
114
-  })
114
+  });
115
+}
116
+// 工单消息
117
+export function getMsg(params) {
118
+  return request({
119
+    url: "InternalMessages/GetMsg",
120
+    method: "get",
121
+    params
122
+  });
123
+}
124
+// 工单消息
125
+export function updateState(params) {
126
+  return request({
127
+    url: "InternalMessages/UpdateState",
128
+    method: "post",
129
+    params
130
+  });
115 131
 }

+ 89 - 56
CallCenterWeb.UI/RMYY/src/api/orderManagement/orderList.js

@@ -1,158 +1,191 @@
1
-import request from '@/utils/request'
1
+import request from "@/utils/request";
2 2
 // 工单类型
3 3
 export function getOrderStateData(params) {
4 4
   return request({
5
-    url: 'Con_WorkOrder/GetTypeState',
6
-    method: 'get',
5
+    url: "Con_WorkOrder/GetTypeState",
6
+    method: "get",
7 7
     params
8
-  })
8
+  });
9 9
 }
10 10
 // 投诉来源下拉数据
11 11
 export function getTouSuSelect(params) {
12 12
   return request({
13
-    url: 'Dictionary/GetDicValueList',
14
-    method: 'get',
13
+    url: "Dictionary/GetDicValueList",
14
+    method: "get",
15 15
     params
16
-  })
16
+  });
17 17
 }
18 18
 // 工单新增
19 19
 export function addOrEdittOrder(data) {
20 20
   return request({
21
-    url: 'Con_WorkOrder/AddWorkOrder',
22
-    method: 'post',
21
+    url: "Con_WorkOrder/AddWorkOrder",
22
+    method: "post",
23 23
     data
24
-  })
24
+  });
25 25
 }
26 26
 // 工单修改
27 27
 export function updateWorkOrder(data) {
28 28
   return request({
29
-    url: 'Con_WorkOrder/UpdateWorkOrder',
30
-    method: 'post',
29
+    url: "Con_WorkOrder/UpdateWorkOrder",
30
+    method: "post",
31 31
     data
32
-  })
32
+  });
33 33
 }
34
-// 工单删除  deleteOrder
34
+// 工单删除
35 35
 export function deleteOrder(ids) {
36 36
   return request({
37
-    url: 'Con_WorkOrder/DelWorkOrder',
38
-    method: 'post',
37
+    url: "Con_WorkOrder/DelWorkOrder",
38
+    method: "post",
39 39
     data: {
40 40
       ids
41 41
     }
42
-  })
42
+  });
43 43
 }
44 44
 // 工单列表
45 45
 export function getorderList(params) {
46 46
   return request({
47
-    url: 'WorkCommon/GetComList',
48
-    method: 'get',
47
+    url: "WorkCommon/GetComList",
48
+    method: "get",
49 49
     params
50
-  })
50
+  });
51 51
 }
52 52
 // 咨询工单详情
53 53
 export function GetOrderDetail(params) {
54 54
   return request({
55
-    url: 'Con_WorkOrder/GetWorkOrder',
56
-    method: 'get',
55
+    url: "Con_WorkOrder/GetWorkOrder",
56
+    method: "get",
57 57
     params
58
-  })
58
+  });
59 59
 }
60 60
 // 工单记录
61 61
 export function GetOrderItem(data) {
62 62
   return request({
63
-    url: 'Con_WorkOrder/GetItemList',
64
-    method: 'get',
63
+    url: "Con_WorkOrder/GetItemList",
64
+    method: "get",
65 65
     data
66
-  })
66
+  });
67
+}
68
+
69
+// 综合调度工单撤回
70
+export function schedulRetractOrder(data) {
71
+  return request({
72
+    url: "Scheduling/Retract",
73
+    method: "post",
74
+    data
75
+  });
76
+}
77
+// 综合调度工单编辑
78
+export function updateSchedulingOrder(data) {
79
+  return request({
80
+    url: "Scheduling/UpdateSchedulingWorkOrder",
81
+    method: "post",
82
+    data
83
+  });
84
+}
85
+// 综合调度工单删除
86
+export function deleteSchedulingOrder(data) {
87
+  return request({
88
+    url: "Scheduling/DeleteSchedulingWorkOrder",
89
+    method: "post",
90
+    data
91
+  });
92
+}
93
+// 综合调度工单详情
94
+export function getSchedulingOrder(data) {
95
+  return request({
96
+    url: "Scheduling/WorkOrderCode",
97
+    method: "get",
98
+    data
99
+  });
67 100
 }
68 101
 
69 102
 // 工单转派
70 103
 export function AssignOrder(orderid) {
71 104
   return request({
72
-    url: 'Con_WorkOrder/AssignWorkOrder',
73
-    method: 'post',
105
+    url: "Con_WorkOrder/AssignWorkOrder",
106
+    method: "post",
74 107
     data: {
75 108
       orderid
76 109
     }
77
-  })
110
+  });
78 111
 }
79 112
 // 工单确认
80 113
 export function SureOrder(id) {
81 114
   return request({
82
-    url: 'Con_WorkOrder/SureWorkOrder',
83
-    method: 'post',
115
+    url: "Con_WorkOrder/SureWorkOrder",
116
+    method: "post",
84 117
     data: {
85 118
       id
86 119
     }
87
-  })
120
+  });
88 121
 }
89 122
 // Con_WorkOrder/CompleteWo
90 123
 // 工单完结
91 124
 export function CompleteOrder(woid) {
92 125
   return request({
93
-    url: 'Con_WorkOrder/CompleteWo',
94
-    method: 'post',
126
+    url: "Con_WorkOrder/CompleteWo",
127
+    method: "post",
95 128
     data: {
96 129
       woid
97 130
     }
98
-  })
131
+  });
99 132
 }
100 133
 // 工单处理
101 134
 export function DealOrder(data) {
102 135
   return request({
103
-    url: 'Con_WorkOrder/DealWorkOrder',
104
-    method: 'post',
136
+    url: "Con_WorkOrder/DealWorkOrder",
137
+    method: "post",
105 138
     data
106
-  })
139
+  });
107 140
 }
108 141
 // 工单审核
109 142
 export function AuditOrder(data) {
110 143
   return request({
111
-    url: 'Con_WorkOrder/GetApproval',
112
-    method: 'post',
144
+    url: "Con_WorkOrder/GetApproval",
145
+    method: "post",
113 146
     data
114
-  })
147
+  });
115 148
 }
116 149
 
117 150
 // 我的提交列表
118 151
 export function mySubmitOrderList(params) {
119 152
   return request({
120
-    url: 'WorkCommon/GetSubmitList',
121
-    method: 'get',
153
+    url: "WorkCommon/GetSubmitList",
154
+    method: "get",
122 155
     params
123
-  })
156
+  });
124 157
 }
125 158
 
126 159
 // 工单列表
127 160
 export function comOrderList(params) {
128 161
   return request({
129
-    url: 'WorkCommon/GetComList',
130
-    method: 'get',
162
+    url: "WorkCommon/GetComList",
163
+    method: "get",
131 164
     params
132
-  })
165
+  });
133 166
 }
134 167
 
135 168
 // 我的提交列表详情页
136 169
 export function GetFaultRepairDetail(params) {
137 170
   return request({
138
-    url: 'FaultRepair/GetWorkOrder',
139
-    method: 'get',
171
+    url: "FaultRepair/GetWorkOrder",
172
+    method: "get",
140 173
     params
141
-  })
174
+  });
142 175
 }
143 176
 // 故障报修编辑
144 177
 export function UpdateFaultRepair(params) {
145 178
   return request({
146
-    url: 'FaultRepair/UpdateFaultRepairWorkOrder',
147
-    method: 'post',
179
+    url: "FaultRepair/UpdateFaultRepairWorkOrder",
180
+    method: "post",
148 181
     params
149
-  })
182
+  });
150 183
 }
151 184
 // 我的提交撤回后故障报修编辑
152 185
 export function MyUpdateFaultRepairWorkOrder(params) {
153 186
   return request({
154
-    url: 'FaultRepair/MyUpdateFaultRepairWorkOrder',
155
-    method: 'post',
187
+    url: "FaultRepair/MyUpdateFaultRepairWorkOrder",
188
+    method: "post",
156 189
     params
157
-  })
190
+  });
158 191
 }

+ 88 - 37
CallCenterWeb.UI/RMYY/src/views/layout/Layout.vue

@@ -1,67 +1,118 @@
1 1
 <template>
2 2
   <div :class="classObj" class="app-wrapper">
3 3
     <!-- 左侧导航菜单 -->
4
-    <sidebar class="sidebar-container"/>
4
+    <sidebar class="sidebar-container" />
5 5
 
6 6
     <div class="main-container">
7 7
       <!-- 头部信息 -->
8
-      <navbar/>
8
+      <navbar />
9 9
       <!-- 右侧页面标签 -->
10
-      <tags-view/>
10
+      <tags-view />
11 11
       <!-- 内容部分 -->
12
-      <app-main/>
12
+      <app-main />
13 13
     </div>
14
+    <!-- <audio
15
+      ref="audio"
16
+      controls="controls"
17
+      :src="recordingurl"
18
+      id="audio"
19
+    ></audio> -->
14 20
   </div>
15 21
 </template>
16 22
 
17 23
 <script>
18
-import { Navbar, TagsView, AppMain, Sidebar } from './components'
24
+import orderMessage from "./components/Navbar/orderMessage.vue";
25
+import { getMsg } from "@/api/commonAPI";
26
+import { Navbar, TagsView, AppMain, Sidebar } from "./components";
19 27
 export default {
20
-  name: 'Layout',
28
+  name: "Layout",
21 29
   components: {
22 30
     Navbar,
23 31
     TagsView,
24 32
     AppMain,
25
-    Sidebar
33
+    Sidebar,
34
+  },
35
+  data() {
36
+    return {
37
+      recordingurl: require("@/assets/mp3/song.mp3"),
38
+    };
26 39
   },
27 40
   computed: {
28 41
     sidebar() {
29
-      return this.$store.state.app.sidebar
42
+      return this.$store.state.app.sidebar;
30 43
     },
31 44
     classObj() {
32 45
       return {
33 46
         hideSidebar: !this.sidebar.opened,
34
-        withoutAnimation: this.sidebar.withoutAnimation
35
-      }
36
-    }
37
-  }
38
-}
47
+        withoutAnimation: this.sidebar.withoutAnimation,
48
+      };
49
+    },
50
+  },
51
+  mounted() {
52
+    setInterval(() => {
53
+      this.orderMessage(this.$el.offsetWidth, this.$el.offsetHeight);
54
+    }, 60000);
55
+    // this.playAudio(1);
56
+  },
57
+  methods: {
58
+    orderMessage(left, top) {
59
+      getMsg().then((response) => {
60
+        if (response.state == "success") {
61
+          const res = response.data[0];
62
+          if (res && res.length != 0) {
63
+            this.$layer.closeAll();
64
+            this.$layer.iframe({
65
+              content: {
66
+                content: orderMessage, // 传递的组件对象
67
+                parent: this, // 当前的vue对象
68
+              },
69
+              offset: [left - 230, top - 30],
70
+              shade: false,
71
+              area: ["400px", "200px"],
72
+              title: "消息提醒",
73
+            });
74
+          }
75
+        }
76
+      });
77
+    },
78
+    // playAudio(playFlag) {
79
+    //   //方式2 /static/js/signalr.js
80
+    //   const audio = new Audio();
81
+    //   // audio.src = "@/assets/mp3/song.mp3";
82
+    //   if (playFlag) {
83
+    //     audio.play();
84
+    //   } else {
85
+    //     audio.pause();
86
+    //   }
87
+    // },
88
+  },
89
+};
39 90
 </script>
40 91
 
41 92
 <style rel="stylesheet/scss" lang="scss" scoped>
42
-  @import "src/styles/mixin.scss";
93
+@import "src/styles/mixin.scss";
43 94
 
44
-  .app-wrapper {
45
-    @include clearfix;
46
-    position: relative;
47
-    height: 100%;
48
-    width: 100%;
49
-  }
50
-  .drawer-bg {
51
-    background: #000;
52
-    opacity: 0.3;
53
-    width: 100%;
54
-    top: 0;
55
-    height: 100%;
56
-    position: absolute;
57
-    z-index: 999;
58
-  }
59
-  .btns{
60
-    position: fixed;
61
-    bottom: 10%;
62
-    right:1%;
63
-  }
64
-  .lineChatIcon{
65
-    z-index: 1400
66
-  }
95
+.app-wrapper {
96
+  @include clearfix;
97
+  position: relative;
98
+  height: 100%;
99
+  width: 100%;
100
+}
101
+.drawer-bg {
102
+  background: #000;
103
+  opacity: 0.3;
104
+  width: 100%;
105
+  top: 0;
106
+  height: 100%;
107
+  position: absolute;
108
+  z-index: 999;
109
+}
110
+.btns {
111
+  position: fixed;
112
+  bottom: 10%;
113
+  right: 1%;
114
+}
115
+.lineChatIcon {
116
+  z-index: 1400;
117
+}
67 118
 </style>

Datei-Diff unterdrückt, da er zu groß ist
+ 588 - 419
CallCenterWeb.UI/RMYY/src/views/layout/components/Navbar/Teloperation.vue


+ 409 - 348
CallCenterWeb.UI/RMYY/src/views/layout/components/Navbar/index.vue

@@ -1,5 +1,5 @@
1 1
 <template>
2
-  <el-menu class="navbar" mode="horizontal">
2
+  <el-menu ref="navBar" class="navbar" mode="horizontal">
3 3
     <!-- 电话操作部分 -->
4 4
     <teloperation v-if="seatflag" />
5 5
     <!-- 头部账号信息 -->
@@ -7,19 +7,33 @@
7 7
     <!-- 头部右侧电话状态信息 -->
8 8
     <nav-tel-state-msg v-if="seatflag" />
9 9
 
10
-    <el-popover ref="popover" :value="showTopNotice" visible-arrow popper-class="topNoticePop" placement="bottom"
11
-      width="360" trigger="click" transition="el-zoom-in-top">
12
-      <div slot="reference" :class="[seatflag ? 'navar_item notice' : 'navar_item notice notice_right']">
10
+    <el-popover
11
+      ref="popover"
12
+      :value="showTopNotice"
13
+      visible-arrow
14
+      popper-class="topNoticePop"
15
+      placement="bottom"
16
+      width="360"
17
+      trigger="click"
18
+      transition="el-zoom-in-top"
19
+    >
20
+      <div
21
+        slot="reference"
22
+        :class="[
23
+          seatflag ? 'navar_item notice' : 'navar_item notice notice_right',
24
+        ]"
25
+      >
13 26
         <svg-icon icon-class="lingdang" />
14 27
         <span v-if="topNoticeNum" class="badge_dot">{{ topNoticeNum }}</span>
15 28
       </div>
16 29
     </el-popover>
30
+
17 31
     <div v-if="seatflag" class="navar_item close">
18 32
       <span class="" @click="logout">退出</span>
19 33
     </div>
20 34
     <el-dropdown class="avatar-container" trigger="click">
21 35
       <div class="avatar-wrapper">
22
-        <img :src="!avatar ? usertx : avatar" class="user-avatar">
36
+        <img :src="!avatar ? usertx : avatar" class="user-avatar" />
23 37
       </div>
24 38
       <el-dropdown-menu slot="dropdown" class="user-dropdown">
25 39
         <router-link class="inlineBlock" to="/">
@@ -34,408 +48,455 @@
34 48
       </el-dropdown-menu>
35 49
     </el-dropdown>
36 50
     <!-- 发送消息 -->
37
-    <div style="display: inline-block;float: right;margin-right: 29%;border-right: 1px solid #2a2f32;padding:0 15px;">
38
-      <i @click="drawer = true" class="el-icon-chat-dot-square"
39
-        style="color: white;font-size: 25px;vertical-align: middle;"></i>
51
+    <div
52
+      style="
53
+        display: inline-block;
54
+        float: right;
55
+        margin-right: 29%;
56
+        border-right: 1px solid #2a2f32;
57
+        padding: 0 15px;
58
+      "
59
+    >
60
+      <i
61
+        @click="drawer = true"
62
+        class="el-icon-chat-dot-square"
63
+        style="color: white; font-size: 25px; vertical-align: middle"
64
+      ></i>
40 65
     </div>
41
-    <el-drawer style="margin-top: 100px;" size="20%" :modal='false' title="消息通讯" :visible.sync="drawer"
42
-      :show-close="false" :direction="direction">
43
-      <el-tabs style="padding: 0 20px;" v-model="activeName" type="card" @tab-click="handleClick">
66
+    <el-drawer
67
+      style="margin-top: 100px"
68
+      size="20%"
69
+      :modal="false"
70
+      title="消息通讯"
71
+      :visible.sync="drawer"
72
+      :show-close="false"
73
+      :direction="direction"
74
+    >
75
+      <el-tabs
76
+        style="padding: 0 20px"
77
+        v-model="activeName"
78
+        type="card"
79
+        @tab-click="handleClick"
80
+      >
44 81
         <el-tab-pane label="未读" name="0">
45 82
           <el-button type="text" @click="sendMsg()">发送消息</el-button>
46
-          <p style="font-size: 14px;">您当前有未读消息<span style="color: #CC0000;">{{noread}}</span>条</p>
47
-          <div v-for="(item,index) in noreadlist" :key="index" style="position: relative;margin-bottom: 15px;">
48
-            <div style="width: 80px;text-align: center;">
49
-              <img class="pimg" :src="$store.getters.serverConfig.BASE_API+item.F_See" />
50
-              <p class="puser">{{item.F_UserName}}</p>
83
+          <p style="font-size: 14px">
84
+            您当前有未读消息<span style="color: #cc0000">{{ noread }}</span
85
+            >条
86
+          </p>
87
+          <div
88
+            v-for="(item, index) in noreadlist"
89
+            :key="index"
90
+            style="position: relative; margin-bottom: 15px"
91
+          >
92
+            <div style="width: 80px; text-align: center">
93
+              <img
94
+                class="pimg"
95
+                :src="$store.getters.serverConfig.BASE_API + item.F_See"
96
+              />
97
+              <p class="puser">{{ item.F_UserName }}</p>
51 98
             </div>
52
-            <div class="pcon">{{item.Content}}</div>
99
+            <div class="pcon">{{ item.Content }}</div>
53 100
             <div class="pdate">
54
-              {{item.CreateDate}}
55
-              <span class="phf" @click="tosend(item.F_RoleId,item.FromUserId)">回复</span>
101
+              {{ item.CreateDate }}
102
+              <span class="phf" @click="tosend(item.F_RoleId, item.FromUserId)"
103
+                >回复</span
104
+              >
56 105
             </div>
57 106
           </div>
58 107
         </el-tab-pane>
59 108
         <el-tab-pane label="已读" name="1">
60
-          <p style="font-size: 14px;">注:显示最近50条已读</p>
61
-          <div v-for="(item,index) in readlist" :key="index" style="position: relative;margin-bottom: 15px;">
62
-            <div style="width: 80px;text-align: center;">
63
-              <img class="pimg" :src="$store.getters.serverConfig.BASE_API+item.F_See" />
64
-              <p class="puser">{{item.F_UserName}}</p>
109
+          <p style="font-size: 14px">注:显示最近50条已读</p>
110
+          <div
111
+            v-for="(item, index) in readlist"
112
+            :key="index"
113
+            style="position: relative; margin-bottom: 15px"
114
+          >
115
+            <div style="width: 80px; text-align: center">
116
+              <img
117
+                class="pimg"
118
+                :src="$store.getters.serverConfig.BASE_API + item.F_See"
119
+              />
120
+              <p class="puser">{{ item.F_UserName }}</p>
65 121
             </div>
66
-            <div class="pcon">{{item.Content}}</div>
122
+            <div class="pcon">{{ item.Content }}</div>
67 123
             <div class="pdate">
68
-              {{item.CreateDate}}
69
-              <span class="phf" @click="tosend(item.F_RoleId,item.FromUserId)">回复</span>
124
+              {{ item.CreateDate }}
125
+              <span class="phf" @click="tosend(item.F_RoleId, item.FromUserId)"
126
+                >回复</span
127
+              >
70 128
             </div>
71 129
           </div>
72 130
         </el-tab-pane>
73 131
       </el-tabs>
74 132
     </el-drawer>
133
+
134
+    <!-- 工单提醒 -->
75 135
   </el-menu>
76 136
 </template>
77 137
 
78 138
 <script>
79
-  import {
80
-    mapGetters
81
-  } from 'vuex'
82
-  import store from '@/store'
83
-  import {
84
-    getLogout
85
-  } from '@/api/layout/permsgEdit'
86
-  import {
87
-    createWebSocket
88
-  } from '@/utils/telWebsocket'
89
-  import {
90
-    getGetChatLists,
91
-    getGetChatCount
92
-  } from '@/api/AnnounceManagement/chart'
93
-  import Teloperation from './teloperation'
94
-  import NavUserInfo from './NavUserInfo'
95
-  import navTelStateMsg from './navTelStateMsg'
96
-  import permsgEdit from './permsgEdit.vue'
97
-  import sendMsg from './sendmsg.vue'
98
-  export default {
99
-    name: 'Navbar',
100
-    components: {
101
-      Teloperation,
102
-      NavUserInfo,
103
-      navTelStateMsg
104
-    },
105
-    data() {
106
-      return {
107
-        usertx: '',
108
-        activeName: '0',
109
-        noread: '',
110
-        noreadlist: [],
111
-        readlist: [],
112
-        drawer: false,
113
-        direction: 'rtl',
114
-        showTopNotice: false, // 是否显示项目到期的消息
115
-        telTopRightText: '',
116
-        topNoticeNum: 0, // 顶部消息数量
117
-        roleName: '' // 用户角色名称
139
+import { mapGetters } from "vuex";
140
+import store from "@/store";
141
+import { getLogout } from "@/api/layout/permsgEdit";
142
+import { createWebSocket } from "@/utils/telWebsocket";
143
+import {
144
+  getGetChatLists,
145
+  getGetChatCount,
146
+} from "@/api/AnnounceManagement/chart";
147
+import Teloperation from "./teloperation";
148
+import NavUserInfo from "./NavUserInfo";
149
+import navTelStateMsg from "./navTelStateMsg";
150
+import permsgEdit from "./permsgEdit.vue";
151
+import sendMsg from "./sendmsg.vue";
152
+export default {
153
+  name: "Navbar",
154
+  components: {
155
+    Teloperation,
156
+    NavUserInfo,
157
+    navTelStateMsg,
158
+  },
159
+  data() {
160
+    return {
161
+      usertx: "",
162
+      activeName: "0",
163
+      noread: "",
164
+      noreadlist: [],
165
+      readlist: [],
166
+      drawer: false,
167
+      orderFlag: true,
168
+      direction: "rtl",
169
+      showTopNotice: false, // 是否显示项目到期的消息
170
+      telTopRightText: "",
171
+      offsetRight: 0,
172
+      offsetBottom: 0,
173
+      topNoticeNum: 0, // 顶部消息数量
174
+      roleName: "", // 用户角色名称
175
+    };
176
+  },
177
+  computed: {
178
+    ...mapGetters([
179
+      "telSeatState", // 坐席状态
180
+      "teamName", // 中心
181
+      "groupName", // 小组
182
+      "sidebar",
183
+      "avatar",
184
+      "seatflag",
185
+      "telIsLogin", // 是否签入
186
+      "telIsConnected", // 连接是否建立
187
+    ]),
188
+  },
189
+  watch: {
190
+    telTopRightState: function (newT) {
191
+      if (this.telSeatState === 2 && (newT === "空闲" || newT === "忙碌")) {
192
+        this.telTopRightText = "空闲";
193
+        store.dispatch("ChangeTopRightState", ["空闲", true]);
194
+      } else if (
195
+        this.telSeatState === 5 &&
196
+        (newT === "空闲" || newT === "忙碌")
197
+      ) {
198
+        this.telTopRightText = "忙碌";
199
+        store.dispatch("ChangeTopRightState", ["忙碌", false]);
200
+      } else {
201
+        this.telTopRightText = newT;
118 202
       }
119 203
     },
120
-    computed: {
121
-      ...mapGetters([
122
-        'telSeatState', // 坐席状态
123
-        'teamName', // 中心
124
-        'groupName', // 小组
125
-        'sidebar',
126
-        'avatar',
127
-        'seatflag',
128
-        'telIsLogin', // 是否签入
129
-        'telIsConnected' // 连接是否建立
130
-      ])
131
-    },
132
-    watch: {
133
-      telTopRightState: function(newT) {
134
-        if (this.telSeatState === 2 && (newT === '空闲' || newT === '忙碌')) {
135
-          this.telTopRightText = '空闲'
136
-          store.dispatch('ChangeTopRightState', ['空闲', true])
137
-        } else if (this.telSeatState === 5 && (newT === '空闲' || newT === '忙碌')) {
138
-          this.telTopRightText = '忙碌'
139
-          store.dispatch('ChangeTopRightState', ['忙碌', false])
140
-        } else {
141
-          this.telTopRightText = newT
142
-        }
143
-      }
204
+  },
205
+  created() {
206
+    this.usertx =
207
+      this.$store.getters.serverConfig.BASE_API +
208
+      localStorage.getItem("storageUsertx");
209
+    this.roleName = window.localStorage.getItem("roleName");
210
+    if (!this.telIsConnected && this.seatflag) {
211
+      createWebSocket();
212
+    }
213
+    this.getList();
214
+  },
215
+  methods: {
216
+    getList() {
217
+      return new Promise((resolve) => {
218
+        const params = {
219
+          top: 50,
220
+          fromid: parseInt(localStorage.getItem("storageUserid")),
221
+          isread: this.activeName,
222
+        };
223
+        getGetChatLists(params).then((response) => {
224
+          this.noread = response.total;
225
+          if (this.activeName == "0") {
226
+            this.noreadlist = response.rows;
227
+          }
228
+          if (this.activeName == "1") {
229
+            this.readlist = response.rows;
230
+          }
231
+        });
232
+        resolve();
233
+      });
144 234
     },
145
-    created() {
146
-      this.usertx = this.$store.getters.serverConfig.BASE_API + localStorage.getItem('storageUsertx')
147
-      this.roleName = window.localStorage.getItem('roleName')
148
-      if (!this.telIsConnected && this.seatflag) {
149
-        createWebSocket()
150
-      }
151
-      this.getList()
235
+    handleClick(tab, event) {
236
+      this.getList();
152 237
     },
153
-    methods: {
154
-      getList() {
155
-        return new Promise((resolve) => {
156
-          const params = {
157
-            top: 50,
158
-            fromid: parseInt(localStorage.getItem('storageUserid')),
159
-            isread: this.activeName
160
-          }
161
-          getGetChatLists(params).then((response) => {
162
-            this.noread = response.total
163
-            if (this.activeName == '0') {
164
-              this.noreadlist = response.rows
165
-            }
166
-            if (this.activeName == '1') {
167
-              this.readlist = response.rows
168
-            }
169
-          })
170
-          resolve()
238
+    logout() {
239
+      this.$confirm("您确定退出吗?", "提示", {
240
+        confirmButtonText: "确定",
241
+        cancelButtonText: "取消",
242
+        type: "warning",
243
+      })
244
+        .then(() => {
245
+          this.isDisable = false;
246
+          this.loginout();
247
+          this.signOut(); // 签出
171 248
         })
172
-      },
173
-      handleClick(tab, event) {
174
-        this.getList()
175
-      },
176
-      logout() {
177
-        this.$confirm('您确定退出吗?', '提示', {
178
-            confirmButtonText: '确定',
179
-            cancelButtonText: '取消',
180
-            type: 'warning'
181
-          })
182
-          .then(() => {
183
-            this.isDisable = false
184
-            this.loginout()
185
-            this.signOut() // 签出
186
-          })
187
-          .catch(() => {
188
-            this.$message({
189
-              type: 'info',
190
-              message: '已取消'
191
-            })
192
-          })
193
-      },
194
-      loginout() {
195
-        const params = {
196
-          token: localStorage.getItem('Admin-Token').split(' ')[1]
197
-        }
198
-        return new Promise((resolve, reject) => {
199
-          getLogout(params).then(response => {
200
-            this.$store.dispatch('FedLogOut').then(() => {
201
-              location.reload() // 为了重新实例化vue-router对象 避免bug
202
-            })
203
-          }).catch(error => {
204
-            reject(error)
249
+        .catch(() => {
250
+          this.$message({
251
+            type: "info",
252
+            message: "已取消",
253
+          });
254
+        });
255
+    },
256
+    loginout() {
257
+      const params = {
258
+        token: localStorage.getItem("Admin-Token").split(" ")[1],
259
+      };
260
+      return new Promise((resolve, reject) => {
261
+        getLogout(params)
262
+          .then((response) => {
263
+            this.$store.dispatch("FedLogOut").then(() => {
264
+              location.reload(); // 为了重新实例化vue-router对象 避免bug
265
+            });
205 266
           })
206
-        })
207
-      },
208
-      tosend(roleid, uesrid) {
209
-        this.$layer.iframe({
210
-          content: {
211
-            content: sendMsg, // 传递的组件对象
212
-            parent: this, // 当前的vue对象
213
-            data: {
214
-              roleid: roleid,
215
-              userid: uesrid
216
-            } // props
217
-          },
218
-          area: ['50%', '70%'],
219
-          title: '发送消息'
220
-        })
221
-      },
222
-      sendMsg() {
223
-        this.$layer.iframe({
224
-          content: {
225
-            content: sendMsg, // 传递的组件对象
226
-            parent: this, // 当前的vue对象
227
-            data: {
228
-
229
-            } // props
230
-          },
231
-          area: ['50%', '70%'],
232
-          title: '发送消息'
233
-        })
234
-      },
235
-      onedit() {
236
-        this.$layer.iframe({
237
-          content: {
238
-            content: permsgEdit, // 传递的组件对象
239
-            parent: this, // 当前的vue对象
240
-            data: {
267
+          .catch((error) => {
268
+            reject(error);
269
+          });
270
+      });
271
+    },
241 272
 
242
-            } // props
243
-          },
244
-          area: ['50%', '70%'],
245
-          title: '个人中心'
246
-        })
247
-      },
248
-      // 签出
249
-      signOut() {
250
-        store.dispatch('UpdateCalloutScreen', false)
251
-      },
252
-      // 从子组件获取的 消息数量值
253
-      getTopNoticeNum(value) {
254
-        this.topNoticeNum = value.num
255
-      }
256
-    }
257
-  }
273
+    tosend(roleid, uesrid) {
274
+      this.$layer.iframe({
275
+        content: {
276
+          content: sendMsg, // 传递的组件对象
277
+          parent: this, // 当前的vue对象
278
+          data: {
279
+            roleid: roleid,
280
+            userid: uesrid,
281
+          }, // props
282
+        },
283
+        area: ["50%", "70%"],
284
+        title: "发送消息",
285
+      });
286
+    },
287
+    sendMsg() {
288
+      this.$layer.iframe({
289
+        content: {
290
+          content: sendMsg, // 传递的组件对象
291
+          parent: this, // 当前的vue对象
292
+          data: {}, // props
293
+        },
294
+        area: ["50%", "70%"],
295
+        title: "发送消息",
296
+      });
297
+    },
298
+    onedit() {
299
+      this.$layer.iframe({
300
+        content: {
301
+          content: permsgEdit, // 传递的组件对象
302
+          parent: this, // 当前的vue对象
303
+          data: {}, // props
304
+        },
305
+        area: ["50%", "70%"],
306
+        title: "个人中心",
307
+      });
308
+    },
309
+    // 签出
310
+    signOut() {
311
+      store.dispatch("UpdateCalloutScreen", false);
312
+    },
313
+    // 从子组件获取的 消息数量值
314
+    getTopNoticeNum(value) {
315
+      this.topNoticeNum = value.num;
316
+    },
317
+  },
318
+};
258 319
 </script>
259 320
 
260 321
 <style rel="stylesheet/scss" lang="scss" scoped>
261
-  .navbar {
262
-    position: fixed;
263
-    z-index: 10;
264
-    right: 0;
322
+.navbar {
323
+  position: fixed;
324
+  z-index: 10;
325
+  right: 0;
326
+  top: 0;
327
+  width: 100%;
328
+  height: 52px;
329
+  line-height: 52px;
330
+  background-color: #373d41;
331
+  border-bottom-color: #373d41;
332
+  border-radius: 0px !important;
333
+
334
+  .pimg {
335
+    width: 38px;
336
+    height: 38px;
337
+    border-radius: 7%;
338
+  }
339
+
340
+  .puser {
341
+    font-size: 10px;
342
+    line-height: 20px;
343
+    margin-top: -20px;
344
+    width: 80px;
345
+    text-align: center;
346
+    overflow: hidden;
347
+    color: #333;
348
+  }
349
+
350
+  .pcon {
351
+    font-size: 12px;
352
+    line-height: 20px;
353
+    position: absolute;
265 354
     top: 0;
266
-    width: 100%;
267
-    height: 52px;
268
-    line-height: 52px;
269
-    background-color: #373d41;
270
-    border-bottom-color: #373d41;
271
-    border-radius: 0px !important;
355
+    left: 100px;
356
+  }
272 357
 
273
-    .pimg {
274
-      width: 38px;
275
-      height: 38px;
276
-      border-radius: 7%;
277
-    }
358
+  .pdate {
359
+    font-size: 12px;
360
+    line-height: 20px;
361
+    position: absolute;
362
+    bottom: 0;
363
+    left: 100px;
364
+    color: #888;
365
+  }
278 366
 
279
-    .puser {
280
-      font-size: 10px;
281
-      line-height: 20px;
282
-      margin-top: -20px;
283
-      width: 80px;
284
-      text-align: center;
285
-      overflow: hidden;
286
-      color: #333;
287
-    }
367
+  .phf {
368
+    font-size: 13px;
369
+    line-height: 20px;
370
+    color: #6dc4da;
371
+    cursor: pointer;
372
+  }
288 373
 
289
-    .pcon {
290
-      font-size: 12px;
291
-      line-height: 20px;
292
-      position: absolute;
293
-      top: 0;
294
-      left: 100px;
295
-    }
374
+  .navar_item {
375
+    position: absolute;
376
+    display: inline-block;
377
+    text-align: center;
378
+    border-right: 1px solid #2a2f32;
379
+  }
296 380
 
297
-    .pdate {
298
-      font-size: 12px;
299
-      line-height: 20px;
300
-      position: absolute;
301
-      bottom: 0;
302
-      left: 100px;
303
-      color: #888;
304
-    }
381
+  .notice {
382
+    width: 60px;
383
+    right: 120px;
384
+    cursor: pointer;
305 385
 
306
-    .phf {
307
-      font-size: 13px;
308
-      line-height: 20px;
309
-      color: #6dc4da;
310
-      cursor: pointer;
386
+    // border-left: 1px solid #2a2f32;
387
+    .dot {
388
+      position: absolute;
389
+      right: 18px;
390
+      top: 18px;
391
+      display: block;
392
+      width: 6px;
393
+      height: 6px;
394
+      background-color: #ff0000;
395
+      border-radius: 50%;
311 396
     }
312 397
 
313
-    .navar_item {
398
+    .badge_dot {
314 399
       position: absolute;
315
-      display: inline-block;
400
+      right: 8px;
401
+      top: 6px;
402
+      display: block;
403
+      background-color: #ff0000;
404
+      border-radius: 10px;
405
+      color: #fff;
406
+      // display: inline-block;
407
+      font-size: 12px;
408
+      height: 18px;
409
+      line-height: 18px;
410
+      padding: 0 6px;
316 411
       text-align: center;
317
-      border-right: 1px solid #2a2f32;
412
+      white-space: nowrap;
318 413
     }
414
+  }
319 415
 
320
-    .notice {
321
-      width: 60px;
322
-      right: 120px;
323
-      cursor: pointer;
324
-
325
-      // border-left: 1px solid #2a2f32;
326
-      .dot {
327
-        position: absolute;
328
-        right: 18px;
329
-        top: 18px;
330
-        display: block;
331
-        width: 6px;
332
-        height: 6px;
333
-        background-color: #ff0000;
334
-        border-radius: 50%;
335
-      }
416
+  .notice_right {
417
+    right: 60px;
418
+  }
336 419
 
337
-      .badge_dot {
338
-        position: absolute;
339
-        right: 8px;
340
-        top: 6px;
341
-        display: block;
342
-        background-color: #ff0000;
343
-        border-radius: 10px;
344
-        color: #fff;
345
-        // display: inline-block;
346
-        font-size: 12px;
347
-        height: 18px;
348
-        line-height: 18px;
349
-        padding: 0 6px;
350
-        text-align: center;
351
-        white-space: nowrap;
352
-      }
353
-    }
420
+  .telState {
421
+    font-size: 14px;
422
+    // width: 140px;
423
+    padding-right: 15px;
424
+    right: 180px;
425
+    color: #ffffff;
354 426
 
355
-    .notice_right {
356
-      right: 60px;
427
+    .svg-icon {
428
+      // margin-left: 8px;
429
+      font-size: 16px;
430
+      vertical-align: -0.17em;
357 431
     }
432
+  }
358 433
 
359
-    .telState {
360
-      font-size: 14px;
361
-      // width: 140px;
362
-      padding-right: 15px;
363
-      right: 180px;
364
-      color: #ffffff;
434
+  .seatState {
435
+    font-size: 14px;
436
+    width: 100px;
437
+    right: 120px;
438
+    color: #ffffff;
365 439
 
366
-      .svg-icon {
367
-        // margin-left: 8px;
368
-        font-size: 16px;
369
-        vertical-align: -0.17em;
370
-      }
371
-    }
372
-
373
-    .seatState {
374
-      font-size: 14px;
375
-      width: 100px;
376
-      right: 120px;
377
-      color: #ffffff;
378
-
379
-      .svg-icon {
380
-        margin-left: 8px;
381
-        font-size: 16px;
382
-        vertical-align: -0.17em;
383
-      }
440
+    .svg-icon {
441
+      margin-left: 8px;
442
+      font-size: 16px;
443
+      vertical-align: -0.17em;
384 444
     }
445
+  }
385 446
 
386
-    .state_normal {
387
-      color: #009900;
388
-    }
447
+  .state_normal {
448
+    color: #009900;
449
+  }
389 450
 
390
-    .state_abnormal {
391
-      color: #f60303;
392
-    }
451
+  .state_abnormal {
452
+    color: #f60303;
453
+  }
393 454
 
394
-    .close {
395
-      width: 60px;
396
-      right: 60px;
397
-      cursor: pointer;
455
+  .close {
456
+    width: 60px;
457
+    right: 60px;
458
+    cursor: pointer;
398 459
 
399
-      span {
400
-        font-size: 14px;
401
-        color: #ffffff;
402
-      }
460
+    span {
461
+      font-size: 14px;
462
+      color: #ffffff;
403 463
     }
464
+  }
404 465
 
405
-    .hamburger-container {
406
-      line-height: 80px;
407
-      height: 50px;
408
-      float: left;
409
-      padding: 0 10px;
410
-    }
466
+  .hamburger-container {
467
+    line-height: 80px;
468
+    height: 50px;
469
+    float: left;
470
+    padding: 0 10px;
471
+  }
411 472
 
412
-    .screenfull {
413
-      position: absolute;
414
-      right: 90px;
415
-      top: 16px;
416
-      color: red;
417
-    }
473
+  .screenfull {
474
+    position: absolute;
475
+    right: 90px;
476
+    top: 16px;
477
+    color: red;
478
+  }
418 479
 
419
-    .avatar-container {
420
-      height: 50px;
421
-      line-height: 50px;
422
-      width: 60px;
423
-      text-align: center;
424
-      display: inline-block;
425
-      position: absolute;
426
-      right: 0;
480
+  .avatar-container {
481
+    height: 50px;
482
+    line-height: 50px;
483
+    width: 60px;
484
+    text-align: center;
485
+    display: inline-block;
486
+    position: absolute;
487
+    right: 0;
427 488
 
428
-      .avatar-wrapper {
429
-        cursor: pointer;
430
-        position: relative;
489
+    .avatar-wrapper {
490
+      cursor: pointer;
491
+      position: relative;
431 492
 
432
-        .user-avatar {
433
-          width: 36px;
434
-          height: 36px;
435
-          vertical-align: middle;
436
-          border-radius: 50%;
437
-        }
493
+      .user-avatar {
494
+        width: 36px;
495
+        height: 36px;
496
+        vertical-align: middle;
497
+        border-radius: 50%;
438 498
       }
439 499
     }
440 500
   }
501
+}
441 502
 </style>

+ 273 - 193
CallCenterWeb.UI/RMYY/src/views/telCall/msgManage/index.vue

@@ -1,233 +1,313 @@
1 1
 <template>
2 2
   <div class="app-container">
3 3
     <div class="filter-container">
4
-      <el-input v-model="searchData.strtelnum" placeholder="请输入电话号码" class="filter-item" size="medium" />
5
-      <el-date-picker v-model="searchData.settime" type="date" format="yyyy年MM月dd日" value-format="yyyy-MM-dd"
6
-        placeholder="请选择留言日期" size="medium">
7
-      </el-date-picker>
8
-      <el-date-picker v-model="searchData.removetime" type="date" format="yyyy年MM月dd日" value-format="yyyy-MM-dd"
9
-        placeholder="请选择处理日期" size="medium">
10
-      </el-date-picker>
11
-      <el-select v-model="searchData.status" placeholder="请选择处理结果" size="medium">
4
+      <el-input
5
+        v-model="searchData.strtelnum"
6
+        placeholder="请输入电话号码"
7
+        class="filter-item"
8
+        size="medium"
9
+      />
10
+      <el-date-picker
11
+        v-model="searchData.settime"
12
+        type="date"
13
+        format="yyyy年MM月dd日"
14
+        value-format="yyyy-MM-dd"
15
+        placeholder="请选择留言日期"
16
+        size="medium"
17
+      />
18
+      <el-date-picker
19
+        v-model="searchData.removetime"
20
+        type="date"
21
+        format="yyyy年MM月dd日"
22
+        value-format="yyyy-MM-dd"
23
+        placeholder="请选择处理日期"
24
+        size="medium"
25
+      />
26
+      <el-select
27
+        v-model="searchData.status"
28
+        placeholder="请选择处理结果"
29
+        size="medium"
30
+      >
12 31
         <el-option value="-1" label="全部">全部</el-option>
13 32
         <el-option value="0" label="未处理">未处理</el-option>
14 33
         <el-option value="1" label="已处理">已处理</el-option>
15 34
       </el-select>
16
-      <el-button type="primary" class="filter-item" icon="el-icon-search" @click="btn_search">搜索</el-button>
35
+      <el-button
36
+        type="primary"
37
+        class="filter-item"
38
+        icon="el-icon-search"
39
+        @click="btn_search"
40
+      >
41
+        搜索
42
+      </el-button>
43
+      <el-button type="danger" class="filter-item" @click="btn_delete">
44
+        删除
45
+      </el-button>
17 46
     </div>
18 47
     <!-- <el-button type="primary" class="filter-item" @click='btn_update'>更新状态</el-button> -->
19
-    <el-button type="danger" class="filter-item" @click="btn_delete">删除</el-button>
20
-    <el-table v-loading="loading" :data="dataLists" border stripe @selection-change="handleSelectionChange">
21
-      <el-table-column type="selection" width="55">
22
-      </el-table-column>
23
-      <el-table-column prop="F_Phone" label="来电号码" align="center" min-width="" />
24
-      <el-table-column prop="F_LeaveTime" label="开始时间" align="center" min-width="" />
25
-      <el-table-column prop="F_DealTime" label="结束时间" align="center" min-width="" />
26
-      <el-table-column prop="F_LongTime" label="时长" align="center" min-width="" />
27
-      <el-table-column prop="F_UserName" label="处理人" align="center" min-width="" />
48
+
49
+    <el-table
50
+      v-loading="loading"
51
+      :data="dataLists"
52
+      border
53
+      stripe
54
+      @selection-change="handleSelectionChange"
55
+    >
56
+      <el-table-column type="selection" width="55" />
57
+      <el-table-column
58
+        prop="F_Phone"
59
+        label="来电号码"
60
+        align="center"
61
+        min-width=""
62
+      />
63
+      <el-table-column
64
+        prop="F_LeaveTime"
65
+        label="开始时间"
66
+        align="center"
67
+        min-width=""
68
+      />
69
+      <el-table-column
70
+        prop="F_DealTime"
71
+        label="结束时间"
72
+        align="center"
73
+        min-width=""
74
+      />
75
+      <el-table-column
76
+        prop="F_LongTime"
77
+        label="时长"
78
+        align="center"
79
+        min-width=""
80
+      />
81
+      <el-table-column
82
+        prop="F_UserName"
83
+        label="处理人"
84
+        align="center"
85
+        min-width=""
86
+      />
28 87
       <el-table-column label="处理状态" align="center">
29 88
         <template slot-scope="scope">
30
-          <span v-if="scope.row.F_Status==0">未处理</span>
31
-          <span v-if="scope.row.F_Status==1">已处理</span>
89
+          <span v-if="scope.row.F_Status == 0">未处理</span>
90
+          <span v-if="scope.row.F_Status == 1">已处理</span>
32 91
         </template>
33 92
       </el-table-column>
34
-      <el-table-column prop="F_DealTime" label="处理时间" align="center" min-width="" />
35
-      <el-table-column prop="F_Remark" label="备注" align="center" min-width="" />
36
-      <el-table-column label="操作" width="160" align="center" class-name="oparate_btn" fixed="right">
93
+      <el-table-column
94
+        prop="F_DealTime"
95
+        label="处理时间"
96
+        align="center"
97
+        min-width=""
98
+      />
99
+      <el-table-column
100
+        prop="F_Remark"
101
+        label="备注"
102
+        align="center"
103
+        min-width=""
104
+      />
105
+      <el-table-column
106
+        label="操作"
107
+        width="160"
108
+        align="center"
109
+        class-name="oparate_btn"
110
+        fixed="right"
111
+      >
37 112
         <template slot-scope="scope">
38
-          <el-button size="mini" type="text" @click="btn_addorder(scope.row.F_Id,scope.row.F_Phone)">新增工单
113
+          <el-button
114
+            size="mini"
115
+            type="text"
116
+            @click="btn_addorder(scope.row.F_Id, scope.row.F_Phone)"
117
+          >
118
+            新增工单
39 119
           </el-button>
40 120
         </template>
41 121
       </el-table-column>
42 122
     </el-table>
43
-    <pagination v-show="pageParams.total > 0" :total="pageParams.total" :pageindex.sync="pageParams.pageindex"
44
-      :pagesize.sync="pageParams.pagesize" class="pagination" @pagination="getList" />
123
+    <pagination
124
+      v-show="pageParams.total > 0"
125
+      :total="pageParams.total"
126
+      :pageindex.sync="pageParams.pageindex"
127
+      :pagesize.sync="pageParams.pagesize"
128
+      class="pagination"
129
+      @pagination="getList"
130
+    />
45 131
   </div>
46 132
 </template>
47 133
 
48 134
 <script>
49
-  import {
50
-    getMsgLists,
51
-    deleteMsg,
52
-    updateStatus
53
-  } from '@/api/telCall/msgManage'
54
-  import addOrder from '../../orderManage/addWorkOrder/index.vue'
55
-  import {
56
-    pickerOptions
57
-  } from '@/utils'
58
-  import Pagination from '@/components/context/Pagination' // 对el-pagination 二次封装
135
+import { getMsgLists, deleteMsg, updateStatus } from '@/api/telCall/msgManage'
136
+import addOrder from '../../orderManage/addWorkOrder/index.vue'
137
+import { pickerOptions } from '@/utils'
138
+import Pagination from '@/components/context/Pagination' // 对el-pagination 二次封装
59 139
 
60
-  export default {
61
-    name: 'MsgManage',
62
-    components: {
63
-      Pagination
140
+export default {
141
+  name: 'MsgManage',
142
+  components: {
143
+    Pagination
144
+  },
145
+  filters: {
146
+    blackTextFilter(status) {
147
+      const statusMap = {
148
+        0: '暂时',
149
+        1: '永久',
150
+        2: '已取消'
151
+      }
152
+      return statusMap[status]
64 153
     },
65
-    filters: {
66
-      blackTextFilter(status) {
67
-        const statusMap = {
68
-          0: '暂时',
69
-          1: '永久',
70
-          2: '已取消'
71
-        }
72
-        return statusMap[status]
154
+    blackTypeFilter(status) {
155
+      const statusMap = {
156
+        0: '',
157
+        1: 'danger',
158
+        2: 'warning'
159
+      }
160
+      return statusMap[status]
161
+    }
162
+  },
163
+  data() {
164
+    return {
165
+      loading: false,
166
+      searchData: {
167
+        settime: '',
168
+        removetime: '',
169
+        strtelnum: '',
170
+        status: ''
73 171
       },
74
-      blackTypeFilter(status) {
75
-        const statusMap = {
76
-          0: '',
77
-          1: 'danger',
78
-          2: 'warning'
79
-        }
80
-        return statusMap[status]
172
+      pickerOptions,
173
+      pageParams: {
174
+        pageindex: 1, // 当前第几页
175
+        pagesize: Number(this.$store.getters.serverConfig.PAGESIZE), // 每页几条数据
176
+        total: 0 // 总共多少数据
177
+      },
178
+      dataLists: [], // 列表数据
179
+      multipleSelection: [],
180
+      selectArr: []
181
+    }
182
+  },
183
+  created() {
184
+    this.getList()
185
+    document.onkeyup = (e) => {
186
+      if (e.keyCode === 13) {
187
+        this.getList()
81 188
       }
189
+    }
190
+  },
191
+  methods: {
192
+    getList() {
193
+      this.loading = true
194
+      return new Promise((resolve) => {
195
+        const params = {
196
+          page: this.pageParams.pageindex, // 第几页
197
+          pagesize: this.pageParams.pagesize, // 每页几条信息
198
+          settime: this.searchData.settime,
199
+          removetime: this.searchData.removetime,
200
+          strtelnum: this.searchData.strtelnum,
201
+          status: this.searchData.status
202
+        }
203
+        getMsgLists(params).then((response) => {
204
+          this.loading = false
205
+          if (response.rows.length >= 0) {
206
+            this.pageParams.total = response.total
207
+            this.dataLists = response.rows
208
+          }
209
+        })
210
+        resolve()
211
+      })
82 212
     },
83
-    data() {
84
-      return {
85
-        loading: false,
86
-        searchData: {
87
-          settime: '',
88
-          removetime: '',
89
-          strtelnum: '',
90
-          status: ''
91
-        },
92
-        pickerOptions,
93
-        pageParams: {
94
-          pageindex: 1, // 当前第几页
95
-          pagesize: Number(this.$store.getters.serverConfig.PAGESIZE), // 每页几条数据
96
-          total: 0 // 总共多少数据
213
+    btn_search() {
214
+      this.pageParams.pageindex = 1
215
+      this.getList()
216
+    },
217
+    handleSelectionChange(val) {
218
+      this.multipleSelection = val
219
+      this.selectArr = val.map((item) => item.F_Id)
220
+    },
221
+    btn_addorder(id, phone) {
222
+      this.$layer.iframe({
223
+        content: {
224
+          content: addOrder, // 传递的组件对象
225
+          parent: this, // 当前的vue对象
226
+          data: {
227
+            fid: id.toString(),
228
+            phone: phone
229
+          } // props//该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用
97 230
         },
98
-        dataLists: [], // 列表数据
99
-        multipleSelection: [],
100
-        selectArr: []
101
-      }
231
+        area: ['70%', '80%'],
232
+        title: '新增工单'
233
+      })
102 234
     },
103
-    created() {
104
-      this.getList()
105
-      document.onkeyup = (e) => {
106
-        if (e.keyCode === 13) {
107
-          this.getList()
108
-        }
235
+    btn_update() {
236
+      if (this.multipleSelection.length === 0) {
237
+        this.$message.error('没有要更新的选项')
238
+      } else {
239
+        this.$confirm('您确定要更新状态吗?', '提示', {
240
+          confirmButtonText: '确定',
241
+          cancelButtonText: '取消',
242
+          type: 'warning'
243
+        })
244
+          .then(() => {
245
+            updateStatus(this.selectArr).then((response) => {
246
+              if (response.state.toLowerCase() === 'success') {
247
+                this.getList()
248
+                this.$message.success('更新成功!')
249
+              }
250
+            })
251
+          })
252
+          .catch(() => {
253
+            this.$message('已取消')
254
+          })
109 255
       }
110 256
     },
111
-    methods: {
112
-      getList() {
113
-        this.loading = true
114
-        return new Promise((resolve) => {
115
-          const params = {
116
-            page: this.pageParams.pageindex, // 第几页
117
-            pagesize: this.pageParams.pagesize, // 每页几条信息
118
-            settime: this.searchData.settime,
119
-            removetime: this.searchData.removetime,
120
-            strtelnum: this.searchData.strtelnum,
121
-            status: this.searchData.status
122
-          }
123
-          getMsgLists(params).then((response) => {
124
-            this.loading = false
125
-            if (response.rows.length >= 0) {
126
-              this.pageParams.total = response.total
127
-              this.dataLists = response.rows
128
-            }
129
-          })
130
-          resolve()
257
+    // btn_add() {
258
+    //   this.$layer.iframe({
259
+    //     content: {
260
+    //       content: addOrEditBlackList, // 传递的组件对象
261
+    //       parent: this, // 当前的vue对象
262
+    //       data: {
263
+    //         rowid: 0
264
+    //       } // props//该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用
265
+    //     },
266
+    //     area: ['40%', '320px'],
267
+    //     title: '添加黑名单'
268
+    //   })
269
+    // },
270
+    // btn_edit(editId) {
271
+    //   this.$layer.iframe({
272
+    //     content: {
273
+    //       content: addOrEditBlackList, // 传递的组件对象
274
+    //       parent: this, // 当前的vue对象
275
+    //       data: {
276
+    //         rowid: editId
277
+    //       } // props
278
+    //     },
279
+    //     area: ['40%', '320px'],
280
+    //     title: '编辑黑名单'
281
+    //   })
282
+    // },
283
+    btn_delete() {
284
+      if (this.multipleSelection.length === 0) {
285
+        this.$message.error('没有要删除的选项')
286
+      } else {
287
+        this.$confirm('您确定要删除吗?', '提示', {
288
+          confirmButtonText: '确定',
289
+          cancelButtonText: '取消',
290
+          type: 'warning'
131 291
         })
132
-      },
133
-      btn_search() {
134
-        this.pageParams.pageindex = 1
135
-        this.getList()
136
-      },
137
-      handleSelectionChange(val) {
138
-        this.multipleSelection = val;
139
-        this.selectArr = val.map(item => item.F_Id)
140
-      },
141
-      btn_addorder(id, phone) {
142
-        this.$layer.iframe({
143
-          content: {
144
-            content: addOrder, // 传递的组件对象
145
-            parent: this, // 当前的vue对象
146
-            data: {
147
-              fid: id.toString(),
148
-              phone: phone
149
-            } // props//该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用
150
-          },
151
-          area: ['70%', '80%'],
152
-          title: '新增工单'
153
-        })
154
-      },
155
-      btn_update() {
156
-        if (this.multipleSelection.length == 0) {
157
-          this.$message.error('没有要更新的选项')
158
-        } else {
159
-          this.$confirm('您确定要更新状态吗?', '提示', {
160
-              confirmButtonText: '确定',
161
-              cancelButtonText: '取消',
162
-              type: 'warning'
292
+          .then(() => {
293
+            deleteMsg(this.selectArr).then((response) => {
294
+              if (response.state.toLowerCase() === 'success') {
295
+                this.getList()
296
+                this.$message.success('删除成功!')
297
+              }
163 298
             })
164
-            .then(() => {
165
-              updateStatus(this.selectArr).then((response) => {
166
-                if (response.state.toLowerCase() === 'success') {
167
-                  this.getList()
168
-                  this.$message.success('更新成功!')
169
-                }
170
-              })
171
-            })
172
-            .catch(() => {
173
-              this.$message('已取消')
174
-            })
175
-        }
176
-      },
177
-      // btn_add() {
178
-      //   this.$layer.iframe({
179
-      //     content: {
180
-      //       content: addOrEditBlackList, // 传递的组件对象
181
-      //       parent: this, // 当前的vue对象
182
-      //       data: {
183
-      //         rowid: 0
184
-      //       } // props//该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用
185
-      //     },
186
-      //     area: ['40%', '320px'],
187
-      //     title: '添加黑名单'
188
-      //   })
189
-      // },
190
-      // btn_edit(editId) {
191
-      //   this.$layer.iframe({
192
-      //     content: {
193
-      //       content: addOrEditBlackList, // 传递的组件对象
194
-      //       parent: this, // 当前的vue对象
195
-      //       data: {
196
-      //         rowid: editId
197
-      //       } // props
198
-      //     },
199
-      //     area: ['40%', '320px'],
200
-      //     title: '编辑黑名单'
201
-      //   })
202
-      // },
203
-      btn_delete() {
204
-        if (this.multipleSelection.length == 0) {
205
-          this.$message.error('没有要删除的选项')
206
-        } else {
207
-          this.$confirm('您确定要删除吗?', '提示', {
208
-              confirmButtonText: '确定',
209
-              cancelButtonText: '取消',
210
-              type: 'warning'
211
-            })
212
-            .then(() => {
213
-              deleteMsg(this.selectArr).then((response) => {
214
-                if (response.state.toLowerCase() === 'success') {
215
-                  this.getList()
216
-                  this.$message.success('删除成功!')
217
-                }
218
-              })
219
-            })
220
-            .catch(() => {
221
-              this.$message('已取消删除')
222
-            })
223
-        }
299
+          })
300
+          .catch(() => {
301
+            this.$message('已取消删除')
302
+          })
224 303
       }
225 304
     }
226 305
   }
306
+}
227 307
 </script>
228 308
 
229 309
 <style rel="stylesheet/scss" lang="scss" scoped>
230
-  .app-container {
231
-    padding: 10px;
232
-  }
310
+.app-container {
311
+  padding: 10px;
312
+}
233 313
 </style>

+ 107 - 88
CallCenterWeb.UI/RMYY/src/views/testing/reportTesting/index.vue

@@ -13,53 +13,75 @@
13 13
             unlink-panels
14 14
             range-separator="至"
15 15
             start-placeholder="开始日期"
16
-            end-placeholder="结束日期" />
16
+            end-placeholder="结束日期"
17
+          />
17 18
         </el-form-item>
18 19
         <el-form-item>
19
-          <el-button type="primary" class="filter-item" icon="el-icon-search" @click="btn_search">搜索</el-button>
20
-          <el-button type="primary" class="filter-item" icon="el-icon-download" @click="btn_export">导出</el-button>
20
+          <el-button
21
+            type="primary"
22
+            class="filter-item"
23
+            icon="el-icon-search"
24
+            @click="btn_search"
25
+          >
26
+            搜索
27
+          </el-button>
28
+          <el-button
29
+            type="primary"
30
+            class="filter-item"
31
+            icon="el-icon-download"
32
+            @click="btn_export"
33
+          >
34
+            导出
35
+          </el-button>
21 36
         </el-form-item>
22 37
       </el-form>
23 38
     </div>
24 39
     <div class="tabcontent">
25 40
       <el-table
26 41
         :data="dataLists"
27
-        :align="center"
28
-        :header-align="center"
29
-        style="width: 100%">
30
-        <template v-for="(head_1) in columnData">
42
+        header-align="center"
43
+        align="center"
44
+        style="width: 100%"
45
+      >
46
+        <template v-for="head_1 in columnData">
31 47
           <el-table-column
32
-            v-if="head_1.Qcname!='总分1'"
48
+            v-if="head_1.Qcname != '总分1'"
33 49
             :key="head_1.Qcid"
34 50
             :prop="head_1.key"
35
-            :label="head_1.Qcname">
36
-            <template v-for="(head_2) in head_1.Qclist">
51
+            :label="head_1.Qcname"
52
+          >
53
+            <el-table-column
54
+              v-for="head_2 in head_1.Qclist"
55
+              :key="head_2.Qcid"
56
+              :prop="head_2.key"
57
+              :label="head_2.Qcname"
58
+            >
37 59
               <el-table-column
38
-                :key="head_2.Qcid"
39
-                :prop="head_2.key"
40
-                :label="head_2.Qcname">
41
-                <template v-for="(head_3) in head_2.Qclist">
42
-                  <el-table-column
43
-                    :key="head_3.Qcid"
44
-                    :prop="head_3.key"
45
-                    :label="head_3.Qcname">
46
-                    <template v-for="(head_4) in head_3.Qclist">
47
-                      <el-table-column
48
-                        :key="head_4.Qcid"
49
-                        :prop="head_4.key"
50
-                        :label="head_4.Qcname"/>
51
-                    </template>
52
-                  </el-table-column>
53
-                </template>
60
+                v-for="head_3 in head_2.Qclist"
61
+                :key="head_3.Qcid"
62
+                :prop="head_3.key"
63
+                :label="head_3.Qcname"
64
+              >
65
+                <el-table-column
66
+                  v-for="head_4 in head_3.Qclist"
67
+                  :key="head_4.Qcid"
68
+                  :prop="head_4.key"
69
+                  :label="head_4.Qcname"
70
+                />
54 71
               </el-table-column>
55
-            </template>
72
+            </el-table-column>
56 73
           </el-table-column>
57
-
58 74
         </template>
59
-
60 75
       </el-table>
61 76
     </div>
62
-    <pagination v-show="pageParams.total > 0" :total="pageParams.total" :pageindex.sync="pageParams.pageindex" :pagesize.sync="pageParams.pagesize" class="pagination" @pagination="getData" />
77
+    <pagination
78
+      v-show="pageParams.total > 0"
79
+      :total="pageParams.total"
80
+      :pageindex.sync="pageParams.pageindex"
81
+      :pagesize.sync="pageParams.pagesize"
82
+      class="pagination"
83
+      @pagination="getData"
84
+    />
63 85
   </div>
64 86
 </template>
65 87
 
@@ -70,9 +92,7 @@ import {
70 92
   exportToExcelHeBing
71 93
 } from '@/api/testing/reportTesting'
72 94
 import Pagination from '@/components/context/Pagination' // 对el-pagination 二次封装
73
-import {
74
-  exportExcel
75
-} from '@/utils'
95
+import { exportExcel } from '@/utils'
76 96
 export default {
77 97
   name: 'CallRecord',
78 98
   components: {
@@ -104,16 +124,12 @@ export default {
104 124
       }
105 125
     }
106 126
   },
107
-  mounted() {
108
-
109
-  },
127
+  mounted() {},
110 128
   methods: {
111 129
     getColumnList() {
112 130
       this.loading = true
113 131
       return new Promise((resolve) => {
114
-        const params = {
115
-
116
-        }
132
+        const params = {}
117 133
         getColumnList(params).then((response) => {
118 134
           this.loading = false
119 135
           if (response.state.toLowerCase() === 'success') {
@@ -159,7 +175,10 @@ export default {
159 175
               let keyIndex = 0
160 176
 
161 177
               for (const key in element) {
162
-                if (Object.hasOwnProperty.call(element, key) && key !== 'AllScore') {
178
+                if (
179
+                  Object.hasOwnProperty.call(element, key) &&
180
+                  key !== 'AllScore'
181
+                ) {
163 182
                   const keyInfo = element[key]
164 183
                   info[`key_${keyIndex}`] = keyInfo
165 184
                   keyIndex++
@@ -202,64 +221,64 @@ export default {
202 221
 </script>
203 222
 
204 223
 <style rel="stylesheet/scss" lang="scss" scoped>
205
-  .app-container {
206
-    padding: 10px;
207
-  }
224
+.app-container {
225
+  padding: 10px;
226
+}
208 227
 
209
-  .tabcontent {
210
-    width: 100%;
211
-    // height: 100%;
212
-  }
228
+.tabcontent {
229
+  width: 100%;
230
+  // height: 100%;
231
+}
213 232
 
214
-  // /deep/ .el-table__body-wrapper::-webkit-scrollbar {
215
-  //   width: 0px;
216
-  //   height: 0px;
217
-  // }
233
+// /deep/ .el-table__body-wrapper::-webkit-scrollbar {
234
+//   width: 0px;
235
+//   height: 0px;
236
+// }
218 237
 
219
-  .tabledata {
220
-    width: 100%;
221
-    margin: 10px 0;
222
-    text-align: center;
223
-    border: 1px solid #ccc;
224
-  }
238
+.tabledata {
239
+  width: 100%;
240
+  margin: 10px 0;
241
+  text-align: center;
242
+  border: 1px solid #ccc;
243
+}
225 244
 
226
-  .tabledata thead tr td {
227
-    padding: 10px 0;
228
-    width: 25%;
229
-    background-color: #D5EDFE;
230
-  }
245
+.tabledata thead tr td {
246
+  padding: 10px 0;
247
+  width: 25%;
248
+  background-color: #d5edfe;
249
+}
231 250
 
232
-  .tabledata tbody td {
233
-    padding: 5px 0;
234
-    font-size: 14px;
235
-    border: 1px solid #ccc;
236
-  }
251
+.tabledata tbody td {
252
+  padding: 5px 0;
253
+  font-size: 14px;
254
+  border: 1px solid #ccc;
255
+}
237 256
 
238
-  // .tabledata input{
239
-  //   padding: 5px;
240
-  //   outline: none;
241
-  //   color: #0077AA;
242
-  // }
257
+// .tabledata input{
258
+//   padding: 5px;
259
+//   outline: none;
260
+//   color: #0077AA;
261
+// }
243 262
 
244
-  .phoneIcon {
245
-    cursor: pointer;
246
-  }
263
+.phoneIcon {
264
+  cursor: pointer;
265
+}
247 266
 
248
-  .filter-container {
249
-    .el-select {
250
-      margin-right: 10px;
251
-    }
267
+.filter-container {
268
+  .el-select {
269
+    margin-right: 10px;
270
+  }
252 271
 
253
-    .el-date-editor {
254
-      margin-right: 10px;
255
-    }
272
+  .el-date-editor {
273
+    margin-right: 10px;
274
+  }
256 275
 
257
-    .el-cascader {
258
-      margin-right: 10px;
259
-    }
276
+  .el-cascader {
277
+    margin-right: 10px;
278
+  }
260 279
 
261
-    .filter-item {
262
-      vertical-align: top;
263
-    }
280
+  .filter-item {
281
+    vertical-align: top;
264 282
   }
283
+}
265 284
 </style>

+ 137 - 132
CallCenterWeb.UI/RMYY/src/views/trafficData/callRecord/index.vue

@@ -126,6 +126,11 @@
126 126
           scope.row.CallType | calltypeFilter
127 127
         }}</template>
128 128
       </el-table-column>
129
+      <el-table-column label="满意度" align="center" min-width>
130
+        <template slot-scope="scope">{{
131
+          scope.row.MYD | evaluationFilter
132
+        }}</template>
133
+      </el-table-column>
129 134
       <el-table-column
130 135
         v-if="fieldListFlag.CallState"
131 136
         label="呼叫状态"
@@ -218,144 +223,144 @@ import {
218 223
   getCallRecords,
219 224
   getCallOutprefix,
220 225
   getListExpt,
221
-  getUpdateCallRecord
222
-} from '@/api/trafficData/trafficData'
223
-import { Send } from '@/utils/telWebsocket'
224
-import fieldDATA from '@/utils/fieldsData.js'
225
-import { GetFiledState, AddFiled } from '@/api/commonAPI'
226
-import addDefinedList from '@/components/context/addDefinedList'
227
-import audioPlayer from '@/components/context/audioPlayer'
228
-import { pickerOptions } from '@/utils'
229
-import { exportExcel } from '@/utils'
230
-import Pagination from '@/components/context/Pagination' // 对el-pagination 二次封装
231
-import store from '@/store'
232
-import { mapGetters } from 'vuex'
226
+  getUpdateCallRecord,
227
+} from "@/api/trafficData/trafficData";
228
+import { Send } from "@/utils/telWebsocket";
229
+import fieldDATA from "@/utils/fieldsData.js";
230
+import { GetFiledState, AddFiled } from "@/api/commonAPI";
231
+import addDefinedList from "@/components/context/addDefinedList";
232
+import audioPlayer from "@/components/context/audioPlayer";
233
+import { pickerOptions } from "@/utils";
234
+import { exportExcel } from "@/utils";
235
+import Pagination from "@/components/context/Pagination"; // 对el-pagination 二次封装
236
+import store from "@/store";
237
+import { mapGetters } from "vuex";
233 238
 export default {
234
-  name: 'CallRecord',
239
+  name: "CallRecord",
235 240
   components: {
236
-    Pagination
241
+    Pagination,
237 242
   },
238 243
   filters: {
239 244
     // 呼叫类型
240 245
     calltypeFilter(status) {
241 246
       const statusMap = {
242
-        0: '呼入',
243
-        1: '呼出'
244
-      }
245
-      return statusMap[status]
247
+        0: "呼入",
248
+        1: "呼出",
249
+      };
250
+      return statusMap[status];
246 251
     },
247 252
     // 呼叫状态
248 253
     statusFilter(status) {
249 254
       const statusMap = {
250
-        0: '未接通',
251
-        1: '已接通'
252
-      }
253
-      return statusMap[status]
255
+        0: "未接通",
256
+        1: "已接通",
257
+      };
258
+      return statusMap[status];
254 259
     },
255 260
     // 外呼类型
256 261
     callopttypeFilter(status) {
257 262
       const statusMap = {
258
-        0: '拨号外呼',
259
-        1: '回访外呼'
260
-      }
261
-      return statusMap[status]
263
+        0: "拨号外呼",
264
+        1: "回访外呼",
265
+      };
266
+      return statusMap[status];
262 267
     },
263 268
     // 满意度
264 269
     evaluationFilter(status) {
265 270
       const statusMap = {
266
-        0: '-',
267
-        1: '非常满意',
268
-        2: '基本满意',
269
-        3: '不满意'
270
-      }
271
-      return statusMap[status]
271
+        0: "-",
272
+        1: "非常满意",
273
+        2: "基本满意",
274
+        3: "不满意",
275
+      };
276
+      return statusMap[status];
272 277
     },
273 278
     // 时间格式化
274 279
     timesFilter(tm) {
275
-      if (tm === '1970-01-01 08:00:00') {
276
-        return '-'
280
+      if (tm === "1970-01-01 08:00:00") {
281
+        return "-";
277 282
       } else {
278
-        return tm
283
+        return tm;
279 284
       }
280 285
     },
281 286
     // 是否回访
282 287
     isReturnvisitFilter(status) {
283 288
       const statusMap = {
284
-        0: '未回访',
285
-        1: '已回访'
286
-      }
287
-      return statusMap[status]
288
-    }
289
+        0: "未回访",
290
+        1: "已回访",
291
+      };
292
+      return statusMap[status];
293
+    },
289 294
   },
290 295
   data() {
291 296
     return {
292 297
       loading: false,
293
-      keyword: '',
294
-      roleId: '',
295
-      CallType: '', // 呼叫类型
296
-      CallState: '', // 呼叫状态
297
-      searchDate: '',
298
+      keyword: "",
299
+      roleId: "",
300
+      CallType: "", // 呼叫类型
301
+      CallState: "", // 呼叫状态
302
+      searchDate: "",
298 303
       pickerOptions,
299
-      timer: '',
300
-      recordpath: '', // 录音的路径
304
+      timer: "",
305
+      recordpath: "", // 录音的路径
301 306
       fieldListFlag: {},
302 307
       pageParams: {
303 308
         pageindex: 1, // 当前第几页
304 309
         pagesize: Number(this.$store.getters.serverConfig.PAGESIZE), // 每页几条数据
305
-        total: 0 // 总共多少数据
310
+        total: 0, // 总共多少数据
306 311
       },
307 312
       dataLists: [], // 列表数据
308
-      multipleSelection: [] // 选中数据
309
-    }
313
+      multipleSelection: [], // 选中数据
314
+    };
310 315
   },
311 316
   computed: {
312 317
     ...mapGetters([
313
-      'token',
314
-      'usercode', // 工号
315
-      'extension', // 分机号
316
-      'telIsVisCallout' // 外呼面板是否显示
317
-    ])
318
+      "token",
319
+      "usercode", // 工号
320
+      "extension", // 分机号
321
+      "telIsVisCallout", // 外呼面板是否显示
322
+    ]),
318 323
   },
319 324
   created() {
320
-    this.getFiledTabDetail(this.$route.path.split('/').join('_'))
321
-    this.getList()
325
+    this.getFiledTabDetail(this.$route.path.split("/").join("_"));
326
+    this.getList();
322 327
     document.onkeyup = (e) => {
323 328
       if (e.keyCode === 13) {
324
-        this.getList()
329
+        this.getList();
325 330
       }
326
-    }
331
+    };
327 332
   },
328 333
   mounted() {
329 334
     this.timer = setInterval(() => {
330
-      this.getList()
331
-    }, 12000)
335
+      this.getList();
336
+    }, 12000);
332 337
   },
333 338
   methods: {
334 339
     getList() {
335
-      this.loading = true
340
+      this.loading = true;
336 341
       return new Promise((resolve) => {
337 342
         const params = {
338 343
           page: this.pageParams.pageindex, // 第几页
339 344
           pagesize: this.pageParams.pagesize, // 每页几条信息
340
-          phone: this.keyword.replace(/\s*/g, ''), //	否	string	模糊查询(呼叫号码)
345
+          phone: this.keyword.replace(/\s*/g, ""), //	否	string	模糊查询(呼叫号码)
341 346
           usercode: this.roleId, //	否	string	模糊查询(呼叫号码) CallNumber
342
-          calltype: this.CallType == null ? '' : this.CallType, // 呼叫类型
347
+          calltype: this.CallType == null ? "" : this.CallType, // 呼叫类型
343 348
           callstate: this.CallState, // 呼叫状态
344 349
           starttime: this.searchDate && this.searchDate[0],
345
-          endtime: this.searchDate && this.searchDate[1]
346
-        }
350
+          endtime: this.searchDate && this.searchDate[1],
351
+        };
347 352
         getCallRecords(params).then((response) => {
348
-          this.loading = false
349
-          if (response.state.toLowerCase() === 'success') {
350
-            this.pageParams.total = response.total
351
-            this.dataLists = response.rows
353
+          this.loading = false;
354
+          if (response.state.toLowerCase() === "success") {
355
+            this.pageParams.total = response.total;
356
+            this.dataLists = response.rows;
352 357
           }
353
-        })
354
-        resolve()
355
-      })
358
+        });
359
+        resolve();
360
+      });
356 361
     },
357 362
     btn_search() {
358
-      this.getList()
363
+      this.getList();
359 364
     },
360 365
     btn_add_list() {
361 366
       this.$layer.iframe({
@@ -363,120 +368,120 @@ export default {
363 368
           content: addDefinedList, // 传递的组件对象
364 369
           parent: this, // 当前的vue对象
365 370
           data: {
366
-            definedId: this.$route.path
367
-          } // props
371
+            definedId: this.$route.path,
372
+          }, // props
368 373
         },
369
-        area: ['70%', '30%'],
370
-        title: '自定义字段'
371
-      })
374
+        area: ["70%", "30%"],
375
+        title: "自定义字段",
376
+      });
372 377
     },
373 378
     getFiledTabDetail(TableId) {
374 379
       GetFiledState(TableId).then((res) => {
375 380
         if (res.F_Fileds) {
376
-          this.fieldListFlag = fieldDATA.getFieldListFlag(res.F_Fileds)
377
-          this.$refs['multipleTable'].doLayout()
381
+          this.fieldListFlag = fieldDATA.getFieldListFlag(res.F_Fileds);
382
+          this.$refs["multipleTable"].doLayout();
378 383
         } else {
379
-          const Fileds = fieldDATA.getOptionsValue(fieldDATA[TableId])
384
+          const Fileds = fieldDATA.getOptionsValue(fieldDATA[TableId]);
380 385
           AddFiled({ TableId, Fileds })
381 386
             .then((response) => {
382
-              if (response.state.toLowerCase() === 'success') {
383
-                this.getFiledTabDetail(TableId)
387
+              if (response.state.toLowerCase() === "success") {
388
+                this.getFiledTabDetail(TableId);
384 389
               }
385 390
             })
386 391
             .catch(() => {
387
-              this.loading = false
388
-            })
392
+              this.loading = false;
393
+            });
389 394
         }
390
-      })
395
+      });
391 396
     },
392 397
 
393 398
     oncall(phone, callid) {
394 399
       const pas = {
395
-        id: callid
396
-      }
400
+        id: callid,
401
+      };
397 402
       getUpdateCallRecord(pas).then((response) => {
398
-        if (response.state.toLowerCase() === 'success') {
403
+        if (response.state.toLowerCase() === "success") {
399 404
         }
400
-      })
405
+      });
401 406
       const params = {
402
-        phone: phone
403
-      }
407
+        phone: phone,
408
+      };
404 409
       getCallOutprefix(params).then((response) => {
405
-        if (response.state.toLowerCase() === 'success') {
410
+        if (response.state.toLowerCase() === "success") {
406 411
           const scoketDatas = {
407
-            Type: 'MakeCall',
408
-            AgentID: localStorage.getItem('storageUsercode'),
409
-            AgentExten: localStorage.getItem('ext'),
412
+            Type: "MakeCall",
413
+            AgentID: localStorage.getItem("storageUsercode"),
414
+            AgentExten: localStorage.getItem("ext"),
410 415
             Header: response.data.fix,
411
-            DestinationNumber: response.data.phone
412
-          }
413
-          Send(scoketDatas)
416
+            DestinationNumber: response.data.phone,
417
+          };
418
+          Send(scoketDatas);
414 419
         }
415
-      })
420
+      });
416 421
     },
417 422
     // 导出
418 423
     btn_export() {
419 424
       const exportparams = {
420 425
         pageindex: this.pageParams.pageindex,
421 426
         pagesize: this.pageParams.pagesize,
422
-        phone: this.keyword.replace(/\s+/g, ''),
427
+        phone: this.keyword.replace(/\s+/g, ""),
423 428
         usercode: this.roleId,
424
-        calltype: this.CallType == null ? '' : this.CallType,
429
+        calltype: this.CallType == null ? "" : this.CallType,
425 430
         callstate: this.CallState,
426 431
         starttime: this.searchDate && this.searchDate[0],
427 432
         endtime: this.searchDate && this.searchDate[1],
428
-        isdc: 1
429
-      }
430
-      exportExcel(exportparams, getListExpt)
433
+        isdc: 1,
434
+      };
435
+      exportExcel(exportparams, getListExpt);
431 436
     },
432 437
     // 播放录音
433 438
     playSound(rec_file, artist) {
434
-      console.log('artist', artist)
439
+      console.log("artist", artist);
435 440
       this.$layer.iframe({
436 441
         content: {
437 442
           content: audioPlayer, // 传递的组件对象
438 443
           parent: this, // 当前的vue对象
439 444
           data: {
440 445
             recFiles: rec_file,
441
-            artists: artist.toString()
442
-          } // props//该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用
446
+            artists: artist.toString(),
447
+          }, // props//该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用
443 448
         },
444
-        area: ['600px', '230px'],
449
+        area: ["600px", "230px"],
445 450
         shadeClose: true,
446
-        title: '录音详情'
447
-      })
451
+        title: "录音详情",
452
+      });
448 453
     },
449 454
     handleSelectionChange(selection) {
450
-      this.multipleSelection = selection
455
+      this.multipleSelection = selection;
451 456
     },
452 457
     formtTime(val) {
453 458
       if (!val) {
454
-        return '0秒'
459
+        return "0秒";
455 460
       }
456
-      var secondTime = parseInt(val)
457
-      var minuteTime = 0
458
-      var hourTime = 0
461
+      var secondTime = parseInt(val);
462
+      var minuteTime = 0;
463
+      var hourTime = 0;
459 464
       if (secondTime > 60) {
460
-        minuteTime = parseInt(secondTime / 60)
461
-        secondTime = parseInt(secondTime % 60)
465
+        minuteTime = parseInt(secondTime / 60);
466
+        secondTime = parseInt(secondTime % 60);
462 467
         if (minuteTime > 60) {
463
-          hourTime = parseInt(minuteTime / 60)
464
-          minuteTime = parseInt(minuteTime % 60)
468
+          hourTime = parseInt(minuteTime / 60);
469
+          minuteTime = parseInt(minuteTime % 60);
465 470
         }
466 471
       }
467
-      var result = '' + parseInt(secondTime) + '秒'
472
+      var result = "" + parseInt(secondTime) + "秒";
468 473
       if (minuteTime > 0) {
469
-        result = '' + parseInt(minuteTime) + '分' + result
474
+        result = "" + parseInt(minuteTime) + "分" + result;
470 475
       }
471 476
       if (hourTime > 0) {
472
-        result = '' + parseInt(hourTime) + '小时' + result
477
+        result = "" + parseInt(hourTime) + "小时" + result;
473 478
       }
474
-      return result
479
+      return result;
475 480
     },
476 481
 
477 482
     // 外呼
478 483
     clickCallOut(phoneNumber, id) {
479
-      this.callOut(phoneNumber, id)
484
+      this.callOut(phoneNumber, id);
480 485
     },
481 486
     // 外呼
482 487
     callOut(phoneNumber, id) {
@@ -499,13 +504,13 @@ export default {
499 504
         // })
500 505
       } else {
501 506
         this.$message({
502
-          message: '请先输入电话号码!',
503
-          type: 'warning'
504
-        })
507
+          message: "请先输入电话号码!",
508
+          type: "warning",
509
+        });
505 510
       }
506
-    }
507
-  }
508
-}
511
+    },
512
+  },
513
+};
509 514
 </script>
510 515
 
511 516
 <style rel="stylesheet/scss" lang="scss" scoped>

+ 208 - 212
CallCenterWeb.UI/RMYY/src/views/vehicleDispatch/vehicleScheduling/vehicleSchedulingList/index.vue

@@ -65,227 +65,223 @@
65 65
   </div>
66 66
 </template>
67 67
 <script>
68
-  import {
69
-    getList,
70
-    getAddWorkOrder,
71
-    getUpdateWorkOrder,
72
-    getDelete,
73
-    getModelDetail,
74
-    getAssignWorkOrder,
75
-    getSureWorkOrder
76
-  } from '@/api/vehicleDispatch/vehicleScheduling.js'
77
-  import {
78
-    getGetAllCar
79
-  } from '@/api/Escortservice/Escortservice.js'
80
-  import {
81
-    getOrderTypeList
82
-  } from "@/api/commonAPI.js"
83
-  import addOrEdit from './components/addOrEdit'
84
-  import detail from './components/detail'
85
-  import assign from './components/assign.vue'
86
-  import distribution from './components/distribution.vue'
87
-  import Pagination from '@/components/context/Pagination'
68
+import {
69
+  getList,
70
+  getAddWorkOrder,
71
+  getUpdateWorkOrder,
72
+  getDelete,
73
+  getModelDetail,
74
+  getAssignWorkOrder,
75
+  getSureWorkOrder,
76
+} from "@/api/vehicleDispatch/vehicleScheduling.js";
77
+import { getGetAllCar } from "@/api/Escortservice/Escortservice.js";
78
+import { getOrderTypeList } from "@/api/commonAPI.js";
79
+import addOrEdit from "./components/addOrEdit";
80
+import detail from "./components/detail";
81
+import assign from "./components/assign.vue";
82
+import distribution from "./components/distribution.vue";
83
+import Pagination from "@/components/context/Pagination";
88 84
 
89
-  export default {
90
-    name: 'vehicleScheduling',
91
-    components: {
92
-      Pagination
85
+export default {
86
+  name: "vehicleScheduling",
87
+  components: {
88
+    Pagination,
89
+  },
90
+  data() {
91
+    return {
92
+      activeName: "-1",
93
+      loading: false,
94
+      ordercode: "",
95
+      state: "-1",
96
+      typeList: [],
97
+      type: "",
98
+      startTime: "",
99
+      pageParams: {
100
+        pageindex: 1, //Number(this.$store.getters.serverConfig.PAGESIZE)
101
+        pagesize: Number(this.$store.getters.serverConfig.PAGESIZE),
102
+        total: 0,
103
+      },
104
+      dataLists: [],
105
+      multipleSelection: [],
106
+      selectIds: [],
107
+    };
108
+  },
109
+  created() {
110
+    this.getList();
111
+    this.getTypeOrder();
112
+    document.onkeyup = (e) => {
113
+      if (e.keyCode === 13) {
114
+        this.getList();
115
+      }
116
+    };
117
+  },
118
+  methods: {
119
+    btn_distribute() {
120
+      if (this.multipleSelection.length < 1) {
121
+        this.$message.error("没有要分配的选项");
122
+        return;
123
+      }
124
+      this.$layer.iframe({
125
+        content: {
126
+          content: distribution, // 传递的组件对象
127
+          parent: this, // 当前的vue对象
128
+          data: {
129
+            selectids: this.selectIds,
130
+            selectarr: this.multipleSelection,
131
+          }, // props
132
+        },
133
+        area: ["70%", "70%"],
134
+        title: "分配",
135
+      });
93 136
     },
94
-    data() {
95
-      return {
96
-        activeName: '-1',
97
-        loading: false,
98
-        ordercode: '',
99
-        state: '-1',
100
-        typeList: [],
101
-        type: '',
102
-        startTime: '',
103
-        pageParams: {
104
-          pageindex: 1, //Number(this.$store.getters.serverConfig.PAGESIZE)
105
-          pagesize: Number(this.$store.getters.serverConfig.PAGESIZE),
106
-          total: 0
137
+    btn_fenpei(id, row) {
138
+      this.selectIds = [];
139
+      this.multipleSelection = [];
140
+      this.selectIds.push(id);
141
+      this.multipleSelection.push(row);
142
+      this.$layer.iframe({
143
+        content: {
144
+          content: distribution, // 传递的组件对象
145
+          parent: this, // 当前的vue对象
146
+          data: {
147
+            selectids: this.selectIds,
148
+            selectarr: this.multipleSelection,
149
+          }, // props
107 150
         },
108
-        dataLists: [],
109
-        multipleSelection: [],
110
-        selectIds:[]
111
-      }
151
+        area: ["70%", "70%"],
152
+        title: "分配",
153
+      });
112 154
     },
113
-    created() {
114
-      this.getList()
115
-      this.getTypeOrder()
116
-      document.onkeyup = (e) => {
117
-        if (e.keyCode === 13) {
118
-          this.getList()
119
-        }
120
-      }
155
+    handleSelectionChange(val) {
156
+      this.multipleSelection = val;
157
+      this.selectIds = val.map((item) => item.F_WorkOrderCode);
121 158
     },
122
-    methods: {
123
-      btn_distribute(){
124
-        if(this.multipleSelection.length<1){
125
-          this.$message.error('没有要分配的选项')
126
-          return;
127
-        }
128
-        this.$layer.iframe({
129
-          content: {
130
-            content: distribution, // 传递的组件对象
131
-            parent: this, // 当前的vue对象
132
-            data: {
133
-              selectids:this.selectIds,
134
-              selectarr:this.multipleSelection
135
-            } // props
136
-          },
137
-          area: ['70%', '70%'],
138
-          title: '分配'
139
-        })
140
-      },
141
-      btn_fenpei(id,row){
142
-        this.selectIds=[]
143
-        this.multipleSelection=[]
144
-        this.selectIds.push(id)
145
-        this.multipleSelection.push(row)
146
-        this.$layer.iframe({
147
-          content: {
148
-            content: distribution, // 传递的组件对象
149
-            parent: this, // 当前的vue对象
150
-            data: {
151
-              selectids:this.selectIds,
152
-              selectarr:this.multipleSelection
153
-            } // props
154
-          },
155
-          area: ['70%', '70%'],
156
-          title: '分配'
157
-        })
158
-      },
159
-      handleSelectionChange(val) {
160
-        this.multipleSelection = val;
161
-        this.selectIds = val.map(item => item.F_WorkOrderCode)
162
-      },
163
-      handleClick(res) {
164
-        this.state = res.name
165
-        this.getList()
166
-      },
167
-      getTypeOrder() {
159
+    handleClick(res) {
160
+      this.state = res.name;
161
+      this.getList();
162
+    },
163
+    getTypeOrder() {
164
+      const params = {
165
+        pid: 2,
166
+        typeid: 4000,
167
+      };
168
+      getOrderTypeList(params.pid, params.typeid).then((res) => {
169
+        this.typeList = res.rows;
170
+      });
171
+    },
172
+    getList() {
173
+      this.loading = true;
174
+      return new Promise((resolve) => {
168 175
         const params = {
169
-          pid: 2,
170
-          typeid: 4000
171
-        }
172
-        getOrderTypeList(params.pid, params.typeid).then(res => {
173
-          this.typeList = res.rows
174
-        })
175
-      },
176
-      getList() {
177
-        this.loading = true
178
-        return new Promise((resolve) => {
179
-          const params = {
180
-            type: this.type,
181
-            pageindex: this.pageParams.pageindex, // 第几页
182
-            pagesize: this.pageParams.pagesize, // 每页几条信息
183
-            state: this.state,
184
-            WorkOrderCode: this.ordercode,
185
-            starttime: this.startTime && this.startTime[0],
186
-            endtime: this.startTime && this.startTime[1]
176
+          type: this.type,
177
+          pageindex: this.pageParams.pageindex, // 第几页
178
+          pagesize: this.pageParams.pagesize, // 每页几条信息
179
+          state: this.state,
180
+          WorkOrderCode: this.ordercode,
181
+          starttime: this.startTime && this.startTime[0],
182
+          endtime: this.startTime && this.startTime[1],
183
+        };
184
+        getList(params).then((response) => {
185
+          this.loading = false;
186
+          if (response.rows.length >= 0) {
187
+            this.pageParams.total = response.tatal;
188
+            this.dataLists = response.rows;
187 189
           }
188
-          getList(params).then((response) => {
189
-            this.loading = false
190
-            if (response.rows.length >= 0) {
191
-              this.pageParams.total = response.tatal
192
-              this.dataLists = response.rows
193
-            }
194
-          })
195
-          resolve()
196
-        })
197
-      },
198
-      btn_search() {
199
-        this.pageParams.pageindex = 1
200
-        this.getList()
201
-      },
202
-      btn_edit(editId, wocode) {
203
-        this.$layer.iframe({
204
-          content: {
205
-            content: addOrEdit, // 传递的组件对象
206
-            parent: this, // 当前的vue对象
207
-            data: {
208
-              rowid: editId.toString(),
209
-              wocode: wocode
210
-            } // props
211
-          },
212
-          area: ['60%', '500px'],
213
-          title: '编辑'
214
-        })
215
-      },
216
-      // 详情
217
-      hadndleOrderCode(ordercode, wocode) {
218
-        this.$layer.iframe({
219
-          content: {
220
-            content: detail, // 传递的组件对象
221
-            parent: this, // 当前的vue对象
222
-            data: {
223
-              rowid: ordercode,
224
-              wocode: wocode
225
-            } // props
226
-          },
227
-          area: ['80%', '90%'],
228
-          title: '工单详情'
190
+        });
191
+        resolve();
192
+      });
193
+    },
194
+    btn_search() {
195
+      this.pageParams.pageindex = 1;
196
+      this.getList();
197
+    },
198
+    btn_edit(editId, wocode) {
199
+      this.$layer.iframe({
200
+        content: {
201
+          content: addOrEdit, // 传递的组件对象
202
+          parent: this, // 当前的vue对象
203
+          data: {
204
+            rowid: editId.toString(),
205
+            wocode: wocode,
206
+          }, // props
207
+        },
208
+        area: ["60%", "500px"],
209
+        title: "编辑",
210
+      });
211
+    },
212
+    // 详情
213
+    hadndleOrderCode(ordercode, wocode) {
214
+      this.$layer.iframe({
215
+        content: {
216
+          content: detail, // 传递的组件对象
217
+          parent: this, // 当前的vue对象
218
+          data: {
219
+            rowid: ordercode,
220
+            wocode: wocode,
221
+          }, // props
222
+        },
223
+        area: ["80%", "90%"],
224
+        title: "工单详情",
225
+      });
226
+    },
227
+    //删除
228
+    btn_delete(editId) {
229
+      const params = {
230
+        WorkOrderCode: editId,
231
+      };
232
+      this.$confirm("您确定要删除此信息吗?", "提示", {
233
+        confirmButtonText: "确定",
234
+        cancelButtonText: "取消",
235
+        type: "warning",
236
+      })
237
+        .then(() => {
238
+          getDelete(params).then((response) => {
239
+            this.getList();
240
+            this.$message.success("删除成功!");
241
+          });
229 242
         })
230
-      },
231
-      //删除
232
-      btn_delete(editId) {
233
-        const params = {
234
-          WorkOrderCode: editId
235
-        }
236
-        this.$confirm('您确定要删除此信息吗?', '提示', {
237
-            confirmButtonText: '确定',
238
-            cancelButtonText: '取消',
239
-            type: 'warning'
240
-          })
241
-          .then(() => {
242
-            getDelete(params).then((response) => {
243
-              this.getList()
244
-              this.$message.success('删除成功!')
245
-            })
246
-          })
247
-          .catch(() => {
248
-            this.$message('已取消删除')
249
-          })
250
-      },
251
-      //确定工单
252
-      btn_sure(rowid) {
253
-        const params = {
254
-          orderid: rowid
255
-        }
256
-        this.$confirm('您要确认此工单吗?', '提示', {
257
-            confirmButtonText: '确定',
258
-            cancelButtonText: '取消',
259
-            type: 'warning'
260
-          })
261
-          .then(() => {
262
-            getSureWorkOrder(params).then((response) => {
263
-              if (response.state.toLowerCase() === 'success') {
264
-                this.getList()
265
-                this.$message.success('确定成功!')
266
-              }
267
-            })
268
-          })
269
-          .catch(() => {
270
-            this.$message('已取消')
271
-          })
272
-      },
273
-      //派车
274
-      btn_assign(rowid) {
275
-        this.$layer.iframe({
276
-          content: {
277
-            content: assign, // 传递的组件对象
278
-            parent: this, // 当前的vue对象
279
-            data: {
280
-              rowid: rowid
281
-            } // props
282
-          },
283
-          area: ['40%', '50%'],
284
-          title: '派车'
243
+        .catch(() => {
244
+          this.$message("已取消删除");
245
+        });
246
+    },
247
+    //确定工单
248
+    btn_sure(rowid) {
249
+      const params = {
250
+        orderid: rowid,
251
+      };
252
+      this.$confirm("您要确认此工单吗?", "提示", {
253
+        confirmButtonText: "确定",
254
+        cancelButtonText: "取消",
255
+        type: "warning",
256
+      })
257
+        .then(() => {
258
+          getSureWorkOrder(params).then((response) => {
259
+            if (response.state.toLowerCase() === "success") {
260
+              this.getList();
261
+              this.$message.success("确定成功!");
262
+            }
263
+          });
285 264
         })
286
-      }
287
-    }
288
-  }
265
+        .catch(() => {
266
+          this.$message("已取消");
267
+        });
268
+    },
269
+    //派车
270
+    btn_assign(rowid) {
271
+      this.$layer.iframe({
272
+        content: {
273
+          content: assign, // 传递的组件对象
274
+          parent: this, // 当前的vue对象
275
+          data: {
276
+            rowid: rowid,
277
+          }, // props
278
+        },
279
+        area: ["40%", "50%"],
280
+        title: "派车",
281
+      });
282
+    },
283
+  },
284
+};
289 285
 </script>
290 286
 <style rel="stylesheet/scss" lang="scss" scoped>
291 287
 </style>