瀏覽代碼

Merge remote-tracking branch 'origin/master'

Hwf 10 月之前
父節點
當前提交
f8286601d4

+ 57 - 3
src/api/onlineRollCall/index.ts

@@ -8,10 +8,37 @@ export function getPhoneList() {
     });
 }
 
-// 新建
-export function createCall(data) {
+// 按县区查看
+export function dept_by_key(params) {
     return request({
-        url: '/api/online_roll_call/call/create',
+        url: '/api/online_roll_call/call/dept_by_key',
+        method: 'get',
+        params: params
+    });
+}
+
+// 一键点名全市至区县
+export function create_by_city_to_area(data) {
+    return request({
+        url: '/api/online_roll_call/call/create_by_city_to_area',
+        method: 'post',
+        data: data
+    });
+}
+
+// 一键点名全市至镇街
+export function create_by_city_to_district(data) {
+    return request({
+        url: '/api/online_roll_call/call/create_by_city_to_district',
+        method: 'post',
+        data: data
+    });
+}
+
+// 新建点名(分区/县点名)
+export function create_by_dept_ids(data) {
+    return request({
+        url: '/api/online_roll_call/call/create_by_dept_ids',
         method: 'post',
         data: data
     });
@@ -51,4 +78,31 @@ export function hasMyCall(data) {
         method: 'post',
         data: data
     });
+}
+
+// 列表
+export function getCallList(params) {
+    return request({
+        url: '/api/online_roll_call/call/list',
+        method: 'get',
+        params: params
+    });
+}
+
+// 应答列表
+export function getAckList(params) {
+    return request({
+        url: '/api/online_roll_call/call/ack_list',
+        method: 'get',
+        params: params
+    });
+}
+
+// 点名统计
+export function getCallSummary(params) {
+    return request({
+        url: '/api/online_roll_call/call/summary',
+        method: 'get',
+        params: params
+    });
 }

+ 26 - 2
src/views/onlineRollCall/index.vue

@@ -12,6 +12,8 @@
 <script lang="ts" setup name="onlineRollCall">
 import {reactive} from "vue";
 import {useRouter} from "vue-router";
+import {showConfirmDialog, showToast} from 'vant';
+import {create_by_city_to_area, create_by_city_to_district} from "@/api/onlineRollCall";
 
 const router = useRouter();
 const menuData = reactive([
@@ -22,8 +24,30 @@ const menuData = reactive([
   { name: '点名应答记录', key: '5', img: 'icon3' }
 ])
 const handleClick = (key: string) => {
-  if (['1', '2'].includes(key)) {
-
+  if (key === '1') {
+    showConfirmDialog({
+      title: '提示',
+      message: '确认一键点名全市至区县?'
+    })
+    .then(() => {
+      create_by_city_to_area({}).then((res) => {
+        showToast({type: 'success', message: res.msg, onClose:()=>{
+          router.push({ name : 'RollCallDetails', query: { id: res.data }})
+        }});
+      })
+    })
+  } else if (key === '2') {
+    showConfirmDialog({
+      title: '提示',
+      message: '确认一键点名全市至镇街?'
+    })
+    .then(() => {
+      create_by_city_to_district({}).then((res) => {
+        showToast({type: 'success', message: res.msg, onClose:()=>{
+          router.push({ name : 'RollCallDetails', query: { id: res.data }})
+        }});
+      })
+    })
   } else if (key === '3') {
     router.push({ name : 'DistrictCountyRollCall'});
   } else if (key === '4') {

+ 68 - 48
src/views/onlineRollCall/rollCallDetails.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="container">
-    <div v-if="detailsData.status === '1'" class="box">
+    <div v-if="detailsData.call_status === 1" class="box">
       <div class="box-item1">
         <i class="icon"/>
         <div class="box-right">
@@ -24,36 +24,36 @@
         <i class="icon"/>
         <div class="box-right">
           <div class="time2">开始点名时间</div>
-          <div class="time2">{{ parseTime(detailsData.time1, '{y}-{m}-{d}') }}</div>
-          <div class="time2">{{ parseTime(detailsData.time1, '{h}:{i}:{s}') }}</div>
+          <div class="time2">{{ parseTime(detailsData.begin_time, '{y}-{m}-{d}') }}</div>
+          <div class="time2">{{ parseTime(detailsData.begin_time, '{h}:{i}:{s}') }}</div>
         </div>
       </div>
       <div class="box-item5">
         <i class="icon"/>
         <div class="box-right">
           <div class="time2">结束点名时间</div>
-          <div class="time2">{{ parseTime(detailsData.time2, '{y}-{m}-{d}') }}</div>
-          <div class="time2">{{ parseTime(detailsData.time2, '{h}:{i}:{s}') }}</div>
+          <div class="time2">{{ parseTime(detailsData.end_time, '{y}-{m}-{d}') }}</div>
+          <div class="time2">{{ parseTime(detailsData.end_time, '{h}:{i}:{s}') }}</div>
         </div>
       </div>
     </div>
-    <div v-if="detailsData.status === '1'" class="box2">
+    <div v-if="detailsData.call_status === 1" class="box2">
       <div class="card bg1">
         <div class="text1">本次点名时间</div>
-        <div class="text2">{{ parseTime(detailsData.time1, '{y}-{m}-{d}') }}</div>
-        <div class="text2">{{ parseTime(detailsData.time1, '{h}:{i}:{s}') }}</div>
+        <div class="text2">{{ parseTime(detailsData.begin_time, '{y}-{m}-{d}') }}</div>
+        <div class="text2">{{ parseTime(detailsData.begin_time, '{h}:{i}:{s}') }}</div>
       </div>
       <div class="card bg2">
         <div class="text1">已应答镇/街</div>
         <div class="line">
-          <div class="text3">{{ detailsData.data1 }}</div>
+          <div class="text3">{{ detailsData.ack_count }}</div>
           <div class="text1">个</div>
         </div>
       </div>
       <div class="card bg3">
         <div class="text1">未应答镇/街</div>
         <div class="line">
-          <div class="text4">{{ detailsData.data2 }}</div>
+          <div class="text4">{{ detailsData.unack_count }}</div>
           <div class="text1">个</div>
         </div>
       </div>
@@ -61,39 +61,39 @@
     <div v-else class="box2">
       <div class="card bg1">
         <div class="text1">点名时间时长</div>
-        <div class="text5">{{ detailsData.durationTime }}</div>
+        <div class="text5">{{ detailsData.duration_time }}</div>
       </div>
       <div class="card bg2">
         <div class="text1">已应答镇/街</div>
         <div class="line">
-          <div class="text3">{{ detailsData.data1 }}</div>
+          <div class="text3">{{ detailsData.ack_count }}</div>
           <div class="text1">个</div>
         </div>
       </div>
       <div class="card bg3">
         <div class="text1">未应答镇/街</div>
         <div class="line">
-          <div class="text4">{{ detailsData.data2 }}</div>
+          <div class="text4">{{ detailsData.unack_count }}</div>
           <div class="text1">个</div>
         </div>
       </div>
     </div>
     <div class="custom-list">
-      <div v-for="(item, index) in detailsData.dataList" :key="index" class="item">
+      <div v-for="(item, index) in detailsData.items" :key="index" class="item">
         <div class="item-header">
-          <div class="text1">{{ item.data1 }}</div>
-          <div :class="getClass(item.status)">{{ item.status }}</div>
+          <div class="text1">{{ item.dept_name }}</div>
+          <div :class="getClass(item.ack_status_text)">{{ item.ack_status_text }}</div>
         </div>
         <div class="item-middle">
           <i class="icon-phone" />
           <div class="item-right">
-            <div class="text2">值班领导:{{ item.data2 }}</div>
-            <div class="text3">值班员:{{ item.data2 }}</div>
+            <div class="text2">值班领导:{{ item.onduty_leader }}</div>
+            <div class="text3">值班员:{{ item.onduty_user }}</div>
           </div>
         </div>
         <div class="item-bottom">
-          <div class="btn">视频</div>
-          <div class="btn">电话</div>
+          <div class="btn" @click="handleVideo(item.video_url)">视频</div>
+          <div class="btn" @click="handleCall(item.call_url)">电话</div>
         </div>
       </div>
     </div>
@@ -104,43 +104,49 @@
 import {useRoute} from "vue-router";
 import {onMounted, onUnmounted, ref} from "vue";
 import {parseTime} from "../../utils/ruoyi";
-import {showConfirmDialog} from "vant";
+import {showConfirmDialog, showToast, showSuccessToast} from "vant";
+import {getCallDetail, endCall} from "@/api/onlineRollCall";
 
 const route = useRoute();
 let id = ref();
 
 let detailsData = ref({
-  time1: '',
-  time2: '',
-  durationTime: '',
-  data1: '',
-  data2: '',
-  data3: '',
+  begin_time: '',
+  end_time: '',
+  duration_time: '',
+  ack_count: 0,
+  unack_count: 0,
   // 状态 0 结束 1开始
-  status: '',
-  dataList: []
+  call_status: 0,
+  items: []
 });
 let durationTime = ref('');
 let timer;
 const initData = () => {
+  /*
   detailsData.value = {
-    time1: '2024-10-22 12:36:09',
-    time2: '2024-10-23 12:36:09',
-    durationTime: '24:00:00',
-    data1: '10',
-    data2: '10',
-    status: '1',
-    dataList: [
-      {data1: '水东街道1', status: '未应答', data2: '谭景津', data3: '谭大大'},
-      {data1: '水东街道2', status: '呼叫中', data2: '谭景津', data3: '谭大大'},
-      {data1: '水东街道3', status: '已接通', data2: '谭景津', data3: '谭大大'},
-      {data1: '水东街道4', status: '未应答', data2: '谭景津', data3: '谭大大'},
-      {data1: '水东街道5', status: '未应答', data2: '谭景津', data3: '谭大大'},
+    begin_time: '2024-10-22 12:36:09',
+    end_time: '2024-10-23 12:36:09',
+    duration_time: '24:00:00',
+    ack_count: 10,
+    unack_count: 10,
+    call_status: 1,
+    items: [
+      {dept_name: '水东街道1', ack_status: 0, onduty_leader: '谭景津', onduty_user: '谭大大'},
+      {dept_name: '水东街道2', ack_status: 2, onduty_leader: '谭景津', onduty_user: '谭大大'},
+      {dept_name: '水东街道3', ack_status: 1, onduty_leader: '谭景津', onduty_user: '谭大大'},
+      {dept_name: '水东街道4', ack_status: 0, onduty_leader: '谭景津', onduty_user: '谭大大'},
+      {dept_name: '水东街道5', ack_status: 0, onduty_leader: '谭景津', onduty_user: '谭大大'},
     ]
   }
-  if (!timer && detailsData.value.status !== '0') {
-    timer = setInterval(calculateDuration, 1000)
-  }
+  */
+  getCallDetail({call_id: id.value}).then((res)=>{
+    detailsData.value = res.data;
+    if (!timer && detailsData.value.call_status === 1) {
+      timer = setInterval(calculateDuration, 1000)
+    }
+    console.log(detailsData.value.begin_time)
+  })
 };
 const getClass = (value) => {
   let res = '';
@@ -155,7 +161,8 @@ const getClass = (value) => {
 };
 const calculateDuration = () => {
   // 将起始时间字符串转换为日期对象
-  const startTime = new Date(detailsData.value.time1);
+  const startTime = new Date(detailsData.value.begin_time);
+  
 
   // 获取当前时间作为结束时间
   const endTime = new Date();
@@ -175,7 +182,6 @@ const calculateDuration = () => {
 
   // 格式化时间为 HH:MM:SS
   const formattedDuration = `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;
-
   // 返回格式化的持续时间
   durationTime.value = formattedDuration;
 };
@@ -183,15 +189,29 @@ const calculateDuration = () => {
 const handleEnd = () => {
   showConfirmDialog({
     title: '提示',
-    message: '是否确定结束点名?',
+    message: '是否确定结束点名 ?',
   }).then(() => {
-    console.log('结束');
+    endCall({call_id: id.value}).then((res)=>{
+      showToast({type: 'success', message: res.msg, onClose:()=>{
+        initData();
+        }});
+    })
   });
 };
+
+const handleVideo = (url) => {
+  showToast("对接融合通信后发起视频 video:"+url);
+}
+
+const handleCall = (url) => {
+  showToast("对接融合通信后发起电话 tel:"+url);
+}
+
 onMounted(() => {
   id.value = route.query.id;
   initData();
 })
+
 onUnmounted(() => {
   if (!!timer) {
     clearInterval(timer)

+ 49 - 13
src/views/onlineRollCall/rollCallRecord.vue

@@ -23,11 +23,11 @@
         <div class="data-box1">
           <div class="data-item">
             <i class="icon1" />
-            <div class="text1">点名开始时间:{{ item.time1 }}</div>
+            <div class="text1">点名开始时间:{{ item.begin_time }}</div>
           </div>
           <div class="data-item">
             <i class="icon2" />
-            <div class="text1">点名结束时间:{{item.time2}}</div>
+            <div class="text1">点名结束时间:{{item.end_time || "未结束"}}</div>
           </div>
         </div>
         <div class="btn" @click="handleToDetails(item.id)">查看详情</div>
@@ -35,15 +35,15 @@
       <div class="line2">
         <div class="data-item1">
           <div class="text1">点名时长</div>
-          <div class="text2">{{ item.time3 }}</div>
+          <div class="text2">{{ item.duration_time }}</div>
         </div>
         <div class="data-item2">
           <div class="text1">已应答</div>
-          <div class="text2">{{ item.data1 }}</div>
+          <div class="text2">{{ item.ack_count }}</div>
         </div>
         <div class="data-item3">
           <div class="text1">未应答</div>
-          <div class="text2">{{ item.data2 }}</div>
+          <div class="text2">{{ item.unack_count }}</div>
         </div>
       </div>
     </div>
@@ -53,18 +53,23 @@
 </template>
 
 <script lang="ts" setup name="rollCallRecord">
-import {onMounted, onUnmounted, reactive, ref} from "vue";
+import {onMounted, onUnmounted, reactive, ref, toRefs} from "vue";
 import closeImg from "@/assets/images/close.png";
 import searchImg from "@/assets/images/search.png";
 import {parseTime} from "@/utils/ruoyi";
 import {useRouter} from "vue-router";
+import {getCallList} from "@/api/onlineRollCall";
 
 const router = useRouter();
-const queryParams = reactive({
-  page: 0,
-  page_size: 15,
-  dateRange: []
+const data = reactive({
+  queryParams: {
+    page: 0,
+    page_size: 10,
+    begin_date: '',
+    end_date: ''
+  }
 });
+const {queryParams} = toRefs(data);
 const total = ref(0);
 const loading = ref(false);
 const error = ref(false);
@@ -77,12 +82,16 @@ const onConfirm = (data) => {
   show.value = false;
   const startDate = parseTime(data[0], '{y}-{m}-{d}');
   const endDate = parseTime(data[1], '{y}-{m}-{d}');
-  queryParams.dateRange = [startDate, endDate];
+  queryParams.value.begin_date = startDate;
+  queryParams.value.end_date = endDate;
+  queryParams.value.page = 0;
   dateRangeText.value = startDate + '至' + endDate;
   getList();
 }
 const handleClear = () => {
-  queryParams.dateRange = [];
+  queryParams.value.page = 0;
+  queryParams.value.begin_date = '';
+  queryParams.value.end_date = '';
   dateRangeText.value = '';
   getList();
 }
@@ -114,10 +123,36 @@ const calculateDuration = (startTimeStr) => {
 };
 const updateTime = () => {
   dataList.value.forEach((item) => {
-    item.time3 = calculateDuration(item.time1);
+    if(item.call_status == 1)
+      item.duration_time = calculateDuration(item.begin_time);
+    else
+      item.duration_time = item.duration_time;
   })
 }
 const getList = () => {
+  queryParams.value.page++;
+  getCallList(queryParams.value)
+      .then((res) => {
+        var items = res.data || [];
+        total.value = res.total;
+        if (queryParams.value.page == 1) {
+          dataList.value = [];
+        }
+        items.forEach(val => {
+          dataList.value.push(val)
+        });
+        if (queryParams.value.page_size * queryParams.value.page >= total.value) {
+          finished.value = true;
+        } else {
+          finished.value = false;
+        }
+      }).catch(() => {
+    error.value = true;
+    finished.value = false;
+  }).finally(() => {
+    loading.value = false;
+  });
+  /*
   dataList.value = [
     { id: 1, time1: '2024-10-22 11:10:08', time2: '2024-10-22 12:00:00', time3: '00:01:06', data1: 23, data2: 12 },
     { id: 2, time1: '2024-10-22 11:10:08', time2: '2024-10-22 12:00:00', time3: '00:01:06', data1: 23, data2: 12 },
@@ -130,6 +165,7 @@ const getList = () => {
   loading.value = false;
   finished.value = true;
   total.value = 7;
+  */
   if (!timer) {
     timer = setInterval(updateTime, 1000)
   }

+ 81 - 58
src/views/onlineRollCall/rollCallRecord2.vue

@@ -7,7 +7,7 @@
           <div class="text1">点名总次数</div>
         </div>
         <div class="line2">
-          <div class="text-blue">16</div>
+          <div class="text-blue">{{ summary.call_count }}</div>
           <div class="text2">次</div>
         </div>
       </div>
@@ -17,7 +17,7 @@
           <div class="text1">已应答次数</div>
         </div>
         <div class="line2">
-          <div class="text-green">16</div>
+          <div class="text-green">{{ summary.ack_count }}</div>
           <div class="text2">次</div>
         </div>
       </div>
@@ -27,20 +27,23 @@
           <div class="text1">未应答次数</div>
         </div>
         <div class="line2">
-          <div class="text-red">16</div>
+          <div class="text-red">{{ summary.unack_count }}</div>
           <div class="text2">次</div>
         </div>
       </div>
     </div>
-    <van-search
-        v-model="queryParams.search_keyword"
-        class="common-search"
-        :left-icon="searchImg"
-        :right-icon="closeImg"
-        :clearable="false"
-        @search="onSearchKeyword"
-        @click-right-icon.stop="onSearchCancel"
+    
+    <van-field
+      v-model="dateRangeText"
+      class="common-search"
+      :left-icon="searchImg"
+      :right-icon="closeImg"
+      placeholder="请选择时间段"
+      readonly
+      @click="show = true"
+      @click-right-icon.stop="handleClear"
     />
+
     <van-list
         v-model:loading="loading"
         v-model:error="error"
@@ -49,83 +52,103 @@
         finished-text="没有更多记录了"
         class="custom-list"
         @load="getList">
-        <div :class="item.status === '0' ? 'custom-list-item1' : 'custom-list-item2'" v-for="item in dataList" :key="item.id">
-          <div :class="item.status === '0' ? 'error-tag' : 'success-tag'">
-            {{ item.status === '0' ? '未应答' : '已应答' }}
+        <div :class="item.ack_status === 0 ? 'custom-list-item1' : 'custom-list-item2'" v-for="item in dataList" :key="item.id">
+          <div :class="item.ack_status === 0 ? 'error-tag' : 'success-tag'">
+            {{ item.ack_status === 0 ? '未应答' : '已应答' }}
           </div>
           <div class="img"></div>
           <div class="box-right">
-            <div class="text1">点名时间:{{ item.time }}</div>
-            <div class="text1">完成耗时:{{ item.time2 }}</div>
+            <div class="text1">点名时间:{{ item.create_time }}</div>
+            <div class="text1">完成耗时:{{ item.duration_time }}</div>
           </div>
         </div>
     </van-list>
+
+    <van-calendar v-model:show="show" type="range" @confirm="onConfirm" />
   </div>
 </template>
 
 <script lang="ts" setup name="rollCallRecord2">
 import searchImg from "@/assets/images/search.png";
 import closeImg from "@/assets/images/close.png";
-import {ref} from "vue";
+import {ref, reactive, toRefs, onMounted} from "vue";
+import {parseTime} from "@/utils/ruoyi";
+import {getCallSummary, getAckList} from "@/api/onlineRollCall";
 
 const dataList = ref([]);
 const total = ref(0);
 const loading = ref(false);
 const error = ref(false);
 const finished = ref(false);
-const queryParams = ref({
-  page: 0,
-  page_size: 15,
-  event_type: '',
-  event_level: '',
-  event_status: '',
-  search_keyword: ''
+let dateRangeText = ref('');
+let show = ref(false);
+
+const data = reactive({
+  queryParams: {
+    page: 0,
+    page_size: 5,
+    begin_date: '',
+    end_date: ''
+  }
 });
+const {queryParams} = toRefs(data);
+
+const summary = ref({
+  call_count: 0,
+  ack_count: 0,
+  unack_count: 0
+})
 
-const onSearchKeyword = (val) => {
-  queryParams.value.search_keyword = val;
+const onConfirm = (data) => {
+  show.value = false;
+  const startDate = parseTime(data[0], '{y}-{m}-{d}');
+  const endDate = parseTime(data[1], '{y}-{m}-{d}');
+  queryParams.value.begin_date = startDate;
+  queryParams.value.end_date = endDate;
   queryParams.value.page = 0;
+  dateRangeText.value = startDate + '至' + endDate;
   getList();
 }
 
-const onSearchCancel = () => {
-  queryParams.value.search_keyword = '';
+const handleClear = () => {
   queryParams.value.page = 0;
+  queryParams.value.begin_date = '';
+  queryParams.value.end_date = '';
+  dateRangeText.value = '';
   getList();
 }
 
 const getList = () => {
-  dataList.value = [
-    { time: '2024-10-23 11:10:08', time2: '00:00-08', status: '0' },
-    { time: '2024-10-23 11:10:08', time2: '00:00-08', status: '1' },
-    { time: '2024-10-23 11:10:08', time2: '00:00-08', status: '1' },
-    { time: '2024-10-23 11:10:08', time2: '00:00-08', status: '0' },
-    { time: '2024-10-23 11:10:08', time2: '00:00-08', status: '0' }
-  ];
-  loading.value = false;
-  // queryParams.value.page++;
-  // getEventList(queryParams.value).then((res) => {
-  //   let items = res.data || [];
-  //   total.value = res.total;
-  //   if (queryParams.value.page == 1) {
-  //     dataList.value = [];
-  //   }
-  //   items.forEach(val => {
-  //     dataList.value.push(val)
-  //   });
-  //   if (queryParams.value.page_size * queryParams.value.page >= total.value) {
-  //     finished.value = true;
-  //   } else {
-  //     finished.value = false;
-  //   }
-  // }).catch(() => {
-  //   error.value = true;
-  //   finished.value = false;
-  // }).finally(() => {
-  //   loading.value = false;
-  // });
+  queryParams.value.page ++;
+  getAckList(queryParams.value)
+      .then((res) => {
+        var items = res.data || [];
+        total.value = res.total;
+        if (queryParams.value.page == 1) {
+          dataList.value = [];
+        }
+        items.forEach(val => {
+          dataList.value.push(val)
+        });
+        if (queryParams.value.page_size * queryParams.value.page >= total.value) {
+          finished.value = true;
+        } else {
+          finished.value = false;
+        }
+      }).catch(() => {
+    error.value = true;
+    finished.value = false;
+  }).finally(() => {
+    loading.value = false;
+  });
 }
 
+onMounted(() => {
+  getCallSummary({}).then((res)=>{
+    summary.value = res.data
+  })
+})
+
 </script>
 
 <style lang="scss" scoped>
@@ -276,7 +299,7 @@ const getList = () => {
     background-image: linear-gradient(to bottom, #ff5b6c 0%, #ff4555 50%, #ff303d 100%);
   }
   .img {
-    width: 95px;
+    width: 90px;
     height: 66px;
     background-color: #ededed;
     border-radius: 8px;

+ 18 - 5
src/views/onlineRollCall/spotCheckUnits.vue

@@ -36,8 +36,8 @@ import {onMounted, reactive, ref, watch} from "vue";
 import {useRoute, useRouter} from "vue-router";
 import searchImg from "@/assets/images/search.png";
 import closeImg from "@/assets/images/close.png";
-import {getPhoneList} from "@/api/onlineRollCall";
-import {showFailToast} from "vant";
+import {dept_by_key, create_by_dept_ids} from "@/api/onlineRollCall";
+import {showFailToast, showToast, showConfirmDialog} from "vant";
 
 const route = useRoute();
 const router = useRouter();
@@ -61,7 +61,7 @@ let treeRef = ref();
 let treeData = ref([]);
 let checkData = ref([]);
 const getList = () => {
-  getPhoneList().then((res) => {
+  dept_by_key({"area_name": key.value, "keyword": keyword.value}).then((res) => {
     treeData.value = res.data;
   })
 }
@@ -76,11 +76,13 @@ const handleCheckChange = () => {
   const data = [];
   const treeData = treeRef.value.getCheckedNodes(false, false);
   treeData.forEach((item) => {
+    data.push(item.id);
+    /*
     if (!item.deptType) {
       if (!data.some((obj) => obj.id === item.id)) {
         data.push(item);
       }
-    }
+    }*/
   });
   checkData.value = data;
 };
@@ -92,7 +94,18 @@ const handleCancel = () => {
 }
 const handleConfirm = () => {
   if (checkData.value.length > 0) {
-    router.push({ name : 'RollCallDetails', query: { id: 'test' }})
+    showConfirmDialog({
+      title: '提示',
+      message: '确认点名?'
+    })
+    .then(() => {
+      create_by_dept_ids({depts: checkData.value, remark:''}).then((res) => {
+        showToast({type: 'success', message: res.msg, onClose:()=>{
+          router.push({ name : 'RollCallDetails', query: { id: res.data }})
+        }});
+      })
+    })
+    // router.push({ name : 'RollCallDetails', query: { id: 'test' }})
   } else {
     showFailToast('请先选择点名单位')
   }