吉安感知网项目-前端
罗广辉
4 hours ago 493a27022ad30291934db825bab591c7efdcbc09
feat: 保存的时候一个按钮置灰
2 files modified
277 ■■■■ changed files
applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue 130 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue 147 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue
@@ -239,33 +239,74 @@
        </div>
        <template #footer v-if="detailLoaded">
            <el-button v-if="['1', '4', '7'].includes(taskStatus)" @click="viewDescription" color="#F2F3F5">
            <el-button
                v-if="['1', '4', '7'].includes(taskStatus)"
                :disabled="footerLoading"
                @click="viewDescription"
                color="#F2F3F5"
            >
                {{ gdStatusObj[taskStatus].reason }}
            </el-button>
            <el-button @click="statusChange(3)" v-if="taskStatus === '3' && permission.flyOrder_revoke" color="#4C34FF">
            <el-button
                v-if="taskStatus === '3' && permission.flyOrder_revoke"
                :loading="statusLoading === 3"
                :disabled="footerLoading"
                @click="statusChange(3)"
                color="#4C34FF"
            >
                撤回任务
            </el-button>
            <template v-if="permission.flyOrder_controlAcceptance">
                <el-button @click="refusalToAccept" v-if="taskStatus === '6'" color="#F2F3F5">拒绝验收</el-button>
                <el-button @click="statusChange(6)" v-if="taskStatus === '6'" color="#4C34FF">验收通过</el-button>
                <el-button v-if="taskStatus === '6'" :disabled="footerLoading" @click="refusalToAccept" color="#F2F3F5">
                    拒绝验收
                </el-button>
                <el-button
                    v-if="taskStatus === '6'"
                    :loading="statusLoading === 6"
                    :disabled="footerLoading"
                    @click="statusChange(6)"
                    color="#4C34FF"
                >
                    验收通过
                </el-button>
            </template>
            <el-button
                v-if="!dialogReadonly || (['1', '4'].includes(taskStatus) && permission.flyOrder_add)"
                :loading="submitting"
                :disabled="submitting"
                :disabled="footerLoading"
                color="#4C34FF"
                @click="handleSubmit"
            >
                提交
            </el-button>
            <template v-if="permission.flyOrder_controlSignFor">
                <el-button v-if="taskStatus === '0'" @click="addDescription" color="#F2F3F5">拒绝签收</el-button>
                <el-button v-if="taskStatus === '0'" @click="statusChange(1)" color="#4C34FF">签收</el-button>
                <el-button v-if="taskStatus === '0'" :disabled="footerLoading" @click="addDescription" color="#F2F3F5">
                    拒绝签收
                </el-button>
                <el-button
                    v-if="taskStatus === '0'"
                    :loading="statusLoading === 1"
                    :disabled="footerLoading"
                    @click="statusChange(1)"
                    color="#4C34FF"
                >
                    签收
                </el-button>
            </template>
            <template v-if="permission.flyOrder_controlReview">
                <el-button v-if="taskStatus === '3'" @click="addDescription" color="#F2F3F5">驳回</el-button>
                <el-button v-if="taskStatus === '3'" @click="statusChange(4)" color="#4C34FF">通过</el-button>
                <el-button v-if="taskStatus === '3'" :disabled="footerLoading" @click="addDescription" color="#F2F3F5">
                    驳回
                </el-button>
                <el-button
                    v-if="taskStatus === '3'"
                    :loading="statusLoading === 4"
                    :disabled="footerLoading"
                    @click="statusChange(4)"
                    color="#4C34FF"
                >
                    通过
                </el-button>
            </template>
        </template>
        <RefuseOrderDialog1
@@ -335,6 +376,8 @@
const visible = defineModel()
const dialogMode = ref('view')
const submitting = ref(false)
const statusLoading = ref(null)
const footerLoading = computed(() => submitting.value || statusLoading.value !== null)
const detailLoaded = ref(false)
const dialogReadonly = computed(() => dialogMode.value === 'view')
const titleEnum = ref({ edit: '编辑', view: '查看' })
@@ -469,11 +512,16 @@
}
// 操作类型:1.同意签收、2.拒绝签收 、3.撤回任务 、4.同意审核、 5.拒绝审核、 6.验收通过、 7.验收拒绝
function statusChange(auditStatus) {
    gdPatrolTaskAuditApi({ auditStatus, id: formData.value.id }).then(res => {
async function statusChange(auditStatus) {
    if (footerLoading.value) return
    statusLoading.value = auditStatus
    try {
        await gdPatrolTaskAuditApi({ auditStatus, id: formData.value.id })
        visible.value = false
        emit('success')
    })
    } finally {
        statusLoading.value = null
    }
}
function refusalToAccept() {
@@ -497,10 +545,11 @@
// 提交编辑
async function handleSubmit() {
    const isValid = await formRef.value?.validate().catch(() => false)
    if (!isValid) return
    if (footerLoading.value) return
    submitting.value = true
    try {
        const isValid = await formRef.value?.validate().catch(() => false)
        if (!isValid) return
        await gdPatrolTaskRepublish(formData.value)
        ElMessage.success('更新成功')
        visible.value = false
@@ -545,6 +594,35 @@
    outlineWidth: 0,
    speed: 5,
})
// 创建航线起终点标记
function createRouteEndpoint(position, text, color) {
    viewer.entities.add({
        position: Cesium.Cartesian3.fromDegrees(Number(position[0]), Number(position[1]), position[2]),
        point: {
            pixelSize: 16,
            color,
            outlineColor: Cesium.Color.WHITE,
            outlineWidth: 4,
            disableDepthTestDistance: Number.POSITIVE_INFINITY,
        },
        label: {
            text,
            font: 'bold 14px sans-serif',
            fillColor: Cesium.Color.WHITE,
            outlineColor: Cesium.Color.BLACK.withAlpha(0.35),
            outlineWidth: 2,
            style: Cesium.LabelStyle.FILL_AND_OUTLINE,
            showBackground: true,
            backgroundColor: color.withAlpha(0.9),
            backgroundPadding: new Cesium.Cartesian2(10, 6),
            pixelOffset: new Cesium.Cartesian2(0, -18),
            verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
            disableDepthTestDistance: Number.POSITIVE_INFINITY,
        },
    })
}
// 获取航线详情
function getAirDetails() {
    const dockHeight = formData.value.height
@@ -569,28 +647,12 @@
                material: arrowLineMaterialProperty,
            },
        })
        // 渲染起点(蓝色)
        // 渲染起点
        const startPoint = result[0]
        viewer.entities.add({
            position: Cesium.Cartesian3.fromDegrees(Number(startPoint[0]), Number(startPoint[1]), startPoint[2]),
            point: {
                pixelSize: 12,
                color: Cesium.Color.BLUE,
                outlineColor: Cesium.Color.WHITE,
                outlineWidth: 2,
            },
        })
        // 渲染终点(红色)
        createRouteEndpoint(startPoint, '起点', Cesium.Color.fromCssColorString('#22C55E'))
        // 渲染终点
        const endPoint = result[result.length - 1]
        viewer.entities.add({
            position: Cesium.Cartesian3.fromDegrees(Number(endPoint[0]), Number(endPoint[1]), endPoint[2]),
            point: {
                pixelSize: 12,
                color: Cesium.Color.RED,
                outlineColor: Cesium.Color.WHITE,
                outlineWidth: 2,
            },
        })
        createRouteEndpoint(endPoint, '终点', Cesium.Color.fromCssColorString('#EF4444'))
        flyVisual({
            positionsData: list.map(i => [Number(i.longitude), Number(i.latitude), i.height || 0]),
            viewer,
applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue
@@ -190,22 +190,30 @@
        </div>
        <template #footer v-if="activeName === 'basic' && detailLoaded">
            <el-button v-if="['11', '21', '23', '31', '60'].includes(gdStatus)" @click="viewDescription" color="#F2F3F5">
            <el-button
                v-if="['11', '21', '23', '31', '60'].includes(gdStatus)"
                :disabled="footerLoading"
                @click="viewDescription"
                color="#F2F3F5"
            >
                {{ gdStatusObj[gdStatus]?.reason }}
            </el-button>
            <template v-if="!suddenlyEdit">
                <el-button
                    @click="addDescription"
                    v-if="['20'].includes(gdStatus) && permission.order_applyCancel"
                    :disabled="footerLoading"
                    @click="addDescription"
                    color="#F2F3F5"
                >
                    申请取消
                </el-button>
                <el-button
                    color="#4C34FF"
                    @click="requestModification"
                    v-if="['20'].includes(gdStatus) && permission.order_applyEdit"
                    :loading="modifying"
                    :disabled="footerLoading"
                    @click="requestModification"
                    color="#4C34FF"
                >
                    申请修改
                </el-button>
@@ -213,32 +221,86 @@
            <el-button
                v-if="(['11'].includes(gdStatus) || suddenlyEdit || !formData.id) && permission.order_release"
                :loading="submitting"
                :disabled="submitting"
                :disabled="footerLoading"
                color="#4C34FF"
                @click="handleSubmit"
            >
                {{ gdStatus === '11' || !gdStatus ? '发布' : '提交修改' }}
            </el-button>
            <el-button v-if="gdStatus === '50' && permission.order_settlement" @click="addDescription" color="#F2F3F5">
            <el-button
                v-if="gdStatus === '50' && permission.order_settlement"
                :disabled="footerLoading"
                @click="addDescription"
                color="#F2F3F5"
            >
                结算
            </el-button>
            <template v-if="permission.order_controlOrder">
                <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 === '10'" :disabled="footerLoading" @click="addDescription" color="#F2F3F5">
                    拒绝接单
                </el-button>
                <el-button
                    v-if="gdStatus === '10'"
                    :loading="statusLoading === 1"
                    :disabled="footerLoading"
                    @click="statusChange(1)"
                    color="#4C34FF"
                >
                    接单
                </el-button>
            </template>
            <template v-if="permission.order_controlEdit">
                <el-button v-if="gdStatus === '22'" @click="statusChange(8)" color="#F2F3F5">驳回</el-button>
                <el-button v-if="gdStatus === '22'" @click="statusChange(7)" color="#4C34FF">同意</el-button>
                <el-button
                    v-if="gdStatus === '22'"
                    :loading="statusLoading === 8"
                    :disabled="footerLoading"
                    @click="statusChange(8)"
                    color="#F2F3F5"
                >
                    驳回
                </el-button>
                <el-button
                    v-if="gdStatus === '22'"
                    :loading="statusLoading === 7"
                    :disabled="footerLoading"
                    @click="statusChange(7)"
                    color="#4C34FF"
                >
                    同意
                </el-button>
            </template>
            <template v-if="permission.order_controlCancel">
                <el-button v-if="gdStatus === '21'" @click="statusChange(6)" color="#F2F3F5">驳回</el-button>
                <el-button v-if="gdStatus === '21'" @click="statusChange(5)" color="#4C34FF">通过</el-button>
                <el-button
                    v-if="gdStatus === '21'"
                    :loading="statusLoading === 6"
                    :disabled="footerLoading"
                    @click="statusChange(6)"
                    color="#F2F3F5"
                >
                    驳回
                </el-button>
                <el-button
                    v-if="gdStatus === '21'"
                    :loading="statusLoading === 5"
                    :disabled="footerLoading"
                    @click="statusChange(5)"
                    color="#4C34FF"
                >
                    通过
                </el-button>
            </template>
            <el-button v-if="gdStatus === '30' && permission.order_applyNegotiation" @click="addDescription" color="#4C34FF">
            <el-button
                v-if="gdStatus === '30' && permission.order_applyNegotiation"
                :disabled="footerLoading"
                @click="addDescription"
                color="#4C34FF"
            >
                协商修改
            </el-button>
            <el-button
                v-if="gdStatus === '31' && permission.order_controlNegotiation"
                :loading="statusLoading === 10"
                :disabled="footerLoading"
                @click="statusChange(10)"
                color="#4C34FF"
            >
@@ -314,6 +376,9 @@
const visible = defineModel() // 弹框显隐
const dialogMode = ref('add') // 弹框模式
const submitting = ref(false) // 提交中
const modifying = ref(false) // 申请修改中
const statusLoading = ref(null) // 状态操作中
const footerLoading = computed(() => submitting.value || modifying.value || statusLoading.value !== null)
const detailLoaded = ref(false) // 详情加载完成
const dialogReadonly = computed(() => dialogMode.value === 'view')
const titleEnum = ref({ edit: '编辑', view: '查看', add: '新增' })
@@ -355,26 +420,37 @@
// 操作类型:1接单,2拒接接单,3申请取消,4申请修改, 5同意取消
// 6不同意取消 7.同意修改 8.不同意修改 9.协商修改,10:同意协商修改,11.结算
function statusChange(operationType) {
    gdWorkOrderHandleStatusApi({
        operationType: operationType,
        workOrderId: formData.value.id,
    }).then(res => {
async function statusChange(operationType) {
    if (footerLoading.value) return
    statusLoading.value = operationType
    try {
        await gdWorkOrderHandleStatusApi({
            operationType: operationType,
            workOrderId: formData.value.id,
        })
        visible.value = false
        emit('success')
    })
    } finally {
        statusLoading.value = null
    }
}
// 申请修改按钮
async function requestModification() {
    suddenlyEdit.value = true
    dialogMode.value = 'edit'
    await getDeviceList()
    nextTick(() => {
        syncSelection()
        viewPlane && viewer.entities.remove(viewPlane)
        editPolygon()
    })
    if (footerLoading.value) return
    modifying.value = true
    try {
        suddenlyEdit.value = true
        dialogMode.value = 'edit'
        await getDeviceList()
        nextTick(() => {
            syncSelection()
            viewPlane && viewer.entities.remove(viewPlane)
            editPolygon()
        })
    } finally {
        modifying.value = false
    }
}
// 填写说明弹框回调
@@ -441,16 +517,17 @@
// 提交新增/编辑
async function handleSubmit() {
    const isValid = await formRef.value?.validate().catch(() => false)
    if (!isValid) return
    if (!pointList.value.length) {
        return ElMessage.warning('请绘制范围')
    }
    if (!formData.value.recommendDeviceIds) {
        return ElMessage.warning('请选择设备')
    }
    if (footerLoading.value) return
    submitting.value = true
    try {
        const isValid = await formRef.value?.validate().catch(() => false)
        if (!isValid) return
        if (!pointList.value.length) {
            return ElMessage.warning('请绘制范围')
        }
        if (!formData.value.recommendDeviceIds) {
            return ElMessage.warning('请选择设备')
        }
        const str = [...pointList.value, pointList.value[0]].map(item => `${item.longitude} ${item.latitude}`).join(',')
        formData.value.geom = `POLYGON((${str}))`
        if (!formData.value.id) {