13 files modified
7 files deleted
| | |
| | | url: `/system/sys/SysRegionCode/allTree`, |
| | | method: 'get' |
| | | }) |
| | | } |
| | | } |
| | |
| | | data: data, |
| | | }); |
| | | }; |
| | | |
| | | // 验证码 |
| | | export const registerSendCodeApi = (phone) => { |
| | | return request({ |
| | | url: `/system/verificationCode/registerSendCode/${phone}`, |
| | | method: 'get' |
| | | }) |
| | | } |
| | |
| | | <template> |
| | | <view class="equipmentManagement"> |
| | | <u-search :bgColor="'white'" v-model="noticeTitle" :show-action="true" actionText="搜索" :animation="true" @custom="getEquipmentList"></u-search> |
| | | <u-search :bgColor="'white'" v-model="noticeTitle" :show-action="true" actionText="搜索" :animation="true" @custom="handleSearch"></u-search> |
| | | <view class="content"> |
| | | <view class="title">飞行设备</view> |
| | | <view class="card" v-for="(item, index) in equipmentList" :key="index"> |
| | | <view class="left"> |
| | | <u-image :src="droneSvg" mode="aspectFill" :width="70" :height="90"></u-image> |
| | | <u-list :style="{ height: 'calc(100vh - 160rpx)' }" @scrolltolower="scrolltolower" :lower-threshold="50"> |
| | | <view class="card" v-for="(item, index) in equipmentList" :key="index"> |
| | | <view class="left"> |
| | | <u-image :src="droneSvg" mode="aspectFill" :width="70" :height="90"></u-image> |
| | | </view> |
| | | <view class="right"> |
| | | <view class="name">设备名称:{{ item.name }}</view> |
| | | <view class="txt">设备类型:{{ item.type }}</view> |
| | | <view class="txt">设备型号:{{ item.type }}</view> |
| | | <view class="txt">设备sn:{{ item.sn }}</view> |
| | | </view> |
| | | </view> |
| | | <view class="right"> |
| | | <view class="name">设备名称:{{ item.name }}</view> |
| | | <view class="txt">设备类型:{{ item.type }}</view> |
| | | <view class="txt">设备型号:{{ item.type }}</view> |
| | | <view class="txt">设备sn:{{ item.sn }}</view> |
| | | </view> |
| | | </view> |
| | | </u-list> |
| | | </view> |
| | | <view class="add-btn" @click="addEquipment"> |
| | | <u-image :src="addSvg" mode="aspectFill" :width="60" :height="68"></u-image> |
| | |
| | | import { myDevicePageInfoApi, aircraftInfoPageInfoOfMyApi } from '@/api/index.js' |
| | | const equipmentList = ref([]) |
| | | const noticeTitle = ref('') |
| | | const formParams = ref({ |
| | | current: 1, |
| | | size: 10, |
| | | model:'', |
| | | name: '', |
| | | }) |
| | | // 搜索处理 |
| | | const handleSearch = () => { |
| | | // 搜索时重置为第一页 |
| | | formParams.value.current = 1 |
| | | formParams.value.name = noticeTitle.value |
| | | getEquipmentList() |
| | | } |
| | | |
| | | // 设备列表 |
| | | const getEquipmentList = async () => { |
| | | try { |
| | | const res = await aircraftInfoPageInfoOfMyApi({ |
| | | current: 1, |
| | | size: 99, |
| | | model:'', |
| | | name: '', |
| | | }) |
| | | equipmentList.value = res.data.data.records || [] |
| | | const res = await aircraftInfoPageInfoOfMyApi(formParams.value) |
| | | const newData = res.data.data.records || [] |
| | | // 如果是第一页,直接替换数据;否则追加数据 |
| | | if (formParams.value.current === 1) { |
| | | equipmentList.value = newData |
| | | } else { |
| | | equipmentList.value = equipmentList.value.concat(newData) |
| | | } |
| | | } catch (error) { |
| | | console.error('获取设备列表失败:', error) |
| | | } |
| | |
| | | url: '/subPackages/deviceRegistration/add', |
| | | }) |
| | | } |
| | | function scrolltolower() { |
| | | formParams.value.current++ |
| | | // 停止不刷新 |
| | | if (equipmentList.value.length < formParams.value.size) { |
| | | return |
| | | } |
| | | getEquipmentList() |
| | | } |
| | | onMounted(() => { |
| | | getEquipmentList() |
| | | }) |
| | |
| | | <template> |
| | | <view class="legalPolicy"> |
| | | <!-- <u-navbar title="法律政策" @rightClick="rightClick" :autoBack="true"></u-navbar> --> |
| | | <u-search :bgColor="'white'" v-model="noticeTitle" :show-action="true" actionText="搜索" :animation="true" @custom="getSysNoticeList"></u-search> |
| | | <u-search :bgColor="'white'" v-model="noticeTitle" :show-action="true" actionText="搜索" :animation="true" @custom="handleSearch"></u-search> |
| | | <view class="tabs-container"> |
| | | <u-tabs :list="tabs" @click="tabClick"></u-tabs> |
| | | </view> |
| | | <view class="content"> |
| | | <view class="card" v-for="(item, index) in announcementList" :key="index" @click="toRegulationsDetail(item)"> |
| | | <view class="left"> |
| | | <u-image :src="docSvg" mode="aspectFill" :width="30" :height="36"></u-image> |
| | | <u-list :style="{ height: 'calc(100vh - 160rpx)' }" @scrolltolower="scrolltolower" :lower-threshold="50"> |
| | | <view class="card" v-for="(item, index) in announcementList" :key="index" @click="toRegulationsDetail(item)"> |
| | | <view class="left"> |
| | | <u-image :src="docSvg" mode="aspectFill" :width="30" :height="36"></u-image> |
| | | </view> |
| | | <view class="right"> |
| | | <view class="r-top">{{ item.title }}</view> |
| | | <view class="r-middle">{{ item.description || '暂无描述' }}</view> |
| | | <view class="r-bottom">{{ item.time || '暂无' }}</view> |
| | | </view> |
| | | </view> |
| | | <view class="right"> |
| | | <view class="r-top">{{ item.title }}</view> |
| | | <view class="r-middle">{{ item.description || '暂无描述' }}</view> |
| | | <view class="r-bottom">{{ item.time || '暂无' }}</view> |
| | | </view> |
| | | </view> |
| | | </u-list> |
| | | </view> |
| | | </view> |
| | | </template> |
| | |
| | | }, |
| | | ]) |
| | | |
| | | const currentTab = ref(2) |
| | | const formParams = ref({ |
| | | current: 1, |
| | | size: 10, |
| | | noticeType: 2, |
| | | noticeTitle: noticeTitle.value, |
| | | }) |
| | | |
| | | const tabClick = (val) => { |
| | | if (val.index === 0) { |
| | | currentTab.value = 2 |
| | | getSysNoticeList() |
| | | formParams.value.noticeType = 2 |
| | | } else { |
| | | currentTab.value = 1 |
| | | getSysNoticeList() |
| | | } |
| | | formParams.value.noticeType = 1 |
| | | } |
| | | formParams.value.current = 1 |
| | | announcementList.value = [] |
| | | getSysNoticeList() |
| | | } |
| | | |
| | | const announcementList = ref() |
| | | |
| | | // 搜索处理 |
| | | const handleSearch = () => { |
| | | // 搜索时重置为第一页 |
| | | formParams.value.current = 1 |
| | | formParams.value.noticeTitle = formParams.value.noticeTitle.trim() |
| | | getSysNoticeList() |
| | | } |
| | | // 触底加载 |
| | | function scrolltolower() { |
| | | formParams.value.current++ |
| | | // 停止不刷新 |
| | | if (formParams.value.current > formParams.value.totalPages) { |
| | | uni.showToast({ |
| | | title: '没有更多了', |
| | | icon: 'none', |
| | | duration: 2000, |
| | | }) |
| | | return |
| | | } |
| | | getSysNoticeList() |
| | | } |
| | | // 获取通知公告列表 |
| | | async function getSysNoticeList() { |
| | | try { |
| | | const res = await sysNoticePageInfoApi({ |
| | | current: 1, |
| | | size: 10, |
| | | noticeType: currentTab.value, |
| | | noticeTitle: noticeTitle.value, |
| | | }) |
| | | announcementList.value = res.data.data.records.map(item => ({ |
| | | const res = await sysNoticePageInfoApi(formParams.value) |
| | | const newData = res.data.data.records.map(item => ({ |
| | | ...item, |
| | | title: item.noticeTitle, |
| | | description: item.remark, |
| | |
| | | num: item.num, |
| | | like: item.like, |
| | | })) |
| | | // 如果是第一页,直接替换数据;否则追加数据 |
| | | if (formParams.value.current === 1) { |
| | | announcementList.value = newData |
| | | } else { |
| | | announcementList.value = announcementList.value.concat(newData) |
| | | } |
| | | } catch (error) { |
| | | uni.showToast({ |
| | | title: error.message, |
| | |
| | | url: '/subPackages/regulationsDetail/details?id=' + item.noticeId+'&type=2', |
| | | }) |
| | | } |
| | | |
| | | |
| | | |
| | | onMounted(() => { |
| | | getSysNoticeList() |
| | |
| | | <div class="title">低空经济服务一体化平台系统</div> |
| | | <view class="user-password"> |
| | | <div class="user-name"> |
| | | <input v-model="loginForm.username" placeholder="请输入用户名" /> |
| | | <u-input border="none" v-model="loginForm.username" placeholder="请输入用户名"></u-input> |
| | | </div> |
| | | <div class="pass-word"> |
| | | <u-input type="password" border="bottom" v-model="loginForm.password" placeholder="请输入密码"></u-input> |
| | | <u-input border="none" type="password" v-model="loginForm.password" placeholder="请输入密码"></u-input> |
| | | <!-- <input v-model="loginForm.password" :type="isShowPassword ? 'text' : 'password'" placeholder="请输入密码"/> |
| | | <image v-if="!isShowPassword" :src="showPasswordSvg" @click="isShowPassword = !isShowPassword" /> |
| | | <image v-else :src="showPsdSvg" @click="isShowPassword = !isShowPassword" /> --> |
| | |
| | | </view> |
| | | </view> |
| | | <view class="row"> |
| | | <view class="label">昵称</view> |
| | | <view class="label"><span class="nike"></span>昵称</view> |
| | | <view class="input"> |
| | | <u-input input-align="right" border="bottom" v-model="formParams.nikeName" placeholder="昵称"></u-input> |
| | | </view> |
| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { sendResetCode, registerUser } from '@/api/user/index.js'; |
| | | import { sendResetCode, registerSendCodeApi, registerUser } from '@/api/user/index.js'; |
| | | const formParams = ref({ |
| | | userName: '', |
| | | nikeName: '', |
| | |
| | | } |
| | | |
| | | // 这里假设账号就是手机号,实际项目中可能需要验证格式 |
| | | sendResetCode(formParams.value.userName).then(res => { |
| | | console.log('4444',res) |
| | | registerSendCodeApi(formParams.value.userName).then(res => { |
| | | if (res.data.code === 200) { |
| | | uni.showToast({ |
| | | title: '验证码发送成功', |
| | |
| | | title: '注册成功', |
| | | icon: 'success', |
| | | }); |
| | | // 跳转登录页面 |
| | | uni.navigateTo({ |
| | | url: '/pages/login/index' |
| | | }) |
| | | } else { |
| | | uni.showToast({ |
| | | title: res.data.msg || '注册失败', |
| | |
| | | left: 0; |
| | | width: 100%; |
| | | height: 100%; |
| | | background-image: url("../../static/images/user/userbg.svg") no-repeat ; |
| | | background-image: url("https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ja-app-wx/images/user/user-bg.png") no-repeat ; |
| | | background-size: 100%; |
| | | } |
| | | .content { |
| | |
| | | font-weight: 400; |
| | | font-size: 15px; |
| | | color: #222324; |
| | | .nike { |
| | | margin-right: 16rpx; |
| | | } |
| | | .required { |
| | | color: #FF4444; |
| | | } |
| | |
| | | <!-- 我的 --> |
| | | <template> |
| | | <view class="page-wrap"> |
| | | <view class="pageUser"> |
| | | <view class="userBox"> |
| | | <view class="flex items-center pb-30rpx pl-30rpx pr-20rpx"> |
| | | <view class="mr-20rpx"> |
| | | <u-avatar @click="uploadAvatar" :src="user.avatar || showDefaultHeader" size="70" /> |
| | | </view> |
| | | <view class="flex-1"> |
| | | <view class="userName">{{user.nickName }}</view> |
| | | <view class="departs"> |
| | | <image |
| | | src="@/static/images/user/department.svg" |
| | | alt="" |
| | | /> |
| | | <span>{{ user?.sysDept?.deptName }}</span> |
| | | </view> |
| | | </view> |
| | | |
| | | </view> |
| | | <view class="personalInformation"> |
| | | <div class="message"> |
| | | <div class="messagebox">个人资料</div> |
| | | <div class="editInfo" @click="handelEdit(1)"> |
| | | 点击编辑 |
| | | <image :src="rightImage" alt="" /> |
| | | </div> |
| | | </div> |
| | | <div class="passwordBox"> |
| | | <div class="messagebox">修改密码</div> |
| | | <div class="editInfo" @click="handelEdit(2)"> |
| | | 点击编辑 |
| | | <image :src="rightImage" alt="" /> |
| | | </div> |
| | | </div> |
| | | </view> |
| | | |
| | | <view class="goOutBtn"> |
| | | <div class="goOutStyle" @click="logOut">退出登录</div> |
| | | </view> |
| | | |
| | | </view> |
| | | |
| | | </view> |
| | | <view class="pageUser"> |
| | | <view class="userBox"> |
| | | <view class="flex items-center pb-30rpx pl-30rpx pr-20rpx"> |
| | | <view class="mr-20rpx"> |
| | | <u-avatar @click="uploadAvatar" :src="user.avatar || showDefaultHeader" size="70" /> |
| | | </view> |
| | | <view class="flex-1"> |
| | | <view class="userName">{{user.nickName }}</view> |
| | | <view class="departs"> |
| | | <image |
| | | src="@/static/images/user/department.png" |
| | | alt="" |
| | | /> |
| | | <span>{{ user?.sysDept?.deptName }}</span> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="personalInformation"> |
| | | <div class="message"> |
| | | <div class="messagebox">个人资料</div> |
| | | <div class="editInfo" @click="handelEdit(1)"> |
| | | 点击编辑 |
| | | <image :src="rightImage" alt="" /> |
| | | </div> |
| | | </div> |
| | | <div class="passwordBox"> |
| | | <div class="messagebox">修改密码</div> |
| | | <div class="editInfo" @click="handelEdit(2)"> |
| | | 点击编辑 |
| | | <image :src="rightImage" alt="" /> |
| | | </div> |
| | | </div> |
| | | </view> |
| | | |
| | | <view class="goOutBtn"> |
| | | <div class="goOutStyle" @click="logOut">退出登录</div> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | |
| | | import { onShow } from "@dcloudio/uni-app"; |
| | | import { getDeviceRegionApi } from "@/api/map.js"; |
| | | import defaultAvatar from '/static/images/defaultAvatar.svg' |
| | | import rightImage from '@/static/images/user/rightBtn.svg'; |
| | | import rightImage from '@/static/images/user/rightBtn.png'; |
| | | import showDefaultHeader from "@/static/images/user/default-header.png"; |
| | | const { setClipboardData, getClipboardData } = useClipboard(); |
| | | // |
| | |
| | | height: 100%; |
| | | } |
| | | .pageUser { |
| | | background-image: url("../../static/images/user/userbg.svg") no-repeat; |
| | | background: url("https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ja-app-wx/images/user/user-bg.png") no-repeat ; |
| | | background-size: 100%; |
| | | } |
| | | .userBox { |
| | |
| | | } |
| | | |
| | | .message { |
| | | background: url('@/static/images/user/info.svg') |
| | | background: url('@/static/images/user/info.png') |
| | | no-repeat center; |
| | | background-size: 100% 100%; |
| | | } |
| | | |
| | | .passwordBox { |
| | | background: url('@/static/images/user/password.svg') |
| | | background: url('@/static/images/user/password.png') |
| | | no-repeat center; |
| | | background-size: 100% 100%; |
| | | } |
| | |
| | | <u-form-item |
| | | label="所属区域" |
| | | labelWidth="230rpx" |
| | | prop="serialNumber" |
| | | prop="regionCode" |
| | | :borderBottom="true" |
| | | ref="item2" |
| | | @click="isShowRegion = true" |
| | | > |
| | | <view class="select-wrapper"> |
| | | <u-input |
| | | v-model="formParams.serialNumber" |
| | | border="none" |
| | | placeholder="请选择" |
| | | readonly |
| | | ></u-input> |
| | | <view class="select-icon">▼</view> |
| | | </view> |
| | | <u-input |
| | | v-model="formParams.regionText" |
| | | disabled |
| | | disabledColor="#ffffff" |
| | | placeholder="请选择所属区域" |
| | | border="none" |
| | | ></u-input> |
| | | <template #right> |
| | | <up-icon name="arrow-down"></up-icon> |
| | | </template> |
| | | </u-form-item> |
| | | <u-form-item |
| | | label="民用航空器登记证书" |
| | |
| | | /> |
| | | <!-- 所属区域 --> |
| | | <u-cascader |
| | | show="show" |
| | | v-model="value" |
| | | :show="isShowRegion" |
| | | v-model="formParams.regionCode" |
| | | :data="areaData" |
| | | value-key="code" |
| | | label-key="name" |
| | | children-key="children" |
| | | :auto-close="true" |
| | | @confirm="onRegionConfirm" |
| | | @close="isShowRegion = false" |
| | | @cancel="isShowRegion = false" |
| | | ></u-cascader> |
| | | </u-form> |
| | | <u-button @click="submitForm" color="#1D6FE9">提交</u-button> |
| | |
| | | hasInsurance: '', // 是否有保险 |
| | | hasInsuranceText: '', // 是否有保险文本 |
| | | region: '', // 所属区域 |
| | | regionCode: '', // 所属区域 |
| | | regionText: '', // 所属区域文本 |
| | | caacRegistrationCode: '', // 民用航空器登记证书 |
| | | caacRegistrationCodeText: '', // 民用航空器登记证书文本 |
| | | deviceImage: '', // 飞行器照片 |
| | |
| | | const onPurchaseDate = (e) => { |
| | | formParams.value.purchaseDate = dayjs(e.value).format('YYYY-MM-DD') |
| | | showPurchaseDate.value = false |
| | | } |
| | | |
| | | 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?.join(',')[2] || '' // 用逗号分隔的区域码 |
| | | // 通过arrRegion的数组值为[36,3608,360824] 从areaData里面反查出名称 |
| | | const regionNames = findRegionNamesByCodes(e, areaData.value) |
| | | console.log(regionNames, '77777') |
| | | formParams.value.regionText = regionNames.join('-') || '' // 用连字符连接的区域名称 |
| | | isShowRegion.value = false |
| | | } |
| | | // 是否有保险 |
| | | const actionsHasInsurance = ref([ |
| | |
| | | // 获取所属单位 |
| | | const isShowRegion = ref(false) |
| | | const areaData = ref([]) |
| | | function getAreaData() { |
| | | areaDataApi().then(res => { |
| | | if (res.data.code === 200) { |
| | | areaData.value = res.data.data |
| | | } |
| | | }) |
| | | } |
| | | // function getAreaData() { |
| | | // areaDataApi().then(res => { |
| | | // if (res.data.code === 200) { |
| | | // areaData.value = res.data.data |
| | | // } |
| | | // }) |
| | | // } |
| | | // 提交图片 |
| | | function afterReadImage(event) { |
| | | // 获取上传的文件对象 |
| | |
| | | // 这里可以添加额外的失败处理逻辑 |
| | | } |
| | | } |
| | | onMounted(() => { |
| | | getAreaData() |
| | | onMounted(async () => { |
| | | // 动态导入xzqhData,确保在使用前已初始化 |
| | | const { xzqhData } = await import('@/static/xzqh/index') |
| | | // console.log(xzqhData,'9999') |
| | | // xzqhData.map 循环三层 |
| | | // 第一层:省份 |
| | | // 第二层:城市 |
| | | // 第三层:区县 |
| | | areaData.value = xzqhData |
| | | // xzqhData.map(item => ({ |
| | | // label: item.name, |
| | | // value: item.code, |
| | | // children: item.children.map(child => ({ |
| | | // label: child.name, |
| | | // value: child.code, |
| | | // children: child.children?.map(district => ({ |
| | | // label: district.name, |
| | | // value: district.code |
| | | // })) || [] |
| | | // })) |
| | | // })) |
| | | // console.log(areaData.value, '8888') |
| | | |
| | | }) |
| | | </script> |
| | | <style scoped lang="scss"> |
| | |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <u-search :bgColor="'white'" :show-action="true" actionText="搜索" :animation="true"></u-search> |
| | | <u-search v-model="formParams.flightPlanName" :bgColor="'white'" :show-action="true" actionText="搜索" :animation="true" @custom="handleSearch"></u-search> |
| | | <view class="content"> |
| | | <view class="sp-title"> |
| | | 审批记录 |
| | | </view> |
| | | <view class="approvalRecord" v-for="(approvalRecord,approvalRecordIndex) in approvalRecords" :key="approvalRecordIndex"> |
| | | <view class="name-status"> |
| | | <view class="name-image"> |
| | | <u-image :src="spSvg" class="icon" width="16" height="16"></u-image> |
| | | <view class="name">{{approvalRecord.flightPlanName}}</view> |
| | | <u-list :style="{ height: 'calc(100vh - 240rpx)' }" @scrolltolower="scrolltolower" :lower-threshold="50"> |
| | | <view class="approvalRecord" v-for="(approvalRecord,approvalRecordIndex) in approvalRecords" :key="approvalRecordIndex"> |
| | | <view class="name-status"> |
| | | <view class="name-image"> |
| | | <u-image :src="spSvg" class="icon" width="16" height="16"></u-image> |
| | | <view class="name">{{approvalRecord.flightPlanName}}</view> |
| | | </view> |
| | | <view class="status">{{approvalRecord.planStatus || '无状态'}}</view> |
| | | </view> |
| | | <view class="status">{{approvalRecord.planStatus || '无状态'}}</view> |
| | | <view class="txt">飞行设备:{{approvalRecord.device || '无设备'}}</view> |
| | | <view class="txt">行政区划:{{approvalRecord.area || '无行政区划'}}</view> |
| | | <view class="txt">飞行时间:{{approvalRecord.time || '无飞行时间'}}</view> |
| | | </view> |
| | | <view class="txt">飞行设备:{{approvalRecord.device || '无设备'}}</view> |
| | | <view class="txt">行政区划:{{approvalRecord.area || '无行政区划'}}</view> |
| | | <view class="txt">飞行时间:{{approvalRecord.time || '无飞行时间'}}</view> |
| | | </view> |
| | | </u-list> |
| | | </view> |
| | | </view> |
| | | </template> |
| | |
| | | } |
| | | |
| | | // 审批记录是很多条 |
| | | const approvalRecords = ref([ |
| | | { |
| | | flightPlanName: '飞行需求名称', |
| | | planStatus: '申请中', |
| | | device: '大疆无人机', |
| | | area: '吉州区', |
| | | time: '2026/01/07至2026/01/08', |
| | | }, |
| | | { |
| | | flightPlanName: '飞行需求名称', |
| | | planStatus: '申请中', |
| | | device: '大疆无人机', |
| | | area: '吉州区', |
| | | time: '2026/01/07至2026/01/08', |
| | | }, |
| | | { |
| | | flightPlanName: '飞行需求名称', |
| | | planStatus: '申请中', |
| | | device: '大疆无人机', |
| | | area: '吉州区', |
| | | time: '2026/01/07至2026/01/08', |
| | | }, |
| | | { |
| | | flightPlanName: '飞行需求名称', |
| | | planStatus: '申请中', |
| | | device: '大疆无人机', |
| | | area: '吉州区', |
| | | time: '2026/01/07至2026/01/08', |
| | | }, |
| | | { |
| | | flightPlanName: '飞行需求名称', |
| | | planStatus: '申请中', |
| | | device: '大疆无人机', |
| | | area: '吉州区', |
| | | time: '2026/01/07至2026/01/08', |
| | | }, |
| | | { |
| | | flightPlanName: '飞行需求名称', |
| | | planStatus: '申请中', |
| | | device: '大疆无人机', |
| | | area: '吉州区', |
| | | time: '2026/01/07至2026/01/08', |
| | | }, |
| | | { |
| | | flightPlanName: '飞行需求名称', |
| | | planStatus: '申请中', |
| | | device: '大疆无人机', |
| | | area: '吉州区', |
| | | time: '2026/01/07至2026/01/08', |
| | | }, |
| | | ]) |
| | | const approvalRecords = ref([]) |
| | | const formParams = ref({ |
| | | current: 1, |
| | | size: 10, |
| | | flightPlanName: '', |
| | | }) |
| | | // 申请审批列表 |
| | | const getApprovalRecords = async () => { |
| | | try { |
| | | const res = await flightPlanPageInfoApi({ |
| | | current: 1, |
| | | size: 10, |
| | | }) |
| | | approvalRecords.value = res.data.data.records || [] |
| | | const res = await flightPlanPageInfoApi(formParams.value) |
| | | const newData = res.data.data.records || [] |
| | | // 如果是第一页,直接替换数据;否则追加数据 |
| | | if (formParams.value.current === 1) { |
| | | approvalRecords.value = newData |
| | | } else { |
| | | approvalRecords.value = approvalRecords.value.concat(newData) |
| | | } |
| | | } catch (error) { |
| | | uni.showToast({ |
| | | title: error.message, |
| | |
| | | duration: 2000, |
| | | }) |
| | | } |
| | | } |
| | | // 搜索处理 |
| | | const handleSearch = () => { |
| | | // 搜索时重置为第一页 |
| | | formParams.value.current = 1 |
| | | formParams.value.flightPlanName = formParams.value.flightPlanName.trim() |
| | | getApprovalRecords() |
| | | } |
| | | // 触底加载 |
| | | function scrolltolower() { |
| | | formParams.value.current++ |
| | | // 停止不刷新 |
| | | if (approvalRecords.value.length < formParams.value.size) { |
| | | return |
| | | } |
| | | getApprovalRecords() |
| | | } |
| | | onMounted(() => { |
| | | getApprovalRecords() |
| | |
| | | .flightApplication { |
| | | .header-top { |
| | | width: 100%; |
| | | height: 350rpx; |
| | | background: url('@/static/images/fxsq-bg.png') no-repeat center; |
| | | background-size: 100% 100%; |
| | | height: 280rpx; |
| | | background: url("https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ja-app-wx/images/fxsq-bg.png") no-repeat ; |
| | | background-size: 100%; |
| | | position: fixed; |
| | | top: 0; |
| | | .ht-content { |
| | |
| | | width: 90%; |
| | | left: 50%; |
| | | transform: translateX(-50%); |
| | | top: 340rpx !important; |
| | | top: 350rpx !important; |
| | | height: 68rpx; |
| | | flex: 0; |
| | | } |
| | |
| | | } |
| | | } |
| | | .fj-list { |
| | | margin-top: 40rpx; |
| | | // margin-top: 20rpx; |
| | | } |
| | | .fj-item { |
| | | display: flex; |
| | |
| | | left: 0; |
| | | width: 100%; |
| | | height: 100%; |
| | | background-image: url("../../../static/images/user/userbg.svg") no-repeat ; |
| | | background-size: 100%; |
| | | background: url("https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ja-app-wx/images/user/user-bg.png") no-repeat ; |
| | | background-size: 100%; |
| | | z-index: -1; |
| | | } |
| | | .avatarBox { |
| | | width: 228rpx; |
| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | import userbgSvg from "@/static/images/user/userbg.svg"; |
| | | import userBgPng from "@/static/images/user/user-bg.png"; |
| | | import { |
| | | useUserStore |
| | | } from "@/store/index.js"; |
| | |
| | | left: 0; |
| | | width: 100%; |
| | | height: 100%; |
| | | background-image: url("https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ztzf_app_assets/images/user/bg.png"); |
| | | background-size: 100%; |
| | | background: url("https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ja-app-wx/images/user/user-bg.png") no-repeat ; |
| | | background-size: 100%; |
| | | } |
| | | |
| | | .detailBox { |
| | |
| | | font-weight: 400; |
| | | font-size: 30rpx; |
| | | color: #222324; |
| | | white-space: nowrap; |
| | | } |
| | | |
| | | input.input-item { |