From 79702b005a055df600ad61b19c2e7a4a01cc3d40 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Fri, 23 Jan 2026 17:50:30 +0800
Subject: [PATCH] Merge branch 'master' of http://139.196.74.78:10010/r/jagzwxm/ja_web
---
applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/index.vue | 30
uniapps/work-wx/src/pages/equipmentManagement/index.vue | 9
applications/task-work-order/src/views/orderView/orderManage/inspectionReport/index.vue | 253 +++---
uniapps/work-app/src/pages/work/index.vue | 39
applications/task-work-order/src/views/work/process/leave/handle.vue | 4
uniapps/work-app/src/static/images/work/share.png | 0
applications/task-work-order/src/views/orderView/orderDataManage/appInnovation/index.vue | 29
applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/reasonForRejectionDialog.vue | 9
uniapps/work-wx/src/subPackages/regulationsDetail/details.vue | 165 +---
applications/task-work-order/src/views/orderView/orderDataManage/evaluate/FormDiaLog.vue | 6
uniapps/work-wx/src/subPackages/flightApplication/index.vue | 87 ++
applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/FormDiaLog.vue | 5
applications/task-work-order/src/views/orderView/orderManage/clueEvents/index.vue | 6
uniapps/work-wx/src/store/modules/app/index.js | 52 +
applications/task-work-order/src/views/orderView/orderManage/operatingIncome/index.vue | 10
applications/task-work-order/src/styles/common/cockpit.scss | 356 +++++-----
applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue | 38
uniapps/work-app/src/pages/login/index.vue | 2
applications/task-work-order/src/views/orderView/orderDataManage/dataObjection/FormDiaLog.vue | 8
applications/task-work-order/src/views/work/process/leave/detail.vue | 2
applications/task-work-order/src/views/orderView/orderDataManage/evaluate/index.vue | 36
applications/task-work-order/src/views/orderView/orderDataManage/dataObjection/index.vue | 30
uniapps/work-app/src/api/work/index.js | 92 +-
uniapps/work-wx/src/subPackages/deviceRegistration/add.vue | 96 +-
applications/task-work-order/src/views/orderView/orderManage/orderManage/index.vue | 8
uniapps/work-wx/src/subPackages/flightApplication/add.vue | 109 +--
applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue | 4
applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue | 28
uniapps/work-wx/src/subPackages/flightApplication/details.vue | 157 +---
uniapps/work-wx/src/pages/legalPolicy/index.vue | 11
/dev/null | 58 -
applications/task-work-order/src/assets/images/layoutBg.png | 0
uniapps/work-app/src/subPackages/userDetail/password/index.vue | 2
applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/index.vue | 20
applications/task-work-order/src/views/orderView/orderDataManage/appInnovation/FormDiaLog.vue | 72 +
uniapps/work-wx/src/pages/page/index.vue | 98 ++
uniapps/work-app/src/pages/user/index.vue | 8
uniapps/work-app/src/subPackages/workDetail/index.vue | 49 -
38 files changed, 1,037 insertions(+), 951 deletions(-)
diff --git a/applications/task-work-order/src/assets/images/layoutBg.png b/applications/task-work-order/src/assets/images/layoutBg.png
index 3945013..00b201b 100644
--- a/applications/task-work-order/src/assets/images/layoutBg.png
+++ b/applications/task-work-order/src/assets/images/layoutBg.png
Binary files differ
diff --git a/applications/task-work-order/src/styles/common/cockpit.scss b/applications/task-work-order/src/styles/common/cockpit.scss
index b1e1d0f..07f955a 100644
--- a/applications/task-work-order/src/styles/common/cockpit.scss
+++ b/applications/task-work-order/src/styles/common/cockpit.scss
@@ -1,142 +1,89 @@
-//变量
-$gd-placeholder: #86909C;
$form-bg: #F2F3F5;
-
-.gd-table {
- height: 0;
- flex: 1;
- background: transparent !important;
-
- .el-table--border .el-table__inner-wrapper:after,
- .el-table--border:after,
- .el-table--border:before,
- .el-table__inner-wrapper:before {
- height: 0;
- }
-
- tr {
- background: transparent !important;
- }
-
- th.el-table__cell {
- height: 40px;
- border-bottom: 1px solid #DBDFF1 !important;
-
- .cell {
- padding: 0 0 0 16px;
- font-family: Source Han Sans CN, Source Han Sans CN;
- font-weight: 400;
- font-size: 14px;
- color: #9292C1;
- text-align: left;
- font-style: normal;
- text-transform: none;
- }
- }
-
- td.el-table__cell {
- padding: 9px 0;
- height: 56px;
-
- .cell {
- padding: 0 0 0 16px;
- font-family: Source Han Sans CN, Source Han Sans CN;
- font-weight: 400;
- font-size: 14px;
- color: #383874;
- text-align: left;
- font-style: normal;
- text-transform: none;
- }
- }
-
- td.operation-btns .cell {
- display: flex;
- flex-wrap: nowrap;
- gap: 12px;
- /* 按钮间距(推荐) */
- white-space: nowrap;
- /* 双保险 */
-
- a {
- min-width: 28px;
- color: #0075FF;
-
- &:last-child {
- margin-right: 0;
- }
- }
- }
-
- th.el-table__cell:not(.fixed-column),
- td.el-table__cell:not(.fixed-column) {
- background: transparent !important;
- }
-
- .fixed-column {
- background-color: #1A1A2A !important;
- }
-}
+$form-tips: #86909C;
+//灰色变量
+$form-bg-gray: #DDE2ED;
+$form-tips-gray: #A1A3D4;
.gd-input {
+ --el-input-bg-color: #{$form-bg};
+ --el-input-placeholder-color: #{$form-tips};
+
+ &.gray {
+ --el-input-bg-color: #{$form-bg-gray};
+ --el-input-placeholder-color: #{$form-tips-gray};
+ }
+
.el-input__wrapper, .el-textarea__inner {
- padding: 0 8px !important;
- background: $form-bg;
box-shadow: none !important;
border: none;
}
- .el-input__inner, .el-textarea__inner {
- &::placeholder {
- color: $gd-placeholder;
- }
- }
-
-
&.is-disabled {
.el-input__wrapper {
- background: #DDE2ED;
+ background: $form-bg;
}
}
}
-.gd-select {
- .el-select__input {
- color: #8ac3fd !important;
+.gd-select, {
+ --bg: #{$form-bg};
+ --tips: #{$form-tips};
+
+ &.gray {
+ --bg: #{$form-bg-gray};
+ --tips: #{$form-tips-gray};
}
.el-select__wrapper {
padding: 0 8px;
- background: $form-bg;
+ background: var(--bg);
box-shadow: none !important;
border: none;
- width: 100%;
}
.el-select__placeholder {
&.is-transparent {
- color: $gd-placeholder !important;
+ color: var(--tips) !important;
}
&.el-select__selected-item {
color: #383874;
}
}
+}
- .el-select {
- --el-select-border-color-hover: rgb(0, 162, 255) !important;
+.gd-date-picker {
+ --bg: #{$form-bg};
+ --tips: #{$form-tips};
+
+ &.gray {
+ --bg: #{$form-bg-gray};
+ --tips: #{$form-tips-gray};
}
- .el-input {
- --el-border-color: rgb(0, 162, 255);
- }
-
- .el-select .el-input__wrapper {
- background-color: #DDE2ED !important;
- }
+ box-shadow: none !important;
+ background: var(--bg);
+ border: none;
+ border-radius: 5px;
+ box-sizing: border-box !important;
.el-input__wrapper {
- --el-input-text-color: #DDE2ED !important;
+ box-shadow: none !important;
+ background-color: transparent !important;
+
+ &.is-focus {
+ box-shadow: none !important;
+ }
+ }
+
+ .el-range-input {
+ &::placeholder {
+ color: var(--tips);
+ }
+ }
+
+ .el-range-separator {
+ color: #ffffff;
}
}
@@ -215,35 +162,6 @@
background: #012a50 !important;
border: 1px solid #012a50 !important;
}
- }
-}
-
-.gd-date-picker {
- box-shadow: none !important;
- background: $form-bg;
- border: none;
- border-radius: 5px;
- box-sizing: border-box !important;
-
- .el-input__wrapper {
- box-shadow: none !important;
- background-color: transparent !important;
-
- &.is-focus {
- box-shadow: none !important;
- }
- }
-
- .el-range-input {
- color: #fff;
-
- &::placeholder {
- color: $gd-placeholder;
- }
- }
-
- .el-range-separator {
- color: #ffffff;
}
}
@@ -454,10 +372,10 @@
}
}
-.el-overlay-dialog{
+.el-overlay-dialog {
display: flex;
justify-content: center; /* 水平居中 */
- align-items: center; /* 垂直居中 */
+ align-items: center; /* 垂直居中 */
}
.gd-dialog {
@@ -488,7 +406,8 @@
.el-dialog__body {
overflow: auto;
- min-height: 20vh;
+ min-height: 5vh;
+
.detail-title {
margin-bottom: 10px;
font-family: Source Han Sans CN, Source Han Sans CN;
@@ -510,6 +429,7 @@
margin-bottom: 0;
.label {
+ display: inline-block;
width: 88px;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
@@ -554,6 +474,82 @@
.save-btn {
color: #FFFFFF;
}
+ }
+}
+
+.gd-table {
+ height: 0;
+ flex: 1;
+ background: transparent !important;
+
+ .el-table--border .el-table__inner-wrapper:after,
+ .el-table--border:after,
+ .el-table--border:before,
+ .el-table__inner-wrapper:before {
+ height: 0;
+ }
+
+ tr {
+ background: transparent !important;
+ }
+
+ th.el-table__cell {
+ height: 40px;
+ border-bottom: 1px solid #DBDFF1 !important;
+
+ .cell {
+ padding: 0 0 0 16px;
+ font-family: Source Han Sans CN, Source Han Sans CN;
+ font-weight: 400;
+ font-size: 14px;
+ color: #9292C1;
+ text-align: left;
+ font-style: normal;
+ text-transform: none;
+ }
+ }
+
+ td.el-table__cell {
+ padding: 9px 0;
+ height: 56px;
+
+ .cell {
+ padding: 0 0 0 16px;
+ font-family: Source Han Sans CN, Source Han Sans CN;
+ font-weight: 400;
+ font-size: 14px;
+ color: #383874;
+ text-align: left;
+ font-style: normal;
+ text-transform: none;
+ }
+ }
+
+ td.operation-btns .cell {
+ display: flex;
+ flex-wrap: nowrap;
+ gap: 12px;
+ /* 按钮间距(推荐) */
+ white-space: nowrap;
+ /* 双保险 */
+
+ a {
+ min-width: 28px;
+ color: #0075FF;
+
+ &:last-child {
+ margin-right: 0;
+ }
+ }
+ }
+
+ th.el-table__cell:not(.fixed-column),
+ td.el-table__cell:not(.fixed-column) {
+ background: transparent !important;
+ }
+
+ .fixed-column {
+ background-color: #1A1A2A !important;
}
}
@@ -618,7 +614,7 @@
text-transform: none;
}
- background: #F2F3F5;
+ background: $form-bg;
border: none;
box-shadow: none;
}
@@ -701,47 +697,6 @@
.gd-input {
width: 200px;
height: 36px;
-
- .el-input__wrapper {
- }
-
- &.is-disabled {
- .el-input__wrapper {
- }
- }
- }
-
- .gd-date-picker {
- }
-
- .gd-date-picker-popper {
-
- .el-picker-panel {
- .el-picker-panel__body-wrapper {
- .el-picker-panel__body {
-
- .el-date-picker__time-header {
-
- .el-date-picker__editor-wrap {
- .el-time-panel {
-
- // 将 time-picker-popper 的样式移到这里
- .el-time-panel__header {
- }
- }
- }
- }
- }
- }
- }
-
- .el-popper__arrow {
- &::before {
- background: #DDE2ED !important;
- border: 1px solid #DDE2ED !important;
- box-sizing: border-box;
- }
- }
}
.gd-search-actions {
@@ -829,7 +784,7 @@
.gd-select-popper {
border: none;
- background: #F2F3F5 !important;
+ background: $form-bg !important;
.el-select-dropdown {
.el-scrollbar {
@@ -853,16 +808,55 @@
}
.el-select-dropdown__empty {
- background: #F2F3F5;
+ background: $form-bg;
border-radius: 0px 0px 8px 8px;
}
}
.el-popper__arrow::before {
- background: #F2F3F5 !important;
+ background: $form-bg !important;
border: 1px solid #F2F3F5 !important;
}
}
+.gd-timeline {
+ padding-left: 120px;
+ .el-timeline-item {
+ height: 120px;
+ &:nth-last-child(1) {
+ height: auto;
+ }
+
+ .el-timeline-item__tail {
+ left: 15px;
+ transform: translate(-15px);
+ border-left-color: #4c34ff;
+ }
+
+ .el-timeline-item__node {
+ width: 32px;
+ height: 32px;
+ background-color: #161b2c;
+ transform: translate(-15px);
+
+ &.el-timeline-item__node--success {
+ background-color: #4c34ff;
+ }
+
+ .el-timeline-item__icon {
+ font-size: 22px;
+ }
+ }
+
+ .el-timeline-item__wrapper {
+ top: 5px;
+ font-size: 16px;
+
+ .el-timeline-item__timestamp {
+ margin-top: 20px;
+ }
+ }
+ }
+}
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/appInnovation/FormDiaLog.vue b/applications/task-work-order/src/views/orderView/orderDataManage/appInnovation/FormDiaLog.vue
index 227f3a3..c933f19 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/appInnovation/FormDiaLog.vue
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/appInnovation/FormDiaLog.vue
@@ -47,7 +47,7 @@
:model="formData"
:rules="rules"
:disabled="dialogReadonly"
- label-width="100px"
+ label-width="140px"
>
<el-row>
<el-col :span="12">
@@ -95,17 +95,31 @@
</el-row>
</el-form>
<template #footer>
- <el-button color="#F2F3F5" @click="visible = false">{{ dialogReadonly ? '关闭' : '取消' }}</el-button>
- <el-button
- class="save-btn"
- color="#4C34FF"
- v-if="!dialogReadonly"
- :loading="submitting"
- :disabled="submitting"
- @click="handleSubmit"
- >
- 保存
- </el-button>
+ <template v-if="!dialogReadonly">
+ <el-button color="#F2F3F5" @click="visible = false">取消</el-button>
+ <el-button
+ class="save-btn"
+ color="#4C34FF"
+
+ :loading="submitting"
+ :disabled="submitting"
+ @click="handleSubmit"
+ >
+ 提交
+ </el-button>
+ </template>
+ <template v-if="dialogReadonly && innovationDetailsStatus ==='0'">
+ <el-button color="#F2F3F5" @click="handleReject">不通过</el-button>
+ <el-button
+ class="save-btn"
+ color="#4C34FF"
+ :loading="submitting"
+ :disabled="submitting"
+ @click="handleApprove"
+ >
+ 通过
+ </el-button>
+ </template>
</template>
</el-dialog>
</template>
@@ -130,7 +144,7 @@
caseDesc: '',
innovationStatus: '',
})
-
+const innovationDetailsStatus = inject('innovationDetailsStatus')
const emit = defineEmits(['success'])
const formRef = ref(null) // 表单实例
const formData = ref(initForm()) // 表单数据
@@ -156,8 +170,37 @@
if (!isValid) return
submitting.value = true
try {
+ formData.value.innovationStatus = dialogMode.value === 'add' ? '0' : formData.value.innovationStatus
await gdApplicationInnovationSubmitApi(formData.value)
ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功')
+ visible.value = false
+ emit('success')
+ } finally {
+ submitting.value = false
+ }
+}
+
+// 处理通过
+async function handleApprove() {
+ submitting.value = true
+ try {
+ formData.value.innovationStatus = '1'
+ await gdApplicationInnovationSubmitApi(formData.value)
+ ElMessage.success('审批通过成功')
+ visible.value = false
+ emit('success')
+ } finally {
+ submitting.value = false
+ }
+}
+
+// 处理不通过
+async function handleReject() {
+ submitting.value = true
+ try {
+ formData.value.innovationStatus = '2'
+ await gdApplicationInnovationSubmitApi(formData.value)
+ ElMessage.success('审批不通过成功')
visible.value = false
emit('success')
} finally {
@@ -183,3 +226,6 @@
defineExpose({ open })
</script>
+<style scoped lang="scss">
+
+</style>
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/appInnovation/index.vue b/applications/task-work-order/src/views/orderView/orderDataManage/appInnovation/index.vue
index 4ed5abb..f01cb6e 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/appInnovation/index.vue
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/appInnovation/index.vue
@@ -2,21 +2,30 @@
<basic-container>
<el-form ref="queryParamsRef" :model="searchParams" class="gd-search-form">
<el-form-item label="案例名称" prop="caseName">
- <el-input class="gd-input" v-model="searchParams.caseName" placeholder="请输入" clearable @clear="handleSearch" />
+ <el-input
+ class="gd-input gray"
+ v-model="searchParams.caseName"
+ placeholder="请输入"
+ clearable
+ @clear="handleSearch"
+ />
</el-form-item>
<el-form-item label="应用创新状态" prop="innovationStatus">
<el-select
- class="gd-select"
+ class="gd-select gray"
popper-class="gd-select-popper"
v-model="searchParams.innovationStatus"
placeholder="请选择"
clearable
@change="handleSearch"
>
- <el-option v-for="item in dictObj.appInnovationStatus" :key="item.dictKey"
+ <el-option
+ v-for="item in dictObj.appInnovationStatus"
+ :key="item.dictKey"
:label="item.dictValue"
- :value="item.dictKey"/>
+ :value="item.dictKey"
+ />
</el-select>
</el-form-item>
@@ -43,7 +52,7 @@
<el-table-column prop="belongDomain" show-overflow-tooltip label="所属领域" />
<el-table-column prop="innovationStatus" show-overflow-tooltip label="应用创新状态">
<template v-slot="{ row }">
- {{ getDictLabel(row.innovationStatus) }}
+ {{ getDictLabel(row.innovationStatus, dictObj.appInnovationStatus) }}
</template>
</el-table-column>
<el-table-column prop="applicationScenarioDesc" show-overflow-tooltip label="应用场景描述" />
@@ -51,11 +60,11 @@
<el-table-column prop="resourceName" show-overflow-tooltip label="资源名称" />
<el-table-column prop="resourceCode" show-overflow-tooltip label="资源编码" />
<el-table-column prop="caseDesc" show-overflow-tooltip label="案例描述" />
- <el-table-column label="操作" class-name="operation-btns">
+ <el-table-column label="操作" class-name="operation-btns" width="180">
<template v-slot="{ row }">
<el-link @click="openForm('view', row)">查看</el-link>
<!-- <el-link @click="openForm('edit', row)">编辑</el-link>-->
- <el-link @click="handleDelete(row)">删除</el-link>
+ <el-link @click="handleDelete(row)" v-if="!['1', '2'].includes(row.innovationStatus)">删除</el-link>
</template>
</el-table-column>
</el-table>
@@ -104,15 +113,15 @@
const dialogRef = ref(null) // 弹框实例
const dialogVisible = ref(false)
const dictObj = ref({}) // 字典对象
+const innovationDetailsStatus = ref( '')
provide('dictObj', dictObj)
+provide('innovationDetailsStatus', innovationDetailsStatus)
// 获取字典
function getDictList() {
return getDictionaryByCode('appInnovationStatus').then(res => {
dictObj.value = res.data.data
-
})
}
-
// 获取列表
async function getList() {
@@ -141,6 +150,7 @@
// 新增/编辑/查看 弹框
function openForm(mode, row) {
+ innovationDetailsStatus.value = row?.innovationStatus
dialogVisible.value = true
nextTick(() => {
dialogRef.value?.open({ mode, row })
@@ -179,4 +189,3 @@
})
</script>
<style scoped lang="scss"></style>
-
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/dataObjection/FormDiaLog.vue b/applications/task-work-order/src/views/orderView/orderDataManage/dataObjection/FormDiaLog.vue
index 9bea32c..de830e5 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/dataObjection/FormDiaLog.vue
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/dataObjection/FormDiaLog.vue
@@ -178,8 +178,8 @@
<template #footer>
<template v-if="!dialogReadonly">
<el-button
- class="save-btn"
- color="#4C34FF"
+ color="#F2F3F5"
+
v-if="!dialogReadonly"
:loading="submitting"
:disabled="submitting"
@@ -187,7 +187,7 @@
>
保存
</el-button>
- <el-button color="#F2F3F5" :loading="submitting" :disabled="submitting" @click="handleApply">申请</el-button>
+ <el-button class="save-btn" color="#4C34FF" :loading="submitting" :disabled="submitting" @click="handleApply">申请</el-button>
</template>
<template v-if="dialogReadonly && detailObjectionStatus === '1'">
<el-button color="#F2F3F5" :loading="submitting" :disabled="submitting" @click="visible = false">取消</el-button>
@@ -216,7 +216,7 @@
</el-button>
</template>
<template v-if="detailObjectionStatus === '2'">
- <el-button color="#F2F3F5" :loading="submitting" :disabled="submitting" @click="visible = false">关闭</el-button>
+<!-- <el-button color="#F2F3F5" :loading="submitting" :disabled="submitting" @click="visible = false">关闭</el-button>-->
</template>
</template>
</el-dialog>
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/dataObjection/index.vue b/applications/task-work-order/src/views/orderView/orderDataManage/dataObjection/index.vue
index 6a0bfd4..e32abdf 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/dataObjection/index.vue
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/dataObjection/index.vue
@@ -2,12 +2,18 @@
<basic-container>
<el-form ref="queryParamsRef" :model="searchParams" class="gd-search-form">
<el-form-item label="异议标题" prop="title">
- <el-input class="gd-input" v-model="searchParams.title" placeholder="请输入" clearable @clear="handleSearch" />
+ <el-input
+ class="gd-input gray"
+ v-model="searchParams.title"
+ placeholder="请输入"
+ clearable
+ @clear="handleSearch"
+ />
</el-form-item>
<el-form-item label="异议状态" prop="objectionStatus">
<el-select
- class="gd-select"
+ class="gd-select gray"
popper-class="gd-select-popper"
v-model="searchParams.objectionStatus"
placeholder="请选择"
@@ -31,17 +37,17 @@
<div class="gd-table-toolbar">
<el-button :icon="Plus" color="#4C34FF" type="primary" @click="openForm('add')">数据异议申请</el-button>
-<!-- -->
+ <!-- -->
</div>
<div class="gd-table-container" v-loading="loading">
<div class="gd-table-content gd-table-content-bg">
<el-table class="gd-table" :data="list">
- <el-table-column label="序号" width="60">
- <template v-slot="{ $index }">
- {{ String($index + 1).padStart(2, '0') }}
- </template>
- </el-table-column>
+ <el-table-column label="序号" width="60">
+ <template v-slot="{ $index }">
+ {{ String($index + 1).padStart(2, '0') }}
+ </template>
+ </el-table-column>
<el-table-column prop="title" show-overflow-tooltip label="标题" />
<el-table-column prop="objectionType" show-overflow-tooltip label="异议类别">
<template v-slot="{ row }">
@@ -53,17 +59,17 @@
{{ getDictLabel(row.objectionStatus, dictObj.objectionStatus) }}
</template>
</el-table-column>
- <el-table-column prop="catalogResourceName" show-overflow-tooltip label="目录/申请资源名称" />
+ <el-table-column prop="catalogResourceName" width="170" show-overflow-tooltip label="目录/申请资源名称" />
<el-table-column prop="otherObjectionDetail" show-overflow-tooltip label="其他异议详情" />
<el-table-column prop="submitter" show-overflow-tooltip label="问题提交人" />
- <el-table-column prop="submitterContact" show-overflow-tooltip label="提交人联系方式" />
+ <el-table-column prop="submitterContact" show-overflow-tooltip width="145" label="提交人联系方式" />
<el-table-column prop="submitUnitName" show-overflow-tooltip label="提交单位" />
<el-table-column prop="handleUnit" show-overflow-tooltip label="处理单位" />
<el-table-column prop="objectionDesc" show-overflow-tooltip label="异议描述" />
<el-table-column prop="objectionBasis" show-overflow-tooltip label="异议依据" />
<el-table-column prop="attachName" show-overflow-tooltip label="附件名称" />
<el-table-column prop="reviewOpinion" show-overflow-tooltip label="审核意见" />
- <el-table-column label="操作" class-name="operation-btns" width="140">
+ <el-table-column label="操作" class-name="operation-btns" width="180">
<template v-slot="{ row }">
<el-link @click="openForm('view', row)">查看</el-link>
<el-link @click="openForm('edit', row)" v-if="!['1', '2'].includes(row.objectionStatus)">编辑</el-link>
@@ -174,8 +180,6 @@
ElMessage.success('删除成功')
getList()
}
-
-
// 获取部门树
function getDeptTreeFun() {
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/evaluate/FormDiaLog.vue b/applications/task-work-order/src/views/orderView/orderDataManage/evaluate/FormDiaLog.vue
index 1d35abc..7be9b7c 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/evaluate/FormDiaLog.vue
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/evaluate/FormDiaLog.vue
@@ -45,7 +45,7 @@
:model="formData"
:rules="rules"
:disabled="dialogReadonly"
- label-width="80px"
+ label-width="140px"
>
<el-row>
<el-col :span="12">
@@ -125,12 +125,12 @@
</el-col>
</el-row>
</el-form>
- <template #footer>
+ <template #footer v-if="!dialogReadonly">
<el-button color="#F2F3F5" @click="visible = false">{{ dialogReadonly ? '关闭' : '取消' }}</el-button>
<el-button
class="save-btn"
color="#4C34FF"
- v-if="!dialogReadonly"
+
:loading="submitting"
:disabled="submitting"
@click="handleSubmit"
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/evaluate/index.vue b/applications/task-work-order/src/views/orderView/orderDataManage/evaluate/index.vue
index 2f5aaec..de01bab 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/evaluate/index.vue
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/evaluate/index.vue
@@ -2,12 +2,18 @@
<basic-container>
<el-form ref="queryParamsRef" :model="searchParams" class="gd-search-form">
<el-form-item label="标题" prop="title">
- <el-input class="gd-input" v-model="searchParams.title" placeholder="请输入" clearable @clear="handleSearch" />
+ <el-input
+ class="gd-input gray"
+ v-model="searchParams.title"
+ placeholder="请输入"
+ clearable
+ @clear="handleSearch"
+ />
</el-form-item>
<el-form-item label="是否解决" prop="isResolved">
<el-select
- class="gd-select"
+ class="gd-select gray"
popper-class="gd-select-popper"
v-model="searchParams.isResolved"
placeholder="请选择"
@@ -25,14 +31,17 @@
</el-form>
<div class="gd-table-toolbar">
- <el-button :icon="Plus" color="#4C34FF" type="primary" @click="openForm('add')">新增</el-button>
- <el-button :icon="Delete" color="#4C34FF" :disabled="!selectedIds.length" @click="handleDelete()">删除</el-button>
+ <el-button :icon="Plus" color="#4C34FF" type="primary" @click="openForm('add')">新增评价</el-button>
</div>
<div class="gd-table-container" v-loading="loading">
<div class="gd-table-content gd-table-content-bg">
- <el-table class="gd-table" :data="list" @selection-change="handleSelectionChange">
- <el-table-column type="selection" width="46" />
+ <el-table class="gd-table" :data="list">
+ <el-table-column label="序号" width="80">
+ <template v-slot="{ $index }">
+ {{ ((searchParams.current - 1) * searchParams.size + $index + 1).toString().padStart(2, '0') }}
+ </template>
+ </el-table-column>
<el-table-column prop="title" show-overflow-tooltip label="标题" />
<el-table-column prop="dataName" show-overflow-tooltip label="数据名称" />
<el-table-column prop="proposeDeptName" show-overflow-tooltip label="提出部门" />
@@ -44,7 +53,7 @@
</template>
</el-table-column>
<el-table-column prop="evaluationContent" show-overflow-tooltip label="评价内容" />
- <el-table-column label="操作" class-name="operation-btns">
+ <el-table-column label="操作" class-name="operation-btns" width="180">
<template v-slot="{ row }">
<el-link @click="openForm('view', row)">查看</el-link>
<el-link @click="openForm('edit', row)">编辑</el-link>
@@ -91,7 +100,6 @@
const total = ref(0) // 总条数
const loading = ref(true) // 列表加载中
const list = ref([]) // 列表数据
-const selectedIds = ref([]) // 勾选的ID列表
const queryParamsRef = ref(null) // 查询表单实例
const dialogRef = ref(null) // 弹框实例
const dialogVisible = ref(false)
@@ -143,24 +151,18 @@
// 删除
async function handleDelete(row) {
- const tips = row ? '该条' : '选中的项'
- await ElMessageBox.confirm(`确认删除${tips}吗?`, '提示', {
+ await ElMessageBox.confirm('确认删除该条记录吗?', '提示', {
type: 'warning',
customClass: 'gd-confirm-custom',
confirmButtonClass: 'gd-confirm-button',
cancelButtonClass: 'gd-confirm-cancel-button',
})
- const ids = row ? row.id : selectedIds.value.join(',')
- await gdDataEvaluationRemoveApi({ ids })
+ await gdDataEvaluationRemoveApi({ ids: row.id })
ElMessage.success('删除成功')
- selectedIds.value = []
getList()
}
-// 勾选值设置
-function handleSelectionChange(rows) {
- selectedIds.value = rows.map(item => item.id)
-}
+
// 获取部门树
function getDeptTreeFun() {
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue
index 09f2938..4c96dc6 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue
@@ -107,8 +107,8 @@
</div>
<template #footer>
<template v-if="detailDemandStatus === '1' && !requesterProvider">
- <el-button class="save-btn" color="#4C34FF" @click="rejectTheApplication">拒绝申请</el-button>
- <el-button color="#F2F3F5" @click="approvedByTheReview">审核通过</el-button>
+ <el-button color="#F2F3F5" @click="rejectTheApplication">拒绝申请</el-button>
+ <el-button class="save-btn" color="#4C34FF" @click="approvedByTheReview">审核通过</el-button>
</template>
<template v-if="detailDemandStatus === '2'">
<el-button class="save-btn" color="#4C34FF" @click="downloadAllFiles">全部下载</el-button>
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/FormDiaLog.vue b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/FormDiaLog.vue
index 1f1f85e..2031353 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/FormDiaLog.vue
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/FormDiaLog.vue
@@ -187,15 +187,14 @@
</el-form>
<template #footer v-if="!dialogReadonly">
<el-button
- class="save-btn"
- color="#4C34FF"
+ color="#F2F3F5"
:loading="submitting"
:disabled="submitting"
@click="handleSubmit"
>
保存
</el-button>
- <el-button color="#F2F3F5" :loading="submitting" :disabled="submitting" @click="handleApply">申请</el-button>
+ <el-button class="save-btn" color="#4C34FF" :loading="submitting" :disabled="submitting" @click="handleApply">申请</el-button>
</template>
</el-dialog>
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/index.vue b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/index.vue
index 0d4cb30..cc0df97 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/index.vue
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/index.vue
@@ -3,7 +3,7 @@
<el-form ref="queryParamsRef" :model="searchParams" class="gd-search-form">
<el-form-item label="需求名称" prop="demandName">
<el-input
- class="gd-input"
+ class="gd-input gray"
v-model="searchParams.demandName"
placeholder="请输入"
clearable
@@ -13,7 +13,7 @@
<el-form-item label="需求状态" prop="demandStatus">
<el-select
- class="gd-select"
+ class="gd-select gray"
popper-class="gd-select-popper"
v-model="searchParams.demandStatus"
placeholder="请选择"
@@ -43,10 +43,10 @@
<div class="gd-table-content gd-table-content-bg">
<el-table class="gd-table" :data="list">
<el-table-column label="序号" width="60" align="center">
- <template #default="scope">
- {{ ((searchParams.current - 1) * searchParams.size + scope.$index + 1).toString().padStart(2, '0') }}
- </template>
- </el-table-column>
+ <template #default="scope">
+ {{ ((searchParams.current - 1) * searchParams.size + scope.$index + 1).toString().padStart(2, '0') }}
+ </template>
+ </el-table-column>
<el-table-column prop="demandName" show-overflow-tooltip label="需求名称" />
<el-table-column prop="demandType" show-overflow-tooltip label="需求类型">
<template v-slot="{ row }">
@@ -54,7 +54,7 @@
</template>
</el-table-column>
<el-table-column prop="contactPerson" show-overflow-tooltip label="需求联系人" />
- <el-table-column prop="contactPhone" show-overflow-tooltip width="120" label="需求联系人电话" />
+ <el-table-column prop="contactPhone" show-overflow-tooltip width="150" label="需求联系人电话" />
<el-table-column prop="contactEmail" show-overflow-tooltip label="需求邮箱" />
<el-table-column prop="demandStatus" show-overflow-tooltip label="需求状态">
<template v-slot="{ row }">
@@ -76,13 +76,13 @@
<el-table-column prop="responsibleDeptName" show-overflow-tooltip label="责任部门" />
<el-table-column prop="dataSource" show-overflow-tooltip label="数据来源依据" />
<el-table-column prop="demandInfo" show-overflow-tooltip label="需求信息项" />
- <el-table-column label="操作" class-name="operation-btns" width="130">
+ <el-table-column label="操作" class-name="operation-btns" width="180">
<template v-slot="{ row }">
- <el-link @click="openForm('view', row)">查看</el-link>
- <!-- 只对非审批状态显示编辑和删除按钮 -->
- <el-link @click="openForm('edit', row)" v-if="!['1', '2', '3'].includes(row.demandStatus)">编辑</el-link>
- <el-link @click="handleDelete(row)" v-if="!['1', '2', '3'].includes(row.demandStatus)">删除</el-link>
- </template>
+ <el-link @click="openForm('view', row)">查看</el-link>
+ <!-- 只对非审批状态显示编辑和删除按钮 -->
+ <el-link @click="openForm('edit', row)" v-if="!['1', '2', '3'].includes(row.demandStatus)">编辑</el-link>
+ <el-link @click="handleDelete(row)" v-if="!['1', '2', '3'].includes(row.demandStatus)">删除</el-link>
+ </template>
</el-table-column>
</el-table>
</div>
@@ -175,7 +175,7 @@
// 为每条记录添加部门名称
list.value = records.map(item => ({
...item,
- responsibleDeptName: item.responsibleDeptName || getDeptNameById(item.responsibleDeptId, deptTree.value)
+ responsibleDeptName: item.responsibleDeptName || getDeptNameById(item.responsibleDeptId, deptTree.value),
}))
total.value = res?.data?.data?.total ?? 0
} finally {
@@ -234,8 +234,6 @@
ElMessage.success('删除成功')
getList()
}
-
-
// 获取字典
function getDictList() {
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/reasonForRejectionDialog.vue b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/reasonForRejectionDialog.vue
index 6c0742f..7b0e0b2 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/reasonForRejectionDialog.vue
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/reasonForRejectionDialog.vue
@@ -12,7 +12,7 @@
<div class="detail-container">
<div class="detail-cell">
<span class="cell-label">拒绝原因:</span>
- <el-input v-model="reasonForRejection" style="width: 380px" type="textarea" placeholder="请输入" />
+ <el-input v-model="reasonForRejection" style="width: 380px" type="textarea" :rows="4" placeholder="请输入" />
</div>
</div>
<template #footer>
@@ -53,7 +53,6 @@
}
)
-
// 确认按钮点击事件
const handleConfirm = () => {
if (!reasonForRejection.value.trim()) {
@@ -78,9 +77,9 @@
min-width: 80px;
flex-shrink: 0;
}
- :deep(.el-textarea__inner) {
- height: 100px !important;
- }
+ :deep(.el-textarea__inner) {
+ height: 100px !important;
+ }
}
}
</style>
diff --git a/applications/task-work-order/src/views/orderView/orderManage/clueEvents/index.vue b/applications/task-work-order/src/views/orderView/orderManage/clueEvents/index.vue
index 3d4e94a..8402090 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/clueEvents/index.vue
+++ b/applications/task-work-order/src/views/orderView/orderManage/clueEvents/index.vue
@@ -4,7 +4,7 @@
<el-form ref="queryParamsRef" :model="searchParams" class="gd-search-form">
<el-form-item label="模糊搜索" prop="patrolTaskName">
<el-input
- class="gd-input"
+ class="gd-input gray"
v-model="searchParams.patrolTaskName"
placeholder="请输入"
clearable
@@ -14,7 +14,7 @@
<el-form-item label="巡查任务类型" prop="patrolTaskType">
<el-select
- class="gd-select"
+ class="gd-select gray"
popper-class="gd-select-popper"
v-model="searchParams.patrolTaskType"
placeholder="请选择"
@@ -50,7 +50,7 @@
<el-form-item label="执行时间" prop="executeTime">
<el-date-picker
- class="gd-date-picker"
+ class="gd-date-picker gray"
popper-class="gd-date-picker-popper"
v-model="dateRange"
type="daterange"
diff --git a/applications/task-work-order/src/views/orderView/orderManage/inspectionReport/index.vue b/applications/task-work-order/src/views/orderView/orderManage/inspectionReport/index.vue
index 49d5005..3e3cfb9 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/inspectionReport/index.vue
+++ b/applications/task-work-order/src/views/orderView/orderManage/inspectionReport/index.vue
@@ -1,10 +1,10 @@
<!-- 巡查报告管理 -->
<template>
- <basic-container>
- <el-form ref="queryParamsRef" :model="searchParams" class="gd-search-form">
+ <basic-container>
+ <el-form ref="queryParamsRef" :model="searchParams" class="gd-search-form">
<el-form-item label="模糊搜索" prop="nickName">
<el-input
- class="gd-input"
+ class="gd-input gray"
v-model="searchParams.nickName"
placeholder="请输入"
clearable
@@ -14,7 +14,7 @@
<el-form-item label="文档类型" prop="resultType">
<el-select
- class="gd-select"
+ class="gd-select gray"
popper-class="gd-select-popper"
v-model="searchParams.resultType"
placeholder="请选择"
@@ -37,11 +37,11 @@
</el-form>
<div class="gd-table-toolbar">
- <el-button :icon="Download" color="#4C34FF" type="primary" @click="handleDownload">文档下载</el-button>
+ <el-button :icon="Download" color="#4C34FF" type="primary" @click="handleDownload">文档下载</el-button>
<el-button :icon="Upload" color="#4C34FF" type="primary" @click="handleUpload">文档上传</el-button>
</div>
- <div class="gd-table-container" v-loading="loading">
+ <div class="gd-table-container" v-loading="loading">
<div class="gd-table-content gd-table-content-bg">
<el-table class="gd-table" :data="list" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="46" />
@@ -50,7 +50,7 @@
<el-table-column prop="attachSize" show-overflow-tooltip label="文档大小" />
<el-table-column prop="deptName" show-overflow-tooltip label="文档归属" />
<!-- <el-table-column prop="resultType" show-overflow-tooltip label="文档类型" /> -->
- <el-table-column prop="resultType" show-overflow-tooltip label="文档类型">
+ <el-table-column prop="resultType" show-overflow-tooltip label="文档类型">
<template v-slot="{ row }">
{{ getDictLabel(row.resultType, dictObj.patrolTaskType) }}
</template>
@@ -76,71 +76,80 @@
/>
</div>
</div>
- <el-dialog class="gd-dialog" append-to-body v-model="isShowEditView" :title="titleTxt"
- :width="pxToRem(800)" :close-on-click-modal="false" :destroy-on-close="true" @close="handleClose">
- <el-form class="gd-dialog-form" ref="ruleFormRef" :model="editParams" :rules="rules" label-width="140px">
- <el-form-item label="文档名称" prop="nickName">
- <el-input v-model="editParams.nickName" />
- </el-form-item>
- <el-form-item label="文档类型" prop="resultType" v-if="titleTxt === '上传巡查报告'">
- <el-select
- class="gd-select"
- popper-class="gd-select-popper"
- v-model="editParams.resultType"
- placeholder="请选择"
- clearable
+ <el-dialog
+ class="gd-dialog"
+ append-to-body
+ v-model="isShowEditView"
+ :title="titleTxt"
+ :width="pxToRem(800)"
+ :close-on-click-modal="false"
+ :destroy-on-close="true"
+ @close="handleClose"
+ >
+ <el-form class="gd-dialog-form" ref="ruleFormRef" :model="editParams" :rules="rules" label-width="140px">
+ <el-form-item label="文档名称" prop="nickName">
+ <el-input v-model="editParams.nickName" class="gd-input" placeholder="请输入" />
+ </el-form-item>
+ <el-form-item label="文档类型" prop="resultType" v-if="titleTxt === '上传巡查报告'">
+ <el-select
+ class="gd-select"
+ popper-class="gd-select-popper"
+ v-model="editParams.resultType"
+ placeholder="请选择"
+ clearable
+ >
+ <el-option
+ v-for="item in dictObj.patrolTaskType"
+ :key="item.dictKey"
+ :label="item.dictValue"
+ :value="item.dictKey"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="上传文件" prop="link" v-if="titleTxt === '上传巡查报告'">
+ {{ uploadName }}
+ <el-upload class="avatar-uploader" action="" :show-file-list="false" :before-upload="onUploadFileBefore">
+ <el-button size="small" type="primary">点击上传</el-button>
+ </el-upload>
+ </el-form-item>
+ </el-form>
+ <!-- </div> -->
+ <template #footer>
+ <el-button color="#F2F3F5" @click="isShowEditView = false">取消</el-button>
+ <el-button
+ class="save-btn"
+ color="#4C34FF"
+ :loading="submitting"
+ :disabled="submitting"
+ @click="submit(ruleFormRef)"
>
- <el-option
- v-for="item in dictObj.patrolTaskType"
- :key="item.dictKey"
- :label="item.dictValue"
- :value="item.dictKey"
- />
- </el-select>
- </el-form-item>
- <el-form-item label="上传文件" prop="link" v-if="titleTxt === '上传巡查报告'">
- {{ uploadName }}
- <el-upload
- class="avatar-uploader"
- action=""
- :show-file-list="false"
- :before-upload="onUploadFileBefore"
- >
- <el-button size="small" type="primary">点击上传</el-button>
- </el-upload>
- </el-form-item>
- </el-form>
- <!-- </div> -->
- <template #footer>
- <el-button color="#F2F3F5" @click="isShowEditView = false">取消</el-button>
- <el-button class="save-btn" color="#4C34FF" :loading="submitting" :disabled="submitting" @click="submit(ruleFormRef)">
- 保存
- </el-button>
- </template>
- </el-dialog>
- <PreviewFiles v-model="previewVisible" :src="searchUrl" type="docx"/>
- <!-- <el-image v-if="previewVisibleImg" :src="searchUrl" fit="contain" style="height: 100%;width: 100%" /> -->
- <el-image-viewer
- v-if="previewVisibleImg"
- :url-list="[searchUrl]"
- @close="previewVisibleImg = false"
- ></el-image-viewer>
- </basic-container>
+ 保存
+ </el-button>
+ </template>
+ </el-dialog>
+ <PreviewFiles v-model="previewVisible" :src="searchUrl" type="docx" />
+ <!-- <el-image v-if="previewVisibleImg" :src="searchUrl" fit="contain" style="height: 100%;width: 100%" /> -->
+ <el-image-viewer
+ v-if="previewVisibleImg"
+ :url-list="[searchUrl]"
+ @close="previewVisibleImg = false"
+ ></el-image-viewer>
+ </basic-container>
</template>
<script setup>
- import { Search, RefreshRight, Download, Upload, Delete } from '@element-plus/icons-vue'
- import { fjPageApi, fjSubmitApi, fjRemoveApi, fjDetailApi, fjUploadApi } from './inspectionRequestApi'
- import { useStore } from 'vuex'
- import { ref, computed, inject, onMounted } from 'vue'
- import { ElMessage, ElMessageBox } from 'element-plus'
- import { getDictLabel } from '@ztzf/utils'
- import PreviewFiles from '@/components/PreviewFiles/PreviewFiles.vue'
- import { getDictionaryByCode } from '@/api/system/dictbiz'
+import { Search, RefreshRight, Download, Upload, Delete } from '@element-plus/icons-vue'
+import { fjPageApi, fjSubmitApi, fjRemoveApi, fjDetailApi, fjUploadApi } from './inspectionRequestApi'
+import { useStore } from 'vuex'
+import { ref, computed, inject, onMounted } from 'vue'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { getDictLabel } from '@ztzf/utils'
+import PreviewFiles from '@/components/PreviewFiles/PreviewFiles.vue'
+import { getDictionaryByCode } from '@/api/system/dictbiz'
- const store = useStore()
- const userInfo = computed(() => store.getters.userInfo);
+const store = useStore()
+const userInfo = computed(() => store.getters.userInfo)
- // 初始化查询参数
+// 初始化查询参数
const initSearchParams = () => ({
nickName: '',
resultType: '',
@@ -171,17 +180,17 @@
const isShowEditView = ref(false)
const titleTxt = ref('上传巡查报告')
const editParams = ref({
- id:'',
- nickName: '',
- resultType: '',
- link: '',
+ id: '',
+ nickName: '',
+ resultType: '',
+ link: '',
})
const ruleFormRef = ref()
const submitting = ref(false)
const rules = ref({
- nickName: [{ required: true, message: '请输入文档名称', trigger: ['blur'] }],
- resultType: [{ required: true, message: '请选择文档类型', trigger: ['change'] }],
- link: [{ required: true, message: '请上传文件', trigger: ['change'] }],
+ nickName: [{ required: true, message: '请输入文档名称', trigger: ['blur'] }],
+ resultType: [{ required: true, message: '请选择文档类型', trigger: ['change'] }],
+ link: [{ required: true, message: '请上传文件', trigger: ['change'] }],
})
// 获取字典
@@ -191,7 +200,7 @@
})
}
- // 获取列表
+// 获取列表
async function getList() {
loading.value = true
try {
@@ -219,7 +228,7 @@
// 新增/编辑/查看 弹框
function openForm(row) {
isShowEditView.value = true
- titleTxt.value = '编辑'
+ titleTxt.value = '编辑'
editParams.value.id = row.id
editParams.value.nickName = row.nickName
editParams.value.resultType = row.resultType
@@ -233,7 +242,12 @@
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 (
+ !row.link.includes('docx') &&
+ !row.link.includes('pdf') &&
+ !row.link.includes('png') &&
+ !row.link.includes('jpg')
+ ) {
ElMessage.warning(`${fileType}文件格式,可以下载再查看`)
return
} else if (row.link.includes('png') || row.link.includes('jpg')) {
@@ -266,7 +280,7 @@
// 勾选值设置
function handleSelectionChange(rows) {
selectedFiles.value = rows
- selectedIds.value = rows.map((item) => item.id)
+ selectedIds.value = rows.map(item => item.id)
}
// 文档下载
@@ -289,69 +303,66 @@
}
}, index * 300) // 300ms delay between downloads
})
-
}
// 文档上传
async function handleUpload() {
isShowEditView.value = true
- titleTxt.value = '上传巡查报告'
+ titleTxt.value = '上传巡查报告'
}
// 上传文件前处理
function onUploadFileBefore(file) {
- // 执行文件上传
- let data = new FormData();
- data.append('file', file);
-
- fjUploadApi(data).then(res => {
- if (res.data.code === 200) {
- ElMessage.success('上传成功')
- // 保存文件URL到表单
- uploadName.value = res.data.data.originalName
- editParams.value.link = res.data.data.link
- } else {
- ElMessage.error(res.msg || '上传失败')
- }
- })
-
- return false // 阻止组件的默认上传行为
+ // 执行文件上传
+ let data = new FormData()
+ data.append('file', file)
+
+ fjUploadApi(data).then(res => {
+ if (res.data.code === 200) {
+ ElMessage.success('上传成功')
+ // 保存文件URL到表单
+ uploadName.value = res.data.data.originalName
+ editParams.value.link = res.data.data.link
+ } else {
+ ElMessage.error(res.msg || '上传失败')
+ }
+ })
+
+ return false // 阻止组件的默认上传行为
}
// 保存上传文件数据
async function submit(formValidate) {
- if (!formValidate) return
- await formValidate.validate(async (valid, fields) => {
- if (valid) {
- submitting.value = true
- try {
- await fjSubmitApi({ ...editParams.value })
- ElMessage.success('保存成功')
- isShowEditView.value = false
- getList()
- } finally {
- submitting.value = false
- }
- }
- })
+ if (!formValidate) return
+ await formValidate.validate(async (valid, fields) => {
+ if (valid) {
+ submitting.value = true
+ try {
+ await fjSubmitApi({ ...editParams.value })
+ ElMessage.success('保存成功')
+ isShowEditView.value = false
+ getList()
+ } finally {
+ submitting.value = false
+ }
+ }
+ })
}
function handleClose() {
- // 清除表单内容
- uploadName.value = ''
- editParams.value = {
- id: '',
- nickName: '',
- resultType: '',
- uploadFile: '',
- }
+ // 清除表单内容
+ uploadName.value = ''
+ editParams.value = {
+ id: '',
+ nickName: '',
+ resultType: '',
+ uploadFile: '',
+ }
}
onMounted(() => {
getDictList()
getList()
})
-
</script>
-<style scoped lang="scss">
-</style>
+<style scoped lang="scss"></style>
diff --git a/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue b/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue
index 0e38936..f9d1d67 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue
+++ b/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue
@@ -4,7 +4,6 @@
v-model="visible"
:title="titleEnum[dialogMode]"
@closed="visible = false"
- :style="{ width: pxToRem(1216) }"
destroy-on-close
:close-on-click-modal="false"
>
@@ -12,6 +11,7 @@
<div class="leftBox">
<!-- 查看模式 -->
<div class="detail-container" v-if="dialogReadonly">
+ <div class="detail-title">工单详情</div>
<el-row class="detail-row-view">
<el-col :span="12">
<div class="label">巡查任务名称</div>
@@ -47,15 +47,14 @@
</el-col>
</el-row>
<template v-if="['6', '7', '8'].includes(taskStatus)">
- <div>任务成功({{ list.length || 0 }}条)</div>
- <div style="display: flex">
+ <div class="detail-title" :style="{ marginTop: pxToRem(10) }">任务成功({{ list.length || 0 }}条)</div>
+ <div class="imgBox">
<div v-for="item in list">
<el-image
v-if="item.resultUrl"
:src="item.resultUrl"
:preview-src-list="[item.resultUrl]"
fit="cover"
- style="width: 80px; height: 60px"
preview-teleported
/>
</div>
@@ -149,7 +148,14 @@
</el-col>
<el-col :span="24">
<el-form-item label="巡查任务描述" prop="taskDesc">
- <el-input class="gd-input" type="textarea" v-model="formData.taskDesc" placeholder="请输入" clearable />
+ <el-input
+ class="gd-input"
+ type="textarea"
+ :rows="4"
+ v-model="formData.taskDesc"
+ placeholder="请输入"
+ clearable
+ />
</el-form-item>
</el-col>
</el-row>
@@ -158,13 +164,14 @@
<!-- 地图组件 -->
<CommonCesiumMap
ref="mapRef"
- class="leftMap gd-cesium"
+ class="gd-cesium"
:active="visible"
:flat-mode="false"
:terrain="true"
:layer-mode="4"
:boundary="false"
:zoomToBoundary="false"
+ @ready="() => mapRef.flyBoundary()"
/>
</div>
</div>
@@ -414,12 +421,27 @@
display: flex;
gap: 0 20px;
.leftBox {
- width: 0;
- flex: 1;
+ width: 920px;
.gd-cesium {
+ padding-top: 10px;
width: 100%;
height: 423px;
}
}
+
+ .imgBox {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px;
+ > div {
+ width: calc((100% - 40px) / 5); /* 5列布局,减去4个10px间隙 */
+ height: 110px;
+ flex-shrink: 0;
+ }
+ .el-image {
+ width: 100%;
+ height: 100%;
+ }
+ }
}
</style>
diff --git a/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/index.vue b/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/index.vue
index b3eaa32..6d64be5 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/index.vue
+++ b/applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/index.vue
@@ -2,12 +2,12 @@
<basic-container>
<el-tabs class="gd-tabs" v-model="activeName" @tab-click="tabsClick">
<el-tab-pane label="全部 " name="all"></el-tab-pane>
- <el-tab-pane label="我的任务工单" name="my"></el-tab-pane>
+ <el-tab-pane label="我的巡查任务" name="my"></el-tab-pane>
</el-tabs>
<el-form ref="queryParamsRef" :model="searchParams" class="gd-search-form">
<el-form-item label="任务名称" prop="patrolTaskName">
<el-input
- class="gd-input"
+ class="gd-input gray"
v-model="searchParams.patrolTaskName"
placeholder="请输入"
clearable
@@ -17,7 +17,7 @@
<el-form-item label="任务类型" prop="patrolTaskType">
<el-select
- class="gd-select"
+ class="gd-select gray"
popper-class="gd-select-popper"
v-model="searchParams.patrolTaskType"
placeholder="请选择"
@@ -35,7 +35,7 @@
<el-form-item label="任务状态" prop="taskStatus">
<el-select
- class="gd-select"
+ class="gd-select gray"
popper-class="gd-select-popper"
v-model="searchParams.taskStatus"
placeholder="请选择"
@@ -53,7 +53,7 @@
<el-form-item label="执行时间" prop="executeTime">
<el-date-picker
- class="gd-date-picker"
+ class="gd-date-picker gray"
popper-class="gd-date-picker-popper"
v-model="dateRange"
type="daterange"
@@ -118,7 +118,13 @@
</div>
<FormDiaLog ref="dialogRef" @success="getList" v-if="dialogVisible" v-model="dialogVisible" />
- <ViewDiaLog ref="viewDiaLogRef" @success="getList" @refusalAccept="refusalAccept" v-if="viewDiaLogVisible" v-model="viewDiaLogVisible" />
+ <ViewDiaLog
+ ref="viewDiaLogRef"
+ @success="getList"
+ @refusalAccept="refusalAccept"
+ v-if="viewDiaLogVisible"
+ v-model="viewDiaLogVisible"
+ />
</basic-container>
</template>
<script setup>
@@ -236,7 +242,7 @@
function refusalAccept(row) {
dialogVisible.value = true
nextTick(() => {
- dialogRef.value?.open({ mode:'edit', row })
+ dialogRef.value?.open({ mode: 'edit', row })
})
}
diff --git a/applications/task-work-order/src/views/orderView/orderManage/operatingIncome/index.vue b/applications/task-work-order/src/views/orderView/orderManage/operatingIncome/index.vue
index a616d31..52abda1 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/operatingIncome/index.vue
+++ b/applications/task-work-order/src/views/orderView/orderManage/operatingIncome/index.vue
@@ -41,19 +41,19 @@
:width="pxToRem(800)" :close-on-click-modal="false" :destroy-on-close="true" @close="handleClose">
<el-form class="gd-dialog-form" ref="ruleFormRef" :model="editParams" :rules="rules" label-width="140px">
<el-form-item label="营业收入" prop="operatingIncome">
- <el-input v-model="editParams.operatingIncome" />
+ <el-input class="gd-input" v-model="editParams.operatingIncome" />
</el-form-item>
<el-form-item label="综合总成本费用" prop="totalCost">
- <el-input v-model="editParams.totalCost" />
+ <el-input class="gd-input" v-model="editParams.totalCost" />
</el-form-item>
<el-form-item label="净利润" prop="netProfit">
- <el-input v-model="editParams.netProfit" />
+ <el-input class="gd-input" v-model="editParams.netProfit" />
</el-form-item>
<el-form-item label="财务内部收益率" prop="financialIrr">
- <el-input v-model="editParams.financialIrr" />
+ <el-input class="gd-input" v-model="editParams.financialIrr" />
</el-form-item>
<el-form-item label="市场空间" prop="marketSpace">
- <el-input v-model="editParams.marketSpace" />
+ <el-input class="gd-input" v-model="editParams.marketSpace" />
</el-form-item>
</el-form>
<!-- </div> -->
diff --git a/applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue b/applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue
index 31d3a20..83b7efb 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue
+++ b/applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue
@@ -10,7 +10,7 @@
>
<div class="content" style="display: flex">
<div class="processBox" v-if="dialogMode !== 'add' && processList.length">
- <el-timeline>
+ <el-timeline class="gd-timeline">
<el-timeline-item
v-for="(activity, index) in processList"
:key="index"
@@ -149,7 +149,14 @@
</el-col>
<el-col :span="24">
<el-form-item label="工单备注" prop="remark">
- <el-input class="gd-input" type="textarea" v-model="formData.remark" placeholder="请输入" clearable />
+ <el-input
+ class="gd-input"
+ type="textarea"
+ :rows="4"
+ v-model="formData.remark"
+ placeholder="请输入"
+ clearable
+ />
</el-form-item>
</el-col>
</el-row>
@@ -182,7 +189,7 @@
<el-table-column prop="devicePayload" label="设备负载" />
</el-table>
</template>
- <div v-else>请先选择设备需求并在地图上绘制工单范围</div>
+ <div v-else class="tipSelect">请先选择设备需求并在地图上绘制工单范围</div>
</div>
</div>
@@ -603,22 +610,21 @@
.processBox {
width: 312px;
- .el-timeline {
- padding-left: 100px;
- }
.item-content {
position: relative;
.flowName {
+ width: 80px;
position: absolute;
- left: -100px;
- top: 0;
+ left: -120px;
+ top: 0px;
}
}
}
}
-.setHeight {
- //max-height: 300px;
- //min-height: 200px;
+.tipSelect {
+ text-align: center;
+ height: 200px;
+ line-height: 200px;
}
</style>
diff --git a/applications/task-work-order/src/views/orderView/orderManage/orderManage/index.vue b/applications/task-work-order/src/views/orderView/orderManage/orderManage/index.vue
index df3b2c3..b7df2ad 100644
--- a/applications/task-work-order/src/views/orderView/orderManage/orderManage/index.vue
+++ b/applications/task-work-order/src/views/orderView/orderManage/orderManage/index.vue
@@ -7,7 +7,7 @@
<el-form ref="queryParamsRef" :model="searchParams" class="gd-search-form">
<el-form-item label="工单名称" prop="workOrderName">
<el-input
- class="gd-input"
+ class="gd-input gray"
v-model="searchParams.workOrderName"
placeholder="请输入"
clearable
@@ -17,7 +17,7 @@
<el-form-item label="工单类型" prop="workOrderType">
<el-select
- class="gd-select"
+ class="gd-select gray"
popper-class="gd-select-popper"
v-model="searchParams.workOrderType"
placeholder="请选择"
@@ -35,7 +35,7 @@
<el-form-item label="工单状态" prop="workOrderStatus">
<el-select
- class="gd-select"
+ class="gd-select gray"
popper-class="gd-select-popper"
v-model="searchParams.workOrderStatus"
placeholder="请选择"
@@ -53,7 +53,7 @@
<el-form-item label="执行时间" prop="executeTime">
<el-date-picker
- class="gd-date-picker"
+ class="gd-date-picker gray"
popper-class="gd-date-picker-popper"
v-model="dateRange"
type="daterange"
diff --git a/applications/task-work-order/src/views/work/process/leave/detail.vue b/applications/task-work-order/src/views/work/process/leave/detail.vue
index e7ccdd5..9deeca5 100644
--- a/applications/task-work-order/src/views/work/process/leave/detail.vue
+++ b/applications/task-work-order/src/views/work/process/leave/detail.vue
@@ -28,7 +28,7 @@
</el-col>
</el-row>
<el-form-item label="请假理由">
- <el-input :disabled="true" type="textarea" v-model="form.reason" />
+ <el-input :disabled="true" type="textarea" :rows="4" v-model="form.reason" />
</el-form-item>
</el-card>
<el-card shadow="hover">
diff --git a/applications/task-work-order/src/views/work/process/leave/handle.vue b/applications/task-work-order/src/views/work/process/leave/handle.vue
index 9ec237b..282a218 100644
--- a/applications/task-work-order/src/views/work/process/leave/handle.vue
+++ b/applications/task-work-order/src/views/work/process/leave/handle.vue
@@ -30,10 +30,10 @@
</el-col>
</el-row>
<el-form-item label="请假理由">
- <el-input :disabled="true" type="textarea" v-model="form.reason" />
+ <el-input :disabled="true" type="textarea" :rows="4" v-model="form.reason" />
</el-form-item>
<el-form-item label="批复意见">
- <el-input type="textarea" v-model="form.comment" />
+ <el-input type="textarea" :rows="4" v-model="form.comment" />
</el-form-item>
</el-card>
<el-card shadow="hover">
diff --git a/uniapps/work-app/src/api/work/index.js b/uniapps/work-app/src/api/work/index.js
index 882de2f..f937e11 100644
--- a/uniapps/work-app/src/api/work/index.js
+++ b/uniapps/work-app/src/api/work/index.js
@@ -1,62 +1,58 @@
-import {request} from "@/utils/index.js";
-export const getList = (data) => {
+import { request } from "@/utils/requestGd/index.js"
+import website from '@/config/website'
+
+
+// 工单用户登录接口
+export const ticketLoginInterfaceApi = (tenantId, deptId, roleId, username, password, type, key, code) => {
return request({
- url: '/drone-device-core/jobEvent/eventPage',
+ url: '/blade-auth/oauth/token',
method: 'post',
- data,
+ header: {
+ 'Tenant-Id': tenantId,
+ 'Dept-Id': website.switchMode ? deptId : '',
+ 'Role-Id': website.switchMode ? roleId : '',
+ 'Captcha-Key': key,
+ 'Captcha-Code': code,
+ },
+ params: {
+ tenantId,
+ username,
+ password,
+ grant_type: 'password',
+ scope: 'all',
+ type,
+ },
})
}
-// 获取状态统计数据
+// 获取工单列表
+export const getGdList = data => {
+ return request({
+ url: '/drone-gd/workOrder/gdClueEvent/list',
+ method: 'get',
+ data,
+ });
+};
+// 获取详情
+export const getGddetailedData = data => {
+ return request({
+ url: '/drone-gd/workOrder/gdClueEvent/detail',
+ method: 'get',
+ data,
+ });
+};
+// 获取数量
export const getstatusCount = (params) => {
return request({
- url: '/drone-device-core/jobEvent/getstatusCount',
+ url: '/drone-gd/workOrder/gdClueEvent/count',
method: 'get',
params,
})
}
-
-export const getStepInfo = (eventNum) => {
+// 退回工单
+export const backGdApi = (data) => {
return request({
- url: '/drone-device-core/jobEvent/getStepInfo',
- method: 'get',
- params: { eventNum }
- })
-}
-
-// 修改接口:处理待审核状态,动态构建 FormData 提交
-export const flowEvent = (data, file) => {
- const formData = new FormData()
-
- // 动态添加非空字段到 FormData
- Object.entries(data).forEach(([key, value]) => {
- if (value !== undefined && value !== null) {
- formData.append(key, value)
- }
- })
-
- // 如果 file 存在,则添加到 FormData
- if (file) {
- formData.append('file', file)
- }
- for (let [key, value] of formData.entries()) {
- console.log(key, value)
- }
-console.log('formData',formData)
- return request({
- url: '/drone-device-core/jobEvent/flowEvent',
+ url: '/drone-gd/workOrder/gdClueEvent/handle',
method: 'post',
- data: formData,
- headers: {
- 'Content-Type': 'multipart/form-data', // 设置为表单数据格式
- },
- })
-}
-
-// 新增接口:获取工单详细信息
-export const getTicketInfo = (id) => {
- return request({
- url: '/drone-device-core/jobEvent/getTicketInfo',
- method: 'get',
- params: { id }, // 使用工单 ID 查询
+ data,
})
}
diff --git a/uniapps/work-app/src/api/work/index1.js b/uniapps/work-app/src/api/work/index1.js
deleted file mode 100644
index cc4e278..0000000
--- a/uniapps/work-app/src/api/work/index1.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import { request } from "@/utils/requestGd/index.js"
-import website from '@/config/website'
-
-
-// 工单用户登录接口
-export const ticketLoginInterfaceApi = (tenantId, deptId, roleId, username, password, type, key, code) => {
- return request({
- url: '/blade-auth/oauth/token',
- method: 'post',
- header: {
- 'Tenant-Id': tenantId,
- 'Dept-Id': website.switchMode ? deptId : '',
- 'Role-Id': website.switchMode ? roleId : '',
- 'Captcha-Key': key,
- 'Captcha-Code': code,
- },
- params: {
- tenantId,
- username,
- password,
- grant_type: 'password',
- scope: 'all',
- type,
- },
- })
-}
-// 获取工单列表
-export const getGdList = data => {
- return request({
- url: '/drone-gd/workOrder/gdClueEvent/list',
- method: 'get',
- data,
- });
-};
-// 获取详情
-export const getGddetailedData = data => {
- return request({
- url: '/drone-gd/workOrder/gdClueEvent/detail',
- method: 'get',
- data,
- });
-};
-// 获取数量
-export const getstatusCount = (params) => {
- return request({
- url: '/drone-gd/workOrder/gdClueEvent/count',
- method: 'get',
- params,
- })
-}
-// 退回工单
-export const backGdApi = (data) => {
- return request({
- url: '/drone-gd/workOrder/gdClueEvent/handle',
- method: 'post',
- data,
- })
-}
diff --git a/uniapps/work-app/src/pages/login/index.vue b/uniapps/work-app/src/pages/login/index.vue
index 94a7f89..9e37a79 100644
--- a/uniapps/work-app/src/pages/login/index.vue
+++ b/uniapps/work-app/src/pages/login/index.vue
@@ -36,7 +36,7 @@
<script setup>
import { getAssetsImage } from "@/utils/index.js";
-import {ticketLoginInterfaceApi} from '@/api/work/index1.js'
+import {ticketLoginInterfaceApi} from '@/api/work/index.js'
import md5 from "js-md5";
import { loginByUsername } from "@/api/user/index.js";
import { useUserStore, useLocationStore } from "@/store/index.js";
diff --git a/uniapps/work-app/src/pages/user/index.vue b/uniapps/work-app/src/pages/user/index.vue
index 9aba9ae..b7bf07c 100644
--- a/uniapps/work-app/src/pages/user/index.vue
+++ b/uniapps/work-app/src/pages/user/index.vue
@@ -3,7 +3,7 @@
<view class="page-wrap">
<view class="pageUser">
<view class="userBox">
- <view class="flex items-center pb-30rpx pl-30rpx pr-20rpx">
+ <view class="flex items-center pb-30rpx pl-30rpx pr-20rpx userStyle">
<view class="mr-20rpx">
<u-avatar :src="user.avatar || defaultAvatar" size="70" />
</view>
@@ -94,6 +94,9 @@
});
</script>
<style scoped lang="scss">
+.userStyle {
+ padding-top: 192rpx;
+ }
.page-wrap {
width: 100%;
height: 100%;
@@ -103,7 +106,7 @@
background-size: 100% ;
}
.userBox {
- padding-top: 212rpx;
+ //padding-top: 212rpx;
}
.userName {
font-weight: 700;
@@ -181,6 +184,7 @@
display: flex;
justify-content: space-between;
padding: 0 24rpx;
+ margin-top: 24rpx;
.message,
.passwordBox {
diff --git a/uniapps/work-app/src/pages/work/index.vue b/uniapps/work-app/src/pages/work/index.vue
index 005eafe..7295f81 100644
--- a/uniapps/work-app/src/pages/work/index.vue
+++ b/uniapps/work-app/src/pages/work/index.vue
@@ -2,7 +2,7 @@
<div class="eventTickets" :style="{ paddingTop: topMargin + 'px' }">
<div class="searchTop">
- <up-search placeholder="请输入关键字搜索" :animation="true" v-model="listParams.keyword" :show-action="false"></up-search>
+ <up-search placeholder="请输入关键字搜索" :animation="true" v-model="listParams.keyword" :show-action="false" @search="handleSearch"></up-search>
</div>
<div class="listBox">
<div class="tabs-container">
@@ -35,7 +35,7 @@
<script setup>
import { useUserStore } from '@/store/index.js'
-import {getGdList,getstatusCount} from '/src/api/work/index1.js'
+import {getGdList,getstatusCount} from '/src/api/work/index.js'
import dayjs from 'dayjs';
import { getStatusBarHeight } from '@/utils/common';
const userStore = useUserStore()
@@ -49,15 +49,17 @@
name: '全部工单',
key: 'all',
badge: {
- value: 0
+ value: 0,
+ showZero: true
},
- status: null
+
},
{
name: '我的工单',
key: 'myTickets',
badge: {
- value: 0
+ value: 0,
+ showZero: true
}
}
@@ -67,7 +69,7 @@
return dayjs(dateString).format('MM/DD HH:mm');
};
const listParams = ref({
- status: null,
+
current: 1,
size: 12,
source: 1,
@@ -82,7 +84,7 @@
const params = {
current: listParams.value.current,
size: listParams.value.size,
- // event_name:listParams.value.keyword,
+ keyword:listParams.value.keyword,
onlyMine:currentTab.value=== 'myTickets' ? 1 : 0
}
getGdList(params).then(res => {
@@ -105,22 +107,22 @@
loading.value = false
})
}
-
-
-
const getstatusCountData=()=>{
- getstatusCount().then(res=>{
+ const params={
+ keyword:listParams.value.keyword,
+ }
+ getstatusCount(params).then(res=>{
const response = res.data.data
const { totalCount,myCount } = response
tabList.value.forEach(tab=>{
if(tab.key === 'all'){
tab.badge.value = totalCount || 0
+ tab.badge.showZero = true
}else if(tab.key === 'myTickets'){
tab.badge.value = myCount || 0
- }else{
- tab.badge.value=statusCount[String(tab.status)] || 0
+ tab.badge.showZero = true
}
})
@@ -129,7 +131,7 @@
const handleClick = (item) => {
currentTab.value = item.key
- listParams.value.status = item.status
+
listParams.value.current = 1
hasMore.value = true
dataList.value = []
@@ -146,6 +148,15 @@
url: `/subPackages/workDetail/index?id=${val.id}`,
})
}
+
+// 搜索功能
+const handleSearch = () => {
+ listParams.value.current = 1
+ hasMore.value = true
+ dataList.value = []
+ getDataList()
+ getstatusCountData()
+}
const topMargin = getStatusBarHeight()
onShow(() => {
listParams.value.current = 1
diff --git a/uniapps/work-app/src/static/images/work/share.png b/uniapps/work-app/src/static/images/work/share.png
new file mode 100644
index 0000000..60585c7
--- /dev/null
+++ b/uniapps/work-app/src/static/images/work/share.png
Binary files differ
diff --git a/uniapps/work-app/src/subPackages/userDetail/password/index.vue b/uniapps/work-app/src/subPackages/userDetail/password/index.vue
index 05d0da0..70b4f69 100644
--- a/uniapps/work-app/src/subPackages/userDetail/password/index.vue
+++ b/uniapps/work-app/src/subPackages/userDetail/password/index.vue
@@ -293,7 +293,7 @@
.detailBox {
position: absolute;
- top: 180rpx;
+ // top: 180rpx;
// margin-top: 40rpx;
width: 702rpx;
diff --git a/uniapps/work-app/src/subPackages/workDetail/index.vue b/uniapps/work-app/src/subPackages/workDetail/index.vue
index 035f5c9..bd634d2 100644
--- a/uniapps/work-app/src/subPackages/workDetail/index.vue
+++ b/uniapps/work-app/src/subPackages/workDetail/index.vue
@@ -100,7 +100,7 @@
<script setup>
// import { getShowImg, getSmallImg } from '@/utils/util'
import { ref, computed } from 'vue'
-import {getGddetailedData,backGdApi} from '/src/api/work/index1.js'
+import {getGddetailedData,backGdApi} from '/src/api/work/index.js'
import dayjs from 'dayjs'
const formatDate = dateString => {
return dayjs(dateString).format('MM/DD HH:mm')
@@ -294,7 +294,13 @@
.workDetailContainer {
// 添加导航栏高度的padding-top,避免内容被遮挡
padding-top: 88rpx;
- // 分享按钮样式
+ :deep(){
+ .u-navbar__content{
+ background: url("https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ztzf_app_assets/images/user/bg.png") no-repeat !important;
+ background-size: 100%!important;
+ height: 88rpx !important;
+ }
+} // 分享按钮样式
.share-btn {
width: 40rpx;
height: 40rpx;
@@ -304,6 +310,9 @@
background-position: center;
}
.detailTop {
+ // #ifdef APP-PLUS
+ padding-top: 60rpx;
+ // #endif
.image-container {
position: relative;
width: 100%;
@@ -332,37 +341,7 @@
width: 5px !important;
}
}
- .detailTitle {
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 60rpx;
- line-height: 60rpx;
- background: rgba(7, 7, 7, 0.4);
- }
- .titleText {
- display: flex;
- width: 100%;
- justify-content: space-between;
- align-items: center;
- color: #fff;
-
- .itemName,
- .itemTime {
- font-family: Source Han Sans CN, Source Han Sans CN;
- font-weight: 400;
- font-size: 28rpx;
- color: #ffffff;
- }
- .itemName {
- padding-left: 20rpx;
- }
- .itemTime {
- padding-right: 20rpx;
- }
- }
}
}
@@ -406,11 +385,7 @@
color: #1d6fe9;
text-decoration: underline;
text-align: right;
- //white-space: nowrap;
- ///* 禁止换行 */
- //overflow: hidden;
- //text-overflow: ellipsis;
- // max-width: 74%;
+
padding-top: 1px;
padding-left: 5px;
padding-right: 2px;
diff --git a/uniapps/work-wx/src/pages/equipmentManagement/index.vue b/uniapps/work-wx/src/pages/equipmentManagement/index.vue
index 0e0b900..7bb6e62 100644
--- a/uniapps/work-wx/src/pages/equipmentManagement/index.vue
+++ b/uniapps/work-wx/src/pages/equipmentManagement/index.vue
@@ -29,6 +29,11 @@
import addSvg from '@/static/images/add.png'
import droneSvg from '@/static/images/drone.png'
import { aircraftInfoPageInfoOfMyApi } from '@/api/index.js'
+
+// 获取store中的数据 字典
+import { useAppStore, useUserStore } from "@/store";
+const appStore = useAppStore()
+
const equipmentList = ref([])
const noticeTitle = ref('')
const formParams = ref({
@@ -50,6 +55,10 @@
try {
const res = await aircraftInfoPageInfoOfMyApi(formParams.value)
const newData = res.data.data.records || []
+ // 处理type 字典
+ newData.forEach(item => {
+ item.type = appStore.getProType.find(type => type.value === item.type)?.label || '暂无'
+ })
// 如果是第一页,直接替换数据;否则追加数据
if (formParams.value.current === 1) {
equipmentList.value = newData
diff --git a/uniapps/work-wx/src/pages/legalPolicy/index.vue b/uniapps/work-wx/src/pages/legalPolicy/index.vue
index 4c02847..cd77c46 100644
--- a/uniapps/work-wx/src/pages/legalPolicy/index.vue
+++ b/uniapps/work-wx/src/pages/legalPolicy/index.vue
@@ -13,7 +13,7 @@
</view>
<view class="right">
<view class="r-top">{{ item.title }}</view>
- <view class="r-middle">{{ item.description || '暂无描述' }}</view>
+ <view class="r-middle">{{ item.noticeDesc || '暂无描述' }}</view>
<view class="r-bottom">{{ item.time || '暂无' }}</view>
</view>
</view>
@@ -43,6 +43,7 @@
size: 10,
noticeType: 2,
noticeTitle: noticeTitle.value,
+ isAsc: true
})
const tabClick = (val) => {
@@ -50,7 +51,7 @@
formParams.value.noticeType = 2
} else {
formParams.value.noticeType = 1
- }
+ }
formParams.value.current = 1
announcementList.value = []
getSysNoticeList()
@@ -122,7 +123,7 @@
height: 100%;
display: flex;
flex-direction: column;
-
+
:deep(.u-search) {
padding: 10px 20px;
height: 68rpx;
@@ -141,7 +142,7 @@
.tabs-container >>> .u-tabs__nav {
width: auto !important;
- }
+ }
.content {
width: 100%;
height: 0;
@@ -180,7 +181,7 @@
.r-bottom {
font-weight: 400;
font-size: 13px;
- color: #86909C;
+ color: #86909C;
margin-top: 10rpx;
}
}
diff --git a/uniapps/work-wx/src/pages/page/index.vue b/uniapps/work-wx/src/pages/page/index.vue
index 1e5e4a8..4860d82 100644
--- a/uniapps/work-wx/src/pages/page/index.vue
+++ b/uniapps/work-wx/src/pages/page/index.vue
@@ -86,6 +86,11 @@
import docSvg from '@/static/images/doc.png'
import lbBottomPng from '@/static/images/lb_bottom.png'
import { sysNoticePageInfoApi, droneFlightTaskApi } from '@/api/index'
+ import { flightTaskApi,flightRulesApi,flightModeApi,flightPlanApi,flyActivityStatusApi,proTypeApi} from '@/api/index'
+
+import { useAppStore } from "@/store";
+const appStore = useAppStore()
+
const lbList = reactive([]);
// lbPng 轮播图 5次
for (let i = 0; i < 5; i++) {
@@ -150,7 +155,7 @@
announcementList.value = res.data.data.records.map(item => ({
...item,
title: item.taskName,
- description: item.remark,
+ description: item.noticeDesc,
time: item.createTime,
num: item.num,
like: item.like,
@@ -173,6 +178,7 @@
current: 1,
size: 3,
noticeType: val,
+ isAsc: true
})
// 只需要取前3条 公告
if (val === 1) {
@@ -221,10 +227,98 @@
})
}
+ // 获取任务类型
+const actionsFlightTaskType = ref([])
+function getTaskType() {
+ flightTaskApi().then(res => {
+ actionsFlightTaskType.value = res.data.data.map(item => ({
+ ...item,
+ label: item.dictLabel || '暂无',
+ value: item.dictValue || '暂无',
+ }))
+ // 存储到store
+ appStore.setTaskType(actionsFlightTaskType.value)
+ })
+}
+// 获取飞行模式
+const actionsFlightMode = ref([])
+function getFlightMode() {
+ flightModeApi().then(res => {
+ actionsFlightMode.value = res.data.data.map(item => ({
+ ...item,
+ label: item.dictLabel || '暂无',
+ value: item.dictValue || '暂无',
+ }))
+ // 存储到store
+ appStore.setFlightMode(actionsFlightMode.value)
+ })
+}
+// 获取飞行规则
+const actionsFlightRule = ref([])
+function getFlightRules() {
+ flightRulesApi().then(res => {
+ actionsFlightRule.value = res.data.data.map(item => ({
+ ...item,
+ label: item.dictLabel || '暂无',
+ value: item.dictValue || '暂无',
+ }))
+ // 存储到store
+ appStore.setFlightRules(actionsFlightRule.value)
+ })
+}
+// 获取飞行计划
+const actionsPlanType = ref([])
+function getFlightPlan() {
+ flightPlanApi().then(res => {
+ actionsPlanType.value = res.data.data.map(item => ({
+ ...item,
+ label: item.dictLabel || '暂无',
+ value: item.dictValue || '暂无',
+ }))
+ // 存储到store
+ appStore.setFlightPlan(actionsPlanType.value)
+ })
+}
+// 获取审批状态
+const flyActivityStatus = ref([])
+function getFlyActivityStatus() {
+ flyActivityStatusApi().then(res => {
+ flyActivityStatus.value = res.data.data.map(item => ({
+ ...item,
+ label: item.dictLabel || '暂无',
+ value: item.dictValue || '暂无',
+ }))
+ // 存储到store
+ appStore.setFlyActivityStatus(flyActivityStatus.value)
+ })
+}
+
+// 获取飞行器类型
+const typeList = ref([])
+function getProTypeApi() {
+ proTypeApi().then(res => {
+ typeList.value = res.data.data.map(item => ({
+ ...item,
+ label: item.dictLabel || '暂无',
+ value: item.dictValue || '暂无',
+ }))
+ // 存储到store
+ appStore.setProType(typeList.value)
+ })
+}
+
onMounted(() => {
getFlightAirspaceList()
getSysNoticeList(2)
getSysNoticeList(1)
+
+ // 获取字典
+ getTaskType()
+ getFlightMode()
+ getFlightRules()
+ getFlightPlan()
+ getFlyActivityStatus()
+ getProTypeApi()
})
</script>
@@ -320,7 +414,7 @@
justify-content: space-between;
font-weight: 400;
font-size: 13px;
- color: #86909C;
+ color: #86909C;
margin-top: 10rpx;
}
}
diff --git a/uniapps/work-wx/src/store/modules/app/index.js b/uniapps/work-wx/src/store/modules/app/index.js
index 064366a..17e463b 100644
--- a/uniapps/work-wx/src/store/modules/app/index.js
+++ b/uniapps/work-wx/src/store/modules/app/index.js
@@ -10,7 +10,13 @@
theme: storage.get(THEME_KEY) || 'light',
deviceUpdateKey: 0, //设备刷新key
jobUpdateKey: 0, //任务刷新key
-
+ // 字典
+ taskType: [], // 任务类型
+ flightMode: [], // 飞行模式
+ flightRules: [], // 飞行规则
+ flightPlan: [], // 飞行计划
+ flyActivityStatus: [], // 飞行活动状态
+ proType: [], // 飞行器类型
}),
getters: {
getSystemInfo (state) {
@@ -18,14 +24,53 @@
},
getTheme (state) {
return state.theme
- }
+ },
+ // 字典
+ getTaskType (state) {
+ return state.taskType
+ },
+ getFlightMode (state) {
+ return state.flightMode
+ },
+ getFlightRules (state) {
+ return state.flightRules
+ },
+ getFlightPlan (state) {
+ return state.flightPlan
+ },
+ getFlyActivityStatus (state) {
+ return state.flyActivityStatus
+ },
+ getProType (state) {
+ return state.proType
+ },
},
actions: {
+ // 设置字典
+ setTaskType (data) {
+ this.taskType = data
+ },
+ setFlightMode (data) {
+ this.flightMode = data
+ },
+ setFlightRules (data) {
+ this.flightRules = data
+ },
+ setFlightPlan (data) {
+ this.flightPlan = data
+ },
+ setFlyActivityStatus (data) {
+ this.flyActivityStatus = data
+ },
+ setProType (data) {
+ this.proType = data
+ },
+
+
setSystemInfo (info) {
this.systemInfo = info
},
setDeviceUpdateKeyAdd () {
- console.log(111, this.deviceUpdateKey + 1)
this.deviceUpdateKey = this.deviceUpdateKey + 1
},
setJobUpdateKeyAdd (state, data) {
@@ -76,6 +121,7 @@
})
})
}
+
}
})
diff --git a/uniapps/work-wx/src/subPackages/deviceRegistration/add.vue b/uniapps/work-wx/src/subPackages/deviceRegistration/add.vue
index 12c7a53..5bf7f64 100644
--- a/uniapps/work-wx/src/subPackages/deviceRegistration/add.vue
+++ b/uniapps/work-wx/src/subPackages/deviceRegistration/add.vue
@@ -260,7 +260,7 @@
@cancel="showPurchaseDate = false"
/>
<!-- 所属区域 -->
- <u-cascader
+ <u-cascader
v-model:show="isShowRegion"
v-model="formParams.regionCode"
:data="areaData"
@@ -282,6 +282,10 @@
import { aircraftInfoSaveApi,uploadFileApi, areaDataApi, proTypeApi, manufacturerInfoApi } from '@/api/index'
import { ref, computed, onMounted } from 'vue'
import dayjs from 'dayjs'
+
+// 获取store中的数据 字典
+import { useAppStore, useUserStore } from "@/store";
+const appStore = useAppStore()
const formRef = ref(null);
const formParams = ref({
@@ -326,6 +330,10 @@
isModifiedText: [
{ required: true, message: '请选择是否改装', trigger: 'change' }
],
+ type: [
+ { required: true, message: '请选择飞行器类型', trigger: 'change' }
+ ],
+
})
// 是否改装
const actionsModified = ref([
@@ -356,31 +364,29 @@
const findRegionNamesByCodes = (codes, areaData) => {
const result = []
let currentData = areaData
-
+
for (const code of codes) {
// 转换为字符串比较(因为code可能是字符串类型)
const codeStr = code.toString()
const item = currentData.find(item => item.code === codeStr)
-
+
if (!item) {
console.warn(`未找到code为 ${codeStr} 的行政区划`)
break
}
-
+
result.push(item.name)
currentData = item.children || []
}
-
+
return result
}
// 所属区域确认
const onRegionConfirm = (e) => {
- console.log(e,'888')
formParams.value.region = e[2] || '' // 用逗号分隔的区域码
// 通过arrRegion的数组值为[36,3608,360824] 从areaData里面反查出名称
const regionNames = findRegionNamesByCodes(e, areaData.value)
- console.log(regionNames, '77777')
formParams.value.regionText = regionNames.join('-') || '' // 用连字符连接的区域名称
isShowRegion.value = false
}
@@ -412,13 +418,14 @@
formParams.value.manufacturerText = selected.label
showManufacturer.value = false
}
-// 飞行器型号
+// 飞行器类型
const showType = ref(false);
-const typeList = ref([])
-// 选择飞行器型号
+const typeList = ref(appStore.getProType)
+// 选择飞行器类型
const onPickerConfirmType = (e) => {
const selected = e.value[0]
formParams.value.type = selected.value
+ console.log(formParams.value.type,'6666')
formParams.value.typeText = selected.label
showType.value = false
}
@@ -427,36 +434,36 @@
// 获取上传的文件对象
const file = event.file;
console.log('上传的文件:', file);
-
+
// 显示加载提示
uni.showLoading({
title: '上传中...'
});
-
+
// 准备上传参数
const uploadParams = {
name: 'file', // 服务器端接收文件的字段名
file: file, // 传入文件对象
filePath: file.path || file.url, // 文件路径
};
-
+
// 调用上传文件接口
uploadFileApi(uploadParams).then(res => {
uni.hideLoading();
-
+
console.log('上传成功结果:', res);
-
+
// 根据接口返回的数据结构处理结果
if (res.data && res.data.code === 200) {
// 假设接口返回的数据结构是 { url, fileName } 等
const uploadResult = res.data.data;
-
+
// 更新表单数据,将上传结果展示在input内
formParams.value.caacRegistrationCodeText = uploadResult.fileName || uploadResult.url || '文件上传成功';
-
+
// 可以将完整的上传信息保存到表单中,以便提交时使用
formParams.value.caacRegistrationCode= uploadResult.fileUrl || '文件上传成功';
-
+
uni.showToast({
title: '上传成功',
icon: 'success'
@@ -491,36 +498,36 @@
// 获取上传的文件对象
const file = event.file;
console.log('上传的文件:', file);
-
+
// 显示加载提示
uni.showLoading({
title: '上传中...'
});
-
+
// 准备上传参数
const uploadParams = {
name: 'file', // 服务器端接收文件的字段名
file: file, // 传入文件对象
filePath: file.path || file.url, // 文件路径
};
-
+
// 调用上传文件接口
uploadFileApi(uploadParams).then(res => {
uni.hideLoading();
-
+
console.log('上传成功结果:', res);
-
+
// 根据接口返回的数据结构处理结果
if (res.data && res.data.code === 200) {
// 假设接口返回的数据结构是 { url, fileName } 等
const uploadResult = res.data.data;
-
+
// 更新表单数据,将上传结果展示在input内
formParams.value.deviceImageText = uploadResult.fileName || uploadResult.url || '文件上传成功';
-
+
// 可以将完整的上传信息保存到表单中,以便提交时使用
formParams.value.deviceImage= uploadResult.fileUrl || '文件上传成功';
-
+
uni.showToast({
title: '上传成功',
icon: 'success'
@@ -571,15 +578,15 @@
}
}
// 获取飞行器类型
-function getProTypeApi() {
- proTypeApi().then(res => {
- typeList.value = res.data.data.map(item => ({
- ...item,
- label: item.dictLabel,
- value: item.dictValue
- }))
- })
-}
+// function getProTypeApi() {
+// proTypeApi().then(res => {
+// typeList.value = res.data.data.map(item => ({
+// ...item,
+// label: item.dictLabel,
+// value: item.dictValue
+// }))
+// })
+// }
// 获取无人机厂商
function getManufacturerInfoApi() {
manufacturerInfoApi({
@@ -594,7 +601,6 @@
})
}
onMounted(async () => {
- getProTypeApi()
getManufacturerInfoApi()
// 动态从外部URL导入xzqhData,确保在使用前已初始化
// 注意:直接动态导入外部URL可能会有跨域或构建问题,建议检查服务器CORS设置
@@ -610,11 +616,11 @@
display: flex;
flex-direction: column;
// padding: 24rpx;
-
+
.select-wrapper {
position: relative;
width: 100%;
-
+
.select-icon {
position: absolute;
right: 20rpx;
@@ -624,6 +630,10 @@
font-size: 24rpx;
pointer-events: none;
}
+ }
+
+ :deep(.u-toolbar__wrapper__confirm) {
+ color: #1D6FE9;
}
.upload {
@@ -656,7 +666,7 @@
border-radius: 8rpx 8rpx 8rpx 8rpx;
margin-bottom: 20rpx;
}
-
+
:deep(.u-form-item) {
margin-bottom: 20rpx;
padding: 16rpx 24rpx 18rpx 24rpx;
@@ -671,7 +681,7 @@
border-radius: 8rpx;
padding: 0 20rpx;
background-color: #f5f5f5;
-
+
&::placeholder {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
@@ -679,12 +689,12 @@
color: #D2D2D2;
}
}
-
+
.clickable-input {
width: 100%;
cursor: pointer;
}
-
+
:deep(.u-form-item__label) {
margin-bottom: 20rpx;
// font-weight: bold;
@@ -694,7 +704,7 @@
font-size: 30rpx;
color: #222324;
}
-
+
:deep(.u-form-item__required) {
color: #FF2600;
margin-right: 8rpx;
diff --git a/uniapps/work-wx/src/subPackages/flightApplication/add.vue b/uniapps/work-wx/src/subPackages/flightApplication/add.vue
index 54fc756..080da5c 100644
--- a/uniapps/work-wx/src/subPackages/flightApplication/add.vue
+++ b/uniapps/work-wx/src/subPackages/flightApplication/add.vue
@@ -1,6 +1,6 @@
<template>
<view class="flightApplication-add">
-
+
<u-form labelPosition="top" :model="formParams" :rules="rules" ref="formRef">
<view class="title form-title">基本信息</view>
<u-form-item
@@ -101,7 +101,7 @@
>
<u-input v-model="formParams.flightEndTime" border="none" placeholder="请选择日期" suffixIcon="calendar"></u-input>
</u-form-item>
-
+
<u-form-item
label="计划类型"
labelWidth="200rpx"
@@ -386,16 +386,20 @@
</view>
</template>
<script setup>
-import { flightPlanSaveApi,
- flightRoutePageInfoApi,
- aircraftInfoPageInfoOfMyApi,
- pilotInfoPageInfoOfMyApi,
- droneFlightTaskApi,
- uploadFileApi,
- flightTaskApi,flightRulesApi,flightModeApi,flightPlanApi
+import {
+ flightPlanSaveApi,
+ flightRoutePageInfoApi,
+ aircraftInfoPageInfoOfMyApi,
+ pilotInfoPageInfoOfMyApi,
+ droneFlightTaskApi,
+ uploadFileApi
} from '@/api/index'
import { ref, computed, onMounted } from 'vue'
import dayjs from 'dayjs'
+
+// 获取store中的数据 字典
+import { useAppStore, useUserStore } from "@/store";
+const appStore = useAppStore()
const formRef = ref(null);
const formParams = ref({
@@ -498,7 +502,7 @@
})
// 任务类型
const isShowFlightTaskType = ref(false)
-const actionsFlightTaskType = ref([])
+const actionsFlightTaskType = ref(appStore.getTaskType)
const onPickerFlightTaskType = (e) => {
const selected = e.value[0]
formParams.value.flightTaskType = selected.value
@@ -508,7 +512,7 @@
// 飞行规则
const isShowFlightRule = ref(false)
-const actionsFlightRule = ref([])
+const actionsFlightRule = ref(appStore.getFlightRules)
const onPickerFlightRule = (e) => {
const selected = e.value[0]
formParams.value.flightRule = selected.value
@@ -517,7 +521,7 @@
}
// 飞行方式
const isShowFlightMode = ref(false)
-const actionsFlightMode = ref([])
+const actionsFlightMode = ref(appStore.getFlightMode)
const onPickerFlightMode = (e) => {
const selected = e.value[0]
formParams.value.flightMode = selected.value
@@ -526,7 +530,7 @@
}
// 计划类型
const isShowPlanType = ref(false)
-const actionsPlanType = ref([])
+const actionsPlanType = ref(appStore.getFlightPlan)
const onPickerPlanType = (e) => {
const selected = e.value[0]
formParams.value.planType = selected.value
@@ -637,36 +641,36 @@
// 获取上传的文件对象
const file = event.file;
console.log('上传的文件:', file);
-
+
// 显示加载提示
uni.showLoading({
title: '上传中...'
});
-
+
// 准备上传参数
const uploadParams = {
name: 'file', // 服务器端接收文件的字段名
file: file, // 传入文件对象
filePath: file.path || file.url, // 文件路径
};
-
+
// 调用上传文件接口
uploadFileApi(uploadParams).then(res => {
uni.hideLoading();
-
+
console.log('上传成功结果:', res);
-
+
// 根据接口返回的数据结构处理结果
if (res.data && res.data.code === 200) {
// 假设接口返回的数据结构是 { url, fileName } 等
const uploadResult = res.data.data;
-
+
// 更新表单数据,将上传结果展示在input内
formParams.value.tempAirspaceApprovalText = uploadResult.fileName || uploadResult.url || '文件上传成功';
-
+
// 可以将完整的上传信息保存到表单中,以便提交时使用
formParams.value.tempAirspaceApproval = uploadResult.fileUrl || '文件上传成功';
-
+
uni.showToast({
title: '上传成功',
icon: 'success'
@@ -712,52 +716,12 @@
}
})
}
-// 获取任务类型
-function getTaskType() {
- flightTaskApi().then(res => {
- actionsFlightTaskType.value = res.data.data.map(item => ({
- ...item,
- label: item.dictLabel || '暂无',
- value: item.dictValue || '暂无',
- }))
- })
-}
-// 获取飞行模式
-function getFlightMode() {
- flightModeApi().then(res => {
- actionsFlightMode.value = res.data.data.map(item => ({
- ...item,
- label: item.dictLabel || '暂无',
- value: item.dictValue || '暂无',
- }))
- })
-}
-// 获取飞行规则
-function getFlightRules() {
- flightRulesApi().then(res => {
- actionsFlightRule.value = res.data.data.map(item => ({
- ...item,
- label: item.dictLabel || '暂无',
- value: item.dictValue || '暂无',
- }))
- })
-}
-// 获取飞行计划
-function getFlightPlan() {
- flightPlanApi().then(res => {
- actionsPlanType.value = res.data.data.map(item => ({
- ...item,
- label: item.dictLabel || '暂无',
- value: item.dictValue || '暂无',
- }))
- })
-}
onMounted(() => {
// getProTypeApi()
- getTaskType()
- getFlightMode()
- getFlightRules()
- getFlightPlan()
+ // getTaskType()
+ // getFlightMode()
+ // getFlightRules()
+ // getFlightPlan()
getAircraftInfo()
getPilotInfo()
getAirspaceInfo()
@@ -787,6 +751,9 @@
border-radius: 8rpx 8rpx 8rpx 8rpx;
// margin-bottom: 20rpx;
}
+ :deep(.u-toolbar__wrapper__confirm) {
+ color: #1D6FE9;
+ }
.custom-label {
.label-tip {
font-family: Source Han Sans CN, Source Han Sans CN;
@@ -795,7 +762,7 @@
color: #3A3A3A;
}
}
-
+
.attention {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
@@ -807,7 +774,7 @@
.select-wrapper {
position: relative;
width: 100%;
-
+
.select-icon {
position: absolute;
right: 20rpx;
@@ -853,7 +820,7 @@
border-radius: 8rpx;
padding: 0 20rpx;
background-color: #f5f5f5;
-
+
&::placeholder {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
@@ -861,12 +828,12 @@
color: #D2D2D2;
}
}
-
+
.clickable-input {
width: 100%;
cursor: pointer;
}
-
+
:deep(.u-form-item__label) {
margin-bottom: 20rpx;
// font-weight: bold;
@@ -876,7 +843,7 @@
font-size: 30rpx;
color: #222324;
}
-
+
:deep(.u-form-item__required) {
color: #FF2600;
margin-right: 8rpx;
diff --git a/uniapps/work-wx/src/subPackages/flightApplication/details.vue b/uniapps/work-wx/src/subPackages/flightApplication/details.vue
index 0c986b0..6d8e44e 100644
--- a/uniapps/work-wx/src/subPackages/flightApplication/details.vue
+++ b/uniapps/work-wx/src/subPackages/flightApplication/details.vue
@@ -1,10 +1,8 @@
<!-- 飞行活动申请 -->
<template>
<view class="flightApplication-add">
- <view class="title">
- 基本信息
- </view>
<u-form labelPosition="top" :model="formParams" :rules="rules" ref="formRef">
+ <view class="title form-title">基本信息</view>
<u-form-item
label="飞行计划"
labelWidth="200rpx"
@@ -74,7 +72,7 @@
>
<u-input v-model="formParams.flightEndTime" border="none" suffixIcon="calendar"></u-input>
</u-form-item>
-
+
<u-form-item
label="计划类型"
labelWidth="200rpx"
@@ -208,57 +206,55 @@
</view>
</template>
<script setup>
-import { flightPlanSaveApi,
- flightRoutePageInfoApi,
- aircraftInfoPageInfoOfMyApi,
- pilotInfoPageInfoOfMyApi,
- flightAirspacePageInfoApi,
- uploadFileApi,
- flightTaskApi,flightRulesApi,flightModeApi,flightPlanApi,flightPlanDetailsApi
+import {
+ flightPlanDetailsApi,
+ flightRoutePageInfoApi,
+ aircraftInfoPageInfoOfMyApi,
+ pilotInfoPageInfoOfMyApi,
+ flightAirspacePageInfoApi,
} from '@/api/index'
import { ref, computed, onMounted } from 'vue'
import dayjs from 'dayjs'
+
+// 获取store中的数据 字典
+import { useAppStore, useUserStore } from "@/store";
+const appStore = useAppStore()
const formRef = ref(null);
const formParams = ref({})
const rules = ref({})
// 任务类型
-const isShowFlightTaskType = ref(false)
-const actionsFlightTaskType = ref([])
-
+const actionsFlightTaskType = ref(appStore.getTaskType)
// 飞行规则
-const isShowFlightRule = ref(false)
-const actionsFlightRule = ref([])
+const actionsFlightRule = ref(appStore.getFlightRules)
// 飞行方式
-const isShowFlightMode = ref(false)
-const actionsFlightMode = ref([])
+const actionsFlightMode = ref(appStore.getFlightMode)
// 计划类型
-const isShowPlanType = ref(false)
-const actionsPlanType = ref([])
+const actionsPlanType = ref(appStore.getFlightPlan)
// 是否显示开始时间选择器
const isShowStartTime = ref(false)
// 是否显示结束时间选择器
const isShowEndTime = ref(false)
-const startTime = ref(Date.now()); // 设置默认值为当前时间戳
-const endTime = ref(Date.now()); // 设置默认值为当前时间戳
+// const startTime = ref(Date.now()); // 设置默认值为当前时间戳
+// const endTime = ref(Date.now()); // 设置默认值为当前时间戳
-const onConfirmStartTime = (e) => {
- formParams.value.flightStartTime = dayjs(e.value).format('YYYY-MM-DD HH:mm:ss')
- isShowStartTime.value = false
-}
-const onConfirmEndTime = (e) => {
- formParams.value.flightEndTime = dayjs(e.value).format('YYYY-MM-DD HH:mm:ss')
- isShowEndTime.value = false
-}
+// const onConfirmStartTime = (e) => {
+// formParams.value.flightStartTime = dayjs(e.value).format('YYYY-MM-DD HH:mm:ss')
+// isShowStartTime.value = false
+// }
+// const onConfirmEndTime = (e) => {
+// formParams.value.flightEndTime = dayjs(e.value).format('YYYY-MM-DD HH:mm:ss')
+// isShowEndTime.value = false
+// }
// 获取飞行器信息
-const isShowAircraftInfo = ref(false)
+// const isShowAircraftInfo = ref(false)
const aircraftInfoList = ref([])
function getAircraftInfo() {
aircraftInfoPageInfoOfMyApi({
@@ -271,14 +267,13 @@
}))
})
}
-const onPickerAircraftInfo = (e) => {
- const selected = e.value[0]
- formParams.value.aircraftId = selected.value
- formParams.value.aircraftText = selected.label
- isShowAircraftInfo.value = false
-}
+// const onPickerAircraftInfo = (e) => {
+// const selected = e.value[0]
+// formParams.value.aircraftId = selected.value
+// formParams.value.aircraftText = selected.label
+// isShowAircraftInfo.value = false
+// }
// 获取飞手信息
-const isShowPilotInfo = ref(false)
const pilotInfoList = ref([])
function getPilotInfo() {
pilotInfoPageInfoOfMyApi({
@@ -292,7 +287,6 @@
})
}
// 获取空域信息
-const isShowAirspaceInfo = ref(false)
const airspaceInfoList = ref([])
function getAirspaceInfo() {
flightAirspacePageInfoApi({
@@ -306,7 +300,6 @@
})
}
// 获取航线信息
-const isShowFlightRouteInfo = ref(false)
const flightRouteInfoList = ref([])
function getFlightRouteInfo() {
flightRoutePageInfoApi({
@@ -320,71 +313,27 @@
})
}
-// 获取任务类型
-function getTaskType() {
- flightTaskApi().then(res => {
- actionsFlightTaskType.value = res.data.data.map(item => ({
- ...item,
- label: item.dictLabel || '暂无',
- value: item.dictCode || '暂无',
- }))
- })
-}
-// 获取飞行模式
-function getFlightMode() {
- flightModeApi().then(res => {
- actionsFlightMode.value = res.data.data.map(item => ({
- ...item,
- label: item.dictLabel || '暂无',
- value: item.dictCode || '暂无',
- }))
- })
-}
-// 获取飞行规则
-function getFlightRules() {
- flightRulesApi().then(res => {
- actionsFlightRule.value = res.data.data.map(item => ({
- ...item,
- label: item.dictLabel || '暂无',
- value: item.dictCode || '暂无',
- }))
- })
-}
-// 获取飞行计划
-function getFlightPlan() {
- flightPlanApi().then(res => {
- actionsPlanType.value = res.data.data.map(item => ({
- ...item,
- label: item.dictLabel || '暂无',
- value: item.dictCode || '暂无',
- }))
- })
-}
-
onLoad((options) => {
flightPlanDetailsApi(options.id).then(res => {
- console.log(res.data.data, '789')
// return
- formParams.value = res.data.data
- formParams.value.routeId = res.data.data.routeInfo.name
- formParams.value.airspaceId = res.data.data.airspaceInfo.taskName
- formParams.value.aircraftId = res.data.data.airspaceInfo.aircraftInfoList.map(item => item.name).join(',')
- formParams.value.pilotId = res.data.data.operatorInfoList.map(item => item.name).join(',')
- formParams.value.flightRule = actionsFlightRule.value.find(item => item.dictValue === res.data.data.flightRule)?.dictLabel || ''
- formParams.value.flightMode = actionsFlightMode.value.find(item => item.dictValue === res.data.data.flightMode)?.dictLabel || ''
- formParams.value.planType = actionsPlanType.value.find(item => item.dictValue === res.data.data.planType)?.dictLabel || ''
- formParams.value.flightTaskType = actionsFlightTaskType.value.find(item => item.dictValue === res.data.data.flightTaskType)?.dictLabel || ''
+ const result = res.data.data
+ formParams.value = result
+ formParams.value.routeId = result.routeInfo.name
+ formParams.value.airspaceId = result.airspaceInfo.taskName || '无'
+ formParams.value.aircraftId = result.airspaceInfo.aircraftInfoList.map(item => item.name).join(',') || '无'
+ formParams.value.pilotId = result.operatorInfoList.map(item => item.name).join(',') || '无'
+ // 字典
+ formParams.value.flightRule = actionsFlightRule.value.find(item => item.dictValue === result.flightRule)?.dictLabel || '无'
+ formParams.value.flightMode = actionsFlightMode.value.find(item => item.dictValue === result.flightMode)?.dictLabel || '无'
+ formParams.value.planType = actionsPlanType.value.find(item => item.dictValue === result.planType)?.dictLabel || '无'
+ formParams.value.flightTaskType = actionsFlightTaskType.value.find(item => item.dictValue === result.flightTaskType)?.dictLabel || '无'
})
})
onMounted(() => {
- getTaskType()
- getFlightMode()
- getFlightRules()
- getFlightPlan()
- // getAircraftInfo()
- // getPilotInfo()
- // getAirspaceInfo()
- // getFlightRouteInfo()
+ getAircraftInfo()
+ getPilotInfo()
+ getAirspaceInfo()
+ getFlightRouteInfo()
})
</script>
<style scoped lang="scss">
@@ -421,7 +370,7 @@
.select-wrapper {
position: relative;
width: 100%;
-
+
.select-icon {
position: absolute;
right: 20rpx;
@@ -467,7 +416,7 @@
border-radius: 8rpx;
padding: 0 20rpx;
background-color: #f5f5f5;
-
+
&::placeholder {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
@@ -475,12 +424,12 @@
color: #D2D2D2;
}
}
-
+
.clickable-input {
width: 100%;
cursor: pointer;
}
-
+
:deep(.u-form-item__label) {
margin-bottom: 20rpx;
// font-weight: bold;
@@ -490,7 +439,7 @@
font-size: 30rpx;
color: #222324;
}
-
+
:deep(.u-form-item__required) {
color: #FF2600;
margin-right: 8rpx;
diff --git a/uniapps/work-wx/src/subPackages/flightApplication/index.vue b/uniapps/work-wx/src/subPackages/flightApplication/index.vue
index ec9cbf8..5c9f930 100644
--- a/uniapps/work-wx/src/subPackages/flightApplication/index.vue
+++ b/uniapps/work-wx/src/subPackages/flightApplication/index.vue
@@ -25,10 +25,12 @@
<u-image :src="spSvg" class="icon" width="16" height="16"></u-image>
<view class="name">{{approvalRecord.flightPlanName}}</view>
</view>
- <view class="status">{{approvalRecord.planApprovalStatus || ''}}</view>
+ <view class="status" :class="getStatusClass(approvalRecord.planApprovalStatus)">
+ {{ approvalRecord.planApprovalStatusLabel || ''}}
+ </view>
</view>
- <view class="txt">飞行器:{{approvalRecord.device || ''}}</view>
- <view class="txt">飞行任务:{{approvalRecord.flightTaskType || ''}}</view>
+ <view class="txt">飞行器:{{approvalRecord.spacecraftLabel || '无'}}</view>
+ <view class="txt">飞行任务:{{approvalRecord.flightTaskTypeLabel || ''}}</view>
<view class="txt">飞行起飞时间:{{approvalRecord.actualTakeoffTime || ''}}</view>
<view class="txt">飞行降落时间:{{approvalRecord.actualLandingTime || ''}}</view>
</view>
@@ -42,7 +44,12 @@
import { flightPlanPageInfoApi } from '@/api/index.js'
import fxsqSvg from '@/static/images/fly-apply.png'
import mysbSvg from '@/static/images/my-sb.png'
-import { ref } from 'vue'
+ import { ref } from 'vue'
+ import { aircraftInfoPageInfoOfMyApi } from '@/api/index'
+
+ // 获取store中的数据 字典
+ import { useAppStore, useUserStore } from "@/store";
+ const appStore = useAppStore()
function gridClick(index) {
@@ -58,6 +65,40 @@
}
}
+const getStatusClass = (status) => {
+ switch (status) {
+ case '0':
+ return 'Sorange'
+ case '99':
+ return 'Sgreen'
+ case '-1':
+ return 'Sred'
+ case '1':
+ return 'Sblue'
+ default:
+ return ''
+ }
+}
+
+// 获取飞行器信息
+const aircraftInfoList = ref([])
+async function getAircraftInfo() {
+ try {
+ const res = await aircraftInfoPageInfoOfMyApi({
+ current: 1,
+ size: 1000,
+ })
+ aircraftInfoList.value = res.data.data.records.map(item => ({
+ label: item.name,
+ value: item.id,
+ }))
+ } catch (error) {
+ console.error('获取飞行器信息失败:', error)
+ }
+}
+
+
+
// 审批记录是很多条
const approvalRecords = ref([])
const formParams = ref({
@@ -70,6 +111,12 @@
try {
const res = await flightPlanPageInfoApi(formParams.value)
const newData = res.data.data.records || []
+ // 处理字典数据
+ newData.forEach(item => {
+ item.spacecraftLabel = aircraftInfoList.value.find(info => info.value === item.spacecraftId)?.label || '无'
+ item.planApprovalStatusLabel = appStore.flyActivityStatus.find(status => status.dictValue === item.planApprovalStatus)?.dictLabel || '无'
+ item.flightTaskTypeLabel = appStore.taskType.find(type => type.dictValue === item.flightTaskType)?.dictLabel || '无'
+ })
// 如果是第一页,直接替换数据;否则追加数据
if (formParams.value.current === 1) {
approvalRecords.value = newData
@@ -106,7 +153,10 @@
url: '/subPackages/flightApplication/details?id=' + item.id,
})
}
-onMounted(() => {
+
+
+onMounted(async () => {
+ await getAircraftInfo()
getApprovalRecords()
})
</script>
@@ -192,12 +242,11 @@
}
.name-status {
display: flex;
- justify-content: space-between;
- align-items: center;
+ // justify-content: space-between;
margin-bottom: 20rpx;
.name-image {
+ width: calc(100% - 120rpx);
display: flex;
- justify-content: center;
align-items: center;
.u-image {
width: 32rpx;
@@ -208,18 +257,36 @@
font-size: 32rpx;
color: #1D2129;
margin-left: 6rpx;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
}
}
.status {
width: 100rpx;
text-align: center;
- line-height: 40rpx;
- background: #FF9604;
+ line-height: 44rpx;
+ height: 44rpx;
border-radius: 2px 2px 2px 2px;
font-weight: 500;
font-size: 24rpx;
color: #FFFFFF;
+ padding: 0 6rpx;
+
+ &.Sorange {
+ background: #FF9604;
+ }
+ &.Sred {
+ background: #F8422A;
+ }
+ &.Sgreen {
+ background: #17A836;
+ }
+ &.Sblue {
+ background: #1D6FE9;
+ }
}
+
}
.txt {
font-weight: 400;
diff --git a/uniapps/work-wx/src/subPackages/regulationsDetail/details.vue b/uniapps/work-wx/src/subPackages/regulationsDetail/details.vue
index f602683..d1500e9 100644
--- a/uniapps/work-wx/src/subPackages/regulationsDetail/details.vue
+++ b/uniapps/work-wx/src/subPackages/regulationsDetail/details.vue
@@ -18,7 +18,7 @@
</view>
</view>
</scroll-view>
- <u-pdf-reader v-if="pdfUrl" :src="pdfUrl"></u-pdf-reader>
+ <!-- <u-pdf-reader v-if="pdfUrl" :src="pdfUrl"></u-pdf-reader> -->
</view>
</template>
<script setup>
@@ -40,136 +40,55 @@
td: 'border: 1px solid #ddd; padding: 8rpx;'
};
-const pdfUrl = ref('')
+const pdfUrl = ref('https://wrj.shuixiongit.com/minio/cloud-bucket/78611c83-8fb3-47c9-a18c-0349137bb30c/DJI_202601171733_001_78611c83-8fb3-47c9-a18c-0349137bb30c/DJI_20260117173534_0004_V.jpeg')
+const fileObject = ref(null)
function downloadFile(item) {
- console.log(item,'999')
- // aLinkDownloadUtil(item.fileUrl, item.fileName)
- // downloadAndPreview(item.fileUrl, item.fileName)
- pdfUrl.value = item.fileUrl
- // downloadAndSavePDF(item.fileUrl, item.fileName)
-}
-// 下载并打开文件(支持PDF、图片、Word等)
-const downloadAndPreview = async (fileUrl, fileName) => {
- uni.showLoading({
- title: '下载中...',
- mask: true
- })
-
- try {
- // 1. 下载文件到临时目录
- const downloadRes = await uni.downloadFile({
- url: fileUrl,
- timeout: 60000
- })
-
- if (downloadRes.statusCode !== 200) {
- throw new Error(`下载失败: ${downloadRes.statusCode}`)
- }
-
- // 2. 打开文件(小程序会调用系统能力)
- uni.openDocument({
- filePath: downloadRes.tempFilePath,
- fileType: getFileType(fileName),
- showMenu: true, // 显示右上角菜单
- success: () => {
- console.log('打开文档成功')
- uni.showToast({
- title: '已打开文件',
- icon: 'success'
- })
- },
- fail: (error) => {
- console.error('打开失败:', error)
- // 如果打开失败,尝试其他方式
- handleOpenFail(downloadRes.tempFilePath, fileName)
- }
- })
-
- } catch (error) {
- console.error('下载失败:', error)
- uni.showToast({
- title: '下载失败,请重试',
- icon: 'none'
- })
- } finally {
- uni.hideLoading()
- }
+ console.log(item,'8888')
+ pdfUrl.value = item.filePreviewUrl
+ // fileObject.value = {
+ // url: item.fileUrl,
+ // name: item.fileName,
+ // extname: 'pdf'
+ // }
+ previewPdf(pdfUrl.value)
}
-// 下载并保存PDF到手机(iOS需要特殊处理)
-const downloadAndSavePDF = (pdfUrl, fileName = 'document.pdf') => {
+const previewPdf = (url) => {
uni.showLoading({
- title: '下载中...',
- mask: true
+ title: '加载中...'
})
- // 检查权限(主要针对iOS)
- const checkAndDownload = () => {
- uni.downloadFile({
- url: pdfUrl,
- success: (downloadRes) => {
- uni.hideLoading()
-
- if (downloadRes.statusCode === 200) {
- const tempFilePath = downloadRes.tempFilePath
-
- // 保存到本地
- uni.saveFile({
- tempFilePath: tempFilePath,
- success: (saveRes) => {
- const savedFilePath = saveRes.savedFilePath
-
- uni.showModal({
- title: '下载成功',
- content: `文件已保存到: ${savedFilePath}`,
- showCancel: false,
- success: () => {
- // 可以引导用户去文件管理查看
- }
- })
- },
- fail: (saveErr) => {
- console.error('保存失败:', saveErr)
- uni.showToast({
- title: '保存失败111',
- icon: 'error'
- })
- }
- })
- }
- },
- fail: (err) => {
- uni.hideLoading()
- uni.showToast({
- title: '下载失败1111',
- icon: 'error'
- })
- }
- })
- }
-
- // 检查文件访问权限
- uni.authorize({
- scope: 'scope.writePhotosAlbum',
- success: () => {
- checkAndDownload()
- },
- fail: () => {
- uni.showModal({
- title: '权限提示',
- content: '需要文件存储权限才能下载文件',
- success: (modalRes) => {
- if (modalRes.confirm) {
- uni.openSetting({
- success: (settingRes) => {
- if (settingRes.authSetting['scope.writePhotosAlbum']) {
- checkAndDownload()
- }
- }
+ // 1. 先下载文件到本地
+ uni.downloadFile({
+ url: url,
+ success: (res) => {
+ if (res.statusCode === 200) {
+ // 2. 打开文档
+ uni.openDocument({
+ filePath: res.tempFilePath,
+ fileType: 'pdf',
+ success: () => {
+ console.log('打开文档成功')
+ uni.hideLoading()
+ },
+ fail: (err) => {
+ console.error('打开文档失败:', err)
+ uni.hideLoading()
+ uni.showToast({
+ title: '打开文件失败',
+ icon: 'none'
})
}
- }
+ })
+ }
+ },
+ fail: (err) => {
+ console.error('下载文件失败:', err)
+ uni.hideLoading()
+ uni.showToast({
+ title: '下载文件失败',
+ icon: 'none'
})
}
})
@@ -205,7 +124,7 @@
const id = options.id || '1';
regulationsDetailApi(id).then(res => {
htmlContent.value = res.data.data.noticeContent;
- title.value = res.data.data.noticeTitle;
+ title.value = res.data.data.noticeDesc;
fileList.value = res.data.data.fileList || []
})
.catch(err => {
--
Gitblit v1.9.3