吉安感知网项目-前端
张含笑
2026-01-27 45a39795cb1a6d7ed82310668c76ced11711f125
Merge remote-tracking branch 'origin/master'
12 files modified
217 ■■■■■ changed files
applications/drone-command/src/styles/common/cockpit.scss 4 ●●●● patch | view | raw | blame | history
applications/drone-command/src/views/permissionManage/permissionDept/FormDiaLog.vue 20 ●●●●● patch | view | raw | blame | history
applications/drone-command/src/views/permissionManage/permissionDept/index.vue 12 ●●●●● patch | view | raw | blame | history
applications/drone-command/src/views/permissionManage/permissionUser/FormDiaLog.vue 84 ●●●●● patch | view | raw | blame | history
applications/task-work-order/env/.env 3 ●●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/flyingHand/FlyingHandDialog.vue 36 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/orderManage/inspectionReport/index.vue 37 ●●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue 5 ●●●●● patch | view | raw | blame | history
uniapps/work-wx/src/pages/equipmentManagement/index.vue 6 ●●●● patch | view | raw | blame | history
uniapps/work-wx/src/pages/legalPolicy/index.vue 7 ●●●● patch | view | raw | blame | history
uniapps/work-wx/src/subPackages/deviceRegistration/add.vue 1 ●●●● patch | view | raw | blame | history
uniapps/work-wx/src/subPackages/flightApplication/index.vue 2 ●●● patch | view | raw | blame | history
applications/drone-command/src/styles/common/cockpit.scss
@@ -563,6 +563,10 @@
        }
    }
    .el-select__wrapper.is-disabled .el-select__selected-item {
        color: #a8abb2;
    }
    .el-select {
        --el-select-border-color-hover: rgb(0, 162, 255) !important;
    }
applications/drone-command/src/views/permissionManage/permissionDept/FormDiaLog.vue
@@ -28,10 +28,6 @@
                    <div class="val">{{ formData.areaName || '-' }}</div>
                </el-col>
                <el-col :span="12">
                    <div class="label">部署模式</div>
                    <div class="val">{{ deploymentModeLabel(formData.deploymentMode) }}</div>
                </el-col>
                <el-col :span="12">
                    <div class="label">排序</div>
                    <div class="val">{{ formData.sort }}</div>
                </el-col>
@@ -98,14 +94,6 @@
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="部署模式" prop="deploymentMode">
                        <el-radio-group v-model="formData.deploymentMode" class="command-radio-group">
                            <el-radio :label="0">统一部署</el-radio>
                            <el-radio :label="1">独立部署</el-radio>
                        </el-radio-group>
                    </el-form-item>
                </el-col>
                <el-col :span="24">
                    <el-form-item label="备注" prop="remark">
                        <el-input class="command-input" v-model="formData.remark" type="textarea" :rows="3" placeholder="请输入" clearable />
@@ -141,7 +129,6 @@
    deptNature: null,
    areaCode: [],
    areaName: '',
    deploymentMode: 0,
    sort: 0,
    remark: '',
})
@@ -207,14 +194,7 @@
    deptCategory: fieldRules(true),
    deptNature: fieldRules(true),
    areaCode: fieldRules(true),
    deploymentMode: fieldRules(true),
    sort: fieldRules(true),
}
function deploymentModeLabel(value) {
    if (value === 1) return '独立部署'
    if (value === 0) return '统一部署'
    return value ?? '-'
}
function normalizeAreaCode(value) {
applications/drone-command/src/views/permissionManage/permissionDept/index.vue
@@ -62,11 +62,7 @@
                    <el-table-column prop="sort" show-overflow-tooltip width="80" label="排序" />
                    <el-table-column prop="bingId" show-overflow-tooltip width="100" label="组织id" />
                    <el-table-column prop="areaName" show-overflow-tooltip width="180" label="行政区划" />
                    <el-table-column prop="deploymentMode" show-overflow-tooltip width="120" label="部署模式">
                        <template v-slot="{ row }">
                            {{ deploymentModeLabel(row.deploymentMode) }}
                        </template>
                    </el-table-column>
                    <el-table-column label="操作" class-name="operation-btns" width="220">
                        <template v-slot="{ row }">
                            <el-link @click="handleView(row)">查看</el-link>
@@ -128,12 +124,6 @@
provide('dictObj', dictObj)
provide('deptTree', deptTree)
function deploymentModeLabel(value) {
    if (value === 1) return '独立部署'
    if (value === 0) return '统一部署'
    return value ?? '-'
}
async function getList() {
    loading.value = true
applications/drone-command/src/views/permissionManage/permissionUser/FormDiaLog.vue
@@ -43,22 +43,6 @@
                    <div class="label">账号状态</div>
                    <div class="val">{{ formData.statusName }}</div>
                </el-col>
                <el-col :span="12">
                    <div class="label">到期时间</div>
                    <div class="val">{{ formData.expireTime }}</div>
                </el-col>
                <el-col :span="12">
                    <div class="label">次数限制</div>
                    <div class="val">{{ formData.maxLoginNum }}</div>
                </el-col>
                <el-col :span="12">
                    <div class="label">飞行开始时间</div>
                    <div class="val">{{ formData.flightStartTime }}</div>
                </el-col>
                <el-col :span="12">
                    <div class="label">飞行结束时间</div>
                    <div class="val">{{ formData.flightEndTime }}</div>
                </el-col>
            </el-row>
        </div>
@@ -178,55 +162,6 @@
                    </el-form-item>
                </el-col>
            </el-row>
            <div class="detail-title">登录限制</div>
            <el-row :gutter="16">
                <el-col :span="12">
                    <el-form-item label="到期时间" prop="expireTime">
                        <el-date-picker
                            class="command-date-picker"
                            popper-class="command-date-picker-popper"
                            v-model="formData.expireTime"
                            type="datetime"
                            placeholder="请选择"
                            format="YYYY-MM-DD HH:mm:ss"
                            value-format="YYYY-MM-DD HH:mm:ss"
                            clearable
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="次数限制" prop="maxLoginNum">
                        <el-input class="command-input" v-model="formData.maxLoginNum" placeholder="请输入" clearable />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="飞行开始时间" prop="flightStartTime">
                        <el-time-picker
                            class="command-date-picker"
                            popper-class="command-date-picker-popper"
                            v-model="formData.flightStartTime"
                            placeholder="请选择"
                            format="HH:mm"
                            value-format="HH:mm"
                            clearable
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="飞行结束时间" prop="flightEndTime">
                        <el-time-picker
                            class="command-date-picker"
                            popper-class="command-date-picker-popper"
                            v-model="formData.flightEndTime"
                            placeholder="请选择"
                            format="HH:mm"
                            value-format="HH:mm"
                            clearable
                        />
                    </el-form-item>
                </el-col>
            </el-row>
        </el-form>
        <template #footer>
@@ -260,10 +195,6 @@
    code: '',
    roleId: '',
    deptId: '',
    expireTime: '',
    maxLoginNum: '',
    flightStartTime: '',
    flightEndTime: '',
})
const treeProps = {
@@ -340,24 +271,9 @@
    visible.value = false
}
function validateFlightTime() {
    if (formData.value.flightStartTime && formData.value.flightEndTime) {
        const [startHours, startMinutes] = formData.value.flightStartTime.split(':').map(Number)
        const [endHours, endMinutes] = formData.value.flightEndTime.split(':').map(Number)
        const startTotalMinutes = startHours * 60 + startMinutes
        const endTotalMinutes = endHours * 60 + endMinutes
        if (endTotalMinutes < startTotalMinutes) {
            ElMessage.error('飞行结束时间不能小于飞行开始时间')
            return false
        }
    }
    return true
}
async function handleSubmit() {
    const isValid = await formRef.value?.validate().catch(() => false)
    if (!isValid) return
    if (!validateFlightTime()) return
    submitting.value = true
    try {
        const submitData = { ...formData.value }
applications/task-work-order/env/.env
@@ -18,3 +18,6 @@
# xt接口地址
VITE_APP_URL_XT=http://218.202.104.82:8200
# 预览地址 previewURL
VITE_APP_PREVIEW_URL=http://192.168.1.204:8012
applications/task-work-order/src/views/orderView/flyingHand/FlyingHandDialog.vue
@@ -199,7 +199,8 @@
})
const formRef = ref(null)
const formData = reactive({
const initForm = () => ({
    flyerName: '',
    flyerId: '',
    flyerPhone: '',
@@ -208,7 +209,22 @@
    technicalStrength: '',
    skilledUavType: '',
    certification: [], // 证书
    regionCode: '', // 区域编码
})
const formData = ref(initForm()) // 表单数据
// const rules = {
//     flyerId: fieldRules(true),
//     flyerPhone: fieldRules(true, 50),
//     flightHours: fieldRules(true, 50),
//     technicalSkills: fieldRules(true, 50),
//     skilledTaskType: fieldRules(true),
//     projectExperience: fieldRules(true),
//     technicalStrength: fieldRules(true),
//     skilledUavType: fieldRules(true, 50),
// }
const rules = {
    flyerId: [
@@ -243,10 +259,11 @@
watch(
    () => props.flyingHandData,
    (newData) => {
        formData.value = initForm()
        if (newData) {
            Object.assign(formData, newData)
            formData.flightHours = Number(newData.flightHours)
        }
            Object.assign(formData.value, newData)
            formData.value.flightHours = Number(newData.flightHours)
        }
    },
    { deep: true, immediate: true }
)
@@ -260,8 +277,9 @@
// 处理选择飞手姓名
function handleChange(val) {
    const result = flyingHandList.value.find(item => item.id === val) || []
    formData.flyerName = result.name
    formData.certification = formData.certification.concat(result.licenseFrontFileUrl || [], result.licenseBackFileUrl || [])
    formData.value.flyerName = result.name
    formData.value.regionCode = result.regionCode
    formData.value.certification = formData.value.certification.concat(result.licenseFrontFileUrl || [], result.licenseBackFileUrl || [])
}
@@ -270,7 +288,7 @@
function resetForm() {
    formRef.value?.resetFields()
    // 重置为默认值
    Object.assign(formData, {
    Object.assign(formData.value, {
        flyerName: '',
        flyerPhone: '',
        flightHours: 0,
@@ -290,10 +308,10 @@
    try {
        if (props.dialogType === 'add') {
            await submitFlyingHand(formData)
            await submitFlyingHand(formData.value)
            ElMessage.success('添加成功')
        } else if (props.dialogType === 'edit') {
            await submitFlyingHand(formData)
            await submitFlyingHand(formData.value)
            ElMessage.success('编辑成功')
        }
        emit('confirm')
applications/task-work-order/src/views/orderView/orderManage/inspectionReport/index.vue
@@ -145,6 +145,7 @@
import { getDictLabel } from '@ztzf/utils'
import PreviewFiles from '@/components/PreviewFiles/PreviewFiles.vue'
import { getDictionaryByCode } from '@/api/system/dictbiz'
import { Base64 } from 'js-base64'
const store = useStore()
const userInfo = computed(() => store.getters.userInfo)
@@ -237,29 +238,33 @@
    editParams.value.link = row.link
}
// 'zip', 'rar', 'jar', 'tar', 'gzip', '7z',
const allSupportedExtensions = [
    'doc', 'docx', 'xls', 'xlsx', 'xlsm', 'ppt', 'pptx', 'csv', 'tsv', 'dotm', 'xlt', 'xltm', 'dot', 'dotx', 'xlam', 'xla',
    'wps', 'dps', 'et', 'ett', 'wpt',
    'odt', 'ods', 'ots', 'odp', 'otp', 'six', 'ott', 'fodt', 'fods',
    'vsd', 'vsdx', 'wmf', 'emf', 'psd',
    'pdf', 'ofd', 'rtf', 'epub',
    'xmind', 'bpmn', 'eml',
    'obj', '3ds', 'stl', 'ply', 'gltf', 'glb', 'off', '3dm', 'fbx', 'dae', 'wrl', '3mf', 'ifc', 'brep', 'step', 'iges', 'fcstd', 'bim',
    'dwg', 'dxf',
    'txt', 'xml', 'md', 'java', 'php', 'py', 'js', 'css',
    'jpg', 'jpeg', 'png', 'gif', 'bmp', 'ico', 'jfif', 'webp', 'tif', 'tiff', 'tga', 'svg',
    'mp3', 'wav', 'mp4', 'flv', 'avi', 'mov', 'rm', 'webm', 'ts', 'mkv', 'mpeg', 'ogg', 'mpg', 'rmvb', 'wmv', '3gp', 'swf'
];
const { VITE_APP_PREVIEW_URL } = import.meta.env
// 在线查看文档
function seeOnlineWord(row) {
    // 获取点之后的文件格式名
    const fileType = row?.link?.split('.').pop() || ''
    if (!row.link) {
        ElMessage.warning('文件链接不存在')
        return
    } else if (
        !row.link.includes('docx') &&
        !row.link.includes('pdf') &&
        !row.link.includes('png') &&
        !row.link.includes('jpg')
    ) {
    }else if (allSupportedExtensions.includes(fileType)){
        window.open(`${VITE_APP_PREVIEW_URL}/onlinePreview?url=`+encodeURIComponent(Base64.encode(row.link)));
    }else {
        ElMessage.warning(`${fileType}文件格式,可以下载再查看`)
        return
    } else if (row.link.includes('png') || row.link.includes('jpg')) {
        previewVisibleImg.value = true
        searchUrl.value = row.link
        return
    } else if (row.link.includes('docx') || row.link.includes('pdf')) {
        previewVisible.value = true
        searchUrl.value = row.link
        return
    }
}
applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue
@@ -203,8 +203,8 @@
                    >
                        {{ gdStatusObj[gdStatus].reason }}
                    </el-button>
                    <el-button @click="addDescription" v-if="['20', '24', '25', '50'].includes(gdStatus)" color="#F2F3F5">
                        {{ gdStatus === '50' ? '结算' : '申请取消' }}
                    <el-button @click="addDescription" v-if="['20', '24', '25'].includes(gdStatus)" color="#F2F3F5">
                        申请取消
                    </el-button>
                    <el-button color="#4C34FF" @click="requestModification" v-if="['20', '25'].includes(gdStatus)">
                        申请修改
@@ -224,6 +224,7 @@
                <el-button v-if="['21', '23'].includes(gdStatus)" @click="viewDescription" color="#F2F3F5">
                    {{ gdStatusObj[gdStatus].reason }}
                </el-button>
                <el-button v-if="gdStatus === '50'" @click="addDescription" color="#F2F3F5">结算</el-button>
                <el-button v-if="gdStatus === '10'" @click="addDescription" color="#F2F3F5">拒绝接单</el-button>
                <el-button v-if="gdStatus === '10'" @click="statusChange(1)" color="#4C34FF">接单</el-button>
                <el-button v-if="gdStatus === '22'" @click="addDescription" color="#F2F3F5">不同意修改</el-button>
uniapps/work-wx/src/pages/equipmentManagement/index.vue
@@ -132,7 +132,7 @@
  }
  .card {
    display: flex;
    padding: 44rpx;
    padding: 40rpx 0;
    border-bottom: 1px solid #EBEEF3;
    .left {
      width: 70px;
@@ -157,6 +157,10 @@
        color: #86909C;
        margin-bottom: 14rpx;
      }
      // 最后一个txt 不添加margin-bottom
      .txt:last-child {
        margin-bottom: 0;
      }
    }
  }
  // 第一个card 不添加下边框
uniapps/work-wx/src/pages/legalPolicy/index.vue
@@ -1,7 +1,7 @@
<template>
  <view class="legalPolicy">
    <!-- <u-navbar title="法律政策" @rightClick="rightClick" :autoBack="true"></u-navbar> -->
    <u-search :bgColor="'white'" v-model="noticeTitle" :show-action="true" actionText="搜索" :animation="true" @custom="handleSearch"></u-search>
    <u-search :bgColor="'white'" v-model="formParams.noticeTitle" :show-action="true" actionText="搜索" :animation="true" @custom="handleSearch"></u-search>
    <view class="tabs-container">
      <u-tabs :list="tabs" lineColor="#265CFD" @click="tabClick"></u-tabs>
    </view>
@@ -27,8 +27,6 @@
  import docSvg from '@/static/images/doc.png'
import { ref, onMounted } from 'vue'
const noticeTitle = ref('')
const tabs = ref([
  {
    name: '法律法规',
@@ -42,7 +40,7 @@
  current: 1,
  size: 10,
  noticeType: 2,
  noticeTitle: noticeTitle.value,
  noticeTitle: '',
  isAsc: true
})
@@ -62,7 +60,6 @@
const handleSearch = () => {
  // 搜索时重置为第一页
  formParams.value.current = 1
  formParams.value.noticeTitle = formParams.value.noticeTitle.trim()
  getSysNoticeList()
}
// 触底加载
uniapps/work-wx/src/subPackages/deviceRegistration/add.vue
@@ -649,6 +649,7 @@
    :deep(.u-button--primary) {
        background-color: #265CFD;
        border-color: #265CFD;
    }
    :deep(.u-form) {
uniapps/work-wx/src/subPackages/flightApplication/index.vue
@@ -187,7 +187,7 @@
                flex: 1;
                max-width: 350rpx;
                height: 166rpx;
                background: rgba(251,253,255,0.57);
                background: rgba(251,253,255,0.8);
                box-shadow: inset 0px 0px 7px 0px rgba(64,156,230,0.14), 0px 1px 3px 0px rgba(35,49,96,0.11);
                border-radius: 8px 8px 8px 8px;
                border: 1px solid #fff;