guanqb
2023-01-04 3815d6dc1d1f70bec6729313557ec7db886999c2
标绘箭头编辑功能
2 files modified
185 ■■■■ changed files
src/api/activity/index.js 16 ●●●●● patch | view | raw | blame | history
src/views/activity/index.vue 169 ●●●● patch | view | raw | blame | history
src/api/activity/index.js
@@ -208,4 +208,20 @@
            securityId,
        }
    })
}
/**
 * 获得活动标绘箭头列表
 * @param {*} securityId  活动ID
 * @returns
 */
export const updateSecurityPlot = (id, position) => {
    return request({
        url: `/api/securityPlot/securityPlot/update`,
        method: 'post',
        data: {
            id,
            position
        }
    })
}
src/views/activity/index.vue
@@ -17,9 +17,19 @@
                <div>
                    <div class="category">活动类型:</div>
                    <div class="category-value">
                        <el-select size="small" v-model="activityType" placeholder="请选择" @change="activityTypeChange">
                            <el-option v-for="item in activityOptions" :key="item.dictKey" :label="item.dictValue"
                                :value="item.dictKey" class="activity-option"></el-option>
                        <el-select
                            size="small"
                            v-model="activityType"
                            placeholder="请选择"
                            @change="activityTypeChange"
                        >
                            <el-option
                                v-for="item in activityOptions"
                                :key="item.dictKey"
                                :label="item.dictValue"
                                :value="item.dictKey"
                                class="activity-option"
                            ></el-option>
                        </el-select>
                    </div>
                </div>
@@ -34,26 +44,46 @@
                            placeholder="选择日期"
                            style="width:268px"
                        ></el-date-picker>-->
                        <el-date-picker v-model="selectTime" type="daterange" align="right" unlink-panels
                            format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" range-separator="至"
                            start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="pickerOptions"
                            @change="activityTimeChange"></el-date-picker>
                        <el-date-picker
                            v-model="selectTime"
                            type="daterange"
                            align="right"
                            unlink-panels
                            format="yyyy-MM-dd HH:mm:ss"
                            value-format="yyyy-MM-dd HH:mm:ss"
                            range-separator="至"
                            start-placeholder="开始日期"
                            end-placeholder="结束日期"
                            :picker-options="pickerOptions"
                            @change="activityTimeChange"
                        ></el-date-picker>
                    </div>
                </div>
                <div>
                    <div class="category">活动名称:</div>
                    <div class="category-value">
                        <input type="text" placeholder="请输入活动名称" v-model="searchActivity" class="category-input"
                            @input="inputChange" />
                        <input
                            type="text"
                            placeholder="请输入活动名称"
                            v-model="searchActivity"
                            class="category-input"
                            @input="inputChange"
                        />
                        <button class="category-button el-icon-search" @click="searchClick"></button>
                    </div>
                </div>
            </div>
            <div class="result-content">
                <div class="table-box">
                    <div v-show="activityList.length > 0" class="row-box" :class="{ on: currentClickIndex === index }"
                        v-for="(item, index) in activityList" :key="index" @click="activityListClick(item, index)">
                    <div
                        v-show="activityList.length > 0"
                        class="row-box"
                        :class="{ on: currentClickIndex === index }"
                        v-for="(item, index) in activityList"
                        :key="index"
                        @click="activityListClick(item, index)"
                    >
                        <div class="row-title">常规安保</div>
                        <div class="row-content">
                            <div>
@@ -66,7 +96,9 @@
                            </div>
                            <div>
                                <div class="category">活动时间:</div>
                                <div class="category-value">{{ item.startTime }} 至 {{ item.endTime }}</div>
                                <div
                                    class="category-value"
                                >{{ item.startTime }} 至 {{ item.endTime }}</div>
                            </div>
                            <div>
                                <div class="category">活动详情:</div>
@@ -78,8 +110,14 @@
                    <div v-show="activityList == 0" class="no-data">暂无数据</div>
                </div>
                <div class="pages">
                    <el-pagination background layout="prev, pager, next" :page-size="pagesize" :page-count="pagesCount"
                        :current-page="currentPage" @current-change="handleCurrentChange"></el-pagination>
                    <el-pagination
                        background
                        layout="prev, pager, next"
                        :page-size="pagesize"
                        :page-count="pagesCount"
                        :current-page="currentPage"
                        @current-change="handleCurrentChange"
                    ></el-pagination>
                </div>
            </div>
        </div>
@@ -91,7 +129,10 @@
                <ul>
                    <li>
                        <button @click="draw('billboard', 'policeman')">
                            <img src="../../../public/img/icon/police-people-btn.png" style="height:100%" />
                            <img
                                src="../../../public/img/icon/police-people-btn.png"
                                style="height:100%"
                            />
                        </button>
                    </li>
                    <li>
@@ -180,7 +221,9 @@
            </div>
            <div class="row-box">
                <div class="category">活动时间:</div>
                <div class="category-value">{{ activityDetails.startTime }} 至 {{ activityDetails.endTime }}</div>
                <div
                    class="category-value"
                >{{ activityDetails.startTime }} 至 {{ activityDetails.endTime }}</div>
            </div>
            <div class="row-box">
                <div class="category">活动内容:</div>
@@ -229,16 +272,24 @@
            <div class="row-box">
                <div class="category">应急预案:</div>
                <div class="category-value">
                    <el-switch v-model="polylineSwitch" @change="switchChange" active-color="#13ce66"
                        inactive-color="#ccc"></el-switch>
                    <el-switch
                        v-model="polylineSwitch"
                        @change="switchChange"
                        active-color="#13ce66"
                        inactive-color="#ccc"
                    ></el-switch>
                </div>
            </div>
            <div class="row-box">
                <div class="category">巡逻路线:</div>
                <div class="category-value">
                    <el-switch v-model="polylineBtnSwitch" @change="switchBtnChange" active-color="#13ce66"
                        inactive-color="#ccc"></el-switch>
                    <el-switch
                        v-model="polylineBtnSwitch"
                        @change="switchBtnChange"
                        active-color="#13ce66"
                        inactive-color="#ccc"
                    ></el-switch>
                </div>
            </div>
        </div>
@@ -269,12 +320,22 @@
            </ul>
        </div>
        <el-dialog :title="policeChooseTitle" :modal="false" :visible.sync="policeChooseVisible"
            :before-close="policeChooseBeforeClose" :close-on-click-modal="true" class="choose-police-box">
        <el-dialog
            :title="policeChooseTitle"
            :modal="false"
            :visible.sync="policeChooseVisible"
            :before-close="policeChooseBeforeClose"
            :close-on-click-modal="true"
            class="choose-police-box"
        >
            <div>
                <el-select size="small" v-model="policeType" placeholder="请选择">
                    <el-option v-for="item in policeOption" :key="item.value" :label="item.label"
                        :value="item.value"></el-option>
                    <el-option
                        v-for="item in policeOption"
                        :key="item.value"
                        :label="item.label"
                        :value="item.value"
                    ></el-option>
                </el-select>
                <el-button @click="determine">确定</el-button>
                <el-button @click="cancel">取消</el-button>
@@ -284,7 +345,7 @@
</template>
<script>
import { getSecurityList, getPoliceList, getCarList, addCarAndRange, addActivityPolice, getSecurityPoliceList, getSecurityCarList, updateActivityPolice, updateActivityCar, getServiceDictionary, getActivityType, addSecurityPlot, getSecurityPlotList } from '@/api/activity/index.js'
import { getSecurityList, getPoliceList, getCarList, addCarAndRange, addActivityPolice, getSecurityPoliceList, getSecurityCarList, updateActivityPolice, updateActivityCar, getServiceDictionary, getActivityType, addSecurityPlot, getSecurityPlotList, updateSecurityPlot } from '@/api/activity/index.js'
let analyseLayer = null
let analysePolygon = null
@@ -1012,14 +1073,14 @@
                    } else if (type == 'tailed_attack_arrow') {
                        plotType = 4
                    }
                    let position = ''
                    overlay._positions.forEach(item => {
                        position += item._lng + ' ' + item._lat + ','
                    })
                    position = position.slice(0, position.length - 1)
                    console.log(position, 123445)
                    drawArrowLayers.addOverlay(overlay)
                    plot.edit(overlay, (e) => {
                        console.log(overlay, 222)
                        let position = ''
                        overlay._positions.forEach(item => {
                            position += item._lng + ' ' + item._lat + ','
                        })
                        position = position.slice(0, position.length - 1)
                        drawArrowLayers.addOverlay(overlay)
                        this.addSecurityPlot(this.showingSecurityId, position, plotType)
                    })
                }
@@ -1146,11 +1207,11 @@
        // 获取活动标绘箭头列表
        getSecurityPlotList (securityId) {
            arrowsListLayer.clear()
            this.removeAllArrow()
            getSecurityPlotList(securityId).then(res => {
                res.data.data.forEach(item => {
                    let position = item.position.slice(11, item.position.length - 1).replace(/,/g, ';').replace(/ /g, ',')
                    let chooseArrow = null
                    console.log(position, 2323)
                    if (item.type == 1) {
                        chooseArrow = new global.DC.AttackArrow(position)
                    } else if (item.type == 2) {
@@ -1160,13 +1221,37 @@
                    } else if (item.type == 4) {
                        chooseArrow = new global.DC.TailedAttackArrow(position)
                    }
                    chooseArrow.attrParams = { 'id': item.id }
                    arrowsListLayer.addOverlay(chooseArrow)
                    chooseArrow.setStyle({
                        "material": global.DC.Color.RED,
                        "material": global.DC.Color.ORANGE.withAlpha(0.4),
                    })
                    chooseArrow.on(global.DC.MouseEventType.DB_CLICK, this.reeditArrowDbClick)
                })
            })
        }
        },
        // 双击修改箭头
        reeditArrowDbClick (e) {
            console.log(111, e)
            let overlayData = e.overlay
            plot.edit(overlayData, (e) => {
                let position = ''
                overlayData._positions.forEach(item => {
                    position += item._lng + ' ' + item._lat + ','
                })
                position = position.slice(0, position.length - 1)
                drawArrowLayers.addOverlay(overlayData)
                this.updateSecurityPlot(overlayData.attrParams.id, position)
            })
        },
        updateSecurityPlot (id, position) {
            updateSecurityPlot(id, position).then(res => {
                console.log(res, 222)
                this.getSecurityPlotList(this.securityId)
            })
        },
    },
    destroyed () {
@@ -1237,11 +1322,11 @@
        .search-box {
            padding: 0 10px;
            &>div:first-child {
            & > div:first-child {
                margin-top: 0;
            }
            &>div {
            & > div {
                margin-top: 10px;
                display: flex;
                align-items: center;
@@ -1316,7 +1401,7 @@
                    border-radius: 8px;
                    .row-content {
                        &>div {
                        & > div {
                            display: flex;
                            line-height: 28px;
@@ -1340,7 +1425,6 @@
                    &:nth-child(2n-1) {
                        background: $table-body-tr-n-color;
                    }
                }
                .row-box:hover {
@@ -1385,7 +1469,7 @@
        white-space: nowrap;
        transform: translate(-50%, 0);
        &>div {
        & > div {
            display: flex;
        }
@@ -1488,7 +1572,7 @@
            line-height: 28px;
            display: flex;
            &>div {
            & > div {
                text-align: left;
            }
@@ -1502,7 +1586,6 @@
        }
        .row-btn-box {
            // height: 30px;
            :deep(.el-button) {
                // padding: 7px 20px;
@@ -1533,7 +1616,7 @@
            line-height: 28px;
            display: flex;
            &>div {
            & > div {
                text-align: left;
            }