فهرست منبع

智会议界面优化、对接后台部分接口

tianyabing 2 سال پیش
والد
کامیت
3de1be84e6

+ 5 - 0
src/api/carbon/apiCarbonOverview.js

@@ -16,10 +16,15 @@ const getCarbonQuotaComposition = (timeRange) => {
 const getCarbonProportion = (timeRange) => {
     return Request.post('/carbon/getCarbonProportion', timeRange)
 }
+const getCarbonNews = (timeRange) => {
+    return Request.post('/carbon/getCarbonNews', timeRange)
+}
+
 
 export default {
     getCoreData,
     getCarbonInfo,
     getCarbonQuotaComposition,
     getCarbonProportion,
+    getCarbonNews,
 }

+ 5 - 0
src/api/work/apiWorkFloor.js

@@ -5,6 +5,11 @@ const getCoreData = (timeRange) => {
     return Request.post('/floor/getFloorCoreIndicators', timeRange)
 }
 
+const getAccessPersonnel = (timeRange) => {
+    return Request.post('/floor/getAccessPersonnel', timeRange)
+}
+
 export default {
     getCoreData,
+    getAccessPersonnel,
 }

BIN
src/assets/images/scene/meetingCompare.png


+ 2 - 1
src/components/common/timeRange.vue

@@ -1,5 +1,5 @@
 <template>
-  <a-range-picker v-if="show" :default-value="[defaultStartTime,defaultEndTime]"
+  <a-range-picker v-if="show" :default-value="[defaultStartTime,defaultEndTime]" :showTime="showTime"
                   :format="timeFormat"
                   @change="change"
   />
@@ -15,6 +15,7 @@ export default {
     }
   },
   props: {
+    showTime: Object,
     timeFormat: {
       type: String,
       default: "YYYY/MM/DD"

+ 35 - 12
src/components/doubleCarbon/overview/charts/doubleCarbonNews.vue

@@ -3,11 +3,30 @@
     <a-table :rowKey=" (record, index) => index"
         :columns="columns"
         :show-header="false"
-        :data-source="tableData"
+        :data-source="data"
         :pagination="false"
     >
-      <a slot="name" slot-scope="text">{{ text }}</a>
+      <template #operation="text,record">
+        <a-button type="link" style="color: #333333" @click="view(record)">
+          <a-icon type="double-right" />
+        </a-button>
+      </template>
     </a-table>
+
+    <a-modal title="双碳新闻" v-model="showNews" width="60%" :footer="null" centered style="height: 500px">
+      <p style="font-size: 20px;font-weight: bold;color:#000;">{{ currNews.tital }}</p>
+      <div style="margin-bottom:10px;border-bottom: 1px solid #CCCCCC;">{{ currNews.date }}</div>
+      <div
+          style="max-height: calc(100vh - 300px);overflow:auto;background: rgba(10,100,100,0.05);font-size:16px;"
+          v-if="currNews.content && currNews.content.indexOf(`<p>`) != -1"
+          v-html="currNews.content"
+      ></div>
+      <p v-else style="font-size: 16px;font-weight:400;color:#000;background: rgba(10,100,100,0.05);">
+        {{ currNews.content }}
+      </p>
+      <div style="margin-top:10px;border-top: 1px solid #CCCCCC;">{{ currNews.writer }}</div>
+    </a-modal>
+
   </div>
 </template>
 
@@ -15,22 +34,25 @@
 export default {
   data() {
     return {
+      showNews: false,
+      currNews: {},
       columns: [
         {
           dataIndex: 'tag',
           key: 'tag'
         },{
-          dataIndex: 'title',
-          key: 'title'
+          dataIndex: 'tital',
+          key: 'tital'
         },{
-          dataIndex: 'author',
-          key: 'author'
+          dataIndex: 'writer',
+          key: 'writer'
         },{
-          dataIndex: 'time',
-          key: 'time'
+          dataIndex: 'date',
+          key: 'date'
         },{
           dataIndex: 'operation',
-          key: 'operation'
+          key: 'operation',
+          scopedSlots: { customRender: 'operation' },
         }
       ],
       tableData: [],
@@ -41,11 +63,12 @@ export default {
     data: Array
   },
   mounted() {
-    this.tableData = this.data
-    console.log(this.tableData)
   },
   methods: {
-
+    view(record) {
+      this.currNews = record;
+      this.showNews = true
+    }
   }
 }
 </script>

+ 12 - 10
src/components/doubleCarbon/overview/doubleCarbonOverview.vue

@@ -64,14 +64,7 @@ export default {
           content: ''
         },
       ],
-      newsData: [
-        {
-          title: 'xxxxxxxxxx',
-          tag: '双碳小知识',
-          author: '张峰',
-          time: '2022-02-02 15:00:00'
-        }
-      ]
+      newsData: []
     }
   },
   mounted() {
@@ -79,14 +72,17 @@ export default {
   },
   methods: {
     init() {
-      this.$store.loadingStore().loadingWithApi(this.getCoreData(), 2000)
+      this.$util.asyncPromise(
+          this.getCoreData(),
+          this.getNewsData()
+      )
     },
     reset() {
-      console.log('reset')
     },
     search(data) {
       this.$util.asyncPromise(
           this.getCoreData(),
+          this.getNewsData(),
           this.$refs.CarbonEmissionCharts.getData(),
           this.$refs.CarbonQuotaChart.getData(),
           this.$refs.CarbonOverviewPercent.getData(),
@@ -105,6 +101,12 @@ export default {
         this.coreData[4].historyNum = res.list[4].compare
         this.coreData[5].content = res.worthAttention
       })
+    },
+    getNewsData() {
+      return apiCarbonOverview.getCarbonNews(this.queryData).then(res=>{
+        this.newsData = res;
+        console.log(this.newsData)
+      });
     }
   }
 }

+ 1 - 1
src/components/home/HomeLeft.vue

@@ -20,7 +20,7 @@
       <a-menu-item-group key="common" @mouseover="hideNav" >
         <template slot="title">
           <div style="text-align: center;margin-bottom: 12px">
-            <span style="color: white;display: inline-block;margin-left: 12px">常用功能</span>
+            <span style="color: #d5d5d5;cursor: default;display: inline-block;margin-left: 12px">常用功能</span>
           </div>
         </template>
 

+ 322 - 468
src/components/scene/access/sceneAccessManage.vue

@@ -1,487 +1,341 @@
 <template>
-    <div class="accessManage border-shadow">
-        <div class="container">
-            <div class="search_container">
-                <a-form class="ant-advanced-search-form">
-                    <a-row :gutter="24">
-                        <a-col :span="6">
-                            <a-form-item :label="'员工姓名:'">
-                                <a-input />
-                            </a-form-item>
-                        </a-col>
-                        <a-col :span="6">
-                            <a-form-item :label="'部门:'">
-                                <a-select default-value="0">
-                                    <a-select-option value="0">
-                                        办公室
-                                    </a-select-option>
-                                    <a-select-option value="1">
-                                        餐厅
-                                    </a-select-option>
-                                </a-select>
-                            </a-form-item>
-                        </a-col>
-                        <a-col :span="6">
-                            <a-form-item :label="'人员类型:'">
-                                <a-select default-value="0">
-                                    <a-select-option value="0">
-                                        自由员工
-                                    </a-select-option>
-                                    <a-select-option value="1">
-                                        外派
-                                    </a-select-option>
-                                </a-select>
-                            </a-form-item>
-                        </a-col>
-                    </a-row>
-                    <a-row :gutter="24">
-                        <a-col :span="6">
-                            <a-form-item :label="'设备名称:'">
-                                <a-input />
-                            </a-form-item>
-                        </a-col>
-                        <a-col :span="6">
-                            <a-form-item :label="'通行方向:'">
-                                <a-select default-value="0">
-                                    <a-select-option value="0">
-                                        进
-                                    </a-select-option>
-                                    <a-select-option value="1">
-                                        出
-                                    </a-select-option>
-                                </a-select>
-                            </a-form-item>
-                        </a-col>
-                        <a-col :span="6">
-                            <a-form-item :label="'通行时间:'">
-                                <timeRange ref="timeRange" v-bind="{
-                                    timeFormat: 'YYYY-MM-DD HH:mm:ss'
-                                }"></timeRange>
-                            </a-form-item>
-                        </a-col>
+  <div class="accessManage ">
+    <div class="page-query-core">
+      <Query :show="['time']" :query-data.sync="queryData" :search="search">
+        <template #extraItem>
+          <a-form-model-item label="员工姓名">
+            <a-input v-model="queryData.name" placeholder="请输入员工姓名" />
+          </a-form-model-item>
+          <a-form-model-item label="部门">
+            <a-select v-model="queryData.dept" style="width: 120px">
+              <a-select-option v-for="(item,index) in deptOptions" :key="index" :value="item.value">{{item.label}}</a-select-option>
+            </a-select>
+          </a-form-model-item>
+          <a-form-model-item label="人员类型">
+            <a-select v-model="queryData.dept" style="width: 120px">
+              <a-select-option v-for="(item,index) in peopleOptions" :key="index" :value="item.value">{{item.label}}</a-select-option>
+            </a-select>
+          </a-form-model-item>
+          <a-form-model-item label="通行方向">
 
+          </a-form-model-item>
+          <a-form-model-item label="设备名称">
 
-                        <!-- <a-col :span="6">
-                            <a-form-item :label="'疫苗接种:'">
-                                <a-select default-value="0">
-                                    <a-select-option value="0">
-                                        未接种
-                                    </a-select-option>
-                                    <a-select-option value="1">
-                                        第一针
-                                    </a-select-option>
-                                    <a-select-option value="2">
-                                        第二针
-                                    </a-select-option>
-                                    <a-select-option value="3">
-                                        第三针
-                                    </a-select-option>
-                                </a-select>
-                            </a-form-item>
-                        </a-col>
-                        <a-col :span="6">
-                            <a-form-item :label="'核酸时间:'">
-                                <a-select default-value="0">
-                                    <a-select-option value="0">
-                                        1天
-                                    </a-select-option>
-                                    <a-select-option value="1">
-                                        2天
-                                    </a-select-option>
-                                    <a-select-option value="2">
-                                        3天以上
-                                    </a-select-option>
-                                </a-select>
-                            </a-form-item>
-                        </a-col> -->
-                    </a-row>
-                    <a-row :gutter="24">
-                        <a-col :span="18"></a-col>
-                        <a-col :span="6">
-                            <a-button>
-                                重置
-                            </a-button>
-                            <a-button type="primary">
-                                查询
-                            </a-button>
-                        </a-col>
-                    </a-row>
-                </a-form>
-            </div>
-            <div ref="table_container" class="table_container">
-
-                <a-table :columns="tableColumns" :data-source="tableData" :pagination="false"
-                    :scroll="{ y: tableContainerHeight }" bordered>
-                    <a-button slot="action" slot-scope="text" type="link">
-                        查看
-                    </a-button>
-                </a-table>
-            </div>
-        </div>
-        <div class="footer">
-            <a-pagination show-quick-jumper show-size-changer :default-current="1" :total="500" :page-size="10"
-                :show-total="(total, range) => `共 ${total} 条`" />
-            <!--  @change="onChange" -->
-        </div>
+          </a-form-model-item>
+        </template>
+      </Query>
     </div>
+  </div>
 </template>
 
 <script>
-import timeRange from "@/components/common/timeRange.vue";
+import Query from "@/components/common/query.vue";
+
 export default {
-    components: {
-        timeRange,
-    },
-    data() {
-        return {
-            tableContainerHeight: 100,
-            tableColumns: [
-                {
-                    title: '序号',
-                    dataIndex: 'index',
-                    key: 'index',
-                    align: "center",
-                    width: 80,
-                    customRender: (text, record, index) => `${index + 1}`
-                },
-                {
-                    title: '姓名',
-                    dataIndex: 'name',
-                    key: 'name',
-                },
-                {
-                    title: '人员类型',
-                    dataIndex: 'people_type',
-                    key: 'people_type',
-                },
-                {
-                    title: '部门',
-                    dataIndex: 'department',
-                    key: 'department',
-                },
-                {
-                    title: '通行时间',
-                    dataIndex: 'time',
-                    key: 'time',
-                },
-                {
-                    title: '通行设备',
-                    dataIndex: 'equipment',
-                    key: 'equipment',
-                },
-                {
-                    title: '通行方向',
-                    dataIndex: 'direction',
-                    key: 'direction',
-                },
-                {
-                    title: '行为感知',
-                    key: 'operation',
-                    fixed: 'right',
-                    width: 100,
-                    scopedSlots: { customRender: 'action' },
-                },
+  components: {
+    Query,
+  },
+  data() {
+    return {
+      queryData: {},
+      deptOptions: [
+        {
+          label: '产品研发',
+          value: '1'
+        },
+        {
+          label: '测试',
+          value: '2'
+        },
+      ],
+      peopleOptions: [
+        {
+          label: '自有员工',
+          value: '1'
+        },
+        {
+          label: '协作员工',
+          value: '2'
+        },
+        {
+          label: '访客',
+          value: '3'
+        },
+      ],
+      tableContainerHeight: 400,
+      tableColumns: [
+        {
+          title: '序号',
+          dataIndex: 'index',
+          key: 'index',
+          align: "center",
+          width: 80,
+          customRender: (text, record, index) => `${index + 1}`
+        },
+        {
+          title: '姓名',
+          dataIndex: 'name',
+          key: 'name',
+        },
+        {
+          title: '人员类型',
+          dataIndex: 'people_type',
+          key: 'people_type',
+        },
+        {
+          title: '部门',
+          dataIndex: 'department',
+          key: 'department',
+        },
+        {
+          title: '通行时间',
+          dataIndex: 'time',
+          key: 'time',
+        },
+        {
+          title: '通行设备',
+          dataIndex: 'equipment',
+          key: 'equipment',
+        },
+        {
+          title: '通行方向',
+          dataIndex: 'direction',
+          key: 'direction',
+        },
+        {
+          title: '行为感知',
+          key: 'operation',
+          fixed: 'right',
+          width: 100,
+          scopedSlots: {customRender: 'action'},
+        },
 
-            ],
-            // name:"",
-            // people_type:"",
-            // department:"",
-            // time:"",
-            // equipment:"",
-            // direction:"",
-            // behavior:"",
-            tableData: [
-                {
-                    key: '1',
-                    name: "潘夏彤",
-                    people_type: "自有员工",
-                    department: "办公室",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B3",
-                    behavior: "",
-                },
-                {
-                    key: '2',
-                    name: "庞慧",
-                    people_type: "协作员工",
-                    department: "规划院-办公室",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入1F",
-                    behavior: "",
-                },
-                {
-                    key: '3',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-                {
-                    key: '4',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-                {
-                    key: '5',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-                {
-                    key: '6',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-                {
-                    key: '7',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-                {
-                    key: '8',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-                {
-                    key: '9',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-                {
-                    key: '10',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-                {
-                    key: '11',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-                {
-                    key: '12',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-                {
-                    key: '13',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-                {
-                    key: '14',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-                {
-                    key: '15',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-                {
-                    key: '16',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-                {
-                    key: '17',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-                {
-                    key: '18',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-                {
-                    key: '19',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-                {
-                    key: '20',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-                {
-                    key: '21',
-                    name: "李天泽",
-                    people_type: "访客",
-                    department: "规划院-产品中心",
-                    time: "进:2022-08-26 12:00:00",
-                    equipment: "ZY010012",
-                    direction: "进入B2",
-                    behavior: "",
-                },
-            ]
-        }
-    },
-    mounted() {
-        let that = this
-        setTimeout(() => {
-            that.tableContainerHeight = that.$refs.table_container.clientHeight - 64 - 10;
-            window.onresize = () => {
-                return (() => {
-                    that.tableContainerHeight = that.$refs.table_container.clientHeight - 54 - 10
-                })()
-            };
-        }, 100);
+      ],
+      tableData: [
+        {
+          key: '1',
+          name: "潘夏彤",
+          people_type: "自有员工",
+          department: "办公室",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B3",
+          behavior: "",
+        },
+        {
+          key: '2',
+          name: "庞慧",
+          people_type: "协作员工",
+          department: "规划院-办公室",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入1F",
+          behavior: "",
+        },
+        {
+          key: '3',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+        {
+          key: '4',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+        {
+          key: '5',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+        {
+          key: '6',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+        {
+          key: '7',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+        {
+          key: '8',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+        {
+          key: '9',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+        {
+          key: '10',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+        {
+          key: '11',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+        {
+          key: '12',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+        {
+          key: '13',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+        {
+          key: '14',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+        {
+          key: '15',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+        {
+          key: '16',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+        {
+          key: '17',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+        {
+          key: '18',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+        {
+          key: '19',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+        {
+          key: '20',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+        {
+          key: '21',
+          name: "李天泽",
+          people_type: "访客",
+          department: "规划院-产品中心",
+          time: "进:2022-08-26 12:00:00",
+          equipment: "ZY010012",
+          direction: "进入B2",
+          behavior: "",
+        },
+      ]
     }
+  },
+  mounted() {
+
+  }
 }
 </script>
 
 <style lang="less" scoped>
 .accessManage {
-    width: 100%;
-    height: 100%;
-    padding: 5px 5px;
-
-    .container {
-        box-sizing: border-box;
-        padding: 5px 5px;
-        height: calc(100% - 60px);
-
-        .search_container {
-            .ant-input {
-                width: 220px;
-            }
-
-            .ant-select {
-                width: 220px;
-            }
-
-            .ant-calendar-picker {
-                width: 320px !important;
-            }
-        }
-
-        .table_container {
-            height: calc(100% - 210px);
-            box-sizing: border-box;
-            padding-top: 10px;
-        }
-    }
-
-    .footer {
-        height: 60px;
-        line-height: 60px;
-        margin-right: 50px;
-        padding-top: 14px;
-    }
-
-    .ant-table-wrapper {
-        height: 100%;
-    }
-
-    .ant-advanced-search-form {
-        padding: 24px;
-        background: #fbfbfb;
-        border: 1px solid #d9d9d9;
-        border-radius: 6px
-    }
+  width: 100%;
+  height: 100%;
 
-    .ant-advanced-search-form .ant-form-item {
-        display: flex;
 
-        /deep/ .ant-form-item-label {
-            min-width: 90px;
-        }
-    }
-
-    .ant-advanced-search-form .ant-form-item-control-wrapper {
-        flex: 1
-    }
-
-    .ant-pagination {
-        float: right;
-    }
 }
 </style>

+ 154 - 24
src/components/scene/meeting/config/meetingRoomConfig.vue

@@ -1,61 +1,181 @@
 <template>
   <div class="meetingRoomConfig">
-    <a-steps :current="currStep" size="small">
-      <a-step title="基本信息" />
-      <a-step title="关联及配置" />
-      <a-step title="测试及完成" />
-    </a-steps>
+    <div style="padding: 25px 10%;margin: 0 auto;background-color: #fafafa">
+      <a-steps :current="currStep" size="small">
+        <a-step title="基本信息" />
+        <a-step title="关联及配置" />
+        <a-step title="测试及完成" />
+      </a-steps>
+    </div>
 
 
     <div class="meetingRoomConfig-baseInfo" v-if="currStep===0">
-      <a-form-model :model="basicInfo" >
-        <a-form-model-item label="场景名称">
-          <a-input v-model="basicInfo.name" type="text"  />
+      <a-form-model ref="basicInfo" :model="basicInfo" :rules="basicInfoRules" :label-col="{span:4}" :wrapperCol="{span:14}">
+        <a-form-model-item prop="name">
+          <template #label>
+            <span class="ioc-form-label">场景名称</span>
+          </template>
+          <a-input v-model="basicInfo.name" type="text"  placeholder="请输入场景名称"/>
         </a-form-model-item>
-        <a-form-model-item label="类别">
-          <a-select v-model="basicInfo.type" style="width: 120px;">
-            <a-select-option value="1">智慧会议室</a-select-option>
+        <a-form-model-item prop="type">
+          <template #label>
+            <span class="ioc-form-label">类别</span>
+          </template>
+          <a-select v-model="basicInfo.type" style="width: 200px;" >
+            <a-select-option v-for="(val, key) in typeOptions" :value="key">{{ val }}</a-select-option>
           </a-select>
         </a-form-model-item>
-        <a-form-model-item label="楼层">
-
+        <a-form-model-item prop="floor">
+          <template #label>
+            <span class="ioc-form-label">楼层</span>
+          </template>
+          <a-select v-model="basicInfo.floor" style="width: 200px;" placeholder="请选择楼层">
+            <a-select-option v-for="(val, key) in floorOptions" :value="key">{{ val }}</a-select-option>
+          </a-select>
         </a-form-model-item>
-        <a-form-model-item label="房间">
-
+        <a-form-model-item prop="room">
+          <template #label>
+            <span class="ioc-form-label">房间</span>
+          </template>
+          <a-select v-model="basicInfo.room" style="width: 200px;" placeholder="请选择房间">
+            <a-select-option v-for="(val, key) in roomOptions" :value="key">{{ val }}</a-select-option>
+          </a-select>
         </a-form-model-item>
-        <a-form-model-item label="权重">
-
+        <a-form-model-item prop="weight">
+          <template #label>
+            <span class="ioc-form-label">权重</span>
+          </template>
+          <a-select v-model="basicInfo.weight" style="width: 200px;">
+            <a-select-option value="1">1</a-select-option>
+            <a-select-option value="2">2</a-select-option>
+            <a-select-option value="3">3</a-select-option>
+            <a-select-option value="4">4</a-select-option>
+            <a-select-option value="5">5</a-select-option>
+          </a-select>
+          <span style="font-size: 12px;color:#B3B3B3;display: inline-block;margin-left: 12px">(增加权重可增加事态的紧急处理级别)</span>
         </a-form-model-item>
-        <a-form-model-item label="规则描述">
-
+        <a-form-model-item >
+          <template #label>
+            <span class="ioc-form-label">规则描述</span>
+          </template>
+          <a-textarea v-model="basicInfo.desc"
+              placeholder="请输入规则描述"
+              :auto-size="{ minRows: 2, maxRows: 6 }"
+          />
         </a-form-model-item>
       </a-form-model>
     </div>
 
     <div class="meetingRoomConfig-devices" v-if="currStep===1">
-      配置设备
+      <div style="padding: 15px 0 0;margin: 12px auto 0;background-color: #fafafa">
+        <a-descriptions :column="5" style="margin: 0 30px">
+          <a-descriptions-item label="场景名称">{{basicInfo.name}}</a-descriptions-item>
+          <a-descriptions-item label="类别">{{ typeOptions[basicInfo.type] }}</a-descriptions-item>
+          <a-descriptions-item label="楼层">{{ floorOptions[basicInfo.floor] }}</a-descriptions-item>
+          <a-descriptions-item label="房间">{{ roomOptions[basicInfo.room] }}</a-descriptions-item>
+          <a-descriptions-item label="权重">{{ basicInfo.weight }}</a-descriptions-item>
+        </a-descriptions>
+      </div>
+
+      <div>
+        <MeetingRoomDeviceTable />
+      </div>
     </div>
 
     <div class="meetingRoomConfig-test" v-if="currStep===2">
-      测试
+      <div style="padding-left: 15px;color: #333333;font-size: 16px;margin-top: 18px">基本信息</div>
+      <div style="padding: 15px 0 0;margin: 12px auto 0;background-color: #fafafa">
+        <a-descriptions :column="5" style="margin: 0 30px">
+          <a-descriptions-item label="场景名称">{{basicInfo.name}}</a-descriptions-item>
+          <a-descriptions-item label="类别">{{ typeOptions[basicInfo.type] }}</a-descriptions-item>
+          <a-descriptions-item label="楼层">{{ floorOptions[basicInfo.floor] }}</a-descriptions-item>
+          <a-descriptions-item label="房间">{{ roomOptions[basicInfo.room] }}</a-descriptions-item>
+          <a-descriptions-item label="权重">{{ basicInfo.weight }}</a-descriptions-item>
+        </a-descriptions>
+      </div>
+      <div style="padding-left: 15px;color: #333333;font-size: 16px;margin-top: 18px">策略信息</div>
+    </div>
+
+    <div style="text-align: center;margin-top: 20px;margin-bottom: 15px" >
+      <a-button v-show="currStep>0" @click="back" style="margin: 0 auto; width: 120px;">上一步</a-button>
+      <div v-show="currStep>0" style="display: inline-block;width: 30px"></div>
+      <a-button v-if="currStep<2" @click="next" style="margin: 0 auto; width: 120px;background-color: #2EA8E6;color: #ffffff">下一步</a-button>
+      <div v-if="currStep==2" style="display: inline-block">
+        <a-button @click="test" style="margin: 0 auto; width: 120px;">测试</a-button>
+        <div style="display: inline-block;width: 30px"></div>
+        <a-button @click="finish" style="margin: 0 auto; width: 120px;background-color: #2EA8E6;color: #ffffff">完成创建</a-button>
+      </div>
     </div>
   </div>
 </template>
 
 <script>
+import MeetingRoomDeviceTable from "@/components/scene/meeting/config/meetingRoomDeviceTable.vue";
+import Card from "@/components/common/card.vue";
 export default {
+  components: {
+    Card,
+    MeetingRoomDeviceTable
+  },
   data() {
     return {
       currStep: 0,
-      basicInfo: {},
+      typeOptions: {
+        "1": '智慧会议室',
+        "2": '普通会议室',
+      },
+      floorOptions: {
+        "1": '1F',
+        "7": '7F',
+        "8": '8F',
+      },
+      roomOptions: {
+        "701": "701室",
+        "702": "702室",
+        "703": "703室",
+      },
+      basicInfo: {
+        type: '1',
+        weight: '1'
+      },
+      basicInfoRules: {
+        name: [
+          { required: true, message: '请输入场景名称', trigger: 'change' },
+          { min: 2, message: '长度至少为2位', trigger: 'change' },
+        ],
+        type: [
+          { required: true, message: '请选择类型', trigger: 'change' }
+        ],
+        floor: [
+          { required: true, message: '请选择楼层', trigger: 'change' }
+        ],
+        room: [
+          { required: true, message: '请选择房间', trigger: 'change' }
+        ],
+        weight: [
+          { required: true, message: '请选择权重', trigger: 'change' }
+        ],
+      },
       deviceConfigs: [],
-
     }
   },
   mounted() {
   },
   methods: {
-
+    back() {
+      this.currStep = this.currStep-1;
+    },
+    next() {
+      if (this.currStep==0) {
+        this.$refs.basicInfo.validate(valid=>{
+          if (valid) {
+            this.currStep = this.currStep+1;
+          }
+        })
+      } else {
+        this.currStep = this.currStep+1;
+      }
+    }
   }
 }
 </script>
@@ -65,6 +185,16 @@ export default {
   .meetingRoomConfig-baseInfo {
     //width: 90%;
     //margin: 15px auto 0;
+    margin-top: 30px;
+
+  }
+  .ioc-form-label {
+    display: inline-block;
+    width: 60px;
+    text-align: justify;
+    text-align-last: justify;
+  }
+  .meetingRoomConfig-test {
   }
 }
 </style>

+ 1 - 1
src/components/scene/meeting/config/meetingRoomDetails.vue

@@ -93,7 +93,7 @@ export default {
 .meetingRoom-detail {
   width: 100%;
   .meetingRoom-detail-title {
-    color: #296fe4;
+    color: #333333;
     font-size: 18px;
   }
   .meetingRoom-detail-content {

+ 119 - 0
src/components/scene/meeting/config/meetingRoomDeviceTable.vue

@@ -0,0 +1,119 @@
+<template>
+  <div class="meetingRoom">
+    <div style="padding: 6px">
+      <a-button type="primary" style="height: 25px;font-size: 13px" @click="addOperation">新增</a-button>
+      <a-button type="primary" style="height: 25px;font-size: 13px">批量删除</a-button>
+    </div>
+
+    <div style="padding: 6px">
+      <span style="font-size: 12px;color: #CDCDCD">关联系统会顺序触发,请明确场景中关联设备的执行顺序,再添加.</span>
+    </div>
+    <a-table :rowKey="(record, index) => index" ref="table"
+             :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
+             :columns="columns"
+             :show-header="true"
+             :data-source="tableData"
+             :pagination="false"
+    >
+      <template #device="text,record">
+        <a-select style="width: 200px" v-model="record.device" @select="val=>handleDeviceChange(val, record)">
+          <a-select-option v-for="(val, key) in deviceOption" :value="key">{{val.label}}</a-select-option>
+        </a-select>
+      </template>
+      <template #status="text,record">
+        <a-switch v-model="record.status" />
+      </template>
+      <template #operation="text,record">
+        <a-button type="link" :disabled="!record.status">编辑</a-button>
+        <a-button type="link"  @click="delOperation(record)">删除</a-button>
+      </template>
+    </a-table>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      selectedRowKeys: [],
+      columns: [
+        {
+          title: '顺序',
+          dataIndex: 'index',
+          key: 'index',
+          width: 60,
+          align: 'center',
+          customRender: (text,record,index) => `${index+1}`,
+        },
+        {
+          title: '设备',
+          dataIndex: 'device',
+          key: 'device',
+          align: 'center',
+          width: 220,
+          scopedSlots: { customRender: 'device' },
+        },
+        {
+          title: '所属系统平台',
+          dataIndex: 'platform',
+          key: 'platform',
+          align: 'center'
+        },
+        {
+          title: '状态',
+          dataIndex: 'status',
+          key: 'status',
+          scopedSlots: { customRender: 'status' },
+          width: 100,
+          align: 'center'
+        },
+        {
+          title: '操作',
+          dataIndex: 'operation',
+          key: 'operation',
+          width: 200,
+          align: 'center',
+          scopedSlots: { customRender: 'operation' },
+        },
+      ],
+      tableData: [
+        {
+          device: '1',
+          platform: '闸机系统'
+        }
+      ],
+      deviceOption: {
+        "1": {
+          label: '门禁设备',
+          system: '闸机系统'
+        },
+        "2": {
+          label: '空调',
+          system: '能源系统'
+        },
+      },
+    }
+  },
+  mounted() {
+  },
+  methods: {
+    onSelectChange(val) {
+
+    },
+    addOperation() {
+      this.tableData.push({});
+    },
+    delOperation(record) {
+      let index = this.tableData.indexOf(record);
+      if (index && index>-1) {
+        this.tableData.splice(index, 1)
+      }
+    },
+    handleDeviceChange(val, record) {
+      if (val) {
+        record.platform = this.deviceOption[val].system
+      }
+    }
+  }
+}
+</script>

+ 31 - 9
src/components/scene/meeting/config/meetingRoomItem.vue

@@ -9,27 +9,27 @@
       </a-col>
       <a-col :span="16">
         <div class="meetingRoomItem-devices">
-          <div class="meetingRoomItem-device" v-for="device in obj.devices" :key="device.id">
+          <div class="meetingRoomItem-device" :style="{backgroundColor: color.light}" v-for="device in obj.devices" :key="device.id">
 
           </div>
         </div>
       </a-col>
       <a-col :span="8">
         <div style="">
-          <div class="meetingRoomItem-state">
+          <div class="meetingRoomItem-state" :style="{color: color.primary}">
             <span v-if="obj.status==1">会议中</span>
             <span v-if="obj.status==2">闲置中</span>
             <span v-if="obj.status==3">已预订</span>
           </div>
-          <div class="meetingRoomItem-num">
+          <div class="meetingRoomItem-num"  :style="{color: color.primary}">
             {{ obj.time }}
           </div>
         </div>
       </a-col>
       <a-col >
         <div class="meetingRoomItem-opr">
-          <a-button class="meetingRoomItem-opr-btn" @click="viewDetails">查看信息</a-button>
-          <a-button class="meetingRoomItem-opr-btn" @click="configMeeting">配置策略</a-button>
+          <a-button class="meetingRoomItem-opr-btn" :style="{backgroundColor: color.dark}" @click="viewDetails">查看信息</a-button>
+          <a-button class="meetingRoomItem-opr-btn" :style="{backgroundColor: color.dark}" @click="configMeeting">配置策略</a-button>
         </div>
       </a-col>
     </a-row>
@@ -59,6 +59,11 @@ export default {
     return {
       detailVisible: false,
       configVisible: false,
+      color: {
+        primary: '#3CC2AC',
+        light: 'rgba(60,194,172,0.5)',
+        dark: '#3CC2AC',
+      }
     }
   },
   components: {
@@ -68,6 +73,27 @@ export default {
   props: {
     obj: Object,
   },
+  mounted() {
+    if (this.obj.status==1) {
+      this.color={
+        primary: '#3CC2AC',
+        light: 'rgba(60,194,172,0.5)',
+        dark: '#3CC2AC',
+      }
+    } else if (this.obj.status==2) {
+      this.color={
+        primary: '#3AA7E6',
+        light: 'rgba(58,167,230,0.5)',
+        dark: '#3AA7E6',
+      }
+    } else if (this.obj.status==3) {
+      this.color={
+        primary: '#EE8242',
+        light: 'rgba(238,130,66,0.5)',
+        dark: '#EE8242',
+      }
+    }
+  },
   methods: {
     viewDetails() {
       this.detailVisible = true;
@@ -96,12 +122,10 @@ export default {
 
   .meetingRoomItem-state {
     margin-top: 5%;
-    color: #3CC2AC;
     text-align: center;
   }
 
   .meetingRoomItem-num {
-    color: #3CC2AC;
     text-align: center;
     font-size: 30px;
   }
@@ -113,7 +137,6 @@ export default {
       display: inline-block;
       width: 20px;
       height: 20px;
-      background: rgba(60,194,172,0.5);
       margin: 5px 3px;
       border-radius: 3px;
     }
@@ -127,7 +150,6 @@ export default {
     .meetingRoomItem-opr-btn {
       width: 47%;
       height: 30px;
-      background: #3CC2AC;
       border-radius: 4px;
       color: #ffffff;
       font-size: 12px;

+ 2 - 2
src/components/scene/meeting/config/meetingRooms.vue

@@ -104,7 +104,7 @@ export default {
               id: 3,
               name: '301会议室',
               timeRange: ['9:00', '10:00'],
-              status: '1',
+              status: '2',
               time: 8,
               devices: [
                 {},{},{},{},{},{},{},{}
@@ -113,7 +113,7 @@ export default {
               id: 4,
               name: '301会议室',
               timeRange: ['9:00', '10:00'],
-              status: '1',
+              status: '3',
               time: 8,
               devices: [
                 {},{},{},{},{},{},{},{}

+ 83 - 45
src/components/scene/meeting/sceneMeetingOverview.vue

@@ -1,24 +1,30 @@
 <template>
   <div class="meeting-overview">
+    <div class="page-query-core">
+      <Query :show="['time']" :query-data.sync="queryData" />
+    </div>
     <div class="meeting-overview-total">
       <Card title="会议总数">
-        <div class="meeting-overview-total-item">
-          <div class="meeting-overview-total-item-title">会议总次数</div>
-          <div class="meeting-overview-total-item-num">2361次</div>
-          <a-divider style="padding: 0;margin: 5% 0 0;" />
-          <div class="meeting-overview-total-item-avg">日均会议数</div>
-        </div>
-        <div class="meeting-overview-total-item">
-          <div class="meeting-overview-total-item-title">会议总人次</div>
-          <div class="meeting-overview-total-item-num">19742人/次</div>
-          <a-divider style="padding: 0;margin: 5% 0 0;" />
-          <div class="meeting-overview-total-item-avg">平均参会人次 7.6人/次</div>
-        </div>
-        <div class="meeting-overview-total-item">
-          <div class="meeting-overview-total-item-title">会议总时长</div>
-          <div class="meeting-overview-total-item-num">86843分钟</div>
-          <a-divider style="padding: 0;margin: 5% 0 0;" />
-          <div class="meeting-overview-total-item-avg">平均会议时间 86分钟</div>
+        <div style="padding: 12px 15px 20px">
+          <a-row :gutter="12">
+            <a-col :span="8" v-for="(item,index) in totalData" :key="index">
+              <div style="background-color: #f7fbff;height: 100px;margin: 0 6%">
+                <div style="width: 43%;display: inline-block">
+                  <div class="meeting-overview-total-title">{{ item.totalTitle }}</div>
+                  <div class="meeting-overview-total-num">{{ item.totalNum }}</div>
+                </div>
+                <div style="width: 14%;display: inline-block;vertical-align: top">
+                  <div style="margin-top: 30px;background-color: #3AA7E6;width: 40px;height: 40px;border-radius: 50%;text-align: center">
+                    <a-avatar style="margin-top: 9px" :size="22" :src="requireImg('scene/meetingCompare.png')" />
+                  </div>
+                </div>
+                <div style="width: 43%;display: inline-block">
+                  <div class="meeting-overview-total-title">{{ item.title }}</div>
+                  <div class="meeting-overview-total-num">{{ item.num }}</div>
+                </div>
+              </div>
+            </a-col>
+          </a-row>
         </div>
       </Card>
     </div>
@@ -37,12 +43,18 @@
     </div>
     <div class="meeting-overview-distribute">
       <Card title="会议数据分布">
-        <div class="meeting-overview-distribute-time">
-          <MeetingTimeDistributeChart :height="300"/>
-        </div>
-        <div class="meeting-overview-distribute-person">
-          <MeetingPersonDistributeChart :height="300" />
-        </div>
+        <a-row :gutter="12">
+          <a-col :span="12">
+            <div class="meeting-overview-distribute-time">
+              <MeetingTimeDistributeChart :height="300"/>
+            </div>
+          </a-col>
+          <a-col :span="12">
+            <div class="meeting-overview-distribute-person">
+              <MeetingPersonDistributeChart :height="300" />
+            </div>
+          </a-col>
+        </a-row>
       </Card>
     </div>
   </div>
@@ -55,11 +67,35 @@ import MeetingPersonCharts from "@/components/scene/meeting/chart/meetingPersonC
 import MeetingTimeCharts from "@/components/scene/meeting/chart/meetingTimeCharts.vue";
 import MeetingTimeDistributeChart from "@/components/scene/meeting/chart/meetingTimeDistributeChart.vue";
 import MeetingPersonDistributeChart from "@/components/scene/meeting/chart/meetingPersonDistributeChart.vue";
+import Query from "@/components/common/query.vue";
+import {requireImg} from "@/utils/requireImg";
 export default {
   data() {
-    return {}
+    return {
+      totalData: [
+        {
+          totalTitle: '总会议次数(次)',
+          totalNum: 2361,
+          title: '日均会议数(次)',
+          num: 76
+        },
+        {
+          totalTitle: '会议总人次(人/次)',
+          totalNum: 19472,
+          title: '平均参会人次(人/次)',
+          num: 7.6
+        },
+        {
+          totalTitle: '会议总时长(分钟)',
+          totalNum: 86843,
+          title: '平均会议时间(分钟)',
+          num: 8
+        },
+      ]
+    }
   },
   components: {
+    Query,
     Card,
     MeetingTimesCharts,
     MeetingPersonCharts,
@@ -70,6 +106,7 @@ export default {
   mounted() {
   },
   methods: {
+    requireImg
 
   }
 }
@@ -79,36 +116,37 @@ export default {
 .meeting-overview {
   width: 100%;
   height: 100%;
-  padding: 12px;
+  padding-bottom: 15px;
 
   .meeting-overview-total {
-    .meeting-overview-total-item {
-      display: inline-block;
-      width: 33%;
-      height: 150px;
-      background-color: #faf7f7;
-      .meeting-overview-total-item-title {
-        color: #8c8b8b;
-        margin: 5% 0 1% 5%;
-        font-size: 14px;
-      }
-      .meeting-overview-total-item-num {
-        margin: 1% 0 1% 5%;
-      }
-      .meeting-overview-total-item-avg {
-        margin: 1% 0 1% 5%;
-      }
+    margin-top: 12px;
+    .meeting-overview-total-title {
+      font-size: 14px;
+      margin-top: 20px;
+      margin-left: 20px;
+      color: #B2B2B2;
+    }
+    .meeting-overview-total-num {
+      font-size: 20px;
+      margin-top: 15px;
+      margin-left: 20px;
+      color: #333333;
     }
   }
 
+  .meeting-overview-summary {
+    background-color: #ffffff;
+    margin-top: 12px;
+    border-radius: 4px;
+    padding-bottom: 12px;
+  }
+
   .meeting-overview-distribute {
+    margin-top: 12px;
     .meeting-overview-distribute-time {
-      width: 50%;
-      display: inline-block;
+      margin-right: 6px;
     }
     .meeting-overview-distribute-person {
-      width: 50%;
-      display: inline-block;
     }
   }
 

+ 15 - 8
src/components/security/alarm/map/imageMap.vue

@@ -1,13 +1,15 @@
 <template>
   <div class="imageMap" ref="imageMap">
-    <img :src="requireImg(src)" width="100%" height="100%">
+    <img style="border-radius: 12px" :src="requireImg(src)"  width="100%">
 
     <template v-for="(item, index) in markers">
-      <IconCamera :key="index"
-                  :color="item.color"
-                  style="position: absolute"
-                  :style="{top: item.top+'px', left: item.left+'px'}">
-      </IconCamera>
+      <div style="cursor: pointer" @click="viewCamera">
+        <IconCamera :key="index"
+                    :color="item.status==1?'#1890ff':item.status==2?'#ff4d4f':'#a2a4a2'"
+                    style="position: absolute;cursor: pointer"
+                    :style="{top: item.top+'px', left: item.left+'px'}">
+        </IconCamera>
+      </div>
     </template>
   </div>
 </template>
@@ -32,15 +34,20 @@ export default {
   mounted() {
   },
   methods: {
-    requireImg
+    requireImg,
+    viewCamera() {
+      this.$message.warning('暂未获取到视频流')
+    }
   }
 }
 </script>
 
 <style lang="less" scoped>
 .imageMap {
-  width: 100%;
+  margin: 0 auto;
+  width: 722px;
   height: 100%;
   position: relative;
+  text-align: center;
 }
 </style>

+ 25 - 21
src/components/security/alarm/securityAlarmInfo.vue

@@ -6,27 +6,26 @@
       </a-col>
       <a-col :span="18" style="height: 100%;padding: 15px">
         <div class="securityAlarmInfo-query">
-          <a-form-model layout="inline" :model="formData">
-            <a-form-model-item label="告警类型">
-              <a-select defaultValue="all" style="width: 150px">
-                <a-select-option value="all">全部</a-select-option>
-                <a-select-option value="fumes">烟雾告警</a-select-option>
-                <a-select-option value="fire">火焰告警</a-select-option>
-                <a-select-option value="trespass">非法闯入</a-select-option>
-                <a-select-option value="violation">违规行为</a-select-option>
-              </a-select>
-            </a-form-model-item>
-            <a-form-model-item label="时间范围">
-              <TimeRange></TimeRange>
-            </a-form-model-item>
-            <a-form-model-item label="处理情况">
-              <a-select defaultValue="all" style="width: 120px">
-                <a-select-option value="all">全部</a-select-option>
-                <a-select-option value="finish">已处理</a-select-option>
-                <a-select-option value="todo">待处理</a-select-option>
-              </a-select>
-            </a-form-model-item>
-          </a-form-model>
+          <Query :show="['time']" :query-data.sync="formData" :search="search">
+            <template #extraItem>
+              <a-form-model-item label="告警类型">
+                <a-select defaultValue="all" style="width: 150px">
+                  <a-select-option value="all">全部</a-select-option>
+                  <a-select-option value="fumes">烟雾告警</a-select-option>
+                  <a-select-option value="fire">火焰告警</a-select-option>
+                  <a-select-option value="trespass">非法闯入</a-select-option>
+                  <a-select-option value="violation">违规行为</a-select-option>
+                </a-select>
+              </a-form-model-item>
+              <a-form-model-item label="处理情况">
+                <a-select defaultValue="all" style="width: 120px">
+                  <a-select-option value="all">全部</a-select-option>
+                  <a-select-option value="finish">已处理</a-select-option>
+                  <a-select-option value="todo">待处理</a-select-option>
+                </a-select>
+              </a-form-model-item>
+            </template>
+          </Query>
         </div>
         <div class="securityAlarmInfo-list">
           <a-table :rowKey="(record, index) => index"
@@ -100,6 +99,7 @@
 <script>
 import SecurityDeviceSelect from "@/components/security/common/securityDeviceSelect.vue";
 import TimeRange from "@/components/common/timeRange.vue";
+import Query from "@/components/common/query.vue";
 
 export default {
   data() {
@@ -169,6 +169,7 @@ export default {
     }
   },
   components: {
+    Query,
     SecurityDeviceSelect,
     TimeRange,
   },
@@ -178,6 +179,9 @@ export default {
     },
     handleCancel() {
       this.showDetail = false
+    },
+    search() {
+
     }
   }
 }

+ 64 - 15
src/components/security/alarm/securityAlarmMap.vue

@@ -10,43 +10,43 @@
         </a-select>
 
         <div style="display: inline-block;float: right">
-          <span class="anticon" style="vertical-align: bottom"><IconCamera :color="'#5f95e7'" ></IconCamera></span>
+          <span class="anticon" style="vertical-align: bottom"><IconCamera :color="'#1890ff'" ></IconCamera></span>
           <span style="display: inline-block;margin-right: 12px">在线</span>
           <span class="anticon" style="vertical-align: bottom"><IconCamera :color="'#a2a4a2'" ></IconCamera></span>
           <span style="display: inline-block;margin-right: 12px">离线</span>
-          <span class="anticon" style="vertical-align: bottom"><IconCamera :color="'#bd3124'" ></IconCamera></span>
+          <span class="anticon" style="vertical-align: bottom"><IconCamera :color="'#ff4d4f'" ></IconCamera></span>
           <span style="display: inline-block;margin-right: 12px">告警</span>
         </div>
       </div>
 
-      <div class="securityAlarmMap-alert">
+      <div class="securityAlarmMap-alert" v-if="alarmNum>0">
         <a-alert type="warning" show-icon>
           <template #message>
-            有<span style="color: red;font-weight: bold;display: inline-block;padding: 0 3px">2</span>条告警事件待处理
+            有<span style="color: red;font-weight: bold;display: inline-block;padding: 0 3px">{{ alarmNum }}</span>条告警事件待处理
           </template>
         </a-alert>
       </div>
 
       <div class="securityAlarmMap-info">
         <span class="securityAlarmMap-info-item">
-          当前在线摄像头
-          <span class="securityAlarmMap-info-item-num" style="color: #2f8cc8">16</span>
+          当前在线摄像头
+          <span class="securityAlarmMap-info-item-num" style="color: #2f8cc8">{{ deviceNum.online }}</span>
         </span>
         <span class="securityAlarmMap-info-item">
-          当前离线摄像头
-          <span class="securityAlarmMap-info-item-num" style="color: #4D4D4D">16</span>
+          当前离线摄像头
+          <span class="securityAlarmMap-info-item-num" style="color: #4D4D4D">{{ deviceNum.unline }}</span>
         </span>
         <span class="securityAlarmMap-info-item">
-          当前告警摄像头
-          <span class="securityAlarmMap-info-item-num" style="color: #F1934E">16</span>
+          当前告警摄像头
+          <span class="securityAlarmMap-info-item-num" style="color: #F1934E">{{ deviceNum.alarm }}</span>
         </span>
       </div>
 
       <div class="securityAlarmMap-map">
-        <ImageMap :src="areaSrc" ></ImageMap>
+        <ImageMap :markers="devicePositions" :src="areaSrc" ></ImageMap>
       </div>
     </Card>
   </div>
@@ -60,8 +60,57 @@ import ImageMap from "@/components/security/alarm/map/imageMap.vue";
 export default {
   data() {
     return {
+      alarmNum: 0,
       floor: '1',
-      areaSrc: 'security/area_1F.png'
+      areaSrc: 'security/area_1F.png',
+      deviceNum: {
+        online: 0,
+        unline: 0,
+        alarm: 0,
+      },
+      devicePositions: [
+        {
+          status: 1,
+          left: 348,
+          top: 27,
+        },{
+          status: 1,
+          left: 373,
+          top: 27,
+        },{
+          status: 1,
+          left: 230,
+          top: 76,
+        },{
+          status: 0,
+          left: 260,
+          top: 76,
+        },{
+          status: 1,
+          left: 300,
+          top: 100,
+        },{
+          status: 0,
+          left: 325,
+          top: 100,
+        },{
+          status: 1,
+          left: 300,
+          top: 130,
+        },{
+          status: 2,
+          left: 325,
+          top: 130,
+        },{
+          status: 1,
+          left: 430,
+          top: 155,
+        },{
+          status: 1,
+          left: 180,
+          top: 350
+        }
+      ]
     }
   },
   components: {
@@ -90,11 +139,11 @@ export default {
   .securityAlarmMap-alert {
     margin-top: 12px;
     margin-left: 15px;
-    height: 60px;
   }
 
   .securityAlarmMap-info {
     width: 100%;
+    margin-top: 15px;
     margin-left: 15px;
     color: #B2B2B2;
     .securityAlarmMap-info-item {
@@ -104,14 +153,14 @@ export default {
       .securityAlarmMap-info-item-num {
         font-size: 18px;
         background-color: #f7fbff;
-        padding: 0 10px;
+        padding: 0 30px;
         font-weight: bold;
       }
     }
   }
 
   .securityAlarmMap-map {
-    width: 100%;
+    //width: 100%;
     padding: 2% 5%;
     background-color: #ffffff;
   }

+ 2 - 2
src/components/security/device/securityDevice.vue

@@ -7,7 +7,7 @@
       <a-col :span="18" style="height: 100%">
         <div class="securityDevice-content">
           <Card title="可交互设备">
-            <a-divider style="padding: 0;margin: 0;"/>
+            <!--<a-divider style="padding: 0;margin: 0;"/>-->
 
             <div class="securityDevice-devices">
               <SecurityDeviceItem />
@@ -39,9 +39,9 @@ export default {
 .securityDevice {
   width: 100%;
   height: 100%;
+  background-color: #ffffff;
   .securityDevice-content {
     height: 100%;
-    border: 1px solid #d9d9d9;
     margin: 0 15px;
     border-radius: 5px;
   }

+ 22 - 76
src/components/security/person/components/securityPersonDuty.vue

@@ -7,44 +7,11 @@ export default {
         security: false,
       },
       currCheck: '',
-      frontPeople: [
+      oriDutyPerson: [],
+      dutyPerson: [
         {
           id: 1,
-          name: '刘玉英',
-          workNum: '31313131',
-          telNum: '18611111111',
-          workArea: '一层大厅前台',
-          img: '',
-        },
-        {
-          id: 2,
-          name: '刘玉英',
-          workNum: '31313131',
-          telNum: '18611111111',
-          workArea: '一层大厅前台',
-          img: '',
-        },
-        {
-          id: 3,
-          name: '刘玉英',
-          workNum: '31313131',
-          telNum: '18611111111',
-          workArea: '一层大厅前台',
-          img: '',
-        },
-        {
-          id: 4,
-          name: '刘玉英',
-          workNum: '31313131',
-          telNum: '18611111111',
-          workArea: '一层大厅前台',
-          img: '',
-        },
-      ],
-      securityPeople: [
-        {
-          id: 1,
-          name: '刘玉英',
+          name: '章峰',
           workNum: '31313131',
           telNum: '18611111111',
           workArea: '一层大厅前台',
@@ -77,16 +44,26 @@ export default {
       ]
     }
   },
+  watch: {
+    currCheck: val => {
+      console.log(val)
+    }
+  },
   components: {},
   mounted() {
-    this.handleTagSelect('front')
+    this.handleTagSelect('front');
+    this.oriDutyPerson = JSON.parse(JSON.stringify(this.dutyPerson))
   },
   methods: {
     callback(val) {
 
     },
-    onSearch() {
-
+    onSearch(val) {
+      if (!val || val == '') {
+        this.dutyPerson = JSON.parse(JSON.stringify(this.oriDutyPerson))
+      } else {
+        this.dutyPerson = this.oriDutyPerson.filter(item => item.name.indexOf(val)>-1)
+      }
     },
     handleTagSelect(item) {
       for (const key in this.tagCheck) {
@@ -121,9 +98,9 @@ export default {
       </div>
     </div>
     <div class="dashboardPortrait-body">
-      <div v-if="currCheck==='front'">
+      <div >
         <div class="security-person-duty-content" >
-          <div class="security-person-duty-item" v-for="p in frontPeople" :key="p.id">
+          <div class="security-person-duty-item" v-for="p in dutyPerson" :key="p.id">
             <div class="security-person-duty-item-img">
               <img width="90%" height="90%" src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png"/>
             </div>
@@ -147,40 +124,9 @@ export default {
             </div>
           </div>
 
-          <!--<div style="position: absolute;bottom: 12px;background-color: transparent;height: 30px;width: 90%">-->
-          <!--  <a-button type="primary" size="small" style="float: right;right: 5px" @click="openMore">更多</a-button>-->
-          <!--</div>-->
-        </div>
-      </div>
-      <div v-if="currCheck==='security'">
-        <div class="security-person-duty-content">
-          <div class="security-person-duty-item" v-for="p in frontPeople" :key="p.id">
-            <div class="security-person-duty-item-img">
-              <img width="90%" height="90%" src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png"/>
-            </div>
-            <div class="security-person-duty-item-desc">
-              <div class="security-person-duty-item-desc-text">
-                <span class="security-person-duty-item-desc-label">姓名</span>:
-                {{ p.name }}
-              </div>
-              <div class="security-person-duty-item-desc-text">
-                <span class="security-person-duty-item-desc-label">工号</span>:
-                {{ p.workNum }}
-              </div>
-              <div class="security-person-duty-item-desc-text">
-                <span class="security-person-duty-item-desc-label">联系电话</span>:
-                {{ p.telNum }}
-              </div>
-              <div class="security-person-duty-item-desc-text">
-                <span class="security-person-duty-item-desc-label">工作区域</span>:
-                {{ p.workArea }}
-              </div>
-            </div>
+          <div style="position: absolute;bottom: 12px;background-color: #ffffff;height: 35px;width: 90%">
+            <a-button type="primary" size="small" style="float: right;right: 5px;top:25%" @click="openMore">更多</a-button>
           </div>
-
-          <!--<div style="position: absolute;bottom: 6px;background-color: white;height: 30px;width: 90%">-->
-          <!--  <a-button type="primary" size="small" style="float: right;right: 15px" @click="openMore">更多</a-button>-->
-          <!--</div>-->
         </div>
       </div>
     </div>
@@ -197,8 +143,8 @@ export default {
 
   .security-person-duty-content {
     padding-top: 8px;
-    height: 635px;
-    padding-bottom: 35px;
+    height: 643px;
+    padding-bottom: 38px;
     overflow-y: auto;
   }
 

+ 19 - 12
src/components/security/person/securityPersonMore.vue

@@ -49,7 +49,7 @@ export default {
           key: "operation",
           width: 120,
           align: 'center',
-          scopedSlots: { customRender: 'operation' },
+          scopedSlots: {customRender: 'operation'},
         },
       ]
     }
@@ -70,7 +70,7 @@ export default {
 
 <template>
   <div class="security-person-more">
-    <div class="security-person-more-query">
+    <div class="security-person-more-query page-query-core">
       <a-form-model :model="formData" layout="inline">
         <a-form-model-item label="人员类型">
           <a-select v-model="formData.type" placeholder="人员类型" style="width: 130px">
@@ -79,7 +79,11 @@ export default {
           </a-select>
         </a-form-model-item>
         <a-form-model-item label="值班时段">
-          <TimeRange></TimeRange>
+          <TimeRange :disabled-time="false"
+                     :show-time="{ hideDisabledOptions: true, defaultValue: [ $moment('00:00:00', 'HH:mm:ss'), $moment('23:59:59', 'HH:mm:ss'), ], }"
+                     :time-format="'YYYY/MM/DD HH:mm:ss'"
+          >
+          </TimeRange>
         </a-form-model-item>
         <a-form-model-item>
           <a-button type="primary">重置</a-button>
@@ -88,24 +92,21 @@ export default {
       </a-form-model>
     </div>
     <div class="security-person-more-list">
+      <div style="font-weight: 400;color: #333333;line-height: 45px;font-size: 16px;margin-bottom: 6px">人员信息</div>
       <a-table
-          :rowKey="
-      (record, index) => {
-        return index;
-      }
-    "
+          :rowKey=" (record, index) => index"
           :columns="columns"
           :data-source="tableData"
           :pagination="true"
+          style="height: 300px"
       >
-        <template #operation="text, record" >
+        <template #operation="text, record">
           <a-button type="link" @click="viewDetail(record)">查看详情</a-button>
         </template>
       </a-table>
     </div>
 
 
-
     <a-modal class="securityPersonMoreDetail" v-if="showDetail"
              :visible="true"
              :width="600"
@@ -113,11 +114,11 @@ export default {
              @cancel="handleCancel"
     >
       <div>人员详情</div>
-      <a-divider />
+      <a-divider/>
 
       <div style="width: 100%;height: 100%">
         <div style="width: 40%;display: inline-block">
-          <img width="100%" height="100%" src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" />
+          <img width="100%" height="100%" src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png"/>
         </div>
         <div style="width: 60%;display: inline-block;vertical-align: top">
           <a-descriptions :column="1" size="small">
@@ -156,8 +157,14 @@ export default {
 .security-person-more {
   width: 100%;
   height: auto;
+  .security-person-more-query {
+    padding-left: 30px;
+  }
+
   .security-person-more-list {
     margin-top: 15px;
+    background-color: #ffffff;
+    padding: 0 30px;
   }
 }
 </style>

+ 6 - 0
src/components/security/security.vue

@@ -40,4 +40,10 @@ export default {
 .myChart {
   width: 100%;
 }
+</style>
+
+<style>
+.ant-spin-container {
+  height: 100%;
+}
 </style>

+ 17 - 14
src/components/work/overview/workOverview.vue

@@ -56,15 +56,6 @@ export default {
     WorkRoomDistribute,
   },
   data() {
-    const listData = [];
-    for (let i = 0; i < 100; i++) {
-      listData.push({
-        index: i + 1,
-        name: "物理饭",
-        department: "技术开发部门",
-        time: "2023.02.03 00:00:00",
-      });
-    }
     let timeRange = this.$util.dateUtil.getNearlyMonthRange()
     return {
       queryData: {
@@ -75,10 +66,10 @@ export default {
       columns: [
         //{title: "序号", dataIndex: "index", key: "1", width: 48},
         {title: "姓名", dataIndex: "name", key: "2", width: 70},
-        {title: "部门", dataIndex: "department", key: "3", width: 80},
-        {title: "最后进入时间", dataIndex: "time", key: "4", },
+        {title: "部门", dataIndex: "company", key: "3", },
+        {title: "最后进入时间", dataIndex: "endDate", key: "4", },
       ],
-      listData: listData,
+      listData: [],
       coreData: [
         {
           type: 1,
@@ -119,13 +110,20 @@ export default {
   },
   methods: {
     init() {
-      this.$store.loadingStore().loadingWithApi(this.getCoreData(), 2000)
+      this.$util.asyncPromise(
+          this.getCoreData(),
+          this.getDoorEnterPerson()
+      )
     },
     reset() {
 
     },
     search() {
-
+      this.$util.asyncPromise(
+          this.getCoreData(),
+          this.getDoorEnterPerson()
+      )
+      this.$forceUpdate();
     },
     getCoreData() {
       return apiWorkFloor.getCoreData(this.queryData).then(res=>{
@@ -136,6 +134,11 @@ export default {
         this.coreData[4].content = res.list[4].value
         this.coreData[5].content = res.list[5].value
       })
+    },
+    getDoorEnterPerson() {
+      return apiWorkFloor.getAccessPersonnel(this.queryData).then(res=>{
+        this.listData = res
+      })
     }
   },
 };